Как запрограммировать игру на Python с помощью Pygame (с изображениями)

Оглавление:

Как запрограммировать игру на Python с помощью Pygame (с изображениями)
Как запрограммировать игру на Python с помощью Pygame (с изображениями)

Видео: Как запрограммировать игру на Python с помощью Pygame (с изображениями)

Видео: Как запрограммировать игру на Python с помощью Pygame (с изображениями)
Видео: Работа с файлами в Python. Чтение и запись данных 2024, Май
Anonim

Это введение в Pygame для людей, уже знакомых с Python. Эта статья научит вас, как создать простую игру, в которой игрок уклоняется от прыгающих мячей.

Шаги

Часть 1 из 8: Установка Pygame

Шаг 1. Загрузите Pygame

Найдите его для своей платформы на

Шаг 2. Запускаем установщик

Шаг 3. Убедитесь, что установка прошла успешно

Откройте терминал Python. Введите "import pygame." Если вы не видите ошибок, значит Pygame успешно установлен.

    импортировать pygame

Часть 2 из 8: Настройка основного окна

Шаг 1. Откройте новый файл

Шаг 2. Импортируйте Pygame

Pygame - это библиотека, которая обеспечивает доступ к графическим функциям. Если вам нужна дополнительная информация о том, как работают эти функции, вы можете найти их на веб-сайте Pygame.

    импортировать pygame из pygame.locals import *

Шаг 3. Установите разрешение окна

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

    разрешение = (400, 300)

Шаг 4. Определите несколько цветов

Цвета в pygame: (RBGA, значения которых находятся в диапазоне от 0 до 255. Альфа-значение (A) является необязательным, но другие цвета (красный, синий и зеленый являются обязательными).

    белый = (255, 255, 255) черный = (0, 0, 0) красный = (255, 0, 0)

Шаг 5. Инициализируйте экран

Используйте переменную разрешения, которая была определена ранее.

    screen = pygame.display.set_mode (разрешение)

Шаг 6. Сделайте игровой цикл

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

    в то время как True:

Шаг 7. Раскрасьте экран

    screen.fill (белый)

Шаг 8. Выведите на экран экран

Если вы запустите программу, экран станет белым, а затем программа выйдет из строя. Это связано с тем, что операционная система отправляет события в игру, а игра ничего с ними не делает. Как только игра получит слишком много необработанных событий, она вылетит.

    while True:… pygame.display.flip ()

Шаг 9. Обработка событий

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

    while True:… для события в pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Шаг 10. Попробуйте

Вот как теперь должен выглядеть код:

    импортировать pygame из pygame.locals import * разрешение = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (разрешение) в то время как True: screen.fill (белый) pygame.display.flip () для события в pygame.event.get (): if event.type == QUIT: pygame.quit ()

Часть 3 из 8: Создание игрового объекта

Шаг 1. Создайте новый класс и конструктор

Установите все свойства объекта. Вы также предоставляете значения по умолчанию для всех свойств.

    class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "мяч"

Шаг 2. Определите, как нарисовать объект

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

    def draw (self, surface): pygame.draw.circle (поверхность, черный, (self.x, self.y), self.radius)

Шаг 3. Создайте экземпляр класса, а также скажите игровому циклу рисовать мяч в каждом цикле

    ball = Ball () while True:… ball.draw (экран)

Шаг 4. Приведите объект в движение

Создайте функцию, которая обновит положение объекта. Вызывайте эту функцию в каждом игровом цикле.

    class Ball:… def update (self): self.x + = self.dx self.y + = self.dy

Шаг 5. Ограничьте частоту кадров

Мяч будет двигаться очень быстро, потому что игровой цикл выполняется сотни раз в секунду. Используйте часы Pygame, чтобы ограничить частоту кадров до 60 кадров в секунду.

    clock = pygame.time. Clock () while True:… clock.tick (60)

Шаг 6. Держите мяч на экране

Добавьте проверки в функцию обновления, чтобы изменить направление мяча, если он попадает в один из краев экрана.

    class Ball:… def update (self):… if (self.x <= 0 или self.x> = разрешение [0]): self.dx * = -1 if (self.y <= 0 или self.y > = разрешение [1]): self.dy * = -1

ProgramPygamePart2
ProgramPygamePart2

Шаг 7. Попробуйте

Вот как теперь должен выглядеть код:

    импортировать pygame из pygame.locals import * разрешение = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (разрешение) class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, surface): pygame.draw.circle (surface, black, (self.x, self.y), self.radius) def update (self): self.x + = self.dx self.y + = self.dy if (self.x <= 0 or self.x> = resolution [0]): self.dx * = -1 if (self.y <= 0 или self.y> = разрешение [1]): self.dy * = -1 ball = Ball () clock = pygame.time. Clock () while True: screen. fill (белый) ball.draw (экран) ball.update () pygame.display.flip () clock.tick (60) для события в pygame.event.get (): if event.type == QUIT: pygame.quit ()

