gpt4 book ai didi

python - 物体没有向 'right'方向移动

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:43 25 4
gpt4 key购买 nike

您好,这是我的第一篇文章,我是编程初学者近三个月了。

目前,我正在努力减少制作《贪吃蛇》游戏时遇到的问题,我现在正在制作贪吃蛇玩家的 Action 。

我试图让“body” block 与“player” block 保持完整,理想情况下我希望代码向上移动,然后向右移动以到达“player” block 。

但是,按照我编写代码的方式,“body” block 在向上移动到与“player” block 具有相同的 y 坐标后不会立即移动。

我认为导致此问题的原因是 elif,其中 body block 不断上下移动以匹配与玩家 block y 坐标的正确协调。

所以我尝试将 elif 删除到 if,但显然这会使 body block 对角线移动到玩家 block ,这是我不希望的,只希望 block 水平或垂直移动到玩家 block 。

我还重新组织了 elif 语句,只是为了测试问题出在哪里,在 elif 之间进行切换只会使最后一个 elif 不起作用,甚至如果我的 's' 则使向左移动不起作用向下移动先于左右移动。

我想我还尝试在“w”if 语句上方添加一个新的 if 语句,因为我认为主体 block 不会向右移动,因为主体 block 检测到它没有与玩家阻止,因此它优先考虑首先向上移动。然而这也没有成功。

那么这里的问题是什么?

from graphics import *
import keyboard
width = 200
height = 200

def main():
keyW = False
keyA = False
keyS = False
keyD = False
radius = 10
length = radius * 2

win = GraphWin("MOVEMENTS", width, height)
win.setBackground("black")

player = Rectangle(Point(width-40,20), Point(width-20,40))
player.setFill("green")
player.setWidth(2)
player.draw(win)

body = Rectangle(Point(20,height-40), Point(40,height-20))
body.setFill("green")
body.setWidth(2)
body.draw(win)

while(True):
if keyboard.is_pressed("w") and keyS==False:
keyW = True
keyA = False
keyS = False
keyD = False
elif keyboard.is_pressed("a") and keyD==False:
keyW = False
keyA = True
keyS = False
keyD = False
elif keyboard.is_pressed("s") and keyW==False:
keyW = False
keyA = False
keyS = True
keyD = False
elif keyboard.is_pressed("d") and keyA==False:
keyW = False
keyA = False
keyS = False
keyD = True

if keyW==True:
player.move(0,-0.05)
elif keyA==True:
player.move(-0.05,0)
elif keyS==True:
player.move(0,0.05)
elif keyD==True:
player.move(0.05,0)

if body.getCenter().getY() >= player.getCenter().getY(): # W
body.move(0,-0.05)
elif body.getCenter().getX() >= player.getCenter().getX(): # A
body.move(-0.05,0)
elif body.getCenter().getY() <= player.getCenter().getY(): # S
body.move(0,0.05)
elif body.getCenter().getX() <= player.getCenter().getX(): # D
body.move(0.05,0)

main()

我想要的编码结果是: body block (左下角)垂直(向上)移动,直到与玩家 block (右上角)齐平,然后 body block 水平(向右)移动,直到与玩家 block 中心相交。

最佳答案

我相信您的代码的问题在于您正在使用 >=<= (大于或等于/小于或等于)而不是 >< (严格大于/小于)。

根据你的描述,一旦 body 在同一个y上作为玩家的坐标,它应该开始向玩家左或右移动。在您的 body 运动状况的第一行有:

if body.getCenter().getY() >= player.getCenter().getY(): # W

这将评估为 true即使 body 在同一个y坐标,所以x移动条件永远不会被执行。

如果您使用这个:

if body.getCenter().getY() > player.getCenter().getY(): # W

如果主体位于同一个 y 上,则条件将不再评估为 true作为玩家的坐标,因此它将移动到下一个条件,其中涉及水平移动。

但是,我想我可以建议一种更简单的方法来做到这一点。在 Snake 中,通常 body block 完全跟随玩家 block - 如果这是预期的功能,您可以简单地将 body block 的坐标更新为上一次迭代中的玩家坐标。只需在更新之前记录玩家的坐标,然后将 body 的坐标设置为您记录的坐标即可。

如果您想在其后添加更多 body 片段,则可以将每个 body 片段的坐标设置为其之前的 body 片段的前一个坐标。

关于python - 物体没有向 'right'方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com