Python 在pygame'中如何计算球击中球时的得分;庞';

Python 在pygame'中如何计算球击中球时的得分;庞';,python,pygame,Python,Pygame,最近我编写了一个pygame“Pong”,我还没有完成它,因为球拍还不能移动 然而,我在这里遇到了一个问题。因为我想得到的分数等于球击中窗户边缘的次数。对于我的程序,当球碰到墙时,分数不会增加,球会停止移动。我不知道原因,我想在这里找到答案 非常感谢 代码: 导入pygame、sys、time、math 从pygame.locals导入* #用户定义函数 def main(): #初始化pygame pygame.init() #设置窗口大小、标题和帧延迟 表面尺寸=(500400)#窗口尺寸

最近我编写了一个pygame
“Pong”
,我还没有完成它,因为球拍还不能移动

然而,我在这里遇到了一个问题。因为我想得到的分数等于球击中窗户边缘的次数。对于我的程序,当球碰到墙时,分数不会增加,球会停止移动。我不知道原因,我想在这里找到答案

非常感谢

代码:

导入pygame、sys、time、math
从pygame.locals导入*
#用户定义函数
def main():
#初始化pygame
pygame.init()
#设置窗口大小、标题和帧延迟
表面尺寸=(500400)#窗口尺寸
windowTitle='Pong'#窗口标题
frameDelay=0.005#游戏越小速度越快
#创建窗口
surface=pygame.display.set_模式(surfaceSize,0,0)
pygame.display.set_标题(windowTitle)
#创建并初始化红点和蓝点
gameOver=False
color1=pygame.Color('白色')
center1=[250200]
半径1=10
速度1=[1,-1]
位置1=(50,150)
位置2=(450150)
大小=(5100)
rect1=pygame.Rect(位置1,大小)
rect2=pygame.Rect(位置2,大小)
r1=pygame.draw.rect(曲面、颜色1、rect1)
r2=pygame.draw.rect(曲面、颜色1、rect2)
#绘制对象
pygame.draw.circle(曲面、颜色1、中心1、半径1、0)
#刷新显示
pygame.display.update()
#永远循环
尽管如此:
#处理事件
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
#处理其他事件
#更新并绘制下一帧的对象
gameOver=更新(曲面、颜色1、中心1、半径1、速度1、矩形1、矩形2)
#刷新显示
pygame.display.update()
#通过在帧之间暂停来设置帧速度
睡眠时间(帧延迟)
def更新(曲面、颜色1、中心1、半径1、速度1、rect1、rect2):
#检查比赛是否结束。如果是这样,结束游戏并
#这是真的。否则,擦除窗口,移动点和
#画出返回False的点。
#-surface是窗口的pygame.surface对象
橡皮擦颜色=pygame.Color('Black')
表面填充(擦除颜色)
移动点(曲面、中心1、半径1、速度1)
pygame.draw.circle(曲面、颜色1、中心1、半径1,0)
r1=pygame.draw.rect(曲面、颜色1、rect1)
r2=pygame.draw.rect(曲面、颜色1、rect2)
如果r1.碰撞点(中心1)和速度1[0]0:
speed1[0]=-speed1[0]
def移动点(表面、中心、半径、速度):
#通过按速度改变球的中心来移动球
#如果点碰到左边缘、上边缘、右边缘或下边缘
#在窗户外,球弹起
大小=曲面。获取大小()
对于范围(0,2)内的坐标:
中心[coord]=中心[coord]+速度[coord]
如果中心[coord]大小[coord]:
速度[coord]=-速度[coord]
def分数(中心1):
#得分是指球击中墙壁的次数。
分数=0
当center1[0]==10时:
分数=分数+1
回击得分
def drawScore(中心1,表面):
字体大小=60
FontColor=pygame.Color('白色')
分数=str(分数(中心1))
String='Score:'
font=pygame.font.SysFont(无、FontSize、True)
surface1=font.render(字符串+分数,True,FontColor,0)
表面blit(表面1,(0,0))
main()

存在许多问题。首先,您永远不会调用任何处理分数的代码。我想您需要调用
printscore
(在
update
main
中)

下一个问题是
Score
函数包含一个无限循环。您的
while
可能应该是
if
,因为您每帧只需要计算一个点:

def Score(center1):
   # Score is how many times that ball hits the wall.
   Score=0
   while center1[0]==10:
      Score=Score+1
   return Score

即使你修复了它,它也不会真正正常工作。
Score
函数只会返回
0
1
,因为每次调用函数时都会重置
Score
局部变量(注意,局部变量与其所在函数同名也是一个非常糟糕的主意)。您可能需要使用一个全局变量(和一个
global
语句),或者您需要去掉单独的函数,将分数跟踪逻辑放在主循环中,它可以在主循环中修改局部变量。或者您可以返回一个特定值,指示分数应该增加,而不是总分数。有很多方法可以做到这一点。

你没有将你的分数与任何事情联系起来。您需要选择何时添加新点(可能在
moveDot
中),然后从那里开始工作。非常感谢!我明白了!
def Score(center1):
   # Score is how many times that ball hits the wall.
   Score=0
   while center1[0]==10:
      Score=Score+1
   return Score