如何让我的程序读第三届如果州议员

2024-09-30 01:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试让我的程序以矩形的方式顺时针移动“寿司盘”,尽管在我的第三个if语句之后它似乎不会继续移动:

from graphics import * 
win =GraphWin("Draw and Animate",640,480)
win.setBackground("wheat1")

#Right
xmove = 1
ymove = 0
#Down
xmove2 = 0
ymove2 = 1
#Left
xmove3 = -1
ymove3 = 0
#Up
xmove4 = 0
ymove4 = -1

sushiplate = Rectangle(Point(300,160),Point(340,180))
sushiplate.setFill("white")
sushiplate.draw(win)

leftsushi = Circle(Point(310,170), 5)
leftsushi.setOutline("Green")
leftsushi.setFill("orange")
leftsushi.draw(win)

rightsushi = Circle(Point(330,170), 5)
rightsushi.setOutline("Green")
rightsushi.setFill("orange")
rightsushi.draw(win)

while(True):
    #Move sushi

    sushiplate.move(xmove4, ymove4)
    leftsushi.move(xmove4, ymove4)
    rightsushi.move(xmove4, ymove4)
    sushicenter = sushiplate.getCenter()
    if (sushicenter.getY()<=130):
        xmove4 = xmove
        ymove4 = ymove 
    if (sushicenter.getX()>=510):
        xmove = xmove2
        ymove = ymove2
    if (sushicenter.getY()>=360):
        xmove2 = xmove3
        ymove2 = ymove3


    update(60)

我的寿司盘将向上、向右、向下移动,但将继续向下移动,我的第三个if语句将不运行:

if (sushicenter.getY()>=360):
    xmove2 = xmove3
    ymove2 = ymove3

Tags: ifwinpointymovexmovexmove2sushicenterxmove4
3条回答

问题是一旦这样的情况触发:

 if (sushicenter.getX()>=510):

每次结果是Y方向发生变化,并且对象在X方向固定时,它都会继续触发。之后的案子永远不会触发。我们可以通过先“试水”来解决这个问题,看看移动是否会引发变化,然后再进行移动。我在下面对您的代码进行了重写,但同时也试图摆脱数字而代之以符号,因为所有编号的变量都很混乱,即使您考虑到代码中的错误:

from graphics import *

WIDTH, HEIGHT = 640, 480
BORDER = 130
RADIUS = 5
DIAMETER = RADIUS * 2

# Right
XMOVE_RIGHT = 1
YMOVE_RIGHT = 0
# Down
XMOVE_DOWN = 0
YMOVE_DOWN = 1
# Left
XMOVE_LEFT = -1
YMOVE_LEFT = 0
# Up
XMOVE_UP = 0
YMOVE_UP = -1

win = GraphWin("Draw and Animate", WIDTH, HEIGHT)
win.setBackground('wheat1')

sushiplate = Rectangle(Point(BORDER - DIAMETER * 2, BORDER - DIAMETER), Point(BORDER + DIAMETER * 2, BORDER + DIAMETER))
sushiplate.setFill('white')
sushiplate.draw(win)

leftsushi = Circle(Point(BORDER - DIAMETER, BORDER), RADIUS)
leftsushi.setOutline('green')
leftsushi.setFill('orange')
leftsushi.draw(win)

rightsushi = Circle(Point(BORDER + DIAMETER, BORDER), RADIUS)
rightsushi.setOutline('green')
rightsushi.setFill('orange')
rightsushi.draw(win)

xmove = XMOVE_RIGHT
ymove = YMOVE_RIGHT

while True:
    # Move sushi

    center = sushiplate.getCenter()
    x, y = center.getX() + xmove, center.getY() + ymove

    if x > WIDTH - BORDER:
        xmove, ymove = XMOVE_DOWN, YMOVE_DOWN
    elif y > HEIGHT - BORDER:
        xmove, ymove = XMOVE_LEFT, YMOVE_LEFT
    elif x < BORDER:
        xmove, ymove = XMOVE_UP, YMOVE_UP
    elif y < BORDER:
        xmove, ymove = XMOVE_RIGHT, YMOVE_RIGHT

    for meal_object in (sushiplate, leftsushi, rightsushi):
        meal_object.move(xmove, ymove)

    update(60)

你已经在if (sushicenter.getY()<=130):分支下了sushicenter.getY()>=360在这种情况下不可能是真的

这些条件应该在同一级别,而不是嵌套的。因为第二级if检查sushicenter.getY() <= 130,所以只有当getY()同时是>=360<=130时才可以触发第四级条件,而且这永远不会发生。 我想你的意思是让它们保持在同一水平,这样它们就可以独立触发,而不依赖于其他条件

from graphics import * 
win =GraphWin("Draw and Animate",640,480)
win.setBackground("wheat1")

#Right
xmove = 1
ymove = 0
#Down
xmove2 = 0
ymove2 = 1
#Left
xmove3 = -1
ymove3 = 0
#Up
xmove4 = 0
ymove4 = -1

sushiplate = Rectangle(Point(300,160),Point(340,180))
sushiplate.setFill("white")
sushiplate.draw(win)

leftsushi = Circle(Point(310,170), 5)
leftsushi.setOutline("Green")
leftsushi.setFill("orange")
leftsushi.draw(win)

rightsushi = Circle(Point(330,170), 5)
rightsushi.setOutline("Green")
rightsushi.setFill("orange")
rightsushi.draw(win)

while(True):
    #Move sushi

    sushiplate.move(xmove4, ymove4)
    leftsushi.move(xmove4, ymove4)
    rightsushi.move(xmove4, ymove4)
    sushicenter = sushiplate.getCenter()
    if (sushicenter.getY()<=130):
        xmove4 = xmove
        ymove4 = ymove 
    if (sushicenter.getX()>=490):
        xmove = xmove2
        ymove = ymove2
    if (sushicenter.getY()>=360):
        xmove2 = xmove3
        ymove2 = ymove3
    if(sushicenter.getX()<=120):
        xmove3 = xmove4
        ymove3 = ymove4

    update(60)

相关问题 更多 >

    热门问题