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.
Stav - GAME |
---|
Indikačná dióda – ZELENÁ
Funkcia ľavého tlačidla – Prechod do stavu PAUSE
Funkcia pravého tlačidla – Otoč vybratý blok o 90º
Ovládanie akcelerometrom – Ovládanie kurzoru (výber bloku bludiska, ktorý je potrebné otočiť)
Popis – Princípom hry je udržať mravca v pohybe. Mravec sa po bludisku pohybuje sám, úlohou hráča je tvorba priechodnej cesty bludiskom. Priechodná cesta bludiskom sa vytvára otáčaním jednotlivých blokov bludiska. Hráč môže otáčať iba čisté bloky labyrintu. To znamená bloky, ktoré ešte neboli použité, alebo v nich už mravec nie je. Prechodom mravca sa blok zaradí medzi použité, a mravec po nich už nemôže viac ísť. Jediným spôsobom, ako bloky zreaktivovať je prechod „cez okraj labyrintu“. Po takomto prechode je mravec prenesený na protiľahlú stranu labyrintu (pokiaľ je protiľahlý blok správne natočený) a všetky použité bloky labyrintu sú opäť náhodne vygenerované.
Hra začína vždy blokom „štart“ na rovnakom mieste (druhý blok zľava, druhý blok zhora) rovnakým smerom pohybu mravca (nadol). Kurzor je vždy na začiatku hry umiestnený pod blok „štart“, hráč môže teda hneď správne nasmerovať prvý blok. (toto rozloženie je zabezpečené pri generovaní labyrintu v stave READY). Hráč pohybuje doskou, čím ovláda pohyb kurzoru, ktorý predstavuje blikajúce políčko. Keď sa hráč premiestni kurzorom na políčko, ktoré potrebuje otočiť aby vytvoril správnu cestu labyrintom, použije pravé tlačidlo ovládania.
Hra končí narazením mravca na zle otočený alebo použitý blok. Po skončení hry sa zariadenie prechádza do stavu SCORE.
Stav hry - LEARN |
---|
*nejedná sa o stav stavového automatu ale o mód v ktorom zariadenie pracuje
Popis – Hra Ant Run nie je veľmi známa. Vlastne asi vôbec. Preto je zložité novému hráčovi vysvetliť celý princíp hry, hlavne z dôvodu tak trochu obrátenej logiky hrania (mravec sa pohybuje sám, treba mu postaviť nekonečnú cestu bludiskom). Preto bol do hry zavedený výučbový mód.
Pre vstup do tohto módu je potrebné počas štartu mikroprocesoru držať naraz obe tlačidlá. Užívateľ je o vstupe do výučbového módu informovaný indikačnou LED, ktorá svieti na modro.
Vo výučbovom móde funguje celé zariadenie rovnako ako v štandardnom stave, hru však nie je možné prehrať. Pokiaľ hráč zle zostaví labyrint, mravec príde na poslednú pozíciu ktorú mu cesta labyrintom umožní a čaká na správne natočenie ďalšieho bloku. V stave LEARN sa teda ani nepočíta skóre, ide o zoznámenie so základnými princípmi hry.