Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将球反射到球拍上_Python_Pygame_Pong - Fatal编程技术网

Python 如何将球反射到球拍上

Python 如何将球反射到球拍上,python,pygame,pong,Python,Pygame,Pong,我第一次尝试pygame,现在我对python作为一种语言已经非常熟悉了,我一直在尝试重新创建Pong,就像老式的有两个桨和一个球的游戏一样。我似乎不知道如何让球从桨上反射出来。我还没有寻找角度和东西,因为我能自己弄清楚 但是我想到的是得到一个坐标范围,即桨的X&Y和X&Y+宽度和高度,如果球进入这些坐标范围,它就会像在边界上一样反射。正如你在下面的代码中看到的那样,我尝试过使用多个if语句,但我也尝试过将其作为一个语句来使用,但这不起作用。我输入的调试打印没有一个是真正的打印,但是当我用打印测

我第一次尝试pygame,现在我对python作为一种语言已经非常熟悉了,我一直在尝试重新创建Pong,就像老式的有两个桨和一个球的游戏一样。我似乎不知道如何让球从桨上反射出来。我还没有寻找角度和东西,因为我能自己弄清楚

但是我想到的是得到一个坐标范围,即桨的X&Y和X&Y+宽度和高度,如果球进入这些坐标范围,它就会像在边界上一样反射。正如你在下面的代码中看到的那样,我尝试过使用多个if语句,但我也尝试过将其作为一个语句来使用,但这不起作用。我输入的调试打印没有一个是真正的打印,但是当我用打印测试coord范围时,它们看起来很好:D

我会把我的代码贴在这里,这样你们就可以按原样运行我的游戏了

我真的很感谢你们的帮助

导入pygame
pygame.init()
win=pygame.display.set_模式((500500))
pygame.display.set_标题(“第一场游戏”)
x=50
y=50
宽度=10#设置主桨的变量
高度=60
水平=5
ballx=250
贝利=250
半径=5
方向=真#真是左,假是右
bvel=4#设置球的变量
角度=0
coordxGT=0
coordxLT=0#为碰撞第一个挡板的坐标范围设置变量
coordyGT=0
coordyLT=0
def setCoords():
coordxGT=x
coordxLT=x+宽度
coordyGT=y#此函数更新整个主循环中的coords
coordyLT=y+高度
coordxLT+=半径
coordyLT+=半径
运行=真
当run==True时:
pygame。时间。延迟(20)
对于pygame.event.get()中的事件:#退出时,退出游戏并不要抛出错误:)
如果event.type==pygame.QUIT:
运行=错误
setCoords()
如果方向==真:#球移动
ballx-=bvel
其他:
ballx+=bvel
如果是ballx495:
bally-=bvel
如果ballxcoordxGT:
打印(“S1”)
如果ballycoordyGT:#我想不出来的部分。如果球落在这些坐标范围内,则反射球并改变其方向
打印(“S2”)
如果方向==真:
打印(“是”)
ballx+=bvel
方向=错误
keys=pygame.key.get_pressed()#获取当前时间按下的键
如果键[pygame.K_DOWN]:
bally+=bvel#Ball控制(用于调试)
如果键[pygame.K_UP]:
bally-=bvel
如果键[pygame.K_w]:
y-=水平
如果键[pygame.K_a]:
x-=水平
如果键[pygame.K_s]:#划桨控制
y+=水平
如果键[pygame.K_d]:
x+=vel
如果是x440:
#440因为窗户高度-立方体的高度
y-=水平
胜利填充((0,0,0))
pygame.draw.circle(win,(255,255,255),(ballx,bally),radius)#刷新屏幕
pygame.draw.rect(赢,(255255),(x,y,宽度,高度))
pygame.display.update()
pygame.quit()

您很接近,但是您没有将变量
coordxGT
coordxLT
coordxLT
coordyLT
声明为
global

def setCoords():
全局坐标xgt,坐标xlt,坐标xlt,坐标ylt
coordxGT=x
coordxLT=x+宽度
coordyGT=y
coordyLT=y+高度
coordxLT+=半径
coordyLT+=半径
注意,如果要在函数的全局命名空间中写入变量,则该变量已被解释为全局变量。否则,将在函数范围内创建并设置一个新变量。看


虽然它不是Pygame,但几年前我为Pythonista编写了一个简短的程序,其中包括绘制线段并将球弹离线段。你可能会发现它很有用-耶,谢谢!!我不知道我必须使用全局变量,所以谢谢!这完全解决了问题!:D@MackenzieToxikBlackaby这是一个普遍的问题。谢谢,不客气。