Как я могу создать функцию паузы внутри класса, а затем использовать ее в игре черепахи?

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

Поскольку код игры со змеей длинный, я решил попробовать функцию паузы на простой анимации черепахи, чтобы освоить ее перед реализацией в моей игре со змеей, но написать ее в классе просто не работает. Вот когда я написал это в коде, который сработал:

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()

Можете ли вы сказать мне, что я сделал неправильно? Спасибо.

Возможно, Вы имели в виду: if not ps.is_paused:?

quamrana 19.03.2022 15:28

Также похоже, что вы должны получить трассировку ошибок. Если да, можете ли вы обновить свой вопрос с его текстом?

quamrana 19.03.2022 15:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Переменная pause обновляется только один раз вне цикла while. Вы должны использовать переменную класса self.is_paused для проверки состояния игры.

Ответ принят как подходящий

Вам нужно сделать две вещи, чтобы заставить паузу работать в вашей игре, используя класс:

  1. Измените определение класса 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
    
  2. Измените способ проверки состояния паузы в цикле while в основной программе:

    ...
    
    while True:
        if not ps.is_paused:
            tim.forward(12)
            tim.left(10)
        else:
            screen.update()
    

Другие вопросы по теме