PyOpenGL játékfejlesztés — 1. rész: Survival
10 hetes kurzus — minden héten elmélet, gyakorlat és kvíz.
Python, Pygame és PyOpenGL segítségével lépésről lépésre építesz egy bullet-heaven stílusú túlélő játékot.
Tanmenet
Hét 1 — GDD és scope
Elmélet
- Roguelike és Bullet Heaven
> ha nem ismered ezeket a játékokat, gondolj sok ellenségre és folyamatos fejlődésre.
Ingyenes előnézet - GDD és Scope Management
> a GDD a játékod tervrajza. Kód előtt ezt töltjük ki (1–2. alkalom).
Ingyenes előnézet - Verziókezelés (Git) — opcionális olvasmány
> A kurzuson Git nem gyakorlat. A projektedet helyben mented; a verziókezelés csak ajánlott háttértudás, ha később szeretnéd használni.
Ingyenes előnézet
Gyakorlat
- 1. alkalom — Gyakorlat: GDD kitöltés
Elkészíteni a játék mini-GDD dokumentumát. Ez a kurzus „tervrajza” — később minden kód innen kap értékeket.
- GDD feladatlap — 1. alkalom
Példa: „Felülnézetből túlélő játék, ahol ellenségek ellen kell harcolni, XP-t gyűjtünk és szintet lépünk.”
Kvíz
Hét 1 — kvíz — hozzáférés szükséges
Hét 2 — Pixel art és GDD asset
Elmélet
- Pixel Art alapok
> a GDD-ben leírt kinézetet itt rajzolod meg (2. alkalom).
- Licencelés és CC0 assetek
Ha más készítette a képet, jogilag tudnod kell, mit szabad vele csinálni:
- GDD és sprite — hogyan kapcsolódnak?
> A GDD-ben leírod, mit akarsz látni. A sprite fájl magát a képet tartalmazza.
Gyakorlat
- 2. alkalom — Gyakorlat: Pixel art, assetek és GDD
A 1. alkalom GDD-jének vizuális részét megvalósítani: 7 sprite fájl + frissített GDD asset szekció.
- Asset checklist
Minden fájl PNG, átlátszó háttérrel (kivéve floor).
- GDD vizuális brief — 2. alkalom
> Töltsd ki a GDD asset szekciójához. Ha még nincs GDD, először fejezd be az 1. alkalom feladatlapját.
Kvíz
Hét 2 — kvíz — hozzáférés szükséges
Hét 3 — Ablak, OpenGL, GDD ↔ config
Elmélet
- Python, Pygame és PyOpenGL kapcsolata
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
- GPU és koordináta-rendszer
A Graphics Processing Unit (videókártya) párhuzamosan dolgozik – ezért tud 500 sprite-ot gyorsabban rajzolni, mint a CPU.
- glBegin / glEnd – Immediate Mode
A legrégebbi OpenGL rajzolási mód: minden vertex-et külön adsz meg.
Gyakorlat
- 3. alkalom — Gyakorlat: Első ablak
Pygame ablak megnyitása, fehér teszt-négyzet OpenGL-lel — és GDD ↔ config összehasonlítás.
- GDD ↔ config összehasonlítás — 3. alkalom
> Cél: Lásd, hogy a GDD számok ugyanazok, mint amit a játék használ.
- Setup checklist
- [ ] Python 3.12 vagy újabb (`python --version`)
Kvíz
Hét 3 — kvíz — hozzáférés szükséges
Hét 4 — Mozgás, kamera, delta time
Elmélet
- Input kezelés és game loop
Két mód van input olvasásra:
- glTranslatef és kamera-követés
Eltolja a rajzolási origót. Minden utána rajzolt dolog az eltolás relatív:
- Delta Time (dt)
Ha a mozgást frame-enként fix pixellel csinálod:
Gyakorlat
- Week 04 – Gyakorlat: WASD mozgás és kamera
A teszt-négyzet/játékos mozgása WASD-vel, kamera-követés és rács háttér.
Kvíz
Hét 4 — kvíz — hozzáférés szükséges
Hét 5 — Textúrák és alpha blend
Elmélet
- Textúra betöltés
A textúra egy kép a GPU memóriájában. OpenGL nem tud közvetlenül PNG-t – mi betöltjük Pythonnal, majd átküldjük.
- glBindTexture és szűrés
Alapértelmezetten OpenGL simítja (blur) a textúrákat. Pixel art-nál ez ronda:
- Alpha keverés (Blend)
PNG átlátszó hátterrel betöltve, OpenGL nem tudja az alpha-t automatikusan:
Gyakorlat
- Week 05 – Gyakorlat: Textúrák és alpha
A fehér négyzet helyett pixel art hős és textúrázott talaj megjelenítése.
Kvíz
Hét 5 — kvíz — hozzáférés szükséges
Hét 6 — Lövedékek és auto-fire
Elmélet
- Objektum lista – lövedék menedzsment
Minden lövés = egy objektum. Nem tudjuk előre, hány lesz – dinamikus listát használunk:
- Irányvektor és nyíl forgatás (sablon)
> Nem kell szögfüggvény! A kurzus kész lookup táblát ad 4 irányhoz.
Gyakorlat
- Week 06 – Gyakorlat: Nyilakkal lövés (auto-fire)
Nyíl billentyű tartásával folyamatos lövés 4 irányba, listában tárolva.
Kvíz
Hét 6 — kvíz — hozzáférés szükséges
Hét 7 — Ellenség spawner
Elmélet
- Spawner logika
Az ellenség a képernyőn kívül jelenjen meg, de a játékos felé fusson:
- Három ellenségtípus
Az ellenség viselkedését a `game/config.py` definiálja – ne hardcode-old!
Gyakorlat
- Week 07 – Gyakorlat: A horda érkezése
3 ellenségtípus folyamatos spawn-olása a képernyőn kívül, játékos felé mozgással.
Kvíz
Hét 7 — kvíz — hozzáférés szükséges
Hét 8 — Ütközés és HUD
Elmélet
- Kör-kör ütközésdetektálás
Két kör ütközik, ha a középpontjaik közelebb vannak egymáshoz, mint a sugarak összege:
- Lineáris nehezedés
Ha állandó spawn rate lenne, a játék unalmas lenne. Az idő múlásával egyre több ellenség jön.
- HUD OpenGL-ben – gl_overlay
Ha a display `DOUBLEBUF | OPENGL` módban van, a Pygame surface-re rajzolt UI nem megbízható:
Gyakorlat
- Week 08 – Gyakorlat: Ütközések és nehezedés
Lövedék-ellenség és ellenség-játékos ütközés, HP bar (OpenGL HUD), lineáris nehezedés.
Kvíz
Hét 8 — kvíz — hozzáférés szükséges
Hét 9 — XP és szintlépés
Elmélet
- XP és mágnes mechanika
Ellenség halálakor:
- Szintezési görbe és upgrade-ek
A GDD-ből (`docs/gdd_template.md`):
- Játékállapotok és level up — 9. alkalom
> A játéknak „üzemmódjai" vannak — mint a TV csatornák között váltás.
Gyakorlat
- Week 09 – Gyakorlat: XP és szintlépés
XP gyémántok drop-olása, mágnes felvétel, level up menü 3 upgrade opcióval.
Kvíz
Hét 9 — kvíz — hozzáférés szükséges
Hét 10 — Batch render és FPS
Elmélet
- CPU-GPU szűk keresztmetszet
500 zombi × `glBegin`/`glEnd` = 500 külön OpenGL hívás frame-enként.
- Vertex Arrays
Egy tömbben tárolod az összes vertex adatot, majd egy hívással rajzolod:
- Batch rendering
class SpriteBatch:
- Teljes játék és vezérlés — 10. alkalom
> Cél: Week 10 = ugyanaz a játékélmény, mint `main_done.py`.
Gyakorlat
- Week 10 – Gyakorlat: Optimalizálás és bemutató
Ellenség renderelés Vertex Array batch-csel, FPS mérés, kurzus bemutató.
Kvíz
Hét 10 — kvíz — hozzáférés szükséges