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