2D grafov ste už za svoj život určite videli stovky, no čo 3D? Respektíve, skúšali ste už napr. pythonovský matplotlib na vykreslenie funkcie s dvoma vstupmi? V tomto projekte si vyskúšate tvorbu takéhoto jednoduchého vizualizátoru.
Bodovanie:
f(x, y) = z
Pre uznanie ako RP je potrebné splniť všetky podúlohy aj s bonusom (teda získať 15 bodov)!
Poznámka: pozrite si súbory z prednášky o JavaFX 3D, verím, že vám tam viacero vecí pomôže! Zdroj ilustračného obrázku: http://davud.rostam-afschar.de/graph3d/graph3d.htm
Escape Room ste si možno skúsili aj na vlastnej koži, teraz si predstavte, že by na vás ešte číhali nejakí nepriatelia. V tomto projekte si skúsite naprogramovať jednoduchú Stealth hru (ilustračný obrázok je z hry Death Point).
Poznámka: pozrite si súbory z prednášky o JavaFX 3D, verím, že vám tam viacero vecí pomôže! Použite priložené textúry, alebo aj iné (https://opengameart.org/ taktiež odporúčam texture packy z Minecraftu)
Vašou úlohou je vytvoriť program, ktorý dovolí používateľovi vygenerovať krajinu s kopcami, údoliami a vegetáciou. Výsledok bude ovplyvniteľný úpravou parametrov cez grafické používateľské rozhranie. Výsledná krajina sa bude dať uložiť v internom formáte. Takto uložená krajina sa neskôr bude dať otvoriť a upravovať. Program bude podporovať export aj do niektorého známeho formátu, napríklad OBJ.
Vašou úlohou v tomto projekte je vytvoriť program, ktorý simuluje a vizualizuje užívateľom zvolený počet krokov vývoja dynamického systému definovaného aspoň dvomi diferenciálnymi rovnicami.
[3] reprezentácia rovníc a ich vyhodnotenie (interpreter)[2] parsovanie textového zápisu do reprezentácie v bode vyššie[3] simulácia vývoja dynamického systému - Eulerova metóda[2] simulácia vývoja dynamického systému - RK4 metóda[3] vizualizácia výsledkov simulácie[2] grafické používateľské rozhranie pre zadávanie rovníc a vstupných parametrov
Vašou úlohou je naprogramovať grafický editor ktorý podporuje vrstvy a dynamické štetce. Pre lepšie pochopenie o čo ide si pozrite tento online kresliaci nástroj: https://mrdoob.com/projects/harmony/
L-systémy sú formálna gramatika využiteľná pri modelovaní vývinu rastlín. Vašou úlohou v tomto projekte je vytvoriť program, v ktorom používateľ môže navrhovať svoje vlastné pravidlá a vizualizovať ich efekt.
[5] vhodná reprezentácia a vyhodnotenie prepisovacích pravidiel (jeden krok)[2] parsovanie textového zápisu L-systémov[4] vizualizácia rastu po krokoch[3] grafické používateľské rozhranie pre zadávanie pravidiel a ovládanie[1] krok späť
V tejto úlohe budete programovať dav ako agentový systém v ktorom sa šíri nejaká emócia ovplyvňujúca správanie agentov. Agentový systém sa od particle systému líši tak, že jednotlivé entity (agenty) sú komplexnejšie a sú v zložitejšej vzájomnej interakcii. Vašou úlohou bude naprogramovať takýto systém a simulovať a kresliť ho v reálnom čase. Jedného agenta bude ovládať používateľ.
Vytvorte hraciu plochu v tvare štvorčekového papiera konkrétnych zvoliteľných rozmerov, na ktorom môžete vyznačiť farebný geometrický útvar, napr. trojuholník, štvoruholník, ... Na tejto hracej ploche môže dieťa riešiť nasledujúce úlohy:rôznymi farbami nakresli všetky možné troj-/štvor-uholníky do hracej plochy. Symetrické (podľa akéjkoľvek zhodnej symetrie) sa počítajú len raz, preto treba okrem rozmerov štorčekového papiera kontrolovať aj symetrie útvarov.
téma pochádza z dielne prof.Hejného, obrázky z učebnice Matematika pro 4.ročník ZŠ - pracovní sešit, www.fraus.cz
Hru hrajú dvaja hráči, alebo hráč proti počítaču, striedavo ťahajú. V šesťuholníkovej sieti hráč otáča svoje kamene vždy o 60 stupňov v smere hodinových ručičiek, nie naopak. Na políčko, na ktoré namieri, to skorumpuje, a v tom istom ťahu sú tranzitívne skorumpované aj ďašie políčka, treba zahrať, hneď pochopíte. Vyhráva hráč, ktorý prvý skorumpuje 70% hracej plochy.
Zdroj/online: https://kbhgames.com/game/corruption-2
Hodnotenie:
Bubble sort puzzle je hra, ktorú určite väčšina z vás pozná. Cieľom hry je preusporiadať guľôčky do takej konfigurácie, aby v jednej skúmavke boli len guľôčky rovnakej farby, pričom platia nasledujúce pravidlá: skúmavka má obmedzenú veľkosť, na guľôčku konkrétnej farby vieme položiť len guľôčku rovnakej farby, do prázdnej skúmavky vieme dať ľubovoľnú guľôčku.
Dobble je hra zameraná na postrehy hráčov. Obsahuje 55 kartičiek a dokonca až 57 symbolov. Na každej kartičke je 8 symbolov a každé 2 kartičky majú PRÁVE jeden symbol rovnaký. Existuje viacero verzií tejto hry, my budeme hľadať spoločný symbol medzi dvoma kartičkami. Keďže za generovaním kartičiek sa skrýva zložitejšia matematika, budeme si generovať vlastné kartičky jednoduchším spôsobom.
Goblíci jedlíci je hra podobná piškvorkám. Avšak goblíci (príšerky) sa môžu aj navzájom zjesť. Každý hráč má 6 goblíkov: 2 malých, 2 stredných a 2 veľkých. Platí jediné pravidlo: väčší goblík môže zjesť menšieho (veľký stredného, veľký malého, stredný malého). Hrá sa na klasickej mriežke 3x3 dovtedy, kým niekto nevyhrá. Ťahy: Hráč buď položí nepoužitú figúrku niekde na plochu alebo premiestni figúrku na ploche.
Kartové hry sú sice z funkčného hľadiska 2D, no v poslednom období je moderné robiť ich v 3D grafike. Vieme ich vďaka tomu obohatiť použitím pôsobivo vyzerajúcich 3D modelov, efektov a 3D-feel pôsobi na hráča viac realisticky, akoby karty naozaj držal v ruke. Skúste si v tomto projekte vytvoriť hru na spôsob GWENTu v JavaFX 3D.
Poznámka: asi vám dobre poslúži zoznam videí JavaFX3D - YouTube.
Fanorona je národná hra Madagaskaru, ktorá sa hrá na hracej doske 5x9, ktorá okrem pravoúhlej siete obsahuje aj šikmé cesty. Hráči s kamenmi dvoch farieb striedavo posúvajú kamene o ploche, pričom cieľom je získať všetky súperové kamene. Toto je iniciálna pozícia:
Pravidlá hry:
SkipList je alternatívna dátová štruktúra k vyváženým stromom. Zrejme ste ju zatiaľ nepreberali na ADŠ. Cieľom projektu je:
- naštudovať si a pochopiť dátovú štruktúru, najlepšie tým, že naprogramujete vlastnú nevizuálnu verziu,
- následne potom sa zamyslíte, ako vizualizovať operácie nad touto dátovou štruktúrou.
Tu je ilustračné video: https://www.youtube.com/watch?v=aRaTSGzJfqY
Aplikácií, ktoré robia podobné demonštrácie nájdete na nete viacero.
Nutnou podmienkou je, že výsledné demo musí byť interaktívne, s možnosťou voľby postupnosti vykonávaných operácií a aj možnosť voľby hodnôt.
SlayTree je alternatívna dátová štruktúra k vyváženým stromom. Zrejme ste ju zatiaľ nepreberali na ADŠ. Cieľom projektu je:
- naštudovať si a pochopiť dátovú štruktúru, najlepšie tým, že naprogramujete nevizuálnu verziu,
Ilustračné video: https://www.youtube.com/watch?v=nKZWL9hbcI4
Aplikácií, ktoré robia podobné deomnštrácie nájdete na nete viacero.
Nutnou podmienkou je, že výsledné demo musí byť interaktívne, s možnosťou voľby postupnosti operácií a hodnôt.
---
Splay strom je binárny vyhľadavací strom. Pre každý jeho vrchol platí, že hodnoty v ľavom podstrome sú menšie ako v danom vrchole a v pravom sú všetky hodnoty väčšie ako hodnota vrchola.Splay strom má navyše vlastnosť, že prvky, ktoré boli použité, "vybublú" až na koreň stromu. Existujú tri typy rotácií:
Naprogramujte starú klasiku, ktorá bola vo svojom období považovaná za najlepšiu arkádovú hru na svete: https://en.wikipedia.org/wiki/Frogger
Úlohou je dostať sa žabou (ktorú ovládate) začínajúcou na spodnom okraji obrazovky až na vrch obrazovky a tým zachrániť svoje malé žabiatka. Hra má jednoduché pravidlá, ktorých parametre sa menia v závislosti od obtiažnosti. Každý level má časový limit. Ceste žaby smerom hore prekážajú rôzni nepriatelia a prekážky, ktoré sú buď statické (diera v ceste, voda, stena...) alebo dynamické, pričom sa hýbu zľava doprava alebo naopak, vždy ale v rovnakej výške (autá, zvieratá, ...). Dynamické môžu byť aj pomocné veci, ktoré sú potrebné využiť na prejdenie levelu (napr. loďka, na ktorú treba nastúpiť, aby sa žaba neutopila). Po zachránení žabky sa pozícia hráča resetuje naspäť na začiatočné políčko. Pohyb celkovo funguje na štvorcovom princípe, t.j. hýbe sa len po určitých x-ových a y-ových súradniciach, podobne ako figúrky na šachovnici.
Hru si pozrite, najlepšie aj zahrajte, a implementujte aspoň 2 rôzne typy levelov. Prvý bude klasika, teda basic - 60 sekúnd, 5 žabiek na záchranu, dynamické aj statické prvky. Druhý, custom level, bude mať nastaviteľné prvky pred začiatkom hry - a to počet žabiek, ktoré treba zachrániť (3/5/7), časový limit (45/60/75) a počiatočná obtiažnosť (easy/medium/hard). Počiatočná obtiažnosť ovplyvňuje počet statických prekážok a počet a rýchlosť dynamických prekážok a pomôcok. Okrem toho, po zobratí každej žabky sa obtiažnosť zvýši (rýchlosťou prekážok). Očakáva sa príjemná grafika, jasne rozoznateľné veci, obrázky.
V prípade, že sa rozhodnete pre túto tému a nie je vám niečo jasné, odporúčam pozrieť link vyššie, prípadne nejaký gameplay alebo mi môžte napísať.
[2 body] - Hlavné menu s možnosťami Spustiť hru/Vybrať level/Ukončiť hru
[1 bod] - Menu pre nastavenie parametrov custom levelu
[4 body] - Správny beh hry, vykresľovanie máp, vykresľovanie, ovládanie a správanie hráča, žabiek, pomôcok a prekážok
[2 body] - Prvý, basic level
[4 body] - Druhý, custom level, a jeho ovplyvňovanie vstupnými parametrami a počtom zachránených žabiek
[1 bod] - Správne vyhodnotenie konca hry (úspechu, neúspechu)
[1 bod] - Bonusová funkcionalita, viď nižšie
Ako bonusová funkcionalita sa myslí dodatok, ktorý obohacuje hru v nejakom zmysle. Fantázii sa medze nekladú, vymyslieť môžte hocičo hodné bodu. Príklady takýchto funkcionalít:- zvuky pohybu, výhry, prehry, prekážok...- udržiavanie highscore pre oba levely - bodovanie inšpirujte podľa originálu, viď wiki- endless mód - hra má špeciálny level, ktorý pokračuje, dokým hráč neprehrá - vždy sa zvyšuje obtiažnosť, pointou nie je zachrániť žabky, ale len sa dostať na vrch mapy- iné funkcionality hodné bodov
Z bonusových funkcionalít sa ráta len jedna do bodu, ktorý garantuje, ale v prípade, že stratíte či nezískate nejaký bod v inej z úloh, môžte získať ešte jeden bod za ďalšiu funkcionalitu navyše (maximálne ale stále 15).
Vypracované úlohy a bonusové funkcionality popíšte do súboru readme.txt
Hru môže predstavovať aj len jeden level - od jeho designu záleží, či hráčovi potrvá minútu alebo hodinu hru dohrať. Čo ak tento level ale mení svoju štruktúru? To si vyskúšate v tomto projekte, inšpirovaný starou flash hrou Give up. Flash už nie je podporovaný, ale video z hry si môžete pozrieť napr. tu: https://www.youtube.com/watch?v=ltHhvpRFPus&ab_channel=AGamer
Hra teda bude obsahovať hráča, ktorá sa bude snažiť jednoducho dostať z bodu A do bodu B. Level bude vždy rovnaký, ale jeho design sa bude po každom úspešnom prejdení meniť - ideálne iba pridanám nejakej novej prekážky. Okrem povinných prekážok sa inšpirujte aj originálom a naprogramujte aj nejaké zaujímavejšie. Počet levelov (resp. zmien designu levelu) je minimálne 5, ale už aj to je dosť na to, aby ste sa poriadne zamysleli nad designom - keďže stále niečo pridávať do rovnakého levelu nemusí byť také jednoduché, ako to vyzerá.
Očakáva sa príjemná grafika a hrateľnosť. Obrázky nie sú nutné, ale vítané. Povinnými prekážkami sú platformy, diery, statické lasere, spiky. Design levelu je na vás - bodovaný bude v závislosti pomeru obtiažnosti a poradia designu - teda čím ďalej hráč hrá, tým ťažší by level mal byť.
[1 bod] - Hlavné menu s možnosťami Spusti hru//Ukonči hru
[3 body] - Správny beh a vyhodnotenie hry, vykresľovanie mapy, vykresľovanie, ovládanie a správanie hráča a prekážok, jasné vyznačenie začiatku a cieľa
[5 bodov] - Aspoň 5 designov levelu (každý za bod, maximálne ale 5 bodov)
[2 body] - Rozumná gradácia obtiažnosti
[1 bod] - Povinné prekážky
[2 body] - Aspoň dve doplnkové prekážky (každá za bod, maximálne ale 2 body)
Ako bonusová funkcionalita sa myslí dodatok, ktorý obohacuje hru v nejakom zmysle. Fantázii sa medze nekladú, vymyslieť môžte hocičo hodné bodu. Príklady takýchto funkcionalít:- zvuky pohybu, výhry, prehry, prekážok...- udržiavanie highscore pre všetky designy levelu - bodovanie bude založené čisto na rýchlosti prejdenia levelu.- ďalšie nové prekážky- sandbox, teda možnosť vytvorenie vlastného levelu- iné funkcionality hodné bodov
V tomto projekte skúsite naprogramovať kombináciu dvoch hier - tetris, a candy crush. Takáto hra už isto niekde existuje, ale pochopiť ju je ľahké aj bez hrania.
Candy crush funguje na báze spájania rovnakých symbolov na nejakej hracej ploche. Tetris má zase za úlohu spájať ľubovoľné tvary, ktoré postupne padajú do hracej plochy. Kombinácia je teda jasná - na hracej ploche (ktorá nemusí byť len nejaký štvorec) budú na začiatku rôzne symboly rozmiestnené tak, aby sa nikde nenechádzali hneď spojené tvary. Hracia plocha nebude celá zaplnená, ale len napr. do polovice. Každú časovú jednotku do hracej plochy spadnú nové symboly, resp. nový riadok symbolov. Keď sa hracia plocha zaplní, resp. výška presiahne nejakú dovolenú hranicu, hra končí, podobne ako v tetrise. Inak je hrá endless, to znamená že teoreticky nikdy nekončí. Konkrétne pravidlá a detaily implementácie môžte doladiť a popísať v readme.txt súbore.
Pre ujasnenie definície, spojený tvar z rovnakého symbolu je taký, ktorý spája rovnaké tvary dotykom aspoň jeden celej steny, pričom počet symbolov je minimálne 3. Takže rovná čiara, l-kový tvar, t-čkový tvar, štvorec, alebo všetko, čo má aspoň 3 spojené symboly je spojený tvar. Tento tvar sa odstraňuje z hracej plochy a zvyšné symboly na hracej ploche sa posunú tak, aby zaplnili voľné miesto.
Očakáva sa príjemná grafika a hratelnosť myšou, aspoň 3 rôzne hracie plochy a aspoň 5 rôznych symbolov. Obtiažnosť by mala postupne gradovať. Každý level teda môže mať iný počet rôznych druhov symbolov, časový interval padania nových symbolov, inú štruktúru hracej plochy a iné detaily.
[2 body] - Vykreslenie obrazovky, hracej plochy a počiatočnej konfigurácie symbolov
[3 body] - Aspoň 3 rôzne levely líšiace sa v hracej ploche, počet druhov symbolov a časovom intervale pribúdanie nových symbolov
[2 body] - Aspoň 5 rôznych symbolov
[4 body] - Správna funkcionalita hry - mazanie tvarov, padanie symbolov na voľné miesta, spájanie symbolov
Ako bonusová funkcionalita sa myslí dodatok, ktorý obohacuje hru v nejakom zmysle. Fantázii sa medze nekladú, vymyslieť môžte hocičo hodné bodu. Príklady takýchto funkcionalít:- zvuky padania, mazania, spájanie symbolov, príp. hudba- udržiavanie highscore pre každý level - highscore uloží prežitý čas na leveli - ten je zmeraný od začiatku pokiaľ hráč neprehral, alebo nevypol hru- do hracej plochy nepadajú len symboly v riadkoch, ale aj rôznach útvaroch, podobne ako v tetrise - tu ale pozor, aby v útvaroch neboli rovnaké symboly už spojené na tvary, ktoré sa mažú- iné funkcionality hodné bodov
Naprogramujte hru, ktorá bude skúšať rôznymi spôsobmi používateľove reflexy. Pôjde predovšetkým o rýchlosť reakcie, ale dovolené sú aj iné typy meraní.
Ovládanie bude prevažne myšou. Na výber bude z viacero testov, tri povinné ale budú testovanie statickej rýchlosti, dynamickej rýchlosti a časovej presnosti. Pri statickom testovaní rýchlosti sa bude používateľovi v určitých časových intervaloch zobrazovať test, ktorý ho vyzve k tomu, aby klikol na obrazovku. Hra zmeria čas od zobrazenia textu až po používateľove kliknutie myšou. Toto sa opakuje viac-krát, pričom sa výsledok zpriemeruje a na konci zobrazí. Dynamické testovanie bude rovnaké, ale tentokrá sa nezobrazí text, ale nejaký útvar, ktorý musí používateľ kliknúť. Tu môžte paralelne zobrazovať viac útvarov naraz, čiže spraviť niečo ako aim test, dôležité je, aby sa útvary nezobrazili na rovnaké miesto či nemali pozičný prekryv. Vo výsledku zobrazte nielen priemernú rýchlosť, ale aj presnosť, keďže používateľ nemusí presne trafiť tvar. Veľkosť tvarov zvoľte rozumne, nie prílíš ľahko, ale ani náročne.
Časová presnosť bude merať vnútorné hodinky, ktoré máme každý v tele. Na začiatku zobrazte čas, ktorá sa bude postupne odpočítavať, napr. 15 sekúnd. Po určitej dobe, napr. polovicu času, hodnotu skryte a vyzvite používateľa, aby stlačil myš práve v momente, keď si bude myslieť, že čas dosiahol presne 0. Opäť opakujte experiment viac-krát, zmerajte celkový priemer odchýlky, ale aj individuálne odchýlky oboma smermi, teda keď bola myš stlačená priskoro alebo neskoro.
Grafika nie je podstatná, ale musí byť dostatočná na ľahké rozoznanie všetkého podstatného. Ovládanie by malo byť intuitívne. Implementujte taktiež možnosť exportu výsledkov do súboru.
V prípade, že sa rozhodnete pre túto tému a nie je vám niečo jasné, odporúčam pozrieť nejaký gameplay podobných hier alebo mi môžte napísať.
[2 body] - Hlavné menu s možnosťami Vybrať test/Ukončiť aplikáciu
[1 body] - Opis každého testu, teda nápoveda pred začiatkom testu
[5 bodov] - Správne vykresľovanie a funkčnosť 3 povinných testov spolu so štatistikami, zobrazenie výsledkov, možnosť začatia odznova
[1 body] - Ukladanie momentálnych výsledkov do súboru
[2 body] - 2 bonusové testy navyše s aspoň jednou štatistikou (každý za bod, maximálne ale 2 body)
[2 body] - 2 bonusové štatistiky navyše (každá za bod, maximálne ale 2 body, štatistika môže byť pri ľubovoľnom teste)
[1 bod] - Randomizácia parametrov (pozície útvarov, čas pre zobrazenie textu, počet sekúnd pre časovú presnosť, ...)
Ako bonusová funkcionalita sa myslí dodatok, ktorý obohacuje hru v nejakom zmysle. Fantázii sa medze nekladú, vymyslieť môžte hocičo hodné bodu. Príklady takýchto funkcionalít:- zvuky klikania, začiatku testu, konca testu, ...- udržiavanie highscore pre každý test - highscore uloží nejaké bodové skóre vypočítané na základe štatistík, spôsob bodovania je na vás- grafy, ktoré zobrazia výsledky daného testu- iné funkcionality hodné bodov
P.S.: Je jasné, že Java projekt nie je ideálna šablóna na presné meranie raekcií, ale aj to je vlastne súčasťou projektu - vidieť, ako rýchlo trvá vykresľovanie a vykonávanie eventov v JavaFx, ako to ovplyvňuje merania. Pozorujte rozdiely, príp. skúste nejako upraviť výsledné hodnoty tak, aby ste odstránili čo najviac nezavineného šumu.
Naprogramujte hru, ktorá bude založená na slávnej mobilovke Jetpack Joyride: https://en.wikipedia.org/wiki/Jetpack_Joyride. Vzhľadom na to, že originál hra má veľa features, v tomto projekte sa zameriame len na hlavnú podmnožinu potrebnú na hranie, pričom dôležitým prvkom v našom projekte bude NÁHODA.
Na začiatku začína hráč na ľavej časti obrazovky. Postupne sa bude automaticky hýbať smerom doprava - pohyb je automatizovaný a hráč mu nemôže zabrániť, ale dokáže sa stále hýbať do strán relatívne vzhľadom na obrazovku. Postupne hráčovi zprava prichádzajú prekážky (napr. bloky, ktoré pri dotyku zničia hráča), pričom prekážka sa generuje každých x sekúnd, pričom x je NÁHODNÉ číslo z nejakého rozumného intervalu. Môže sa teoreticky teda stať, že bude na obrazovke aj viac prekážok. Postupne sa prekážky pohybujú k hráčovi, ktorý sa im musí vyhnúť. Konkrétna implementácia je na vás, v závislosti od pohľadu sa môžu prekážky hýbať doľava, alebo hráč doprava, obe alternatívy by mali mať rovnaký efekt. Prekážka ma NÁHODNÚ dĺžku a NÁHODNÉ otočenie.
Pohyb hráča (okrem toho, že ide automaticky doprava) je daný šípkami (relatívne vzhľadom na obrazovku), ale taktiež sa naň aplikuje gravitácia - a teda ho ťahá k zemi. Vždy pred začiatkom hry sa nastaví NÁHODNÁ sila gravitácie, ktorá je niekde používateľovi zobrazená, a určuje, ako silno hráča ťahá k zemi. Počas hry sa taktiež v NÁHODNÝCH intervaloch zjavujú NÁHODNÉ vylepšenia či utilitky, ako napr. dočasná nesmrteľnosť, dočasné zrušenie gravitácie atď. Hra končí, keď hráč narazí na prekážku. Cieľom je dosiahnuť čo najviac bodov, tie počítajte na základe času (môžte pridať aj iné faktory).
Na grafickej stránke si nemusíte potrpieť, netreba ani obrázky, stačia (jasne) rozoznateľné tvary.
[2 body] - Hlavné menu s možnosťami Začať hru/Ukončiť hru
[4 body] - Správne vykresľovanie, zobrazenie prekážok a vylepšení, ukazovateľ gravitácie a bodov na obrazovke
[3 body] - Generovanie prekážok a vylepšení a ich správna funkčnosť- aspoň 1 prekážka a 2 rôzne vylepšenia
[1 body] - Relatívny pohyb hráča po obrazovke
[3 body] - Pohyb prekážok, vylepšení a celkového prostredia smerom k hráčovi, pohyb hráča po prostredí a gravitácia
[1 bod] - Správne vyhodnotenie konca hry
Ako bonusová funkcionalita sa myslí dodatok, ktorý obohacuje hru v nejakom zmysle. Fantázii sa medze nekladú, vymyslieť môžte hocičo hodné bodu. Príklady takýchto funkcionalít:- zvuky pohybu, konca hry, vylepšení, ...- udržiavanie highscore, ktoré sa dá exportovať do súboru- ďalšie rôzne prekážky či vylepšenia- iné funkcionality hodné bodov
Naprogramujte naslevodnú hru pre jedného hráča. Hracia plocha je mriežka MxN. V každom kroku príde hrácovi vec, ktorú musí uložiť na hraciu plochu. Jednotlivé veci, čo prichádzajú, sú: tráva, krík, strom, drevený domček, tehlový domcek, ... Každá vec má danú hodnotu, tráva najmenšiu, krík vyššiu, atď (čisla si vymyslite). Ak hráč uloží aspoň tri rovnaké veci vedľa seba (susednosť sa počita iba cez hrany, nie rohy), na mieste posledne položenej veci sa tieto susedné veci spoja do veci s vyššou hodnotou (trávy na krík, kríky na strom, atď) a pôvodné veci zmiznú. Za každú vec získava hráč body - je jedno, či vec položil sám, alebo vznikla z existujúcich vecí. Body sa len pripisujú, takže za zmiznute vecí sa body neodčítavajú. Pri spojení viacerých než troch vecí získava hráč bonusové body v závislosti od počtu vecí, ktoré spojil. Väčšinou by mali hráčovi chodiť trávy, len občas mu má prísť niečo hodnotnejšie. Hráč má odkladacie políčko v kapacite jednej veci. Ak nechce položiť vec, čo mu aktuálne prišla, môze si ju odloziť. Hráč si môže prepínať, či chce položiť vec, čo mu prišla alebo vec z odkladacieho políčka. Ako hra postupuje v čase, hráčovi začnú prichádzat okrem štandardných vecí popísaných vyššie aj medvede. Musí ich položiť rovnako ako ostatné veci. Každý medveď na hracej ploche sa ale v každom kroku (jeden krok je jedna položená vec) pohne na niektoré voľné susedné políčko (susednosť je po hranách, nie rohoch) - ak sa má kam pohnúť. Algoritmus pohybu je na vás. Susedné medvede sa nespájajú, ich úlohou je robiť hráčovi napriek. Naprogramujte hru s tým, že úvodná hracia plocha sa bude generovať náhodne - nemá na nej byť ale veľa vecí.
Naprogramujte nasledovnú hru pre jedného hráca. Hráč sa v 2d bludisku (pohľad zhora) pohybuje šípkami vždy o jedno políčko (iba po hranách, šikmo sa nedá pohnúť). Blúdisko je na štvorcovej mriežke tvorené z políčok: (i) obyčajné - dá sa po ňom prejsť hocijako, (ii) stena - cez ňu sa nedá prejsť žiadným smerom, (iii) smerová stena - dá sa cez ňu prejsť iba predom určeným smerom, (iv) checkpoint - políčko ktoré treba navštíviť. Každý checkpoint má svoje poradie, ktoré určuje, v ktorom poradí ho musí hráč navštíviť. Ak ho navštívi v zlom poradí, nezaznamená sa, že je checkpoint splnený. Keď hráč prejde všetky checkpointy v správnom poradí, posúva sa do ďalšej úrovne. Komplikácia je v tom, že každé políčko sa dá navštíviť iba raz. To, že už bolo políčko navštívené, musí byť nejako graficky vyznačené. Úrovne sa načítaju zo zúborov. Vytvorte aspoň tri úrovne.
Naprogramujte nasledovnú hru pre jedného hráča. Jedná sa o plošinovku (pohľad zboku). Na rôznych súradniciach obrazovky sa nachádzajú rôzne široké plošiny, na ktorých sú položené jednotlivé stupne vesmírnej rakety. Hráč v pozícii kozmonauta musí pozbierať jednotlivé stupne rakety a pospájať ich na zemi (plošina ktorá je na spodnej časti obrazovky). V každom momente môže kozmonaut niesť max. jednú vec. Ak sa dostane k hociktorému stupňu rakety, automaticky ho vezme. Položí ho stlačením medzery - stupeň rakety z aktuálnej pozície kozmonauta padne na plošinu, ktorá je pod ním. Hráč raketu stavia tak, že jednotlivé stupne rakety donesie v správnom poradi na to isté miesto hracej plochy. Kozmonaut má skafander s mini raketovým pohonom, takže dokáže lietať. Šipkou hore zapneme jeho pohon a kozmonaut vzlietne kolmo nahor. Šipkami vľavo a vpravo volíme smer letu. Ak šípku hore nedržíme, kozmonaut je postupne gravitáciou priťahovaný k zemi. Po dokončení rakety hra končí. Hra je skomplikovaná tým, že po hracej ploche lietajú prišerky, ktorým sa musí kozmonaut vyhýbať. Príšerky sa hýbu aj keď sa kozmonaut nehýbe. Po strete s príšerkou stratí hráč jeden život - zopár sekúnd po tom je imúnny. Po strate troch životov končí hra neúspechom.
Naprogramujte nasledovnú hru. Na obrazovke sa zobrazujú sústredné osemhrany. Najvnútornejši osemhran stojí vždy na tom istom mieste a jedna z jeho hrán je označená. Ostatným osemhranom chýbaju niektoré hrany. Ako čas postupuje, všetky osemhrany okrem vnútorného sa postupne scvrkávajú, až splynú s vnutorným osemhranom. Cieľom je šipkami otáčať vnútorným osemhranom tak, aby sme označenou hranou prešli cez medzery vo vonkajších osemhranoch - akokeby hrany osemhranov tvorrili blúdisko a my sme cezeň prechádzali. To, ktoré hrany sú v osemhranoch vynechané a rozostupy medzi osemhranmi náhodne generujte. S postupujúcim časom sa hra sťažuje. Najpv sa hra zrýchli. Neskôr sa celá hracia plocha začne rotovať okolo stredu vnútorného osemhranu.
Naprogramujte hru pre dvoch hráčov sediacich za tým istým počítačom a tou istou klávesnicou. Každý hráč ovláda jeden tank a má svoj domček, z ktoreho vychádza. Tank má určitú energiu, ktorá sa mu dopĺňa, keď sa nachádza vo svojom domčeku. Energiu stráca postupne s časom, keď sa nachádza mimo domčeka alebo keď strieľa. Ak je tank zasiahnutý protihráčom, klesne mu život. Ak život klesne na nulu, tank je zničený, protihráč získava bod a tanky začínajú opäť v domčekoch. Háčik je v tom, že na začiatku je priestor medzi domčekmi vyplnený a tanky si musia preraziť cestu. Ak tank ide po ploche, ktorá ešte nie je vyčistená, vyčistí sa, no tank to spomalí. Vyplnenú plochu je možné vyčistiť aj streľbou.
Cieľom každého hráča je zničiť toho druhého. Hrá konči, ak hráč nazbiera 5 zneškodnení protihráča.
Hrá bude 2D, pohľad zhora. Obrazovka bude rozdelená na dve časti. V jednej časti sa zobrazuje hracia plocha v okolí prvého hráča. V druhej časti sa zobrazuje hracia plocha v okoli druhého hráča. Zobrazujte aj počet zneškodnení a energiu hráčov.
Hraciu plochu rozumne ohraničte, aby hráč nemohol ísť v niektorom smere do nekonečna. Úvodné rozostavenie domčekov generujte náhodne.
V tejto ulohe budete programovat simulaciu dvojiteho kyvadla (https://en.wikipedia.org/wiki/Double_pendulum). Dvojite kyvadlo je zlozene z dvoch kyvadiel tak, ze na volnom konci prveho kyvadla je pripojene druhe. Pohyb, ktory opisuje spicka druheho kyvadla, je chaoticky a zavisi od pociatocnych podmienok. Tento pohyb je popisany pomocou diferencialnych rovnic. Vasou ulohou bude vytvorit animaciu tohto procesu s nastavitelnymi parametrami.
Fourierove rady (FS) sa daju vyuzit na aproximovanie krivky podobne ako cez polynomy. Napriklad Fourierove rady 4-teho stupna najdu 4 sinusoidy ktore najlepsie popisuju danu krivku. Kedze FS vedia pracovat aj s komplexnymi cislami (komplexne cislo a + bi sa da zobrazit ako bod [a,b] v kartezianskej sustave) vieme ich vyuzit na aproximovanie lubovolneho tvaru kresleneho ciarami. Vytvorte program, ktory pre zadany rad Fourierovych radov vykresli aproximaciu tvaru greckeho pismena PI. Podrobne vysvetlenie a inspiraciu najdete vo videu 3Blue1Brown: https://www.youtube.com/watch?v=r6sGWTCMz2k&ab_channel=3Blue1Brown
(ilustracny obrazok pre efekt, v podstate nema nic s ulohou)
Ikonicka hra Icy tower kde sa snazite vyskakat co najvysie vo vezi skor ako vas dobehne obrazovka alebo spadnete mimo nej. Charakter je ovladany sipkami doprava a dolava a skace sa pomocou medzernika. Ak skoci charakter a odrazi sa od steny nasledne ak hned pri dalsom dotyku platformy skoci spravi tzv. Mega skok. Ak sa pohybujeme dlhsie do jednej strany charakter zrychli a potom je jeho skok vyssi. Po kazdych dosiahnutych 50 vyskovych metroch sa pohyb obrazovky zrychli. Gameplay video: https://www.youtube.com/watch?v=dup-U7jSHzs&t=2s&ab_channel=TSMChannel
Planety sa pohybuju okolo Slnka zjednodusene kvoli posobeniu gravitacnej sily zo Slnka (tvarme sa, ze nevieme, ze existuje teoria relativity). Vytvorte simulator, ktory zobrazuje pohyb planet okolo Slnka.
Pocas animacie sa pozerame na sustavu akoby zhora. Simulator predpoklada, ze hviezda Slnko v strede je nehybna. Planeta je definovana svojou hmotnostou a vzdialenostou od Slnka. Uzivatel vie pridat planetu lubovolnej hmostnosti, ktora sa pohybuje po kruznici. Do systemu je mozne pridat aj objekt definovany hmotnostou, poziciou a pociatocnou rychlostou - takto vytvoreny objekt sa moze pohybovat po elipse, parabole alebo hyperbole.
Klasicka strategicka hra risk v ktorej sa viacero generalov snazi svojou armadou ovladnut cely svet. Cielom projektu je vytvorit funkcnu verziu tejto hry podobne ako https://www.warzone.com/SinglePlayer?Level=21 .
Endless runnery sa stali populárne na mobiloch, jedným z prvých bol Temple Run. Hráč neustále beží, vyhýba sa prekážkam a cieľom je zabehnúť čo najdaľej. Skúste si to implementovať v 3D, zaujímavé je generovanie nekonečnej trate.
Poznámka: pozrite si súbory z prednášky o JavaFX 3D, verím, že vám tam viacero vecí pomôže! Môžete použiť textúry z prílohy, alebo aj ľubovoľné iné (https://opengameart.org/ taktiež odporúčam texture packy z Minecraftu).
Aplikácia poskytne používateľské rozhranie na spracovanie jednej, resp. viacerých fotografií uložených v adresári. Užívateľské rozhranie poskytne možnosť nastaviť parametre rôznym metódam, a vizuálnu prezentáciu obrázky pred a po transformácii. Transformácie, ktoré treba v aplikácii pokryť sú nasledujúce:
Vašou úlohou bude vytvoriť simulátor vesmírnej lode vo vesmíre, inšpirovanú klasikami ako Elite. Hráč bude lietať vo vesmíre z pohľadu kokpitu lode, ťažiť asteroidy a bojovať s nepriateľmi.
Poznámka: asi vám dobre poslúži zoznam videí JavaFX3D - YouTube. Inšpirovat sa viete napr. gameplayom hry End Space.
Logickú hru 2048 zrejme poznáte. V nej sú kamene s hodnotami mocnín 2, a tie sa postupne zlučujú, cieľom hry je nahrať maximum bodov.
2048 Cubes je jej malá modifikácia skrížená trochu s Tetrisom. "Kocky" s hodnotami mocnín 2 padajú z vrchu, podľa pozície spúšťača. Vašou úlohou je ich aranžovať tak, aby ste nahrali najviac bodov, a zároveň čo najdlhšie prezili.
V stolovej hre Quoridor hrajú dvaja alebo štyria hráči, ktorých úlohou je prejsť svojou figurkou z jednej strany hracej dosky na druhú skôr ako súperi, pričom do cesty si kladú prekážky. Pravidlá nájdete tu: https://en.wikipedia.org/wiki/Quoridor
Zahrajte si najprv: https://danielborowski.github.io/site/quoridor-ai/display.html
Úlohy:
Hidato/Hidoku je hra, v ktorej máte prejsť štvorčekovú mriežku vypĺňajúc ju postupne číslami 1,2,3,... Krok môžete urobiť na stranou políčka alebo jeho vrcholom (teda diagonálne) na susedné políčko. Niektoré políčka však majú predpísané číslo, s ktorým na ne musíte vkročiť. Príklad zadania je vľavo na obrázku, a riešenie je vpravo.