5.3 KiB
======================================= 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:
- Umiestnite všetky súbory ('Makefile', 'main.c', 'game.c', 'game.h', 'world.c', 'world.h') do jedného adresára.
- V termináli prejdite do tohto adresára.
- 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.