Как эффективно проверить и изменить координаты черепахи в Python? - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок в Python и начал игру в Sokoban.Я тестировал этот код для проверки координат, чтобы убедиться, что бокс / игрок перемещается назад при входе в стену.Я попытался сделать небольшой цикл и функцию, но я продолжаю получать ошибки.

import turtle
wn=turtle.Screen()
a=turtle.Turtle()
b=turtle.Turtle()


def checking(x,y):
    if x.xcor()==y.xcor() and x.ycor()==y.ycor():
        return True
    else:
        return False


if checking(a,b)==True:
    a.xcor()=a.xcor()+50

Синтаксическая ошибка - Невозможно назначить вызов функции. В последней строке выделена буква a.

Функция проверки работает, так как этот код работал отлично.

import turtle
wn=turtle.Screen()
a=turtle.Turtle()
b=turtle.Turtle()


def checking(x,y):
    if x.xcor()==y.xcor() and x.ycor()==y.ycor():
        return True
    else:
        return False


if checking(a,b)==True:
    wn.bgcolor("blue")

Буду признателен, если кто-нибудь знает способ исправить код.Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Эта строка является проблемой:

a.xcor()=a.xcor()+50

, поскольку xcor() используется для доступа к координате, а не к ее установке.Вы хотите setx():

from turtle import Screen, Turtle

wn = Screen()

a = Turtle()
b = Turtle()

def checking(x, y):
    return x.xcor() == y.xcor() and x.ycor() == y.ycor()
    # or better yet: return x.position() == y.position()

if checking(a, b):
    a.setx(a.xcor() + 50)

Вот ваша следующая проблема - функция checking() не будет работать в долгосрочной перспективе.Черепахи сканируют плоскость с плавающей точкой, и они часто не возвращаются в точное положение, которое они оставили, например, (0, 0) против (0, 0.001).Чтобы справиться с этим, нам понадобится менее точное сравнение:

def checking(a, b):
    return abs(a.xcor() - b.xcor()) < 1 > abs(a.ycor() - b.ycor())

или еще лучше:

def checking(a, b):
    return a.distance(b) < 1
...