Václav Halbich
Projekt je řešením hry na grafickém displeji s názvem Proleť meteory. Účelem hry je vyhíbat se, či případně sestřelit přilétající meteority a udržet se ve hře co nejdýl. Loď má tři životy a meteory se neustále zrychlují. Ovládání je řešeno pomocí tří tlačítek maticové klávesnice. Jsou to tlačítka pro pohyb doleva, doprava a pro střelbu. Při každém střetnutí lodě s meteoritem přichází hráč o jeden život, nicméně meteory při pokračování zůstávají ve stejné rychlosti jako při střetnutí a neustále zrychlují.
Realizace proběhla na vývojové desce pro ATmega16 vyrobené na ústavu radioelektroniky na FEKT VUT. Grafický displej je také zapůjčen od tohoto ústavu a byly pro něj použity již hotové knihovny ks0108.h, avrlcd.h, avrlcd_fonts.h a font.h. Displej je rozdělen na dvě části, vpravo na větší části je samotná hra a vlevo na menší části je počet životů. Pro nezávislé mazání obou částí, byla upravena funkce v ks0108.h. Nejprve byly vytvořeny funkce pro loď, meteor a střelu. Meteor se generuje vždy na náhodném místě. Tato náhodnost je zajištěna pomocí generátoru pseudonáhodných čísel z knihovny stdlib.h. U střely bylo potřeba ošetřit, aby nekopírovala neustále polohu lodi, řízená střela by byla pro tuto hru nežádoucí. Proto byl zaveden příznakový byte, flag, který rozhoduje také o tom jestli byl meteor sesřelen, nebo jestli trefil loď a má se dekremento vat život. V případě ztráty všech tří životů je oznámena prohra a hráč se může pomocí stisku střely vrátit opět na start. Drobnou vadou hratelnosti může být fakt, že hra díky neustálému zrychlování nejde nikdy vyhrát, takže účelem hry a případného soupeření je udržet se co nejdéle. Níže jsou uvedeny ukázky kódu pro loď, meteor, střelu, zásah a kontakt lodě s meteorem.
void lod(void)
{
rectangle(xlod-1,57,xlod+1,62,CL_BLACK);
rectangle(xlod-3,60,xlod+3,62,CL_BLACK);
ks0108SetDot(xlod-3, 59, CL_BLACK);
ks0108SetDot(xlod+3, 59, CL_BLACK);
}
void meteor(void)
{
if(ymet>57)
{
xmet = rand()/520; //generovani nahodneho mista objevu meteoru
ymet = 3;
}
else ymet=ymet+1+zrych;
fillrect(xmet-3, ymet-3, xmet+3, ymet+3, CL_BLACK, CL_BLACK);
circle(xmet, ymet, 4, CL_BLACK);
}
void strela(int x) //x je atkualni umisteni lodi
{
if(strilet == 1) //reakce na zmacknuti tlacitka strilet
{
xstr = x;
flag = 2; //prehozeni do pozice, kdy se bude ignorovat poloha lodi
if(ystr==2) //pri dojeti na konec obrazovky reset strely
{
strilet = 0;
ystr = 60;
flag = 1;
}
else ystr--;
rectangle(xstr-1, ystr-2, xstr+1, ystr+2, CL_BLACK);
}
}
void zasah(void)
{
if(abs(xstr-xmet) < 4 & abs(ystr-ymet) < 5 ) //pokud se potka strela a meteor
{
ymet = 100;
ystr = 60;
strilet = 0;
flag = 1; //opet se bude pro strelu zapisovat aktualni poloha lodi
}
}
void kontakt(void)
{
if(abs(xlod-xmet) < 10 & abs(60-ymet) < 5 ) //pokud se potka lod a meteor
{
flag = 3;
ymet = 100;
ystr = 60;
strilet = 0;
}
}
V projektu byla naprogramovaná hratelná hra Proleť meteory na grafickém displeji. Hra nabízí pro dostatečně rychlého jedince v podstatě nekonečnou zábavu, protože jejím účelem je udržet se ve hře co nejdéle.