Programovanie 4 - Java / Letný semester 2022/2023

Projekt

Proj23-L4 3D Vizualizátor

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:

  • [3 body]: V preddefinovanom rozsahu hodnôt (napr. <-10, 10> na každej osi) vykreslite 3D graf funkcie, ktorá je v tvare f(x, y) = z. Celkom zaujímavý graf má napr. f(x, y) = sin(sqrt(x^2 + y^2)). Funkciu navzorkujte v dostatočnej hustote a jednotlivé hodnoty vykreslite ako malé sféry. Čiže napr. pri intervaloch <-10 , 10> a posunom 0.1 bude 200 * 200 vzoriek.
  • [1 bod]: Vykreslovacia metóda bude v parametri brať ľubovoľnú vhodnú funkciu. Pozrite si, ako sa dá v Jave posielať smerník na funkciu, respektíve vytvorte Interface, ktorý použijete ako typ vstupného parametru.
  • [1 bod]: Graf si budeme môcť ľubovoľne otáčať myšou (pozri BasicModel.java z prednášky o 3D).
  • [3 body]: Farba sfér sa mení podľa výstupnej hodnoty Z, pričom najnižšie hodnoty budú zelenou farbou a najvyššie červenou. Pre ostatné hodnoty použite lineárnu interpoláciu medzi týmito dvoma farbami.
  • [1 bod]: Zafarbovanie hodnôt nebude absolútne, ale relatívne k hodnotám aktuálnej funkcie. Ak je teda najnižšia hodnota v obore hodnôt funkcie -1 a najvyššia 0.5, bude celý interval farieb medzi týmito dvoma hodnotami.
  • [2 body]: Pridajte UI panel a element, v ktorom si hráč bude môcť zmeniť intervaly vykresľovaných hodnôt pre jednotlivé osi. Po zmenení intervalu sa funkcia prekreslí. Používateľ môže v UI meniť aj hustotu vzorkovania, nastavte nejaké rozumné ohraničenie, nech to pri prekreslovaní celé nezamrzne.
  • [1 bod]: Pripravte aspoň 3 zaujímavé funkcie, ktoré si bude musieť dať používateľ vykresliť pomocou tlačidiel v UI paneli.
  • [2 body]: Pridajte metódu na vykreslovanie dát z .xyz súboru. Vytvorte/nájdite nejaké takéto súbory a priložte ich k riešeniu. Je dobré si uvedomiť, že toto už vôbec nemusí byť funkcia ale hocijaký navzorkovaný povrch (tzv. Point Cloud), skúste si vykresliť body z priložených súborov (možno budete musieť preškálovať vstupné súradnice, keďže sú z intervalu <-1, 1>).
  • [1 bod]: Bonus za celkový dojem a originálne nápady. Môžete ho získať napríklad pridaním vizualizácie ôs s načrtnutými hodnotami. Alebo môžete skúsiť vymyslieť, ako vykresliť funkciu ako povrch, vytvorený pomocou TriangleMesh, teda pospájaním jednotlivých vzoriek. Zaujímavé by mohli byť aj iné farebné schémy než len červeno-zelená, pridajte výber do UI, môže ísť aj o troj-kombináciu... Buďte kreatívni! :)

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

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní Andrej Čerňanský Adrián Pauer
Proj23-L2 3D Stealth

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

