【发布时间】:2019-08-12 20:34:32
【问题描述】:
您好,这是我的第一篇文章,我是近三个月的编程初学者。
目前我正在尝试减少制作 Snake 游戏所必须做的问题,我现在正在制作蛇玩家的移动。
我正在尝试使“body”块与“player”块保持完整,理想情况下我希望代码向上移动,然后向右移动以到达“player”块。
但是,按照我编写代码的方式,“body”块在向上移动到与“player”块具有相同的 y 坐标后不会立即移动。
我认为导致这个问题的原因是身体块不断上下移动以匹配正确的坐标到玩家块的 y 坐标的 elif。
所以我尝试将 elif 移除到 if,但显然这会使身体块沿对角线移动到玩家块,我不希望并且只希望块水平或垂直移动到玩家块。
我还重新组织了 elif 语句,只是为了测试问题出在哪里,在 elif 之间切换只会使最后一个 elif 不起作用,或者如果我的 's' 甚至使左移不起作用向下运动在左右运动之前。
我想我还尝试在“w”if 语句上方添加一个新的 if 语句,因为我认为 body 块不会向右移动,因为 body 块检测到它没有相同的 y 坐标播放器块,因此它优先向上移动。然而这也没有成功。
那么这里的问题是什么?
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()
我想要的编码结果是: 身体块(左下角)垂直移动(向上)直到它与玩家块齐平(右上角),然后身体块水平移动(右)直到它遇到玩家块中心。
【问题讨论】:
-
但是这个动作取决于头部的正确位置?不像你在移动中所做的那样在绝对坐标上。 (如果蛇从左到右屏幕,按 D 应该使蛇向下移动)
标签: python