107 lines
5.3 KiB
Markdown
107 lines
5.3 KiB
Markdown
=======================================
|
||
Dokumentácia hry: Ultimate Asteroids
|
||
=======================================
|
||
|
||
|
||
Predstavenie Hry
|
||
------------------
|
||
|
||
Ultimate Asteroids je dynamická 2D vesmírna strieľačka, ktorá berie to najlepšie z klasických arkádových hier ako Space Invaders. Ako pilot osamelej vesmírnej lode je vašou úlohou prežiť nápor neustále prichádzajúcich vĺn nepriateľov a nakoniec sa postaviť tvárou v tvár mocnej Materskej lodi vo finálnom súboji.
|
||
|
||
Hra ponúka svieži pohľad na známy žáner a obsahuje:
|
||
|
||
* Menu s voľbou obtiažnosti, ktorá priamo ovplyvňuje rýchlosť a agresivitu nepriateľov.
|
||
* Štyri unikátne typy nepriateľov s odlišným správaním a odolnosťou.
|
||
* Dynamický combo systém, ktorý vás odmení za rýchle a presné zničenie protivníkov.
|
||
* Taktické bariéry, ktoré dočasne blokujú strely a menia dynamiku boja.
|
||
* Epický súboj s finálnym bossom, ktorý preverí všetky vaše schopnosti svojimi unikátnymi útočnými vzormi.
|
||
|
||
|
||
Preklad a Spustenie
|
||
---------------------
|
||
|
||
Hra je napísaná v jazyku C a pre zobrazenie a interakciu využíva knižnicu 'ncurses' (prostredníctvom dodanej knižnice 'world').
|
||
|
||
Požiadavky:
|
||
* Prekladač 'gcc'
|
||
* Nástroj 'make'
|
||
* Knižnica 'ncurses' (na serveri sigma je štandardne dostupná)
|
||
|
||
Postup prekladu:
|
||
1. Umiestnite všetky súbory ('Makefile', 'main.c', 'game.c', 'game.h', 'world.c', 'world.h') do jedného adresára.
|
||
2. V termináli prejdite do tohto adresára.
|
||
3. Spustite príkaz 'make'. Tento príkaz automaticky skompiluje všetky súbory a vytvorí finálny spustiteľný súbor s názvom 'asteroids'.
|
||
|
||
|
||
Spustenie hry:
|
||
Hru spustíte z terminálu nasledujúcim príkazom:
|
||
|
||
./asteroids
|
||
|
||
|
||
Návod na Hranie
|
||
-----------------
|
||
|
||
Cieľ hry:
|
||
Vaším hlavným cieľom je prežiť čo najdlhšie, nahrať čo najvyššie skóre a po uplynutí približne jednej minúty poraziť finálneho bossa – Materskú loď.
|
||
|
||
Ovládanie:
|
||
* Šípka vľavo: Pohyb lode doľava.
|
||
* Šípka vpravo: Pohyb lode doprava.
|
||
* Medzerník: Vystrelenie projektilu.
|
||
* q: Okamžité ukončenie hry.
|
||
|
||
Herné mechaniky:
|
||
|
||
Životy: Začínate s 5 životmi. Život stratíte, ak sa vaša loď zrazí s nepriateľom, alebo ak nepriateľ preletí cez spodný okraj obrazovky a unikne vám.
|
||
|
||
Nepriatelia: V hre narazíte na 4 typy nepriateľov:
|
||
* 'v' Asteroid: Základný nepriateľ. Letí priamo dole a nepredstavuje veľkú hrozbu osamote.
|
||
* 'S' Stíhač: Nevyspytateľný protivník, ktorý sa pohybuje v sínusových vlnách, čo ho robí ťažkým cieľom.
|
||
* 'O' Tank: Odolný nepriateľ, ktorý vydrží až dva zásahy, kým ho zničíte.
|
||
* '*' Mína: Pasívna hrozba, ktorá po určitom čase sama zmizne.
|
||
|
||
Bariéry <===>: V náhodných intervaloch sa na obrazovke objavujú dočasné bariéry. Slúžia ako štít, ktorý blokuje vaše strely, ale pozor – nepriatelia cez ne môžu bez problémov prejsť!
|
||
|
||
Combo systém: Za každého nepriateľa zničeného v rýchlom slede sa vám zvyšuje násobič skóre (Combo: x2, x3, ...). Ako špeciálny bonus, po dosiahnutí COMBA x10, vaša loď získa dočasný ŠTÍT, ktorý ju ochráni pred jedným zásahom alebo koliziou.
|
||
|
||
Boss fight: Po uplynutí stanoveného času sa na obrazovke zobrazí varovanie a začne súboj s Materskou loďou. Boss sa pohybuje zo strany na stranu a strieda dva útočné vzory: streľbu a vypúšťanie nepriateľov.
|
||
|
||
Koniec hry:
|
||
* Prehra: Hra končí, keď počet vašich životov klesne na nulu.
|
||
* Výhra: Hra končí vaším triumfom po úspešnom zničení Materskej lode.
|
||
|
||
|
||
Popis Implementácie
|
||
----------------------
|
||
|
||
|
||
Najdôležitejšie štruktúry ('game.h'):
|
||
* 'StavHry': Centrálna štruktúra, ktorá drží kompletný stav celej hry – obsahuje polia pre všetky dynamické objekty, informácie o hráčovi a bossovi, a tiež premenné riadiace stav hry ('stav_programu'), skóre, životy a rôzne časovače.
|
||
* 'Nepriatel': Reprezentuje jedného nepriateľa. Okrem pozície obsahuje aj 'typ', 'hp' (životy) a 'farbu'.
|
||
* 'Boss': Unikátna štruktúra pre finálneho bossa, ktorá si pamätá jeho životy, aktuálny útočný vzor ('aktualny_vzor') a časovače.
|
||
|
||
Kľúčové funkcie:
|
||
* 'main()' ('main.c'): Vstupný bod programu. Jeho jediná úloha je odovzdať riadenie knižnici 'world' a poskytnúť jej tri kľúčové "callback" funkcie.
|
||
* 'world_event()' ('main.c'): Centrálny dispečer udalostí, ktorý reaguje na stlačenie klávesy alebo uplynutie času a volá ďalšie funkcie.
|
||
* 'aktualizuj_stav()' ('game.c'): "Srdce" hernej slučky. Volá sa v pravidelných intervaloch a zabezpečuje všetku hernú logiku.
|
||
* 'vykresli_stav()' ('game.c'): Zodpovedá za kompletné vykreslenie všetkého na obrazovku.
|
||
|
||
|
||
|
||
|
||
Modifikácia knižnice 'world'
|
||
------------------------------
|
||
|
||
Pôvodná knižnica 'world' mala definície funkcií umiestnené priamo v hlavičkovom súbore 'world.h', čo spôsobovalo chyby pri kompilácii ("redefinition of function").
|
||
|
||
Riešenie:
|
||
Knižnica bola vylepšená tak, aby hlavičkový súbor 'world.h' obsahoval iba DEKLARÁCIE funkcií a zdrojový súbor 'world.c' obsahoval ich IMPLEMENTÁCIU .Týmto sa zabezpečila bezchybná kompilácia.
|
||
|
||
|
||
Použité Zdroje
|
||
-----------------
|
||
|
||
* Základná knižnica 'world': https://github.com/hladek/world (poskytnutá v rámci zadania)
|
||
* Inšpirácia: žáner "shoot 'em up" ako Space Invaders a Galaga.
|