Часть 4 из 8: Организация игры

Шаг 1. Используйте классы, чтобы все организовать

Игра будет усложняться. Используйте объектно-ориентированные методы для организации вашего кода.

Шаг 2. Превратите игровой цикл в класс

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

    классная игра ():

Шаг 3. Добавьте конструктор

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

    класс game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (разрешение) self.clock = pygame.time. Clock ()

Шаг 4. Обработка событий в функции

    class game ():… def handleEvents (self): для события в pygame.event.get (): if event.type == QUIT: pygame.quit ()

Шаг 5. Сделайте игровой цикл функцией

Вызов функции обработки событий в каждом цикле.

    class game ():… def run (self): while True: self.handleEvents () self.screen.fill (белый) self.clock.tick (60) pygame.display.flip ()

Шаг 6. Обработка нескольких игровых объектов

Прямо сейчас этот код должен вызывать отрисовку и обновлять наш объект в каждом кадре. Если бы у вас было много объектов, это было бы беспорядочно. Давайте добавим наш объект в массив, а затем будем обновлять и рисовать все объекты в массиве в каждом цикле. Теперь вы можете легко добавить еще один объект и изменить его начальную позицию.

    class game (): def _init _ (self):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (self): while True: self.handleEvents () для gameObj в self.gameObjects: gameObj.update () self.screen.fill (белый) для gameObj в self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.кувырок()

ProgramPygamePart3
ProgramPygamePart3

Шаг 7. Попробуйте

Вот как теперь должен выглядеть код:

    импортировать pygame из pygame.locals import * разрешение = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (разрешение) class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, surface): pygame.draw.circle (surface, black, (self.x, self.y), self.radius) def update (self): self.x + = self.dx self.y + = self.dy if (self.x <= 0 or self.x> = resolution [0]): self.dx * = -1 if (self.y <= 0 или self.y> = разрешение [1]): self.dy * = -1 class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (разрешение) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): для события в pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () для gameObj в self.gameObjects: gameObj.update () self.screen.fill (белый) для gameObj в self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () игра (). run ()

Часть 5 из 8: Добавление объекта игрока

Шаг 1. Создайте класс плеера и конструктор

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

    class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Шаг 2. Определите, как рисовать объект игрока

Это будет похоже на то, как вы рисовали другие игровые объекты.

    class Player:… def draw (self, surface): pygame.draw.circle (поверхность, красный, (self.x, self.y), self.radius)

Шаг 3. Добавьте управление мышью для объекта игрока

В каждом кадре проверяйте положение мыши и устанавливайте расположение объектов игроков в этой точке.

    class Player:… def update (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

Шаг 4. Добавьте объект игрока в gameObjects

Создайте новый экземпляр проигрывателя и добавьте его в список.

    класс game (): def _init _ (self):… self.gameObjects.append (Player ())

ProgramPygamePart4
ProgramPygamePart4

Шаг 5. Попробуйте

Вот как теперь должен выглядеть код:

    импортировать pygame из pygame.locals import * разрешение = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (разрешение) class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, surface): pygame.draw.circle (surface, black, (self.x, self.y), self.radius) def update (self): self.x + = self.dx self.y + = self.dy if (self.x <= 0 or self.x> = resolution [0]): self.dx * = -1 if (self.y <= 0 или self.y> = разрешение [1]): self.dy * = -1 class Player: def _init _ (self, rad = 20): self.x = 0 self..y = 0 self.radius = rad self.type = "player" def draw (self, surface): pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_ режим (разрешение) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): для события в pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () для gameObj в self.gameObjects: gameObj.update () self.screen.fill (белый) для gameObj в self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). запустить()

Часть 6 из 8: Заставляем объекты взаимодействовать с игроком

Шаг 1. Измените функции обновления

Чтобы объекты могли взаимодействовать, они должны иметь доступ друг к другу. Давайте добавим еще один параметр в Update, чтобы передать его в список gameObjects. Вам нужно будет добавить его как к объекту игрока, так и к объектам Ball. Если у вас много игровых объектов, наследование может помочь вам сохранить все сигнатуры ваших методов одинаковыми.

    class Ball:… def update (self, gameObjects):… class Player:… def update (self, gameObjects):

Шаг 2. Проверьте, нет ли столкновений между игроком и шарами

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

    class Player:… def update (self, gameObjects):… для gameObj в gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Шаг 3. Завершите игру, если игрок "попал"

Давайте пока просто выходим из игры.

    if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit ()

Шаг 4. Попробуйте

