5 KiB
OOP w Pythonie przez bibliotekę arcade — kurs 5-dniowy
Kurs dla osoby, która dobrze zna proceduralnego Pythona (pętle, funkcje, listy,
słowniki, algorytmy), ale nie pisała jeszcze klas. Przez pięć dni budujemy gry
w bibliotece arcade i przy okazji poznajemy
obiektowość: klasy, konstruktory, dziedziczenie, nadpisywanie metod, property.
Uwaga: kurs korzysta z arcade 3.x (zweryfikowano na 3.3.3). API 3.x różni się od starych tutoriali z wersji 2.x — patrz sekcja „Pułapki API” na dole.
Setup
# 1. Wirtualne środowisko (w katalogu projektu)
python3 -m venv .venv
# 2. Aktywacja
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\activate # Windows (PowerShell / cmd)
# 3. Instalacja zależności
pip install -r requirements.txt
# 4. Sprawdzenie, czy działa
python -c "import arcade; print(arcade.VERSION)"
python dzien1/01_okno.py
Jeśli po python dzien1/01_okno.py otworzy się okno z napisem — środowisko jest
gotowe. Zamykamy okno krzyżykiem albo Esc (tam, gdzie jest obsłużony).
Plan dni
| Katalog | Dzień | Temat | Co ćwiczymy z OOP |
|---|---|---|---|
dzien1/ |
1 | Pierwsze okno, rysowanie, ruch sprite'a | klasa, __init__, super(), dziedziczenie po arcade.Window, nadpisywanie metod |
dzien2/ |
2 | Zbieranie monet + własna hierarchia wrogów | klasa bazowa i klasy pochodne, nadpisywanie update(), polimorfizm |
dzien3_4_platformowka/ |
3–4 | Platformówka wg oficjalnego tutoriala | kompozycja obiektów (silnik fizyki, kamera, sceny), property z walidacją |
dzien5_projekt/ |
5 | Własna gra od zera | projektowanie klas, podział na pliki, arcade.View jako stany gry |
assets/ |
— | Grafika i dźwięki (do pobrania samodzielnie) | — |
Zasady pracy
- Uzupełniaj
TODO. Każdy plik startowy działa od razu — uruchom go najpierw bez zmian, zobacz co robi, dopiero potem szukajTODO:i dopisuj kod. - Uruchamiaj często. Po każdej małej zmianie (5–15 linii) odpal program. Łatwiej znaleźć błąd w pięciu nowych liniach niż w stu.
- Commit po każdym działającym kroku. Nie po każdym dniu — po każdym
momencie, w którym gra znowu się uruchamia:
Dzięki temu zawsze można wrócić do ostatniej wersji, która działała.git add -A git commit -m "dzien2: klasa Enemy odbija się od krawędzi" - Czytaj komunikaty błędów od dołu. Ostatnia linia traceback mówi co się stało, linie wyżej mówią gdzie.
- Nie kopiuj kodu, którego nie rozumiesz. Jeśli coś w przykładzie jest niejasne — zmień to i zobacz, co się zepsuje. To najszybszy sposób nauki.
Materiały
- Primer (szybkie wprowadzenie do arcade): https://realpython.com/arcade-python-game-framework/
- Kurs „Learn Arcade” (długi, po angielsku, z zadaniami): https://learn.arcade.academy/
- Tutorial platformówki (podstawa dni 3–4): https://api.arcade.academy/en/latest/tutorials/platform_tutorial/index.html
- Przykłady kodu (kopalnia gotowych rozwiązań): https://api.arcade.academy/en/latest/example_code/index.html
- Darmowe assety (grafika, dźwięki): https://kenney.nl/assets
Pułapki API — arcade 3.x kontra stare tutoriale
Duża część poradników w internecie opisuje arcade 2.x. Najczęstsze różnice:
| Stare (2.x) | Aktualne (3.x) |
|---|---|
arcade.start_render() w on_draw |
self.clear() |
sprite_list.on_update(delta_time) |
sprite_list.update(delta_time) — SpriteList nie ma on_update |
def update(self): w klasie sprite'a |
def update(self, delta_time=1/60, *args, **kwargs): |
arcade.draw_rectangle_filled(...) |
arcade.draw_lrbt_rectangle_filled(...) lub draw_lbwh_rectangle_filled(...) |
arcade.set_background_color(...) |
self.background_color = ... (atrybut okna / widoku) |
arcade.Camera(...) |
arcade.Camera2D(...) |
Jeżeli tutorial nie działa — najpierw sprawdź tę tabelę, potem oficjalną dokumentację dla 3.x.
Ostrzeżenie PerformanceWarning: draw_text is an extremely slow function
pojawia się normalnie i nie jest błędem — arcade sugeruje, żeby przy wielu
napisach tworzyć obiekty arcade.Text raz w __init__ i tylko je rysować.
Przy kilku napisach na ekranie można je zignorować.