Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:ant-run

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2014:ant-run [2015/01/17 17:08]
Tomáš Jankech [Software] ++ generovanie labyrintu
2014:ant-run [2015/01/18 23:42] (aktuální)
Tomáš Jankech [Software] ++ obládanie blokovka
Řádek 138: Řádek 138:
 Hra končí narazením mravca na zle otočený alebo použitý blok. Po skončení hry sa zariadenie prechádza do stavu SCORE. 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 - SCORE^ ^Stav - SCORE^
-**Indikačná dióda** – ČERVENÁ/​MODRÁ (preblikávanie) +**Indikačná dióda** – ČERVENÁ/​MODRÁ (preblikávanie)\\ 
-**Funkcia ľavého tlačidla** – Prechod do stavu READY +**Funkcia ľavého tlačidla** – Prechod do stavu READY\\ 
-**Funkcia pravého tlačidla** – Bez funkcie +**Funkcia pravého tlačidla** – Bez funkcie\\ 
-**Ovládanie akcelerometrom** – Bez funkcie+**Ovládanie akcelerometrom** – Bez funkcie\\
  
 **Popis** – Stav SCORE nastáva po prehre v hre. Prehrá nastane ak **Popis** – Stav SCORE nastáva po prehre v hre. Prehrá nastane ak
Řádek 174: Řádek 174:
 <code c>​typedef enum  {idle, left, up, right, down} direction_t;</​code>​ <code c>​typedef enum  {idle, left, up, right, down} direction_t;</​code>​
  
