242
Глава 12 • Инопланетное вторжение
Также игра должна реагировать на действия пользователя, назначать цвет фона
и загружать изображение корабля.
Создание окна
Pygame и обработка ввода
Начнем с создания пустого окна Pygame, для чего будет создан класс, представля-
ющий окно. Создайте в текстовом редакторе новый файл и сохраните его с именем
alien_invasion .py
, после чего введите следующий код:
alien_invasion.py
import sys
import pygame
class AlienInvasion:
"""Класс для управления ресурсами и поведением игры."""
def __init__(self):
"""Инициализирует игру и создает игровые ресурсы."""
❶
pygame.init()
❷
self.screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption("Alien Invasion")
def run_game(self):
"""Запуск основного цикла игры."""
❸
while True:
# Отслеживание событий клавиатуры и мыши.
❹
for event in pygame.event.get():
❺
if event.type == pygame.QUIT:
sys.exit()
# Отображение последнего прорисованного экрана.
❻
pygame.display.flip()
if __name__ == '__main__':
# Создание экземпляра и запуск игры.
ai = AlienInvasion()
ai.run_game()
Программа начинается с импортирования модуля
sys
и
pygame
. Модуль
pygame
содержит функциональность, необходимую для создания игры, а модуль
sys
за-
вершает игру по команде игрока.
Игра Alien Invasion начинается с класса с именем
ALienInvasion
. В методе
__init__()
функция
pygame.init()
инициализирует настройки, необходимые
Pygame для нормальной работы
. В точке
вызов
pygame.display.set_mode()
создает окно, в котором прорисовываются все графические элементы игры. Ар-
гумент
(1200,
800)
представляет собой кортеж, определяющий размеры игрового
окна. (Вы можете изменить эти значения в соответствии с размерами своего мони-
Создание проекта игры
243
тора.) Объект окна присваивается атрибуту
self.screen
, что позволяет работать
с ним во всех методах класса.
Объект, присвоенный
self.screen
, называется
поверхностью
(surface). Поверхность
в Pygame представляет часть экрана, на которой отображается игровой элемент.
Каждый элемент в игре (например, пришелец или корабль игрока) представлен
поверхностью. Поверхность, возвращаемая
display.set_mode()
, представляет все
игровое окно. При активизации игрового цикла анимации эта поверхность авто-
матически перерисовывается при каждом проходе цикла, чтобы она обновлялась
всеми изменениями, обусловленными вводом от пользователя.
Процессом игры управляет метод
run_game()
. Метод содержит непрерывно выпол-
няемый цикл
while
, который содержит цикл событий и код, управляющий об-
новлениями экрана.
Событием
называется действие, выполняемое пользователем
во время игры (например, нажатие клавиши или перемещение мыши). Чтобы наша
программа реагировала на события, мы напишем
цикл событий
для
прослушивания
событий и выполнения соответствующей операции в зависимости от типа произо-
шедшего события. Этим циклом
событий является цикл
for
в точке
.
Для получения доступа к событиям, обнаруженным Pygame, используется метод
pygame.event.get()
. Он возвращает список событий, произошедших с момента
последнего вызова этой функции. При любом событии клавиатуры или мыши от-
рабатывает цикл
for
. В этом цикле записывается серия команд
if
для обнаружения
и обработки конкретных событий. Например, когда игрок щелкает на кнопке за-
крытия игрового окна, программа обнаруживает событие
pygame.QUIT
и вызывает
метод
sys.exit()
для выхода из игры
.
Вызов
pygame.display.flip()
приказывает Pygame отобразить последний отрисо-
ванный экран. В данном случае при каждом выполнении цикла
while
будет отобра-
жаться пустой экран со стиранием старого экрана, так что виден будет только новый
экран. При перемещении игровых элементов вызов
pygame.display.flip()
будет по-
стоянно обновлять экран, отображая игровые элементы в новых позициях и скрывая
старые
изображения; таким образом создается иллюзия плавного движения.
В последней строке файла создается экземпляр игры, после чего вызывается метод
run_game()
. Вызов
run_game()
заключается в блок
if
, чтобы он выполнялся только
при прямом вызове функции. Запустив файл
alien_invasion .py
, вы увидите пустое
окно Pygame.
Назначение цвета фона
Pygame по умолчанию создает черный экран, но это банально — выберем другой
цвет фона. Это
делается в методе
__init__()
:
Достарыңызбен бөлісу: