Во-первых, черепахи ползают на плоскости с плавающей запятой , поэтому такие тесты иногда будут работать, а иногда и не пройдут:
x == -400 and y == 275
, поскольку x
может вернуться как -400.0001
. Вы можете привести точки к целым числам:
int(x) == -400 and int(y) == 245
или проверить, попадают ли позиции в диапазон значений.
Во-вторых, этот код в вашей функции move()
подозрительный:
player.forward(100)
return
tx, ty = player.pos()
check_item(tx, ty)
Не должно быть кода после return
на том же уровне отступа - он никогда не будет выполнен. Я ожидал бы, что ваш код будет выглядеть примерно так:
def check_item(x, y):
global pick_armor, pick_key, pick_sword
x = int(x)
y = int(y)
if not pick_armor and x == -400 and y == 275:
armor.hideturtle()
pick_armor = True
elif not pick_sword and x == 400 and y == 275:
sword.hideturtle()
pick_sword = True
elif not pick_key and x == 400 and y == -325:
key.goto(400, 300)
pick_key = True
def move(x, y):
player.forward(-100)
tx, ty = player.pos()
if not -450 <= tx <= 450 or not -375 <= ty <= 325:
player.backward(-100)
return
check_item(tx, ty)
def movePlayer():
player.onclick(move, 1)
Я не смог бы протестировать вышеописанное без большего количества вашего кода для работы, но, надеюсь, вы поймете идею.