-**  TODO kód/vývoják ​ **+Na obrázku [[http://​www.urel.feec.vutbr.cz/​MPOA/​_detail/​2014/​ant-run/f_accelerometer.png?​id=2014%3Aant-run|Obr. 9]] je zobrazený princíp vyhodnocovania dát z akcelerometra.
  
 +{{ :​2014:​ant-run:​f_accelerometer.png |Obr. 9 - Vyhodnocovanie dát z akcelerometra}}
  
 +Funkcia confrim_dir potvrdzuje návrat do rovnovážnej polohy vykreslením zelenej šípky so správnym natočením alebo maže údaje vysvietené na panely v prípade, že užívateľ doskou nepohol.\\
 +
 +Funkcia move_cursor v hre pohybuje s Funkcia confrim_dir potvrdzuje návrat do rovnovážnej polohy vykreslením zelenej šípky so správnym natočením alebo maže údaje vysvietené na panely v prípade, že užívateľ doskou nepohol. ​ blokom (kurzorom => aktuálnym výberom). Pohyb kurzoru je nekonečný => ak prejde hráč "za okraj" kurzor sa objaví na protiľahlej strane.
 +
 +-----
 ===Generovanie labyrintu=== ===Generovanie labyrintu===
 Generovanie labyrintu zaobstaráva funkcia reload_matrix ktorá je volaná v dvoch prípadoch. Generácia nového labyrintu na začiatku hry a generácia nových blokov namiesto použitých po prechode mravca „okrajom“ bludiska. Generovanie labyrintu zaobstaráva funkcia reload_matrix ktorá je volaná v dvoch prípadoch. Generácia nového labyrintu na začiatku hry a generácia nových blokov namiesto použitých po prechode mravca „okrajom“ bludiska.
Řádek 197: Řádek 203:
                                 */                                 */
 </​code>​ </​code>​
-Funkcia obsahuje aj inkrementáciu skóre. Jeden vygenerovaný blok znamená zvýšenie počítadla skóre o jeden bod.+Funkcia ​reload_matrix ​obsahuje aj inkrementáciu skóre. Jeden vygenerovaný blok znamená zvýšenie počítadla skóre o jeden bod. 
 +<code c> 
 +void reload_matrix(void) 
 +
 +    // blocks horizontal 
 +    for(uint8_t j = 0; j < 4;j++) 
 +    { 
 +        // blocks vertical 
 +        for(uint8_t i = 0; i < 4;i++) 
 +        { 
 +            int8_t block; ​  // random block type 
 +            int8_t shift; ​  // random block turn 
 +             
 +            // if labyrint part == used => generate new part  
 +            if((matrix[j*2][i*2] == led_used) && (matrix[(j*2) + 1][i*2] == led_used)  
 +            && (matrix[(j*2) + 1][(i*2) + 1] == led_used) && (matrix[j*2][(i*2) + 1] == led_used)) ​    
 +            { 
 +                 // random block selection 
 +                 ​switch( rand() % 3 ) 
 +                 { 
 +                    case 0: 
 +                        block = lab_turn_big;​ 
 +                        break;  
 +                    case 1: 
 +                        block = lab_turn_small;​ 
 +                        break; 
 +                    case 2: 
 +                        block = lab_straight;​ 
 +                        break;  
 +                 } 
 +                 
 +                 // random shift 0-0st, 1-90st, 2-180-st, 3-270st 
 +                 shift = rand() % 4; 
 +                 ​matrix[2*j][2*i] ​        = led_lab * ( 1 & block >> ​ (shift % 4));       // ​ 0  
 +                 ​matrix[2*j][(2*i)+1] ​    = led_lab * ( 1 & (block >> (++shift % 4)));    //  1 
 +                 ​matrix[(2*j)+1][2*i] ​    = led_lab * ( 1 & (block >> (++shift % 4)));    //  2 
 +                 ​matrix[(2*j)+1][(2*i)+1] = led_lab * ( 1 & (block >> (++shift % 4)));    //  3 
 +     
 +                // score counter, one block == one point 
 +                if(game_state == game) 
 +                    score_cnt++;​ 
 +            } 
 +        } 
 +    } 
 +
 +</​code>​ 
 +----- 
 +===Beh mravca=== 
 +Najzložitejšia funkcia programu zabezpečuje beh mravca. Je volaná periodicky každých 1,2 s. Táto časová konštanta bola určená na základe testov. Dáva hráčovi dostatočný čas na tvorbu labyrintu, nie však toľko, aby hra nemala spád. Rýchlosť mravca je počas celej hry konštantná (na takto malom hracom priestore je to aj tak primerane obtiažne). 
 +V prvom rade je potrebné uvedomiť si princíp pohybu. Bloky, ktoré hra obsahuje umožňujú obmedzené množstvo pohybov. Podľa polohy mravca v bloku je možné určiť, kam má ďalej pokračovať. Možnosti pohybu v závislosti na predchádzajúcom smere pohybu sú zobrazené na tomto obrázku ([[http://​www.urel.feec.vutbr.cz/​MPOA/​_detail/​2014/​ant-run/​ant_move.png?​id=2014%3Aant-run|Obr. 10]]) 
 + 
 +{{ :​2014:​ant-run:​ant_move.png?​200 | Obr. 10 - Možnosti pohybu mravca}}  
 + 
 +Pohyb mravca teda definujú premenné, predstavujúce polohu (poradie stĺpca, poradie riadka) a smer pohybu (enum direction_t <​sup>​*rovnaký ako v ovládaní</​sup>​). Ich kombináciou sa dá zistiť presná poloha mravca. 
 + 
 +Vývojový diagram pohybu mravca v labyrinte je na obrázku [[http://​www.urel.feec.vutbr.cz/​MPOA/​_detail/​2014/​ant-run/​f_ant_run.png?​id=2014%3Aant-run|Obr.11]].\\ 
 +Pre prvé určenie smeru pohybu (vpravo/​vľavo alebo hore/dole) sa využíva vlastnosť dátového typu enum, v ktorom jednotlivé prvky predstavujú na čísla od 0 ďalej. 
 +Vo vývojovom diagrame pokračuje vetvenie algoritmu testom na „1. typ pohybu“. Týmto pohybom sa myslí pohyb, keď mravec v predchádzajúcom kroku vošiel do tohto bloku (nezáleží pri tom z akej strany). V obrázku vyššie tento stav zobrazujú spodné dva bloky.  
 +Prioritný pohyb je vždy v rámci bloku, ak takýto pohyb nie je možný, zisťuje sa, či je možný pohyb smerom von z bloku.  
 +Pohyb von z bloku je možný iba v prípade, že je blok labyrintu, do ktorého mravec smeruje vhodne natočený. To sa zistí tak, že pixel kam mravec mieri je označený led_lab (blok labyrintu) a vedľajší pixel (na rozhraní aktuálneho a budúceho bloku) je označený ako led_free (voľný blok). 
 +Ak mravec opúšťa blok (algoritmus mu to dovolil), môžu nastať dva prípady prechodu do vedľajšieho bloku 
 +  * Štandardný prechod 
 +    * Predošlý blok sa označí za použitý 
 +  * Prechod cez okraj 
 +    * Predošlý blok sa označí za použitý 
 +    * Vygenerujú sa nové bloky labyrintu miesto použitých 
 +V prípade, že nie je možný ani pohyb v bloku, ani pohyb mimo bloku, hra končí. 
 + 
 +{{ :​2014:​ant-run:​f_ant_run.png | Obr. 11 - Algoritmus hľadania cesty bludiskom pre pohyb mravca}} 
 +=====Video===== 
 +Hra Ant Run, v úvode je stav TEST a demonštrácia ovládania.  
 + 
 +{{ youtube>​Z3XV8pjQB0Y?​medium }} 
 + 
 +Hra je v móde LEARN ktorý slúži na predstavenie hry (nehrá sa na skóre) 
 + 
 +{{ youtube>​373jtcEcwK0?​medium }} 
 + 
 +Podsvietenie dosky 
 + 
 +{{ youtube>​ak3MDlOqz-E?​medium }} 
 + 
 +Sekanie obrazu je spôsobené automatickým zaostrovaním môjho telefónu. 
 +=====Záver===== 
 +Cieľom projektu bola realizácia hry Ant Run na určenom hardware-ovom vybavení. 
 +Hra funguje v dvoch módoch - vo výučbovom móde a v móde s počítaním skóre. Oba sú odtestované a fungujú, čo dokazuje aj priložené video.\\
  
 +Celý zdrojový kód je uverejnený na stránkach mbed [[http://​developer.mbed.org/​users/​tomas_dca/​code/​MPOA_ant_run/​| MPOA_ant_run ]].
2014/ant-run.1421510938.txt.gz · Poslední úprava: 2015/01/17 17:08 autor: Tomáš Jankech