Проблемы с графикой черепахи

Я пытался сделать игру, похожую на змею, используя графику черепахи. Добавил строчку wn.update, но каждый раз пишет en error, а если убрать, то просто вылетает. Кто-нибудь знает, почему?

Я довольно новичок в питоне, поэтому у меня может быть действительно глупая ошибка

import turtle
import random

score = 0

def go_up():
    if cat.direction != "down":
        cat.direction = "up"

def go_down():
    if cat.direction != "up":
        cat.direction = "down"

def go_left():
    if cat.direction != "right":
        cat.direction = "left"

def go_right():
    if cat.direction != "left":
        cat.direction = "right"

def move():
    if cat.direction == "up":
        y = cat.ycor()
        cat.sety(y + 20)

    if cat.direction == "down":
        y = cat.ycor()
        cat.sety(y - 20)

    if cat.direction == "left":
        x = cat.xcor()
        cat.setx(x - 20)

    if cat.direction == "right":
        x = cat.xcor()
        cat.setx(x + 20)

wn = turtle.Screen()
wn.setup(width =600,height= 600)
wn.tracer(0)

mouse=turtle.Turtle()
mouse.penup()
mouse.goto(0,100)

cat = turtle.Turtle()
cat.penup()

while True:
    wn.update()
    if cat.distance(mouse) < 20:
        x = random.randint(0, 500)
        y = random.randint(0, 500)
        mouse.goto(x, y)

wn.onkeypress(go_up, "w")
wn.onkeypress(go_down, "s")
wn.onkeypress(go_left, "a")
wn.onkeypress(go_right, "d")
wn.listen()

wn.mainloop()


person noobpythonstudent    schedule 06.05.2021    source источник
comment
Вылетело или просто выдало ошибку?   -  person Jonathan Drukker    schedule 06.05.2021
comment
Если выдало ошибку, то какую?   -  person Jonathan Drukker    schedule 06.05.2021
comment
@JonathanDrukker Это выдавало ошибку, и оно зависало, если я удалял строку. Ошибка была: File "C:/Users/avner/PycharmProjects/CatAndMouse/main.py", line 52, in <module> wn.update() File "C:\Users\avner\AppData\Local\Programs\Python\Python38\lib\turtle.py", line 1304, in update t._update_data() File "C:\Users\avner\AppData\Local\Programs\Python\Python38\lib\turtle.py", line 2647, in _update_data self.screen._incrementudc() File "C:\Users\avner\AppData\Local\Programs\Python\Python38\lib\turtle.py", line 1293, in _incrementudc raise Terminator turtle.Terminator   -  person noobpythonstudent    schedule 06.05.2021


Ответы (1)


Ваша программа не структурирована должным образом. У вас не должно быть while True: в управляемой событиями черепахе. (И особенно не перед дополнительными операторами, которые вам нужно выполнить!) Вы не должны реализовывать tracer() и update(), пока ваша программа в основном не заработает. Вот переработка вашего кода, в который можно играть:

from turtle import Screen, Turtle
from random import randint

CURSOR_SIZE = 20

def go_up():
    if cat.direction != 'down':
        cat.direction = 'up'
        cat.setheading(90)
        screen.update()

def go_down():
    if cat.direction != 'up':
        cat.direction = 'down'
        cat.setheading(270)
        screen.update()

def go_left():
    if cat.direction != 'right':
        cat.direction = 'left'
        cat.setheading(180)
        screen.update()

def go_right():
    if cat.direction != 'left':
        cat.direction = 'right'
        cat.setheading(0)
        screen.update()

def move():
    cat.forward(20)

    if cat.distance(mouse) < CURSOR_SIZE:
        x = randint(CURSOR_SIZE - 300, 300 - CURSOR_SIZE)
        y = randint(CURSOR_SIZE - 300, 300 - CURSOR_SIZE)
        mouse.goto(x, y)

    screen.update()

    screen.ontimer(move, 200)  # 1/5 second delay in milliseconds

screen = Screen()
screen.setup(width=600, height=600)
screen.tracer(False)

mouse = Turtle('turtle')
mouse.penup()
mouse.sety(100)

cat = Turtle('arrow')
cat.penup()
cat.direction = 'right'  # user defined property

screen.onkeypress(go_up, 'w')
screen.onkeypress(go_down, 's')
screen.onkeypress(go_left, 'a')
screen.onkeypress(go_right, 'd')
screen.listen()

move()

screen.mainloop()
person cdlane    schedule 06.05.2021