М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет175/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   171   172   173   174   175   176   177   178   ...   334
Байланысты:
Изучаем Python

ПРИМЕЧАНИЕ
Если команда не работает в macOS, попробуйте снова выполнить 
коман ду без флага 
--user
.
Создание проекта игры
Построение игры начнется с создания пустого окна Pygame, в котором позднее 
будут отображаться игровые элементы, — прежде всего корабль и пришельцы. 


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


Достарыңызбен бөлісу:
1   ...   171   172   173   174   175   176   177   178   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет