- soubory:
images/- obrázky - hra využívá pouzedino-cropped-20-22.pbmacactus.pbmdino.py- samotná hragame_engine.py- základní herní engineimage_lib.py- načítání.pbmobrá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
xay, obrázekimagea 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=64agravity=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
yje 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ímeknowje č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
Nonepokud 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??