Bodovanie:

  • [1 bod]: Vytvorte miestnosť pre pohyb hráča, odporúčam ju načítať zo súboru, kde napr. '.' = voľné políčko, '#' - stena.
  • [3 body]: Pridajte hráča, ktorý sa bude hýbať ku kliknutému miestu (click to move) na mape, na hru sa pozeráme zhora pod miernym uhlom (pozri Raycast.java). Nemusíte riešiť obchádzanie prekážok, stačí, aby hráč išiel po rovnej priamke, no zabezpečte, aby zastavil pri kolízií. Hráča môžete reprezentovať ako nejakú zelenú kocku, prípadne poskladajte z primitív (kociek), alebo použite 3D model (viď. bonus za dobrý dojem).
  • [4 body]: Pridajte dvere, cez ktoré sa hráč môže dostať do ďalšej miestnosti. Miestnosti sa budú vyberať náhodne z predpripravenej množiny. Vytvorte teda aspoň 5 typov miestností (stačí jedna dobrá trieda podedená od Group a rôzne miestnosti zakódované v súboroch). Pri prechode dvermi sa vytvorí inštancia náhodnej miestnosti a "prilepí" sa k existujúcej mape. Vymyslite na to dobrý systém, aby miestnosti na seba vždy pekne nadväzovali (dvere na dvere).
  • [1 bod]: Za každú odhalenú miestnosť sa hráčovi pridá skóre, zobrazuje sa v UI paneli.
  • [3 body]: V miestnostiach sú strážnici (červené kocky, alebo vhodné modely), ktorí sa prechádzajú a majú zorné pole (môžete vizualizovať ako červený kruh/kužel). Keď zazrú hráča (dostane sa do kolízie s ich zorným poľom), hra ihneď končí. Hráč znova začína v prvej miestnosti s nulovým skóre.
  • [2 body]: Dvere sa hráčovi otvoria, až keď v aktuálnej miestnosti aktivuje tlačidlo. Odporúčam jeho pozíciu v miestnosti generovať náhodne, nie zapísať do súboru, inak si hráč bude môcť zapamätať, kde ho má hľadať. Tlačidlo je najprv neviditeľné a zobrazí sa až keď sa k nemu hráč dostane dostatočne blízko, často teda musí pochodiť celú miestnosť.
  • [1 bod]: Bonus za celkový dojem a originálne nápady. Môžete ho získať napríklad reprezentáciou hráča/nepriateľov/stien vhodnými 3D modelmi, animáciami, pôsobivým nasvietením miestností, doplnením zbierania nejakých predmetov (peniaze), záveru hry a tak podobne. Buďte kreatívni! :)

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! Použite priložené textúry, alebo aj iné (https://opengameart.org/ taktiež odporúčam texture packy z Minecraftu)

 

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní Michal Baránek Filip Horváth Ondrej Maslen
Proj24-M1 Generátor krajiny v 3D

 

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.

 

  • [2] Trojuholníkový mesh generovaný z výškovej mapy
  • [2] Vytvorenie textúry s farbami naviazanými na výšku - od istých výšok napr. biela kvôli snehu
  • [1] Tvorba výškovej mapy pomocou šumu (môžete použiť existujúcu implementáciu šumu, napríklad nejaký OpenSimplexNoise)
  • [2] Tvorba výškovej mapy pomocou diamond-square algoritmu
  • [2] Pridanie vegetácie, napríklad stromov, ako 3D modelu
  • [1] Uloženie krajiny do súboru
  • [1] Načítanie krajiny zo súboru
  • [2] Používateľské rozhranie (pre nastavovanie parametrov, ukladanie a načítanie súboru, ...)
  • [2] Export do nejakého známeho formátu, napríklad OBJ (alebo niečo iné, čo otvorí blender)
Autor Matej Fandl
Študenti pracujúci na zadaní Michal Kubirita
Proj23-M2 Simulácia a vizualizácia dynamických systémov

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

Autor Matej Fandl
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj23-M3 Grafický editor

 

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/

  • [3] Kreslenie na vrstvu pomocou základných nástrojov (aspoň 3, napríklad ceruzka, štetec, sprej - ako v skicári), možnosť výberu farby v RGBA
  • [1] Výplň objektu podľa ohraničenia - tzv bucket fill - všetko čo má rovnakú, resp dostatočne podobnú farbu v okolí kde používateľ zvolí vypĺňanie sa zafarbí.
  • [3] Aspoň 2 štetce ktoré sú viazané na okolie, ako v projekte harmony vyššie
  • [2] Podpora viac vrstiev
  • [2] Grafické používateľské rozhranie
  • [1] Uloženie projektu do súboru (interný formát s podporou vrstiev)
  • [1] Načítanie projektu zo súboru (interný formát s podporou vrstiev)
  • [2] Export do niektorého známeho formátu, PCX, BMP
Autor Matej Fandl
Študenti pracujúci na zadaní Matej Palider Filip Sršeň
Proj23-M4 L-systémy

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äť

Autor Matej Fandl
Študenti pracujúci na zadaní Miroslav Cibula Rudolf Nosek Adrián Kýška
Proj23-M5 Simulácia davu v 2D

 

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

  • [3] Základný update + draw loop naviazaný na čas
  • [2] Implementácia agenta pomocou vzájomne previazaných modulov
  • [3] Interakcia agentov - podľa dohody, ale príklad je, že agenty môžu pociťovať emóciu, napríklad strach, a táto sa môže medzi nimi vzájomne šíriť. Alebo môže ísť o o model šírenia sa choroby, atď.
  • [2] Vykreslenie agentov animovane, pomocou spritesheetov (spritesheet je séria obrázkov ktorá sa postupne vykresľuje)
  • [3] Používateľom ovládaný agent - pohyb + akcia
  • [2] Grafické používateľské rozhranie pre nastavovanie parametrov (podľa modelu)
Autor Matej Fandl
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj24-P6 - Štvorčeková sieť

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

Autor Peter Borovanský
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Hra o korupcii

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:

  • šesťuholníková grafika
  • korektné šírenie korupcie po hracej ploche
  • možnosť kedykoľvek prerušiť a uložiť stav hry, a možnosť pokračovať v hre
  • rôzne tvary hracieho priestoru, viď online verzia
  • verzia dvoch hráčov a verzia hráč-počítač (nie triválna stratégia počítača je potrebná na plný počet bodov za projekt).
Autor Peter Borovanský
Študenti pracujúci na zadaní Adrián Kocifaj Jozef Špirka
Bubble sort puzzle

Obr

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.

Bodovanie:

  • (2 body) Príprava datasetu – aspoň 3 levely, načítanie datasetu.
  • (2 body) Úvodná stránka hry - užívateľ si zvolí level hry, načítanie hry (popis nižšie).
  • (6 bodov) Zobrazenie hry a funkcionalita – pekné vykreslenie levelu a správna funkcionalita presúvania guľôčok (ak sa užívateľ pokúsi vykonať zakázaný ťah, prostredie mu to nedovolí), existuje viacero verzií tejto hry (napr. prelievanie tekutiny) čiže fantázii sa medze nekladú a vizualizácia je na vás. Detekcia ukončenia hry (hráčovi sa zobrazí hláška o úspešnom prekonaní levelu).
  • (2 body) – Uloženie a načítanie rozohranej hry (hráč si môže začatú hru uložiť a neskôr aj načítať z úvodnej stránky). Hráč vie hru ukončiť a vrátiť sa na úvodnú stránku.
  • (1 bod) – Počítanie ťahov hráča (presunov guľôčky), zobrazovanie počtu ťahov.
  • (2 body) – Pre každý level je možné zobraziť tabuľku Top 10 skóre. Po prejdení levelu si hráč zadá svoje meno a jeho výsledok sa zaradí do tabuľky.
Autor Peter Borovanský
Študenti pracujúci na zadaní Tomáš Vikiszály Nina Klačková Saša Snidová
Dobble

obr

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.

Bodovanie:

  • (2 body) Úvodná stránka - Užívateľ si vyberie level hry. Normal – 57 symbolov, 8 symbolov na kartu alebo Kids – 31 symbolov, 6 symbolov na kartu. Užívateľ si zvolí počet kôl v hre (koľko dvojíc musí hľadať – min. 5).
  • (3 body) Generovanie dvojíc kariet s práve jedným spoločným symbolom. Bolo by dobré, aby nemali všetky dvojice rovnaký spoločný symbol.
  • (6 bodov) Zobrazenie a funkcionalita – vykreslenie kariet na hracej ploche a možnosť klikania na symboly. Zobrazovanie symbolov na kartách v rôznych veľkostiach a natočeniach.
  • (2 body) – Registrovanie kliknutého symbolu. Za správne zvolený symbol +1 bod, za nesprávne -1 bod (a ide sa na ďalšiu dvojicu). Po prejdení hry sa hráčovi zobrazí jeho úspešnosť.
  • (2 body) – Na úvodnú stránku sa pridá voľba módu hry: buď vyššie spomenuté bodovanie +1/-1 alebo hra na X životov. Počet životov môžete zvoliť podľa počtu kôl alebo nejaké rozumné číslo. Hráč sa môže v hre pomýliť najviac toľkokrát koľko má životov. Zobrazí sa mu hláška buď o prehre alebo o zvládnutí hry.
Autor Peter Borovanský
Študenti pracujúci na zadaní Timotea Chalupová Tomáš Hruškovic Adriana Janáčková
Goblíci jedlíci

obr

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.

Bodovanie:

  • (2 body) Zobrazenie hracej plochy a figúrok oboch hráčov.
  • (6 bodov) Správna funkcionalita hry – presúvanie figúrok, položenie väčšieho goblíka na menšieho (menšieho nesmie byť vidno), ak hráč presunie väčšieho goblíka a menší bol pod ním, tak menší tam ostane.
  • (1 bod) – Zobrazovanie hráča, ktorý je na ťahu.
  • (2 body) – Detekcia ukončenia hry/víťaza (riadok, stĺpec alebo diagonála).
  • (4 bodov) – Za jedného hráča bude hrať počítač, vymyslieť stratégiu ťahov.
Autor Peter Borovanský
Študenti pracujúci na zadaní Tomáš Korim Matúš Drahovský Juraj Gavura
Proj24-L5 3D Kartovka

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.

Bodovanie:

  • [5 body]: Základná funkcionalita hry: 
    • Dvaja hráči, každý má svoj balík kariet (decky môžete načítať napr. z textových súborov), na začiatku sa náhodne rozdajú karty.
    • Hráči sa striedajú na ťahu, riešime iba lokálny multiplayer. Môžete to realizovať striedaním "viditeľnosti" kariet na ruke pri dolnom/hornom okraji obrazovky - keď je na ťahu protihráč, nepozerám sa na monitor. Ťah hráča pozostáva z vyloženia karty.
    • Základná logika GWENTu - čiže karty jednotiek sa vykladajú do 3 radov, celková sila sa sumuje, hrá sa na 3 kolá...
    • Môžete použiť textúry kariet napr. z https://github.com/matt77hias/Gwent
  • [2 bod]: Podobne ako v MTG Arena, pri vyložení silnej jednotky sa nad kartou na pár sekúnd vyrenderuje 3D model jednotky, ilustrácia viď. obrázok v prílohe úlohy. Vhodné 3D modely (aspoň 3) nájdete na internete.
  • [1 bod]: Implementujte funkciu akčných kariet s počasím (mráz/hmla/dážď), ktoré ovplyvňujú jednotlivé rady jednotiek. 
  • [2 bod]: Rendering 3D animovaného particle efektu pri zahratí karty s počasím nad ovplyvneným radom jednotiek (objavte vhodný tutoriál, napr. https://www.youtube.com/watch?v=vLcJRm6Y72U). 
  • [2 bod]: Vytvorte aspoň 3 zaujímavé 3D scény/stoly, na ktorých sa bude hra odohrávať. Buďte kreatívni, okrem pekného 3D modelu stola/krajiny môžete rozmiestniť aj ďalšie objekty (mince, poháre, respektíve stromy a barely, viď. ilustračný obrázok).
  • [2 bod]: Po kliknutí na 3D kartu sa priblíži a hráč si ju bude môcť "otáčať" v 3D a prezrieť zo všetkých strán, aj s prípadným 3D modelom, ktorý sa na nej renderuje. Po ďalšom kliknutí sa hra vráti z tohto náhľadu do bežného módu. 
  • [1 bod]: Bonus za celkový dojem, originálne nápady, či funkcionalitu navyše. Môžete získať napr. dorobením ďalšej funkcionality GWENTu, ako abilities jednotiek (Muster, Morale Boost atď.) a ďalších akčných kariet (Scorch, Decoy...). Alebo vytvorte GUI editor deckov. Prípadne prídite s vlastnými nápadmi na vylepšenie.

Pre uznanie ako RP je potrebné splniť všetky podúlohy aj s bonusom (teda získať 15 bodov)!

Poznámka: asi vám dobre poslúži zoznam videí JavaFX3D - YouTube.

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní Tomáš Iványi Ivan Ihorovyč Martynenko
Fanorona

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:

Hráči sa pohybujú striedavo, začínajúcim hráčom sú biele figúrky. Existujú dva druhy pohybov:
  • Ťah zajatie - paika - pozostáva z presunu jedného kameňa do susedného bodu pozdĺž ľubovoľnej nakreslenej čiary. Ťah zajatia má za následok odstránenie jednej alebo viacerých figúrok protivníka. Ťah zajatia je povinný, t. j. ak hráč, ktorý je na ťahu, môže zajať nejaké súperové figúrky, musí ich zajať. Existujú dva druhy pohybov: priblížením alebo vzdialením.
    • Priblíženie – ak hráč presunie jednu zo svojich figúrok do určitého bodu a ďalší bod na tej istej línii je obsadený súperovou figúrkou, potom je súperova figúrka zajatá. Rovnako sú tiež zajaté všetky po sebe idúce figúrky súpera nachádzajúce sa na tej istej línii (napr. pokiaľ nedôjde k prerušeniu prázdnym miestom alebo vlastným kameňom).
    • Vzdialenie - ak hráč pohne jednou zo svojich figúrok z nejakého bodu a tým sa vzdiali od súperovej figúrky na tej istej línii je obsadený, potom je súperova figúrka zajatá a všetky nasledujúce figúrky súpera umiestnené na tej istej línii sú tiež zajaté (ako napr. pokiaľ nedôjde k prerušeniu prázdnym miestom alebo vlastným kameňom).
      Ak hráč môže urobiť ťah priblíženia lebo vzdialenia súčasne, môže si vybrať, ktorý z nich bude hrať. Po ťahu zajatia - paika - môže hráč, ale nemusí pokračovať ďalším ťahom s nasledujúcimi obmedzeniami:
    • Figúrka nesmie prísť do toho istého bodu dvakrát počas toho istého ťahu.
    • Figúrka nemôže urobiť dva po sebe idúce kroky zajatia v rovnakom smere. 
 
 
 
Hodnotenie:
  • grafické prevedenie hracej plochy
  • korektná implementácia všetkých pravidiel hry
  • animacia/znázornenie pohybu kameňov
  • možnosť kedykoľvek si uložiť aktálny stav hry, a opäť v ňom pokračovať.
Autor Peter Borovanský
Študenti pracujúci na zadaní David Krchňavý
SkipList illustračné demo

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.

Autor Peter Borovanský
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Splay Tree ilustračné demo

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,

- následne potom sa zamyslíte, ako vizualizovať operácie nad touto dátovou štruktúrou.

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í:

    • zig-zig rotácia - aj ja aj môj otec sme ľavými (pravými - zrkadlová operácia) synmi

 

    • zig-zag rotácia - ja som ľavý syn a môj otec je pravý syn (a opačne pre zrkadlovú operáciu)

 

    • zig rotácia - môj otec nemá otca



Autor Peter Borovanský
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj23-J1 Frogger

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

Bodovanie:

[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

Autor Jozef Kubík
Študenti pracujúci na zadaní Lucia Lahučká Monika Buchalová Anna Lenhardtová
Proj23-J2 Give up

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

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

Bodovanie:

[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)

[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 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

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

Autor Jozef Kubík
Študenti pracujúci na zadaní Tomáš Búcsi Ákos Czére Dávid Števaňák
Proj23-J3 Kombo

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.

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

Bodovanie:

[2 body] - Hlavné menu s možnosťami Spustiť hru/Vybrať level/Ukončiť hru

[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

[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 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

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

Autor Jozef Kubík
Študenti pracujúci na zadaní Oliver Sidor Michael Jakovlev Dominik Šidlo
Proj23-J4 Reflexové testy

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

Bodovanie:

[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ť, ...)

[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 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

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

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.

Autor Jozef Kubík
Študenti pracujúci na zadaní Peter Franček Adam Zahradník Paulína Jaremčuková
Proj24-J5 Joyride

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.

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

Bodovanie:

[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

[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, 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

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

Autor Jozef Kubík
Študenti pracujúci na zadaní Ľuboš Hellesch Jakub Vojtek Matej Štauder
3x

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

Autor Alexander Šimko
Študenti pracujúci na zadaní Silvia Bieliková Samuel Ješík Oliver Laštík
Blúdisko s poradím

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.

Autor Alexander Šimko
Študenti pracujúci na zadaní Veronika Horňáková Marianna Kvasňovská Kristína Kvasňovská
Kozmonaut

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.

Autor Alexander Šimko
Študenti pracujúci na zadaní Filip Ondira Timotej Melkovič Lukáš Jankola
Osemhran

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.

Autor Alexander Šimko
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Tanky

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.

Autor Alexander Šimko
Študenti pracujúci na zadaní Patrik Filipiak Filip Barančík Adam Húserka
Double pendulum

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.

 

 

 

  • [2] Vykreslenie kyvadla
  • [5] Fyzika
  • [2] Nastavenie zaciatocnych podmienok
  • [2] Kreslenie drahy kyvadla
  • [2] Tlacidlo strop, play a reset
  • [2] Moznost menit nastavenia pocas behu (dlzka kyvadla, start)

 

Autor Daniel Kyselica
Študenti pracujúci na zadaní Ema Adamová
Fourier series visualization

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)

  • [1] Zobrazenie Menu - start, stop, restart, nastavenie radu
  • [1] Vykreslenie tvaru PI pre aproximaciu
  • [3] Vypocet Fourierovych radov
  • [3] Vykreslenie aproximacie tvaru PI
  • [5] Animacia vykreslenia (necham na tvorivosti)
  • [2] Moznost vyuzit jeden dalsi lubovolny vzor okrem PI
Autor Daniel Kyselica
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Icy Tower

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

  • [1] Menu  + Tabulka skore
  • [3] Vykreslenie prostredia
  • [3] Ovladanie zakladneho pohybu
  • [2] Mega skok
  • [2] Pohyb obrazovky
  • [2] Animacia mega skoku
  • [2]  Zrychlenie pri neprerusenom pohybe
Autor Daniel Kyselica
Študenti pracujúci na zadaní Ondrej Adam Július Hamborský Martin Slovák
Planet simulator

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.

 

  • [1] Scena Slnko a planeta
  • [3] Animacia pohybu - kruhova, elipsa, parabola, hyperbola
  • [1] Zobrazenie celej drahy
  • [5] Fyzika pohybu
  • [2] Nastavitelne parametre
  • [2] Ovladanie animacie - tlacidla stop, play, reset
  • [2] Moznost pridat objekt
Autor Daniel Kyselica
Študenti pracujúci na zadaní Alena Mokráňová Šimon Strieška Samuel Slávik
Risk hra

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 .

 

 

  • [1] Menu [volitelny pocet hracov/ ludskych hracov]
  • [2] Vykreslenie sveta, mapa s teritoriami
  • [3] Implementovanie jedneho tahu hraca [3 fazy - pridavanie posil, utok/presun]
  • [2] Animacia tahu
  • [1] Tabulka skore
  • [3] Logika bojov
  • [3] Jednoduchy Bot

 

Autor Daniel Kyselica
Študenti pracujúci na zadaní Ondrej Bublavý Filip Kotoč Martin Frank
Proj23-L3 3D Endless Runner

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.

Bodovanie:

  • [3 body]: Vytvorte aspoň 3 úseky mapy. Jedna bez prekážok, druhá s jamou, tretia s prekážkou, ktorej sa treba vyhnúť. Môžu to byť napríklad podtriedy jednej spoločnej triedy, ktorá dedí od Group. Úsek teda pravdepodobne bude koláž nejakých základných útvarov. Použite vhodné textúry.
  • [4 body]: Úseky trate sa automaticky skladajú za seba, pričom sa posúvajú konštantnou rýchlosťou, takže to vytvára efekt nekonečnej trate. Odporúčam pritom posúvať trať a nie kameru, aby ste sa nedostali k nejakým šialene veľkým súradniciam. Už prejdené úseky treba samozrejme z pamäte zahodiť.
  • [3 body]: Pridajte do hry hráča (napríkľad modrá guľa, alebo vhodný model), ktorý bude pomocou kláves preskakovať jamy a vyhýbať sa prekážkam.
  • [1 bod]: Počítajte a vypisujte prejdenú vzdialenosť, ktorá je vlastne rovná uplynulému času, keďže hráč beží konštantnou rýchlosťou.
  • [2 body]: Po padnutí do jamy/náraze do prekážky hra končí, zastavte pohyb a vypíšte hlášku s informáciou o prejdenej vzdialenosti. Stlačením nejakej klávesy alebo kliknutím sa hra reštartuje.
  • [2 body]: Bonus za celkový dojem a vlastné prídavky. Môžete napríklad pridať aj prekážky, ktoré treba podliezť. Alebo pridajte peniaze, či nejaké power-upy, ktoré môže hráč po ceste zbierať. Taktiež sú vítané pekné animácie. Buďte kreatívni! :)

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! Môžete použiť textúry z prílohy, alebo aj ľubovoľné iné (https://opengameart.org/ taktiež odporúčam texture packy z Minecraftu).

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní Mikalai Halavachenka
Spracovanie fotografie

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:

  • orezanie fotografie do zvoleného výrezu,
  • nastavenie jasu a kontrastu, farebné korekcie, gray scale,
  • detekcia a zvýraznenie hrán,
  • odstránenie šumu
Autor Peter Borovanský
Študenti pracujúci na zadaní Veronika Bendíková Viktória Pravdová
Proj24-L1 3D Vesmírny simulátor

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.

Bodovanie:

  • [1 bod]: vytvorenie prostredia pásu asteroidov. Na náhodných pozíciach sa (v rozumnom počte) spawnú asteroidy (pre jednoduchosť kocky a/alebo sféry) a v blízkosti aj nejaká planéta/planéty. Škála a vzdialenosti nemusia byť realistické, nastavte to tak, aby to bolo pre vás uveriteľné.
  • [1 bod]: Na asteroidy nájdite/vytvorte aspoň 3 rôzne variácie 3D modelu s vhodnou textúrou. Rovnako na planéty aplikujete textúry, napr. z https://www.solarsystemscope.com/textures.
  • [1 bod]: Doplňte textúru kokpitu (viď. screenshot s ukážkou). Môže to byť statický 2D obrázok/maska prekrytá cez 3D scénu.
  • [1 bod]: Pohyb lodi pomocou klávesnice (vlastne hýbete kamerou). Implementujte pohyb vo všetkých troch osiach pohybu a v jednej osi rotácie (buď hore/dole, tj. "pitch" alebo doprava doľava tj. "jaw"). Vesmírna loď má svoje momentum, smer sa nemení instante. Pamätajte si aktuálny smerový vektor, ktorý je vždy lineárnou kombináciou nejakých N posledných smerových vstupov. 
  • [2 bod]: Pokročilý pohyb, implementujte rotácie v zostávajúcich 2 osiach. Vo výsledku teda bude pohyb so všetkými 6 stupňami voľnosti.
  • [4 body]: Hráč pomocou laseru taží asteroid. Smer laseru je určený pozíciou kurzora myši, prípadne vždy smeruje dopredu podľa natočenia lode. Laser vykreslite ako čiaru/valec medzi pozíciou lode a asteroidom. Tažiť sa dá, iba pokiaľ je asteroid vo vhodnej pozícií pred ľodou a teda nastane kolízia laseru s ním, inak sa laser nevykresľuje a nič sa neťaží. Po určitom čase je asteroid vyčerpaný a zmizne. V GUI v dolnom panely zobrazujte počet naťaženého materiálu (napr. v kilogramoch).
  • [4 body]: V pravidelnom intervale sa spawnujú nepriatelia (pre jednoduchosť červené sféry), ktoré chaoticky poletujú a kradnú hráčovi asteroidy. Tj. občas sa na nejaký prichytia a po pár sekundách asteroid zmizne. Hráč môže nepriateľov zničiť pomocou svojho laseru, majú teda interne nejaký počet životov / sekúnd koľko vydržia zásah laseru.
  • [1 bod]: bonus za celkový dojem a originálne nápady. Môžete ho získať napr. premakaným GUI, lepším modelom pre nepriateľov alebo implementáciou cieľa hry, napr. zozbieraním potrebného počtu asteroidov v rámci nejakého časového limitu a výpisom víťaznej hlášky. 

Pre uznanie ako RP je potrebné splniť všetky podúlohy aj s bonusom (teda získať 15 bodov)!

Poznámka: asi vám dobre poslúži zoznam videí JavaFX3D - YouTube. Inšpirovat sa viete napr. gameplayom hry End Space.

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní Teodor Fuček
2048 Cubes

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.

Bodovanie:

  • [4 body] padajúce bloky s hodnotami 2,4,8,16, ... možnosť nastavenia pozície z ktorej blok padá
  • [2 body] spájanie blokov s rovnakými hodnotami do dvojnásobných, počítanie skóre
  • [5 body] bloky sa správajú ako telesá
    • pri páde zrychľujú
    • po dopade sa odrážajú
    • medzi sebou sa odrážajú
  • [2 body] particle efekt
  • [2 body] úvodná obrazovka, pravidlá, rebríček najlepších 10 dosiahnutých skóre s menom hráča
Autor Peter Borovanský
Študenti pracujúci na zadaní Ján Kamas Gabriela Chutňáková Robert Pagáč
Quoridor

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:

  • [3 bodov] vytvorenie hracej plochy
  • [3 body] ovládanie myšou: pohyb hráča + stavanie stien
  • [1 bod] striedanie dvoch hráčov (nie proti UI)
  • [3 body] kontrola nepovolených ťahov: a) úplne zablokovanie hráča, b) stena cez stenu, c) prechod hráčom cez stenu
  • [5 bodov] netriviálna stratégia hry, a teda možnosť, že nehrajú dvaja hráči, ale hráč proti vášmu programu. Vaša stratégia nesmie generovať ilegálne ťahy, a nesmie byť úplne naivná, aby hráč mal pocit, že váš program je súperom nejakej úrovne. Táto časť je podmienkou k RP.
Autor Peter Borovanský
Študenti pracujúci na zadaní Patrik Homola Sára Guziová Ľubica Skláršová
Hidato

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.

Hidato

Úlohy:

  • [2 body] z konfiguračného súboru úlohy, vytvorte hraciu plochu, ktorá nemusí byť obĺžniková,
  • [4 body] pri riešení intuitívnym spôsobom realizujte klikanie po ploche, len na susedné políčka, pričom navštívené políčka sú indexované postupne prirodzenými číslami, musíte mať možnosť sa vrátiť a zmazať ľubovoľný počet svojich ťahov, a nesmiete prepísať zadané polia, znázornite ich inou farbou,
  • [2 body] hra musí mať gradáciu, teda 10 levelov, ktoré vás po vyriešení predchádzajúcej úlohy vedú k ďalšej, trochu ťažšej úrovni,
  • [2 bod] kedykoľvek sa rozhohratá hra dá uložiť, opäť načítať a pokračovať v jej hraní, mieria sa čas, a každá level má svoj vlastný timeout,
  • [5 bodov] Užívateľ môže naeditovať vlastné zadanie. Môže to byť v priamo v GUI, ale tiež svoj vlastný konfiguračný súbor hry, ak je dostatočne jednoduchý. Solver, ktorý je súčasťou vašej hry, povie, či zadanie je riešiteľné. Samozrejme, vami predpripravené zadania sú riešiteľné, ale užívateľ poľahky môže vytvoriť niečo, čo nemá riešenie. Pri načítaní takéhoto zadania aplikácia musí vedieť zistiť, že nemá riešenie. V tejto časti sa očakáva jemne inteligentný backtrack, a splnenie tejto časti je podmienkou k RP.
Autor Peter Borovanský
Študenti pracujúci na zadaní Matej Zelenák Matúš Ratkovský