Вот как теперь должен выглядеть код:

    импортировать pygame из pygame.locals import * разрешение = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (разрешение) class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, surface): pygame.draw.circle (surface, black, (self.x, self.y), self.radius) def update (self, gameObjects): self.x + = self.dx self.y + = self.dy if (self.x <= 0 or self.x> = resolution [0]): self.dx * = -1 if (self.y <= 0 или self.y> = разрешение [1]): self.dy * = -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, surface): pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] для gameObj в gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (разрешение) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): для события в pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () для gameObj в self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (белый) для gameObj в self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () игра (). run ()

Часть 7 из 8: Добавление игрового контроллера для создания объектов

Шаг 1. Создайте класс игрового контроллера

Игровые контроллеры отвечают за «запуск» игры. Он отличается от нашего игрового класса, который отвечает за рисование и обновление всех наших объектов. Контроллер будет периодически добавлять на экран еще один мяч, чтобы усложнить игру. Добавьте конструктор и инициализируйте некоторые базовые значения. Интервалом будет время до добавления другого мяча.

    class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "игровой контроллер"

Шаг 2. Добавьте функцию обновления

Это позволит проверить, сколько времени прошло с момента добавления мяча или с начала игры. Если время больше интервала, вы сбросите время и добавите мяч.

    class GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

Шаг 3. Придайте шарам случайные скорости

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

    class GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = random () * 2, yVel = random () * 2))

Шаг 4. Исправьте функцию рисования

Функция рисования не принимает поплавки. Давайте преобразуем положение шара в целые числа, прежде чем шары будут вытянуты.

    class Ball:… def draw (self, surface): pygame.draw.circle (поверхность, черный, (int (self.x), int (self.y)), self.radius)

Шаг 5. Определите метод рисования для игрового контроллера

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

    класс GameController:… def draw (self, screen): pass

Шаг 6. Добавьте игровой контроллер в gameObjects и удалите 2 шара

Теперь игра должна создавать шар каждые пять секунд.

    class game (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Шаг 7. Попробуйте

Вот как теперь должен выглядеть код:

    импортировать pygame из случайного импорта из pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame. display.set_mode (разрешение) class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, surface): pygame.draw.circle (surface, black, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x + = self.dx self.y + = self.dy if (self.x <= 0 или self. x> = разрешение [0]): self.dx * = -1 if (self.y <= 0 или self.y> = разрешение [1]): self.dy * = -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, surface): pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] для gameObj в игре Объекты: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) * * 2: pygame.quit () class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "игровой контроллер "def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = random () * 2, yVel = random () * 2)) def draw (self, screen): pass class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (разрешение) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): для события в pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () для gameObj в self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (белый) для gameObj в self.gameO объекты: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Часть 8 из 8: Добавление счета и игра окончена

Шаг 1. Добавьте оценку к классу игрового контроллера

Создайте объект шрифта и переменную оценки. Вы будете рисовать шрифт в каждом кадре, чтобы отображать счет и увеличивать его в каждом кадре при обновлении.

    class GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects):… self.score + = 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, черный), (5, 5))

Шаг 2. Измените способ окончания игры

Избавимся от выхода, когда игрок обнаруживает столкновение. Вместо этого вы установите в проигрывателе переменную, которую игра может проверить. Когда установлен gameOver, прекратить обновление объектов. Это заморозит все на месте, чтобы игрок мог увидеть, что произошло, и проверить свой счет. Обратите внимание, что объекты все еще рисуются, но не обновляются.

    class Player: def _init _ (self, rad = 20):… self.gameOver = False def update (self, gameObjects):… для gameObj в gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class game (): def _init _ (self): … Self.gameOver = False def run (self): while True: self.handleEvents (), если не self.gameOver: для gameObj в self.gameObjects: gameObj.update (self.gameObjects), если gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Шаг 3. Попробуйте

Вот как теперь должен выглядеть готовый код:

    импортировать pygame из случайного импорта из pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame. display.set_mode (разрешение) class Ball: def _init _ (self, xPos = разрешение [0] / 2, yPos = разрешение [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, surface): pygame.draw.circle (surface, black, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x + = self.dx self.y + = self.dy if (self.x <= 0 или self. x> = разрешение [0]): self.dx * = -1 if (self.y <= 0 или self.y> = разрешение [1]): self.dy * = -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = False def draw (self, surface): pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] для gameObj в gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self. type = "игровой контроллер" self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = random () * 2, yVel = random () * 2)) self.score + = 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (разрешение) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (self): для события в pygame.event.get (): если ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents (), если не self.gameOver: для gameObj в self.gameObjects: gameObj.update (self.gameObjects), если gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill (белый) для gameObj в self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () игра (). запустить ()

Рекомендуемые: