. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Projekt hry ARKANOID
9. září 2010 - 8:00 | Jan Cigánek | Projekt hry ARKANOID | Komentářů: 3  

Projekt hry ARKANOID

Arkanaoid je jedna z prvních PC her z 90 let, která prošla řadou modifikací, ať už z nostalgie, či pro svoji jednoduchost. My jsme se tuto hru pokusili ve zjednodušené verzi naprogramovat s využitím mikrokontroleru ATmega16 se zobrazením pomocí displeje LED 8x8.

I když je hra Arkanoid celosvětově známá, popíšeme si pro úplnost její princip. Základ tvoří hrací pole různých velikostí, na kterém jsou v horních řádcích umístěny statické body a ve spod je možné horizontálně posouvat odraznou deskou. Jedna z možných variant je ukázána na obr.1. V tomto prostoru se pohybuje balón, který se odráží jak od desky, tak od stěn, případně od zmíněných statických bodů, které však zmizí. Úkolem hry je vymazat všechny statické body dříve než míček dopadne na dno.


Obr. 1: Arkanoid

Celý náš projekt vychází z možností mikrokontroleru ATmega16 [1] a diodového panelu 8x8 bodů. Přitom se využívá vývojové desky Development Board ATmega16 [2]. Diodový panel 8x8 jak je uvedeno na obr.2 využívá tři porty. PORTC pro svícení červenou barvou, PORTA pro svícení zelenou barvou a PORTB[0-2] pro adresování jednotlivých řádků. Led diody svítí vždy při logické 0.


Obr. 2: Diodový panel 8x8

Algoritmus námi vytvořené hry Arkanoid je postaven na smyčce, která skončí pokud pohybující se bod (míček) dopadne na spodní řádek. Na obr.3 je zobrazeno vytvořené hrací prostředí pro uvedený diodový panel, kde je míček zobrazen zeleným bodem. V programu jsou vytvořeny celkem čtyři globální proměnné určeny k indikaci míčku. Dvě proměnné udávají aktuální pozici míčku ve vertikálním a horizontálním směru. Další dvě proměnné určují zda se míček pohybuje doprava nebo doleva a nahoru nebo dolů.


Obr. 3: Arkanoid - začátek hry

Při běhu hry se v uvedené smyčce volají postupně dvě funkce. První s názvem "show" pro vykreslování na displej a druhá pojmenovaná "check" sloužící k vyhodnocování a kontrole polohy míčku. Samotný posun míčku je proveden pomocí přerušení čítače/časovače, kde se inkrementují nebo dekrementují výše uvedené globální proměnné.

FUNKCE "SHOW"
V paměti mikrokontroleru je vytvořené proměnné pole velikosti 8x8. Toto pole znázorňuje hrací pole vykreslované na displeji, viz obr.3, mimo zeleného bodu. Jak obrázek ukazuje důležité jsou první dva řádky a poslední řádek. Přitom pohyb posledního řádku je ovládán pomocí dvou tlačítek a reakce na stisk tlačítka je hlídaná ve funkci "check".

Zjednodušená ukázka vykreslení pole:

void show()
{
  int i;                                          //lokální proměnná pro indexaci
  PORTB = 0;                             //nastavení spodního řádku na diodovém panelu
  PORTC = letadlo;                  //rozsvícení spodního řádku s posuvnou odraznou deskou
  delay_ms(1);                          //zpoždění v ms

  for(i=1;i<8;i++)                   //cyklus pro výpis zbytku pole
  {
   PORTB=i;                            //multiplexace řádků na diodovém panelu
    PORTC = poleint[7-i];       //výpis ostatních řádků na displej
    delay_ms(1);
  }
}

FUNKCE "CHECK"
Funkce "check" je nejobsáhlejší funkcí projektu. Dochází v ní k vyhodnocení úspěchu hry spolu s kontrolou pozice míčku v poli a pohybem odrazné desky. Tato funkce v největší míře využívá bitové operace k vyhodnocení stavu hry. Níže je uvedena jednoduchá ukázka použití bitových operací v projektu, která však vystihuje základní podstatu celé funkce.

Ukázka bitové operace pro odraz a odstranění statického bodu v předposledním nejvýšším řádku displeje:

if(balonV ==6 && vertical == 0)      //pokud je balon v předposledním řádku a zároveň jeho směr jde nahoru
{
  int odraz = ~balon & ~poleint[1];    //proměnná odraz uchová výsledek bitové operace AND příslušného řádku
     a pozice balonu (negace viz.schéma obr.2 - svítí log.0)
  if(odraz > 0)                                      //pokud je výsledek větší než nula je v panelu přítomen
     statický bod
{
poleint[1] = ~poleint[1] & balon;       //vymazání příslušného statického bodu
poleint[1] = ~poleint[1];
vertical = 1;                                        //změna směru pohybu balonu dolů
  }
}

OBSLUHA PŘERUŠENÍ OD ČÍTAČE/ČASOVAČE
Podrobnou práci s čítačem/časovačem a obsluhu přerušení je možné nalézt v [1]. V tomto projektu využijeme jen povolení přerušení čítač/časovač1 a nastavení předděličky, která bude určovat rychlost hry.
Do obsluhy přerušení jsme se snažili umístit co nejmenší část kódu. Dochází v ní k inkrementaci nebo dekrementaci globálních proměnných pro pozici balónu, které se následně vykreslují ve funkci "show".

Použitím displeje 8x8 se objevil problém, viz. obr.4, kde daná geometrie odrazů neumožní vybrat určité cihly a vznikne šachovnice.


Obr. 4: Arkanoid - šachovnicový problém

Tento problém jsme odstranili tím, že při dopadu míčku na kraj lodě se míček posune dvakrát. Při dopadu na střed jen jednou. Tím je zajištěno, že míček může projít všechny body na displeji. Algoritmus jsem opět provedli pomocí bitových operací a zařadili ho do funkce "check".


Obr. 5: Arkanoid - funkční hra

Závěr:
Hra je plně funkční, i když LED displej výrazně omezuje další možnosti hry. Při stisknutí tlačítek na pohyb lodě dochází k poklesu napětí na diodách a displej svítí méně jasně. Protože se jedná o demonstrativní ukázku, nepředpokládá se vylepšování hry, které by spočívalo v dokonalejší kopii původní hry (více levelů, atd.). Dalším vylepšením může být např. úvodní intro do hry a outro při skončení hry pomocí plovoucího textu na displeji (v našem případě řešeno pouze staticky). Program do mikrokontroléru je ve složce AVR

Literatura:
[1] Atmel Corporation. 8-bit Microcontroller ATmega16.[online].2008 - [cit.20.května2009]. Dostupné na WWW: http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf

[2] FRÝZA, T.; FEDRA, Z.; ŠEBESTA, J. Mikroprocesorová technika. Laboratorní cvičení. Skriptum, REL 07-049. Brno: FEKT, VUT v Brně, 2007.

Autoři: Jan Cigánek a Pavel Pelán, UREL, FEEC, VUT Brno







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (3):

Zobrazit starší 30 dnů (3)...



Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
PXC72 - Vývojový modul pro XC9572XL
Malý vývojový modul pro CPLD XC9572XL společnosti Xilinx. Na modulu je umístěn i regulátor, generátor hodin, tlačítko a čtyři LED.
Skladem od 398 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007