Как я могу запрограммировать препятствия в игре змея? (Python 3 и черепаха графика) - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь запрограммировать игру со змеями в Turtle в Python 3, и пока все прошло хорошо, но теперь у меня проблема. И моя проблема в том, что змея просто движется сквозь препятствия, хотя я хочу, чтобы игра перезапускалась, как только голова змеи сталкивается с одним из препятствий.

И, кстати, это моя первая программа, поэтому я надеюсь, что ответ на мой вопрос не слишком очевиден.


Змеиная голова

head = turtle.Turtle()
head.speed(0)
head.shape("square")
head.color("red")
head.penup()
head.goto(0, 0)

Препятствия

ob1 = turtle.Turtle()
ob1.speed(0)
ob1.shape("square")
ob1.color("black")
ob1.penup()
ob1.goto(0, 100)
ob1.shapesize(stretch_wid=1, stretch_len=20)

ob2 = turtle.Turtle()
ob2.speed(0)
ob2.shape("square")
ob2.color("black")
ob2.penup()
ob2.goto(0, -100)
ob2.shapesize(stretch_wid=1, stretch_len=20)

Сначала я попробовал это:

if head.distance(ob1) < 20 or head.distance(ob2) < 20:
    restart()

Но проблема в том, что только одна часть препятствия перезапустит игру, как только змея коснется этой части, но остальная часть препятствия не представляет опасности, потому что змея может легко двигаться через этот остаток препятствия.

И это потому, что препятствия, несмотря на их размер, занимают только одно поле окна, а именно поле, которое я определил с помощью ob1.goto (0, 100).


А потом я попытался составить списки, заполненные координатами препятствий, а затем использовать эти списки для сравнения содержащихся в них чисел с позициями Y и X головы змеи:

numbers = []

y = range(-200, 200)
for n in y:
    numbers.append(n)

if head.ycor() == (numbers):
    restart()

Но все же змея могла преодолевать все препятствия.

...