Toto je starší verze dokumentu!
Porovnanie originálnej predlohy hry Ant Run a zjednodušenej verzie školského projektu Obr. 1.
Zjednodušenie je potrebné pre konverziu hry na trojfarebný displej s obmedzeným počtom pixelov (8×8 LED panel).
Bloky labyrintu sú zobrazené na obrázku Obr. 3. Šípky v blokoch naznačujú chod mravca cez jednotlivé bloky a šípky mimo blokov zobrazujú otáčanie bloku počas hry.
Výslednú interpretáciu zjednodušenej hry približuje nasledujúci obrázok Obr. 4
Výška skóre závisí od počtu správne prejdených blokov labyrintu. Za každý blok labyrintu, ktorý mravec opustí je pripočítaný jeden bod. Body sa ku skóre pripočítajú až prechodom mravca „okrajom“ labyrintu. Skóre sa vynuluje vždy s novou hrou ale aj počas pauzy hry.
Z dostupného hardware-ového vybavenia projektu (doska KL25Z a LED shield) boli využité nasledujúce časti (Obr. 5)
Program bol písaný pomocou online vývojového prostredia www.mbed.org. Celý kód je zverejnený na stránkach mbed tu MPOA_ant_run V nasledujúcej kapitole sú popísané základné funkcie a princípy programu.
Funkcia zobrazovania je volaná periodicky, s periódou 0,01 s. Zobrazuje sa matica uint8_t matrix[8][8]. Každý prvok tejto matice predstavuje jeden pixel - jednu RG LED. Prvky majú definované stavy
#define led_used 3 // color orange #define led_lab 2 // color green #define led_ant 1 // color red #define led_free 0 // off
,ktoré sú pri vysvecovaní panelu rozkódované a priradené jednotlivým výstupným pinom. Samotné vysvecovanie sa riadi algoritmom popísaným nasledujúcim vývojovým diagramom (Obr. 6).
Zobrazovacia funkcia riadi jas panelu (použitým oneskorením) aj blikanie kurzoru.
Viaceré funkcie vyžadujú naplnenie matice zobrazovania naraz. Využívajú pri tom funkciu fill_matrix. Do nej vstupuje uint64_t temp a uint8_t color.
Pre každý pixel panelu sa zisťuje, či má byť pixel aktivovaný a v prípade že áno, priradí sa mu farba pomocou nasledujúceho kódu.
for(uint8_t j = 0; j < 8;j++) { for(uint8_t i = 0; i < 8;i++) { matrix[j][i] = color * ( 0 < (temp & (0x8000000000000000>>((8*j)+i)))); // print template to the matrix } }
Postupuje sa od MSB, preto sa temp maskuje 0x8000000000000000. Definované sú dve predlohy:
#define template_fill (~0)
#define template_arrow 0x12244848241200
Hra je postavená na princípe stavového automatu. Ten beží v nekonečnej slučke funkcie main. Na jednoduchú indikáciu stavov slúži indikačná RGB LED na doske KL25Z. Po zapnutí sa zariadenie dostáva do prvého stavu TEST. Prepojenie medzi jednotlivými stavmi odpovedá nasledujúcemu stavovému diagramu (Obr. 7).
Stav - TEST |
---|
Indikačná dióda – ORANŽOVÁ
Funkcia ľavého tlačidla – Prechod do stavu SAVE
Funkcia pravého tlačidla – Prechod do stavu READY
Ovládanie akcelerometrom – Demonštrácia ovládania
Popis – V stave TEST zariadenie prezentuje ovládanie hry. Po nahnutí zariadenia na niektorú zo strán o 25º sa pohyb zaznamená, čo sa potvrdí vysvietením červenej šípky v smere pohybu. Pre potvrdenie pohybu je potrebné vrátiť sa do východiskovej polohy Idle (uhol natočenie pod 10º). Potvrdenie pohybu je indikované zmenou farby šípky na zelenú.
Stav - SAVE |
---|
Indikačná dióda – ZELENÁ (svieti krátko)
Funkcia ľavého tlačidla – Bez funkcie
Funkcia pravého tlačidla – Bez funkcie
Ovládanie akcelerometrom – Bez funkcie
Popis – Rovnovážna (Idle) poloha ovládanie akcelerometrom(popísané v stave TEST) je v určitom rozsahu definovateľná používateľom. Rozsah súvisí z tým, že ovládanie je prepočítavané z ôs rovnobežných na dosku KL25Z. Po uložení nového Idle stavu ovládania sa zariadenie vracia do stavu TEST.
Stav - READY |
---|
Indikačná dióda – ORANŽOVÁ (svieti krátko)
Funkcia ľavého tlačidla – Bez funkcie
Funkcia pravého tlačidla – Bez funkcie
Ovládanie akcelerometrom – Bez funkcie
Popis – Stav READY je určený na generovanie nového labyrintu. Generovanie je na panely sprevádzané úvodným obrázkom. Úvodný obrázok je poskladaný z oranžových blokov a bloku „štart“ z ktorého vychádza mravec. Úvodný obrázok je nahradený náhodne vygenerovanými políčkami labyrintu a zariadenie prechádza do stavu PAUSE.
Stav - PAUSE |
---|
Indikačná dióda – ČERVENÁ
Funkcia ľavého tlačidla – Prechod do stavu GAME
Funkcia pravého tlačidla – Prechod do stavu READY
Ovládanie akcelerometrom – Bez funkcie
Popis – Stav PAUSE je typická pauza hry. Hra v okamihu prechodu to tohto stavu „zamrzne“ (nebliká ani kurzor výberu bloku *popísaný v stave GAME) . Zo stavu PAUSE môže užívateľ buď pokračovať v hre alebo začať novú hru vygenerovaním nového bludiska.