- soubory:
images/
- obrázky - hra využívá pouzedino-cropped-20-22.pbm
acactus.pbm
dino.py
- samotná hragame_engine.py
- základní herní engineimage_lib.py
- načítání.pbm
obrázkůssd1306.py
- knihovna na ovládání displeje
Pomocí Thonny
je potřeba nahrát knihovny: game_engine.py
, image_lib.py
, ssd1306.py
; a obrázky images/dino-cropped-20-22.pbm
a images/cactus.pbm
. Poté jsou dvě možnosti, buď lze v editoru Thonny
spustit hlavní soubor dino.py
na Raspberry Pi Pico, což je dobré pro testování, nebo lze přejmenovat soubor dino.py
na main.py
a nahrát ho do Pica, hra se automaticky zapne při zapnutí Pica.
- rozděleno do 3 tříd
- načtení obrázku a uchování dat o něm
- použití
- do konstruktoru předat cestu k souboru
- např.
Image("/cactus.pbm")
- např.
- do konstruktoru předat cestu k souboru
- objekt obsahuje
bitmap
- samotný obrázek, který se předává funkce na vykreslení na displejframebuf.blit()
width
- šířka v pixelechheight
- výška v pixelech
- nepohybující se obrázek
- souřadnice můžou být desetinná čísla, při vykreslování se souřadnice zaokrouhlí (odstraní se všechny čísla za desetinnou tečkou (čárkou))
- použití
- do konstruktoru předat výchozí pozice
x
ay
, obrázekimage
a objekt displejedisplay
(pro nás objekt SSD1306)
- do konstruktoru předat výchozí pozice
- metody
change_image(image)
- změní obrázek - lze použít na animacedraw()
- vykreslí obrázek na displej s levým horním rohem na souřadnicích tohoto objektuset_pos(x, y)
- nastaví pozici objektu- lze nastavit i pouze jednu souřadnici např.:
set_pos(x=10)
neboset_pos(y=5)
- lze nastavit i pouze jednu souřadnici např.:
- je to potomek třídy
Sprite
, takže jsou dostuné všechny metody zSprite
- použití
- do konstruktoru předat stejné věci jako ve
Sprite
- navíc lze změnit kde je zem a sílu gravitace pomocí
ground=64
agravity=0.15
- navíc lze změnit kde je zem a sílu gravitace pomocí
- poté v hlavní herní smyčce volat pokaždé
physics_tick(now)
- nastavení pohybu pomocí
set_motion_vector(x, y)
- pohybuje se pořád v zadaném směru- směr
y
je pod vlivem gravitace (pokud je nastavená gravitace na nenulovou hodnotu)
- směr
- do konstruktoru předat stejné věci jako ve
- metody
physics_tick(now)
- udělá výpočet pozice pro dálší snímeknow
je čas, mělo by se používattime.ticks_ms()
- uchovává si čas posledního zavolání, takže pokud se delší dobu funkce nevolá, tak bude velký skok v pohybu (nemusí třeba dojít ke kolizi)
on_ground()
- zkontroluje jestli je objekt na zemi (musí být přesně na zemi, pokud není, tak vratíFalse
)collision_test(obstacles)
- zkontroluje, jestli se dotýká/překrývá s nějakými objekty v seznamuobstacles
(kolize se detekuje pomocí obdélníků)- vrátí první objekt se kterým se překrývá, nebo
None
pokud se s ničím nepřekrývá
- vrátí první objekt se kterým se překrývá, nebo
- better collision detection - pixel based
- aligned text - center, right, (left)
- every char should be 8x8 pixels
- invert colors - periodically (when score is divisible by 10)
- sound engine??
- animations - functions (for Sprite)
- change coordinate rounding??