Rozdział 20 · Tworzenie gier z Pygame
Mini-projekt: odbijająca się piłka
Pierwsza prawdziwa mini-gra na Pygame – ruch, odbicia i pętla rozgrywki w jednym krótkim projekcie.
Wszystko to połącz w jeden mini-projekt: piłkę, która odbija się od wszystkich czterech ścian ekranu.
prygayushij_myach.py
import pygame
SHIRINA, VYSOTA = 600, 400
RADIUS = 20
pygame.init()
screen = pygame.display.set_mode((SHIRINA, VYSOTA))
clock = pygame.time.Clock()
x, y = SHIRINA // 2, VYSOTA // 2
dx, dy = 4, 3
rabotaet = True
while rabotaet:
for event in pygame.event.get():
if event.type == pygame.QUIT:
rabotaet = False
x += dx
y += dy
if x - RADIUS < 0 or x + RADIUS > SHIRINA:
dx = -dx
if y - RADIUS < 0 or y + RADIUS > VYSOTA:
dy = -dy
screen.fill((20, 20, 40))
pygame.draw.circle(screen, (255, 100, 100), (int(x), int(y)), RADIUS)
pygame.display.flip()
clock.tick(60)
pygame.quit()
dx = -dx — odbicie w jednej linii
Zmiana znaku prędkości na przeciwny — standardowy sposób odbicia od ściany: ruch trwa z tą samą prędkością, tylko w przeciwnym kierunku, bez dodatkowych kontroli kierunku.
Kompletny, już zeskanowany plik – osobno:
projects/pygame/bouncing-ball/bouncing_ball_basic.py
★★ Zadanie samodzielne
Zmieniamy kolor przy odbiciu
Za każdym razem, gdy odbijesz się od ściany, wybierz nowy losowy kolor kuli (random.choice() z rozdziałów 5/11).
Challenge
Dwie Kule
Dodaj drugą piłkę własnym x, y, dx dy – obie powinny się poruszać i odbijać niezależnie.
Praktyka: odbijająca się piłka
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Ograniczenia tej wersji
Piłka już się odbija, ale ta wersja ma słabości: prędkość odbicia zależy od liczby klatek na daną komputer, a cały kod leży w zmiennych globalnych bez żadnej struktury. Później w tym rozdziale przyjrzymy się, skąd biorą się oba ograniczenia i jak rozwinąć ten sam projekt w profesjonalnie zorganizowaną wersję z klasą
Game, z pauzą i ruchem, który nie zależy od liczby klatek.