Rozdział 21 · Projekt: kosmiczny strzelec

Plan gry i przygotowanie projektów

Największa gra książki — wszystkie części są już znane z rozdziału 20, tutaj działają razem po raz pierwszy.

Ten projekt to największa gra w książce: statek gracza, wrogowie schodzący z góry, strzelanie, niszczenie wrogów, zdobywanie punktów, życia, rosnący poziom trudności i pełne zakończenie gry z restartem. Wszystkie elementy są już znane z rozdziału 20 — Rect, colliderect(), sprite'y, stany gry delta time — oto są pracuj razem po raz pierwszy, w tym samym projekcie edukacyjnym.

Prawdziwe ujęcie ukończonej gry: niebieski statek poniżej, kilku wrogów różnych typów i pociski na polu gry, HUD z punktami i życiami na wierzchu
Prawdziwe ujęcie finalnej wersji gry to efekt tego rozdziału.

Importuj niezbędne moduły

importy.py
import random
from dataclasses import dataclass
from enum import Enum, auto
from pathlib import Path

import pygame

dataclasses (rozdział 14) i enum (rozdział 18) tutaj nie są przypadkowe: opis klasy typu wroga i jawne stany gry — ten sam zabieg, co SostoyanieIgry w sekcji 20.25.

Inicjalizuj wszystko, czego potrzebujesz

inicializaciya.py
SHIRINA, VYSOTA = 480, 720
FPS = 60

pygame.init()
screen = pygame.display.set_mode((SHIRINA, VYSOTA))
pygame.display.set_caption(„Space Shooter”)
clock = pygame.time.Clock()
shrift = pygame.font.SysFont(None, 28)
pygame.font — ten sam moduł, co w rozdziale 20
pygame.font.SysFont(None, 28) tworzy domyślny rozmiar czcionki systemowej 28 — będziesz go potrzebować do tablicy wyników w sekcji 21.5. Pełna wersja końcowa używa jednocześnie trzech rozmiarów czcionek — zwykłej, dużej (tytuły ekranu) i małych (napisy).

Plan projektu

Zanim napiszesz kod, warto zobaczyć mapę tego, co ostatecznie otrzymujesz. Wersja ostateczna (Rozdział 21.25) składa się z pięciu klas o jasnych obowiązkach:

Pięć Klas Końcowych
Game
Kontroluje cały stan gry
Pętla Gry: Zdarzenia → Aktualizacje → Aktualizacje → Renderowanie
Przełączniki MENU/PLAYING/PAUSED/GAME_OVER stany
Player
Pozycja jak Vector2 (rozdział 21.11)
Ruch ograniczony przez pole gry
Interwał między strzałami i licznik nieśmiertelności
Bullet
Leci w górę z stałą prędkością
Usuwa się poza polem gry
Enemy
Lecą w dół z indywidualną prędkością
Punkty do zniszczenia
Explosion
Animacja wieloklatkowa
Usuwa się po ostatniej klatce

Ta sekcja oraz sekcje 21.2–21.8 powtarzają historyczny porządek książki papierowej I celowo zaczynają się prościej niż w ostatecznej wersji — z typowymi funkcjami i listami, jak w rozdziale 20. W sekcji 21.9 książka wyjaśnia, jak i dlaczego ten kod rozwija się w architekturze klas.

Praktyka: import i inicjalizacja
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →