Python 对象没有';t移到';右';方向

Python 对象没有';t移到';右';方向,python,Python,你好,这是我的第一篇文章,我是一个编程新手,已经有三个月了 目前,我正在努力减少制作游戏Snake的问题,我现在正在制作Snake玩家的动作 我试图使“body”块与“player”块保持完整,理想情况下,我希望代码向上移动,然后向右移动以到达“player”块 但是,根据我编写代码的方式,“body”块在向上移动后不会立即移动,从而与“player”块具有相同的y坐标 我认为它导致这个问题的原因是elif,身体块不断上下移动,以使右协调与球员块y坐标相匹配 所以我试着把elif移到if,但很明

你好,这是我的第一篇文章,我是一个编程新手,已经有三个月了

目前,我正在努力减少制作游戏Snake的问题,我现在正在制作Snake玩家的动作

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

但是,根据我编写代码的方式,“body”块在向上移动后不会立即移动,从而与“player”块具有相同的y坐标

我认为它导致这个问题的原因是elif,身体块不断上下移动,以使右协调与球员块y坐标相匹配

所以我试着把elif移到if,但很明显,这会使身体模块向玩家模块的对角线方向移动,我不希望,我只希望模块向玩家模块的水平或垂直方向移动

我还重新组织了elif声明,只是为了测试问题在哪里,在elif之间切换只会使最后一个elif不起作用,或者如果我的“s”向下移动在左右移动之前,甚至使左移动不起作用

我想我也尝试在“w”if语句上方添加一个新的if语句,因为我认为身体模块不会向右移动,因为身体模块检测到它与玩家模块没有相同的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()
从图形导入*
输入键盘
宽度=200
高度=200
def main():
keyW=False
keyA=False
keyS=False
keyD=False
半径=10
长度=半径*2
win=图形宽度(“移动”、宽度、高度)
赢。挫折(“黑色”)
播放器=矩形(点(宽度-40,20),点(宽度-20,40))
player.setFill(“绿色”)
播放器设置宽度(2)
球员。平局(获胜)
主体=矩形(点(20,高度-40),点(40,高度-20))
主体。设置填充(“绿色”)
正文.设置宽度(2)
身体。平局(赢)
虽然(正确):
如果按下键盘.u(“w”)且键==假:
keyW=True
keyA=False
keyS=False
keyD=False
elif键盘。按下(“a”)键且键D==假:
keyW=False
keyA=真
keyS=False
keyD=False
elif keyboard.is_按下(“s”)且keyW==False:
keyW=False
keyA=False
keyS=True
keyD=False
elif键盘。按下(“d”)键且keyA==False:
keyW=False
keyA=False
keyS=False
keyD=True
如果keyW==True:
玩家移动(0,-0.05)
elif keyA==真:
玩家移动(-0.05,0)
elif keyS==真:
玩家移动(0,0.05)
elif keyD==真:
玩家移动(0.05,0)
如果body.getCenter().getY()>=player.getCenter().getY():#W
身体移动(0,-0.05)
elif body.getCenter().getX()>=player.getCenter().getX():#A
身体移动(-0.05,0)

elif body.getCenter().getY()我相信你的代码的问题在于你使用的是
=
我相信你的代码的问题在于你使用的是
=
,但这取决于头部的位置是否正确?不是像你在移动中那样在绝对坐标上。(如果蛇在屏幕上从左向右移动,按D键应使移动蛇向下移动),但这取决于头部向右看的位置?不是像你在移动中那样在绝对坐标上。(如果snake从左到右屏幕移动,按D键应使snake向下移动)我忘记在描述中提及它,但我已尝试在If/elif语句中替换>=到>,但问题仍然存在。我忘记在描述中提及它,但我已尝试在If/elif语句中替换>=到>,但问题依然存在。
if body.getCenter().getY() >= player.getCenter().getY(): # W
if body.getCenter().getY() > player.getCenter().getY(): # W