pvjc25/du8/README.md
2025-06-12 13:00:33 +02:00

107 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=======================================
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.