Должен ли я поместить свою игру в класс Pygame?
Я только начал изучать Pygame, и я тоже не эксперт по Python. Но когда я создаю игру, должен ли я иметь игру в классе, как в Tkinter? Ни одно из учебных пособий, которые я смотрел, не делало, но мне нравилось иметь переменные классов вместо того, чтобы беспокоиться о глобальных переменных или возвращать значения. Есть ли явные преимущества или недостатки? Благодарю.
1 ответ
Нет - вы не должны помещать всю свою игру в класс, если это не имеет смысла. Я считаю, что написание этих 2d игр - одна из лучших форм обучения ОО-программированию. Это означает, что вы будете использовать классы и наследование, когда это удобно в вашем игровом дизайне - не только ради этого.
А Pygame - это модуль, который не требует (а иногда и не позволяет) производить свою работу, выполняя наследование классов. Если вы пытаетесь наследовать от Pygame Surface
Например, вы обнаружите, что ваш настроенный класс не может быть передан в качестве параметра для функций, ожидающих Surface.
Однако Pygame разработан для того, чтобы вы унаследовали один класс: pygame.sprite.Sprite
, Пока вы используете pygame.sprite.Group
s и его производные для контейнеров объектов в вашем коде (вместо списков, наборов или словарей) спрайты работают очень хорошо. Вы также найдете много тонкостей, которые ОО-программирование может предоставить, если у вас есть иерархия классов для всех объектов, которые появляются в вашей игре, в качестве подклассов pygame.sprite.Sprite
, Например, все объекты, враги, главные герои, выстрелы и т. Д., Так же, как и другие, должны иметь атрибуты для записи своей позиции на экране. Но только враги нуждаются в "point_value", например, когда они уничтожены. При правильном наследовании классов вы можете минимизировать объем необходимого кода.
Но чтобы контролировать все это в игровой сцене, Pygame не предоставляет базовый класс - вы должны создать свой собственный игровой цикл, который вполне может быть в функции - или в классе, который вы создаете сами, который не наследуется ни от какого другого. другой класс Pygame.
Например, здесь есть некоторый код, который я изложил в качестве основы для игры в "башенную стратегию". Проверьте, как все объекты в сцене происходят от BaseTowerTower
объект.