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

5.3 KiB
Raw Blame History

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