План игры и подготовка проекта
Самая крупная игра книги — все части уже знакомы по главе 20, здесь они впервые работают вместе.
Этот проект — самая крупная игра книги: корабль игрока, враги, спускающиеся сверху,
стрельба, уничтожение врагов, счёт очков, жизни, растущая сложность и полноценный конец игры
с перезапуском. Все составные части уже знакомы по главе 20 — Rect,
colliderect(), спрайты, состояния игры, delta time — здесь они
впервые работают вместе, в одном учебном проекте.
Импортируем необходимые модули
import random
from dataclasses import dataclass
from enum import Enum, auto
from pathlib import Path
import pygame
dataclasses (глава 14) и enum (глава
18) здесь не случайны: класс-описание типа врага и явные состояния игры — тот же приём, что
SostoyanieIgry в разделе 20.25.
Инициализируем всё необходимое
SHIRINA, VYSOTA = 480, 720
FPS = 60
pygame.init()
screen = pygame.display.set_mode((SHIRINA, VYSOTA))
pygame.display.set_caption("Космический шутер")
clock = pygame.time.Clock()
shrift = pygame.font.SysFont(None, 28)
pygame.font.SysFont(None, 28) создаёт шрифт системным по умолчанию, размером 28 — понадобится для табло счёта в разделе 21.5. Полная финальная версия использует сразу три размера шрифта — обычный, крупный (заголовки экранов) и мелкий (подписи).План проекта
Прежде чем писать код, полезно увидеть карту того, что получится в итоге. Финальная версия (раздел 21.25) состоит из пяти классов с чёткими обязанностями:
Этот раздел и разделы 21.2–21.8 повторяют исторический порядок изложения из бумажной книги и намеренно начинают проще, чем финальная версия — с обычных функций и списков, как в главе 20. С раздела 21.9 книга объясняет, как и почему этот код вырастает в архитектуру на классах.