Проблема в том, что когда-то такое условие срабатывает:
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)