Я работал над игрой со змеями, используя графику черепахи на питоне. Игра работала хорошо. Затем я хотел улучшить его и добавить к нему функцию паузы. Когда я просто написал строки кода для функции паузы внутри игрового кода, это сработало, но моя цель — создать функцию паузы в классе и иметь возможность использовать ее экземпляр для своих последующих проектов, а не просто писать всю функциональность. снова каждый раз.
Поскольку код игры со змеей длинный, я решил попробовать функцию паузы на простой анимации черепахи, чтобы освоить ее перед реализацией в моей игре со змеей, но написать ее в классе просто не работает. Вот когда я написал это в коде, который сработал:
from turtle import Turtle, Screen
tim = Turtle()
screen = Screen()
is_paused = False
def toggle_pause():
global is_paused
if is_paused:
is_paused = False
else:
is_paused = True
screen.listen()
screen.onkey(toggle_pause, "p")
while True:
if not is_paused:
tim.forward(12)
tim.left(10)
else:
screen.update()
Вот когда я написал свою функцию паузы в классе, которая не сработала.
class Pause:
def __init__(self, is_paused):
self.is_paused = is_paused
def toggle_pause(self):
if self.is_paused:
is_paused = False
return is_paused
else:
is_paused = True
return is_paused
from turtle import Turtle, Screen
from pause import Pause
ps = Pause(False)
tim = Turtle()
screen = Screen()
screen.listen()
screen.onkeypress(ps.toggle_pause, "p")
pause = ps.toggle_pause()
while True:
if not pause:
tim.forward(12)
tim.left(10)
else:
screen.update()
Можете ли вы сказать мне, что я сделал неправильно? Спасибо.
Также похоже, что вы должны получить трассировку ошибок. Если да, можете ли вы обновить свой вопрос с его текстом?
Переменная pause
обновляется только один раз вне цикла while
. Вы должны использовать переменную класса self.is_paused
для проверки состояния игры.
Вам нужно сделать две вещи, чтобы заставить паузу работать в вашей игре, используя класс:
Измените определение класса Pause
, чтобы он обновлял свой атрибут is_paused
при вызове его метода toggle_pause()
, добавив префикс self.
к имени переменной is_paused
:
class Pause:
def __init__(self, is_paused):
self.is_paused = is_paused
def toggle_pause(self):
self.is_paused = not self.is_paused
return self.is_paused
Измените способ проверки состояния паузы в цикле while
в основной программе:
...
while True:
if not ps.is_paused:
tim.forward(12)
tim.left(10)
else:
screen.update()
Возможно, Вы имели в виду:
if not ps.is_paused:
?