Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:brick-game

Toto je starší verze dokumentu!


Zadání

Realizujte hru Brick game racing na 8×8 RGB LED matici s použitím desky FRDM-KL25Z v online vývojovém prostředí mbed.com. Ovládání hry zajistěte pomocí akcelerometru. Při realizaci využijte barevnost matice.

Úvod

Cílem tohoto projektu bylo vytvořit hru podobnou „motokárám“, což je jedna z her z kdysi populárního herního zařízení Brick Game 9999 in 1, viz video níže.

Z videa je patrné, že motokára hráče může nabývat pouze dvou poloh, díky kterým má možnost vyhýbat se motokárám počítače, které jí stojí v cestě. Dále si lze povšimnout, že rychlost posouvání motokár počítače a rychlost posouvání svodidel na okrajích displaye je různá.
Pohyb motokáry hráče je v našem případě řešen pomocí akcelerometru. Polohy motokár protihráče jsou nastaveny pomocí pevného binárního pseudonáhodné sekvence.
Vzhledem k tomu, že použitá RG LED matice se svým rozlišením nemůže rovnat displayi původního zařízení, bylo nutné návrh trochu upravit, viz obrázek níže.

Po této úpravě se nám z „motokár“ staly „autíčka“. Dále zde byla snaha, o využití barevnosti matice, pro zlepšení celkového dojmu z hry.

Hardware

Kromě již zmíněné desky FRDM-KL25Z byla k realizaci ještě potřeba RG LED 8×8 matice. Ta je propojena s KL25Z pomocí redukce, kterou v předešlých letech vytvořil student Matěj Hojdík. Více informací o redukci naleznete (Redukce matice 8x8 pro KL25Z).

Software

Software je psaný v online vývojovém prostředí mbed.org. Celý zdrojový kód je k distpozici ZDE.
Vzhledem k poměrně podrobnému okomentování ve skriptu budu uvádět pouze stručný popis jednotlivých funkcí.
Volání funkcí, které zajišťují pohyb předem definovaných struktur jsem zvolil pomocí časovačů, protože ve while smyčce se mi to zdálo příliš komplikované. Časovač jsem si definoval do třech proměnných, pro lepší přehlednost

Main

Funkce main v podstatě řídí celý algoritmus. Nejprve se provede inicializace, počátečního polohy autíčka hráče a svodidel (autíčka počítače ještě nejsou v inicializačním obraze přítomna). Následně se nastaví časovače. Pomocí nich je realizováno nejen samotné zobrazování, ale také pohyb předem nastavených struktur – tj. konstantní pohyb svodidel a aut počítače a počáteční poloha autíčka hráče, definovaná vpravo.
Následuje nekonečná smyčka while, ve které je realizováno snímání akcelerometru, na jehož základě se pak mění poloha autíčka hráče. Dále je zde řešena i možnost kolize. V případě, že se tak stane, dojde k zmrazení matice, místo autíčka hráče se objeví jakýsi myšlený „vrak autíčka“ a celý program se resetuje.

Zozbraz

Tato funkce je jedna z nejdůležitějších, protože má na starost celé to kouzlo zobrazování. Pracuje s předem definovanými poli 8×8 pro zelené a červené LEDky, jejichž aktuální stav zobrazuje po řádcích. Zbylé funkce tedy již pracují pouze s definovanými poli, jejichž změnou vytvářejí výsledný obraz. Volání funkce je řešeno přes časovač každou 0,002 s.

Inicializace

Tato funkce proběhne pouze jednou na začátku programu nebo pokaždé při restartu zařízení. Má za úkol přenastavit pracovní pole tak, aby při každém startu (restartu) začínala hra za stejných počátečních podmínek (ze stejného počátečního obrazu). Nastaví tedy počáteční polohu oranžových svodidel a zeleného autíčka hráče.

SvodidlaPohyb

Úkolem této funkce je zajištění konstantního pohybu oranžových svodidel na okrajích matice. Pohyb je dán rychlostí 1 pixel / 1 sekundu (podle nastavení časovače, který tuto funkci volá).

AutaPohyb

Tato funkce generuje auta počítače nalevo nebo napravo, v závislosti na hodnotě binární pseudonáhodné sekvence. Kromě rozsvicování LEDek v místech, kde se nachází auta počítače, však funkce musí dále zhasínat ty LEDky, kudy auto počítače prošlo. To řeší pomocí pomocných proměnných, které si pamatují předcházející polohy aut počítače, v závislosti na tom, zda byli vpravo či vlevo. Funkce je opět volána pomocí časovače každou 0,25 s.

Pohyb

Tato funkce je volána v nekonečné smyčce a má na starost snímání Y-ové osy akcelerometru. Při překročení určitého prahu náklonu pak tato funkce rovnou zajistí změnu polohy autíčka počítače, ve kterém autíčko setrvá, dokud nedojde opět k překročení prahu náklonu (vlevo či vpravo).

Kolize

Tato funkce hlídá, jestli nejsou hodnoty červeného a zeleného pole v určitých definovaných místech shodné. Pokud ano, tak se jedná o kolizi autíček. Následné pak funkce zmrazí všechny pohyby, zobrazí místo autíčka hráče „vrak autíčka“ a zavolá funkci Reset.

Reset

Z názvu funkce vyplývá, že tato funkce má na starost restart a reinicializaci počátečních podmínek a hodnot. Nejprve však celou RG LED matici vybarví na 2s do červena a následně provede reinicializaci a zruší zmražení všech pohybů.

2016/brick-game.1484321001.txt.gz · Poslední úprava: 2017/01/13 16:23 autor: Viktor Typovský