Есть две немедленные ошибки и одна большая ошибка изображения.Во-первых, есть ошибка, которую @quamrana указал в комментариях:
[(t1.xcor(), t1.ycor())] in obstacles
obstacles
- это list
из tuple
, поэтому вместо list
из одного tuple
мыследует искать tuple
:
(t1.xcor(), t1.ycor()) in obstacles
или просто:
t1.position() in obstacles
Вторая немедленная ошибка - это строка:
obstacles.append((t1.xcor , t1.ycor))
, которая добавляетметоды xcor
и ycor
до obstacles
, а не координаты черепахи.Вы хотите:
obstacles.append((t1.xcor(), t1.ycor()))
или просто:
obstacles.append(t1.position())
Теперь для большой проблемы с изображением, которая делает недействительным все вышеперечисленное.Черепахи бродят с плавающей точкой самолета.Сравнение координаты float
черепахи с list
из int
координат в долгосрочной перспективе является проигрышным.Как ваша черепаха может быть на (100.00007, 100)
, когда вы тестируете на (100, 100)
.Один из способов обойти это - сравнить результат метода distance()
черепахи с небольшим значением "близости".
Простой подход в этом случае состоит в том, чтобы не хранить и не сравнивать координаты черепахи напрямую, а конвертировать их в int
first:
obstacles = [(-300, -300), (-200, -200), (-100, -100), (100, 100), (200, 200), (300, 300)]
def is_next_move_legal(heading, step):
next_step = step
if heading == 90 or heading == 270:
if heading == 90:
next_step += t1.ycor()
else:
next_step -= t1.ycor()
else:
if heading == 0:
next_step += t1.xcor()
else:
next_step -= t1.xcor()
print(" x={}, y={}".format(*t1.position()))
print(" next_step={}".format(next_step))
print("######################### \n")
print("Obstacles: \n")
print(*obstacles, sep='\n')
print("######################### \n")
x, y = int(t1.xcor()), int(t1.ycor())
if next_step > 300 or (x, y) in obstacles:
global tron_end
tron_end = True
quit_this()
return False
# Extend List with Coordinates that Tron used
obstacles.append((x, y))
return True
Я хочу добавить каждую координату линии, которую рисует Трон
Это другая проблема - я предлагаю вам получить вышеуказанные вопросырешите и задайте новый вопрос о том, как это сделать, поскольку в настоящее время вы добавляете только конечные точки линий, а не каждую координату линии.И, возможно, есть несколько способов решить эту проблему.