Programovanie 4 - Java / Letný semester 2019/2020

Projekt

Proj20-L1 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í Marco Petrek Radovan Orinčák
Proj20-K4 Overflow

voda nadoby priklad

Voda padá v náhodných pramienkoch z vrchu. Plní nádoby a preteká. Simulácia sa dá zastaviť a spustiť. Obrázok je ilustračný a obsahuje chyby, vaša simulácia musí byť bezchybná, čiže každá nádobka sa musí správne naplniť než pretečie.

Úlohy:

[6 bodov] krásne spracovanie, pekné nádoby (vedierka, fontánky, kvetinky, whatever), prípadne iné objekty, budte kreatívni, môžu tam byť aj vrtuľky, rôzne farby vody, ktoré spolu reagujú... voda musí padať správne a nádoby sa správne plniť, simuláciu môžem stopnúť, zrýchliť, spomaliť, reštartovať

[4 body] editor: náhodný generátor, pridávanie objektov, posúvanie objektov, ukladanie a načítavanie týchto "layoutov"

[3 body] interaktivita: počas simulácie môžem klikať na nádoby a vylievať ich a podobne

[2 body] prázdne nádoby: niektoré nádoby môžu zostať úplne zakryté inými objektami, napíšte algoritmus, ktorý takéto nádoby nájde a označí v každom layoute, otestuje

Autor Kristína Malinovská
Študenti pracujúci na zadaní Timotej Zimka
Proj20-L2 3D Akčná RPG

Názov Elder Scrolls zahreje pri srdci nejedného fanúšika RPG hier, a to je len jedna z množstva úspešných hier, ktorá sa dá hrať aj z pohľadu prvej osoby. V tomto projekte skúsite niečo podobné, akurát v menšom merítku.

Bodovanie:

  • [2 body]: Načítanie lesného prostredia zo vstupného súboru, ktorý bude obsahovať aspoň 5 typov políčok, napr.: "." = trávnik, "S" = strom, "V" = voda, "H" = hlina, "K" = kameň. Kódovacie znaky si môžete vymyslieť vlastné a keď vám nevyhovuje les, kľudne zvoľte jaskynné prostredie, mestské, alebo aké len chcete. ASCII znakov je dosť, takže kľudne pridajte aj ďalšie typy políčok, prípadne pridajte prevýšenia, takže povrch nebude len rovina. Použite vhodné textúry.
  • [1 bod]: Pohyb hráča po mape, pohľad z prvej osoby, otáčanie a kráčanie v smere natočenia.
  • [2 bod]: Hráč drží v ruke meč a môže ním zaútočiť. Pri útoku sa meč animuje, vytvorte ho buď z primitív (kociek), podobne ako v CustomModel.java, alebo použite 3D model, prípadne stačí aj 2D textúra, pod správnym uhlom to vyzerá celkom dobre.
  • [3 body]: Na mape sa pravidelne na náhodných miestach objavujú nepriatelia. Začnú sa hýbať k hráčovi, keď je v ich blízkosti. Keď sú pri ňom, zraňujú ho, on stráca život a môže umrieť. Dajú sa samozrejme zraniť a po pár úderoch mečom umierajú. Nepriateľov môžete vizualizovať trebárs ako červené kocky.
  • [2 body]: Hráč zbiera peniaze a ďalšie predmety, napríklad nové meče alebo lekárničky. Polohy predmetov sú zadané vo vstupnom súbore, alebo sa generujú na náhodnych miestach, ako chcete.
  • [1 body]: Hráčovi sa zabíjaním nepriateľov pridávajú skúsenostné body a zvyšuje level. Pri zvýšení levelu spravte nejakú jednoduchú animáciu (napr. farebné guličky okolo hráča). S vyšším levelom sa zvyšuje sila útoku.
  • [2 body]: UI panel, v ktorom sa zobrazia informácie ako počet peňazí, úroveň života hráča, level a skúsenostné body.
  • [1 bod]: Implementujte koniec hry, napríklad pri zabití určitého počtu nepriateľov, dosiahnutí určitého levelu, počtu peňazí, dosiahnutí nejakej lokácie na mape... Je to na vás.
  • [1 bod]: Bonus za celkový dojem a originálne nápady. Môžete ho získať napríklad reprezentáciou stromov/nepriateľov vhodnými 3D modelmi, doplnením inventára s možnosťou zmeny zbraní, voľbou atribútov pri zvyšovaní levelu (rýchlosť, sila, odolnosť...), 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/modely, alebo aj iné (https://opengameart.org/ taktiež odporúčam texture packy z Minecraftu)

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní František Kochjar Stanislav Kukučka
Proj20-L3 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í Nikto nepracuje na tomto zadaní.
Proj20-L5 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í Daniel Trizna
Proj20-L4 3D Transakcie

Jedna z výhod kryptomien je fakt, že záznam o každej transakcii je verejne dostupný, na tzv. blockchaine. Skúste si vizualizovať tieto transakcie v 3D grafe pre zopár adries kryptomeny Ethereum.

 

Bodovanie:

  • [1 bod]: Pripravte triedy na reprezentáciu neorientovaného grafu. V každom vrchole si pamätáme X,Y,Z súradnice, adresu a adresu predchodcu. Hrany budú ohodnotené celkovou sumou peňazí, ktorá bola medzi vrcholmi vymenená.
  • [3 body]: Metóda na inicializáciu grafu, ktorá dostane v parametri názov vstupného súboru. Začnite tým v prílohe úlohy. Súbor má tvar export-A.csv, kde A je adresa peňaženky v šestnástkovej sústave. Pre jednoduchosť si budeme pamätať iba posledných 8 cifier. Vytvorte nultý vrchol, ktorý bude mať súradnice (0, 0, 0), adresu z názvu súboru a adresa predchodcu bude pre neho null. Následne pridajte ďalšie vrcholy, pričom:
    • každý riadok súboru popisuje jednu trasankciu. Smer zanedbáme, takže adresa susedného vrcholu je buď v stĺpci "From" alebo "To".
    • predchodca je v tomto prípade nultý vrchol, alebo vo všeobecnosti vrchol, ktorý spôsobil vytvorenie aktuálneho.
    • súradnice počítame nasledovne (vždy desiatková hodnota): nech DX = posledné 4 cifry z "Txhash", DY = prvé 4 cifry z adresy vytváraného vrcholu, DZ = prvé 4 cifry z "Txhash". Nech PX, PY, PZ sú súradnice predchodcu. Potom súradnice nového vrcholu X,Y,Z = normalize(PX + DX, PY + DY, PZ + DZ). Normalizovaním docielime, že vrcholy budú rozmiestnené na jednotkovej guli okolo svojho predchodcu.
    • Hrana bude mať hodnotu "Value_IN(ETH)" + "Value_OUT(ETH)". Viacero riadkov môže popisovať transakciu medzi tými istými dvoma vrcholmi, k cene hrany pripočítame hodnoty zo všetkých takýchto riadkov.
  • [3 body]: Vizualizujte vytvorený graf. Vrcholy budú sféry a hrany čiary. Graf sa bude dať otáčať myšou a zoomovať, podobne ako v BasicViewer.java z prednášky.
  • [2 body]: Metóda na doplnenie vrchlov, znova bude na vstupe brať súbor v tvare export-A.csv. Súbory získate na adrese https://etherscan.io/, vyhľadáte si adresu a vpravo dole môžete exportovať transakcie do CSV. Vygenerujte súbory pre aspoň 3 ďalšie adresy, pre vrcholy susedné s nultým, napríklad táto (7. riadok nultého súboru). Metóda najprv skontroluje, či už v grafe existuje vrchol s adresou A. Ak nie, tak ihneď končí. Inak:
    • najprv zmeníme súradnice vrcholu A na X,Y,Z = 5 * normalize(PX + DX, PY + DY, PZ + DZ). 5 násobne teda zväčšíme jeho vzdialenosť od predchodcu, aby sme získali priestor na nových susedov.
    • vytváranie nových susediacich vrcholov prebieha rovnako ako v inicializačnej metóde, akurát súradnice PX, PY, PZ už v tomto prípade nie sú nulové.
    • volaním metódy by sa mali vytvárať takéto zhluky vrcholov.
    • každý vrchol má byť v grafe iba raz! Keďže si z adries pamätáme iba posledných 8 cifier, môže sa stať, že aj dve rôzne adresy budú mať tento sufix a v našej reprezentácií teda budú reprezentované jedným vrcholom, nevadí.
  • [1 bod]: Pridajte UI panel a text field, ktorý bude brať adresu. Ak máme pre túto adresu CSV súbor, spracuje ho predchádzajúcou metódou a prekreslí graf s pridanými vrcholmi.
  • [2 body]: Metóda, ktorá zistí, či sú v grafe trojice prepojených vrcholov. Ak áno, výrazne zafarbí všetky takéto trojice (napr. na červeno). Ak taká trojica v grafe nie je, umelo vytvorte CSV súbor pre niektorý z vrcholov s takýmito prepojeniami. Metóda sa bude dať spustiť tlačidlom v UI.
  • [2 body]: Napíšte metódu vyber(maxSuma), ktorá vyberie, vypíše na konzolu a zafarbí množinu hrán tak, aby ich súčet bol čo najväčší, no nie väčší ako maxSuma. Metódu budeme môcť zavolať z UI, kde bude aj vstupný field pre maxSuma
  • [1 bod]: Bonus za dojem a nápady. Môžete ho získať napríklad zlepšením vizualizácie, zaujímavé by mohlo byť vykreslovať hrany rôznou hrúbkou podľa ceny. Alebo pridajte orientáciu hrán, či ďalšie grafové algoritmy. 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! Definíciu si môžete mierne upraviť, hlavná myšlienka je zjavná - vizualizovať transakcie v 3D grafe.

Autor Lukáš Gajdošech
Študenti pracujúci na zadaní Tomáš Kunzo
Proj20-P2 Siete kocky

Cieľom je vytvoriť edukatívnu hru pre deti 1.stupňa ZŠ, ktorá zobrazí  ofarbenú kocku, a 4 rôzne ofarbené plášte kocky, pričom práve jeden zodpovedá ofarbenej kocke. Dieťa má úhádnuť, ktorá možnosť je správna. Samozrejme, kocka má niekoľko plášťov. Skúste si nájsť rôzne plášte kocky, keď ich máte menej ako prstov oboch rukách, tak pokračujte v hľadaní. Bez tejto prípravy príklad nie je pre vás. Teda, kocka má ?? plášťov a musíte ich nájsť a zaintegrovať do programu tak, aby váš program neponúkal len najtriviálnejšie plášte ako "kríž" a "Tčko".

Úlohy:

  • [4 body] generujte rôznofarebné kocky, nie je nutné, aby všetky steny boli rôznych farieb, a zobrazte kocku, prípadne zobrazte zadný pohľad na kocku,
  • [5 bodov] zobrazte 4 ofarbené plášte, najprv zobrazujte triválnejšie plášte ako "kríž" a "Tčko" a neskôr komplikovanejšie, ktoré sami objavíte. Plášte musia byť ofarbené tak, aby práve jeden zodpovedal kocke, a žiaden z nich nebol evidentne triviálny, použite farby, ktoré sú na kocke,
  • [2 body] hra ponúka sériu zadaní so stupňujúcou sa náročnosťou,
  • [4 body] podmienkou na UZNANIE RP je, aby program generoval zadania, a teda nemal konštantne pripravenú sadu úloh. Musíte vygenerovať ofarbenú kocku, zvoliť si jeden z ?? plášťov kocky, rôzne ho orientovať v hracej ploche, 3x ho ofrabiť zle, 1x dobre a čakať na odpoveď hráča.

 

Autor Peter Borovanský
Študenti pracujúci na zadaní Martina Veselá Ján Majerský Marek Žitnik
Proj20-K3 Star Trek 3D Chess

BBT 3D chess

Vyberte si jednu z variant 3D šachu zo Star Treku a implementuje ako hru pre 2 hráčov.

[7 bodov] pekné a rozumné zobrazenie a ovládnie hry pre 2 hráčov z jednej klávesnice (alebo myšou), vrátanie overenia dovolených ťahov, počítanie skóre (vyhodené figúrky) a vyhodnotenie konca hry

[4 body] pekná grafika, 3D s možnosťou otáčať hrací plán, vylepšené šikovné ovládacie prvky

[2 body] kreatívne vychytávky do hry: pozrite si Big Bang Theory diel The Wildebeest Implementation, kde Sheldon vymyslel 3-person chess s pridanými figúrkami, tunelmi, ...

[2 body] hráč si môže zahrať hru proti počítaču, vyžaduje AI, čím chytrejšia, tým viac bodov (v tomto prípade stačí aj pomerne hlúpa)

Autor Kristína Malinovská
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj20-P3 Rušná hodinka

Rušná hodinka je logická hra na štvorcovej mriežke (napr. parkovisko), kde hráč posúva rôzne dlhé a zafarbené vozidlá, tak aby sa červené auto vyslobodilo. S miernou nadsádzkou, parkovanie v Petržalke je trochu na podobnom princípe, keď nezaradíte rýchlosť a ručnú, na to, aby sused mohol odsunúť vaše auto a vyparkovať. Naprogramujte hraciu plochu s touto hrou. Zahratjte si: http://www.dr-mikes-math-games-for-kids.com/online-traffic-jam-game.html

Úlohy:

  • [5 bodov] z konfiguračného súboru prečítate zadanie hry, zobrazíte plochu, s objektami sa dá koketne pohybovať
  • [1 bod] každá úloha má svoj čas, za ktorý ju musíte vyriešiť, timer meria váš čas, gratulujete pri úspešnom vyriešení, poľutujete pri timoute
  • [2 body] úloha má gradáciu, sériu aspoň 6 stále náročnejších konfigurácií
  • [3 body] hráč môže vytvoriť vlastnú konfiguráciu úlohy, predpokladá sa voľba rozmeru hracej plochy, roznymi frabami označené rôzne vozidlá. Naeditovnú konfiguráciu si môže zahrať
  • [4 body] pre každú naeditovanú konfiguráciu sa hráč môže presvedčiť, či je riešiteľná. V GUI stačí jedno tlačidlo "SOLVE", ktoré dá informáciu o tom, či existuje riešenie úlohy. Stačí nejaká GUI forma true/false, nemusíte riešenie animovať. Táto podúloha predpokladá nejaký zrejme backtrackovací algoritmus, či prehľadávanie možností, a JE PODMIENKOU K uznaniu RP.
  • akýkoľvek cudzí/prevzatý kód v tejto úlohe je neakceptovateľný.
Autor Peter Borovanský
Študenti pracujúci na zadaní Ján Špirka Barbora Ďuračková
Proj20-P1 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í Frederik Kohár Ladislav Suchý
Proj20-J1 - Reflector

Z určeného miesta obrazovky vychádza svetelný lúč. Ten buď zanikne mimo obrazovky, ak mu nič nestojí v ceste, odrazí sa od odrážacej prekážky a pokračuje v smere odrazu alebo skončí, ak dosiahne cieľový bod, prípadne blokovaciu prekážku. Skúste sa zahrať hru na tento spôsob, zvanú Reflector: https://www.mathplayground.com/logic_reflector.html  a naprogramovať podobnú hru. V našej verzii nebudú dané fixné body, kam treba predmety uložiť a budeme mať viac typov predmetov.

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 play/quit/choose level

[3 body] – Vykreslenie obrazovky zo súboru – pozadie, herná plocha, lúč, odrážacie objekty, cieľový bod (formát súboru je na vás)

[3 body] – Korektný odraz lúča od predmetu, prípadne jeho koniec ak dosiahne cieľový bod a ukladanie predmetov

[3 body] – Aspoň 3 rôzne levely s použitím aspoň 3 rôznych objektov (napr. štvorec, trojuholník, kruh, kosodĺžnik...)

[3 body] – Špeciálny level alebo levely – bude obsahovať ešte nejaký jeden alebo viac prvkov navyše, napríklad viac koncových bodov (cez každý musí prejsť laser, a teda skončí len v tom poslednom), viac laserov (každý musí dosiahnuť nejaký cieľový bod), blokovacie prekážky (nedá sa s nimi pohnúť a laser sa od nich neodrazí, ale zanikne)...

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

- highscore časov prejdenia levelov spolu s jeho ukladaním do súboru a zobrazovaním na obrazovke
- zvuky v hre, napr. rôzne zvuky odrazu od rôznych predmetov, pri prekrížení laserov atď
- ďalší level navyše, pričom obsahuje všetky prvky navyše spomenuté pri špeciálnom leveli
- 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).

Autor Jozef Kubík
Študenti pracujúci na zadaní Kristína Dvorská Daniel Petriľak Lukáš Vilim
Proj20-P5 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
  • [2 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í Filip Lajčin Jakub Švorc
Proj20-K2 Polyygon

hexxagon game

Hexxagon je logická hra, určená primárne pre dvoch hráčov. Princíp hry spočíva v prehadzovaní a klonovaní kamienkov. V hre umiestňujete kamene, kopírovaním alebo skákaním a vyhráva hráč, ktorý má viac kameňov. Pokiaľ preskočíte cez 2 políčka, prvé stratíte a ostane Vám len druhé. Pozrite si starú hru a vytvorte rožšírenú variantu, kde hracia plocha môže byť ľubovoľný planárny graf.   

Úlohy:

[8 bodov] hra s pekným grafickým prostredím, ovládanie z jednej klávesnice, počítanie skóre a vyhodnotenie konca hry, načítanie grafu plochy zo súboru, testovacie súbory s rôznymi grafmi

[3 body] kreatívne vychytávky do hry: rôzne typy kameňov, tunely, pasce, ... ale aj návod na hranie s takýmito vychytávkami

[4 body] hráč si môže zahrať hru proti počítaču, vyžaduje AI, čím chytrejšia, tým viac bodov

 

Autor Kristína Malinovská
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj20-P4 Shirokuro

Shirokuro je japonská hra, v ktorej na hracej ploche spájate biele a čierne body a len vodorovnými alebo zvyslými úsečkami, ktoré sa navyše nemôžu križovať. Tu vidíte príklad zadania aj riešenia (zo stránky). Na uvedenej adrese si môžete hru zahrať, stačí si vybrať konfiguráciu, podľa veľkosti, resp. obtiažnosti. Javasciptové riešenie vám dovolí hru zahrať si, vrátiť sa o niekoľko krokov späť, overiť, či vaše riešenie je koreknté, aj poskytnúť hint k riešeniu. Vaše riešeniu musí ponúkať podobný komfort.

Beispiel  Lösung

Úlohy:

  • [3 body] z konfiguračného súboru vytvorte štvorcovú hraciu plochu,
  • [2 body] umožnite spájať body,
  • [3 body] detekujte korektnosť vášho riešenia, teda, že spojené sú vždy dvojica biela-černa, spojené sú všetky dvojice bodov, nepretínajú sa, a každá úsečka je vodorovná, alebo zvislá. Túto časť môžete spojiť s predošlým bodom, ak neumožníte vytvoriť zlú spojnicu, napr. križujúcu sa, nespájajúcu bielu-čiernu, resp. šikmo-lomenú...
  • [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, zadania si nájdite na stránke https://www.janko.at/Raetsel/Shirokuro/index.htm
  • [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, ktorý funguje aspoň pre jednoduché prípady, Splnenie tejto časti je podmienkou k RP.
Autor Peter Borovanský
Študenti pracujúci na zadaní Dávid Župík Tereza Štefíková Patrik Michálik
Proj20-J2 - Oheň a voda

V tomto projekte skúsime naprogramovať jednu z populárnejších menších hier pre dvoch - Fireboy and Watergirl. Zahrať sa môžte napr. na https://fireboywatergirl.org/ 

V hre je možné ovládať dve postavy, v našom prípade necháme ovládanie na WSAD a šípky. Každá z týchto postáv má špecifické vlastnosti -
ktoré jej buď pomôžu, alebo práve naopak. Prvá z nich, Fireboy alebo oheň, má schopnosť prechádzať lávovým poľom, ale hocijaký kontakt s vodou ho okamžite zničí. Voda, alebo Watergirl, naopak nemá problém prechádzať cez jazerá či iné vodné plochy, ale stačí dotyk s lávou a vyparí sa. Obidva charaktery ale zničí kyselina. Môžme teda vidieť, ako sa charaktery dopĺňaju svojimi silnými stránkami a kompenzujú tými slabými. Okrem týchto možno doprogramovať aj iné vlastnosti či objekty do hry.

Cieľom hry je dostať sa s oboma postavami na koniec levelu, pričom musia prekonávať rôzne prekážky a často aj spolupracovať na to, aby dokázali prežiť.

Úlohou bude naprogramovať zopár levelov, pričom sa samozrejme nepredpokladá, že obrázky či zvuky budú presne rovnaké ako v pôvodnej hre, ale aspoň nejakú úroveň mať budú.

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] - Základné menu s možnosťami Play/Choose Level/Exit (príp. Load a Highscore)

[2 body] - Postavy - funkčnosť (plynulý pohyb oboch postavičiek do strán, skoky, špecifické vlastnosti), vizuál (obrázok, príp. animácia)

[3 body] - 3 levely s miernou gradáciou obtiažnosti a obstojnou grafikou, pričom každý level bude predstavovať iná mapa

[2 body] - Pridanie prekážok či objektov - páky, tlačidlá, dvere... môžte sa inšpirovať hrou či vlastnou fantáziou

[1 bod] - Pridanie kyseliny, teda zeleného jazierka s vlastnosťou, že pri dotyku ľubovoľnej postavy daná postava zahynie.

[3 body] - Dodatkový 4. level, ktorý naozaj preverí schopnosti hráčov (t.j. treba pri ňom logicky uvažovať, záleží na poradí vykonávaných akcií s tlačidlom, krabicou či inými objektami, postavy nezačínajú pri sebe a spoja sa až na konci levelu atď)

[1 bod] - Možnosť ukladania a načítania hry (minimum obsahu - číslo levelu)

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

- highscore časov prejdenia levelov spolu s jeho ukladaním do súboru a zobrazovaním na obrazovke
- zvuky postavičiek pri skoku, akcii a smrti
- bonusové predmety na mape, ktoré nejako pozmenia aspekt hry či schopnosti postavičky,
- dodatočné vlastnosti oboch postavičiek, napríklad vyšší skok jednej z postáv, ale pomalší pohyb, u druhej naopak...
- 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).

Autor Jozef Kubík
Študenti pracujúci na zadaní Janka Boborová Jozef Bača Iveta Krempaská
Proj20-J3 - Isaac

Tento projekt bude založený na pôvodnej populárnej hre The binding of Isaac a jeho hlavným prvkom bude NÁHODA. Trochu si ju upravíme a zjednodučíme pre naše potreby, ale základný princíp a gameplay môžte nájsť napríklad tu: https://en.wikipedia.org/wiki/The_Binding_of_Isaac_(video_game)#Gameplay, odporúčam pozrieť aj nejaké video k tomu.

Hra začína postavičkou v prázdnej miestnosti. Tu môžme ovládať pomocou kláves WSAD, strieľať môžme pomocou medzerníka. Postavička bude strieľať tým smerom, ktorým je otočená (hore/dole/doprava/doľava). Jej rýchlosť, HP ako aj rýchlosť strieľania či iné jej vlastnosti budú od začiatku dané. HP bude niekde na obrazovke zobrazené.

Začiatočná prázdna miestnosť (teda ak nerátame postavičku v nej) bude jediná prázdna miestnosť na celej mape. Mapa sa bude skladať z NÁHODNÉHO počtu miestností v nejakom rozumnom rozmedzí, napr. <3, 7>. Medzi miestnosťami sa dá hýbať cez dvere, ktoré spájajú dve miestnosti. Môžte si pomôcť a natvrdo vytvoriť zopár máp a z nich potom NÁHODNE vybrať, alebo môžete mapu zakaždým vytvárať nanovo (a NÁHODNE). Výber je na vás.

Na mape bude ešte jedna špeciálna miestnosť - v nej bude tzv. boss, teda hlavný nepriateľ. Ten bude NÁHODNE zvolený s nejakého preddefinovaného výberu. Každý boss bude mať iné vlastnosti a vzhľad a cieľom celej hry bude zničiť ho. Akonáhle sa tak stane, hra sa skončí, resp. sa pokračuje na ďalší level, teda inú mapu.

V ostatných miestnostiach budú základní nepriatelia. Ich počet v každej miestnosti je NÁHODNÝ, ale z opäť z nejakého rozumného rozsahu (napr. <1-4>). Čim viac typov základných nepriateľov (teda s inými vlastnosťami a vzhľadom), tým lepšie. Pri vstupe do miestnosti s nepriateľmi sa zatvoria všetky dvere v miestnosti a otvoria sa až keď hráč zničí všetkých nepriateľov v danej miestnosti. Akonáhle sa tak stane, dvere sa otvoria a hráč môže prejsť do inej miestnosti. Po zničení nepriateľov môžu s nejakou pravdepodobnosťou spadnúť NÁHODNÉ predmety, ktoré nejako ovplyvnia hru alebo postavičku (zvyššia/znižia HP, rýchlosť streľby atď.).

Na začiatku novej hry sa určia všetky potrebné veci pre hru. To zahŕňa NÁHODNÝ výber mapy, postavy (ak teda vytvoríte viac postáv), nepriateľov v miestnostiach, bossa. To, či a aké predmety nepriatelia nechajú po ich zničení môžte určiť pri ich zničení. Každý typ postavy, nepriateľa či bossa bude mať nejaké špecifické hodnoty vlastností - to môžte určit natvrdo. Jedná sa o rýchlosť pohybu, strieľania, maximálny dosah streľby...výber je na vás. Všetci ale budú mať nejakú hodnotu HP - teda života, inak povedané, koľko nábojov treba na to, aby boli zničení.

Na vizuál sa v tomto projekte nebude až tak dbať, je ale potrebné, aby projekt obsahoval nejaké obrázky a všetky postavy či predmety sa dali jednozačne rozoznať.  Taktiež logika nepriateľov nemusí byť na nejakej extra úrovni, pohyb a streľba základných nepriateľov môže byť NÁHODNÁ.

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:

[3 body] - Postavy - funkčnosť (plynulý pohyb, strieľanie, aspoň 3 špecifické vlastnosti), vizuál. Každá postava za bod, maximum ale 3 body

[3 body] - Základní nepriatelia - funkčnosť (plynulý pohyb, strieľanie, aspoň 2 špecifické vlastnosti), vizuál. Každý nepriateľ za bod, maximum ale 3 body

[2 body] - Bossovia - funkčnosť (plynulý pohyb, strieľanie, aspoň 3 špecifické vlastnosti), vizuál. Každý boss za bod, maximum ale 2 body

[2 body] - Predmety, ktoré nejako ovplyvňujú hru, viď hore. Každý predmet za bod, maximum ale 2 body

[2 body] - Mapy s aspoň trochu obstojným vizuálom a správnou funkcionalitou (prepojenia miestností, obsah miestností atď), pričom platia ich vlastnosti spomenuté vyššie

[1 bod] - Správne vyhodnotenie konca hry či smrti postavy.

[1 bod] - Miestnosti obsahujú prekážky, cez ktoré sa nedá prejsť, napríklad kameň či jamy.

[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:
-pohyb a streľba bossov nie je úplne NÁHODNÁ, ale má aspoň trošku rozumné vylepšenie  (napr. strieľaj tým smerom, kde je postavička, utekaj, ak máš málo života atď.)
- hra obsahuje zvuky streľby a úmrtia postavy/nepriateľa
- highscore časov prejdenia levelov spolu s jeho ukladaním do súboru (takéto highscore sa potom zobrazí v ľavom hornom rohu obrazovky hry)
- minimapa v pravom hornom okraju obrazovky - ukazuje iba zatiaľ navštívené miestnosti v skutočnom rozložení
- viac levelov - po prejdení jedného levelu sa postava premiestni na novú mapu a ide odznova, ale jej vlastnosti (aj pozmenené) zostávajú zachované
- 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).

Autor Jozef Kubík
Študenti pracujúci na zadaní Erik Korbeľ Samuel Piteľ Adam Chovanec
Proj20-J4 - Ryby

Ste malá ryba v oceáne. Všade naokolo veľké hrozivé ryby. Čo spravíte, aby ste prežili? Stanete sa ešte väčšiou a hrozivejšou! V tomto projekte napodobníme úspech oddychovky Feeding Frenzy, arkádovo-štylizovanej hry starej už skoro 20 rokov. Zahrajte sa: https://kbhgames.com/game/feeding-frenzy

Hru budeme ovládať len pomocou myše. Ňou budete ovládať svoju rybu - spočiatku malú, o prežitie bojujúcu rybu, ktorá sa ale s vašou pomocou zmení na vládcu oceána (alebo aspoň rýb :)). Pohybovať sa s ňou môžete len v priestore obmedzenom oknom. Do okna budú plávať aj iné ryby - všetkých možných veľkostí. Princíp prežitia bude jednoduchý - pri kontakte dvoch ľubovoľných rýb (nielen hráčovej s inou!) sa jedna ryba eliminuje - a to vždy tá menšia. V prípade, že narazia na seba dve rovnako veľké ryby, tak každá z nich bude mať šancu prežiť presne 50 % (prežije vždy len jedna). Hráč taktiež získava body na základe veľkosti zožratej ryby.

V tejto hre sa taktiež viac pohráme s vizuálom - Každá veľkostná kategória ryby bude mať iný obrázok (potencionálne aj vlastnosti). Hráčova ryba bude mať špecifický obrázok, ktorý sa bude zväčšovať tak, ako ryba rastie (v prípade, že by zväčšený obrázok vyzeral zle, tak ho môžte nahradiť iným, alebo začať zmenšovať ostatné ryby a ich obrázky). Hráč dosiahne výhru, ak jeho ryba dosiahne špecifickú veľkosť - teda zožerie určitý počet rýb. Zväčšovanie ryby môžte spraviť iteratívne (jemné zväčšenie po každom zožratí ryby) alebo po častiach (ryba sa zväčší až po zožratí špecifického počtu rýb). V oboch prípadoch ale musí byť jasné, ktorá ryba je väčšia a teda bude mať navrh (až na prípad rovnosti).

Level bude trvať presne 60 sekúnd. Po ich uplynutí (alebo hráčovej smrti) hra končí a zobrazí sa výsledné skóre. Pri hráčovej smrti sa skóre vypočíta jednoducho ako score = score/2. Ak je toto skóre najlepšie aké doteraz bolo, zapíše sa ako highscore. Pozor, highscore sa musí zapamätať aj pri vypnutí a zapnutí programu.

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 Play/Quit (príp. Choose Level)

[2 body] - Vykreslenie levelu s pomocnými informáciami v hornej časti obrazovky (veľkosť hráčovej ryby, skóre, highscore...)

[2 body] - Plynulý pohyb myšou po obrazovke, pričom hráčova ryba je na kurzore (alebo ho predstavuje) myši

[3 body] - Generovanie a pohyb rýb v oceáne - tie prídu z jednej strany obrazovky a hýbu sa na druhú stranku, kde zmiznú, pričom sa generujú náhodnej veľkosti s náhodnou rýchlosťou

[2 body] - Správne riešenie kontaktu ľubovoľných rýb, v prípade kontaktu s hráčovou rybou aj započítanie skóre, zväčšovanie rýb

[2 body] - Viac levelov, ktoré sa líšia v designe a v druhoch rýb (každý level môže mať úplne iné ryby alebo zdieľané skupiny), predpokladá sa gradácia obtiažnosti

[1 bod] - Ukladanie a načítavanie highscore do súboru

[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:
- hra obsahuje zvuky zožratia, pohybu a smrti - v prípade zožratia taktiež možno občas zobraziť nejaký vtipný text v bubline pri rybe (ako napríklad v originále - Yummy!)
- pokročilejšie levely obsahujú pokročilejších nepriateľov - napr. žralok (proti nemu vždy ryba prehrá), alebo jedovatá ryba (jed určitú dobu pomaly zmenšuje rybu ktorá ju zožrala - ak bude veľkosť 0, hráč prehral, preto potrebuje veľa jesť) a iné
- hráčova ryba môže po zjedení veľkého počtu rýb mať špeciálne vlastnosti - napr. sa môže na 10 sekúnd zrýchliť, vyhrať pri hocijakom kontakte s hocikým....
- 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).

Autor Jozef Kubík
Študenti pracujúci na zadaní Filip Sekerka Kristián Földeši Matej Komlóssy
Proj20-J5 - Plants vs Zombies

Hit od vydavateľa PopCap, ktorý sa stal večnou klasikou a hralo ho skoro každé dieťa - a my ho teraz skúsime napodobniť. Pre tých, ktorí náhodou túto hru ešte nevideli, je link tu: https://en.wikipedia.org/wiki/Plants_vs._Zombies  alebo množstvo videí či článkov na internete.

Pointou hry je ubrániť sa od postupných vĺn zombií. Nie je to však typický "tower defense" štýl, keďže hra vyžaduje sústavnú pozornosť hráča hlavne počas vĺn a nie pred nimi. Každý level začíname s prázdnou mapou (v originálnej hre to bol trávnik) s piatimi cestami. Tie vedú horizontálne sprava doľava, teda tým smerom pôjdu nepriatelia - zombie. Pred každou vlnou nepriateľov si môžme zvoliť z obmedzeného výberu určitý počet druhov rastlín, ktoré si do prichádzajúcej vlny zoberieme. Po potvrdení výberu začína vlna.

V každej vlne začíname s určitým počtom slnečných lúčov (povedzme 100), za ktoré môžeme sadiť rôzne typy rastlín. Lúče sa postupne počas vlny dopĺňaju zbieraním (na mape sa raz za čas objaví 50 lúčov náhodne alebo z rastliny, pozbierame ho kliknutím naň). Rastliny môžme zasadiť len v počte 1 kus na 1 políčko (políčok je počet riadkov * 9 = 45).  Každá rastlina ma po zasadení iné schopnosti a má nám pomôcť prežiť vlnu nepriateľov (rastliny môžu strieľať na zombie, žrať zombie, generovať slnečné lúče, slúžiť ako mína atď...).

Nepriatelia sa postupne zjavujú v pravej časti obrazovky v rôznych riadkoch a idú postupne doľava. Ak nejaký nepriateľ dosiahne ľavú stranu obrazovky, tak sme prehrali. Títo nepriatelia sú zväčša pomalí (sú to predsa zombie), napriek tomu treba voliť dobre stratégiu aby hráča ich počet neprevalcoval. Ak počas svojej chôdze nepriateľ narazí na nejakú rastlinu, musí ju najskôr zožrať - čo môže trvať rôzne dlho v závisloti od rastliny.

Každý typ zombie aj rastliny bude mať dva hlavné aspekty - špeciálne schopnosti a HP. HP je počet úderov/nábojov, ktoré znesie (môžme nastaviť napr. max 1 úder/výstrel za sekundu), schopnosti sú to, čo dané typy rozlišuje vo funkcii schopnosti rastlín boli spomenuté vyššie, zombie sú nižšie).

Level končí po prežití celej vlny, počas ktorej sa zjaví určitý počet nepriateľov alebo po našej prehre. Počet nepriateľov a ich typ závisí od levelu (typy zombie môžu byť napríklad klasický pomalý, rýchly, zombie čo dokáže preskočiť prvú rastlinu, na ktorú natrafí, obrnený zombie).

V tomto projekte sa posnažíme čo najviac napodobniť túto hru, pričom grafika nebude najdôležitejším aspektom (ale stále aspektom bude!)

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 Play/Quit (príp. Choose Level)

[2 body] - Vykreslenie levelu s pomocnými informáciami v hornej časti obrazovky (druhy rastlín, počet slnečných lúčov, zostávajúci počet nepriateľov...)

[2 body] - Plynulé a správne ovládanie myšou (kliknutie pre zobratie lúča, drag-and-drop pre zasadenie rastliny)

[3 body] - Generovanie, pohyb, vizuál a funkčnosť zombie nepriateľov - tí prídu z pravej strany obrazovky a hýbu sa na druhú stranu, kde zmiznú, pričom ak narazia na rastlinu pred nimi, musia ju najskôr zožrať. Každý typ zombie za bod, maximum ale 3 body

[3 body] - Rastliny - funkčnosť (špecifické vlastnosti), vizuál. Každá rastlina za bod, maximum ale 3 body

[1 bod] - Viac levelov s rôznymi nastaveniami počtu a typov nepriateľov a rastlín

[1 bod] - Správne vyhodnotenia konca levelu (prehra/výhra)

[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:
- highscore časov prejdenia levelov spolu s jeho ukladaním do súboru
- rôzne veľkosti levelov, prekážky na políčkach
- zvuky sadenia, jedenia rastlín a strieľania, príp. výbuchov (v rozumnom množstve aby sa moc neprehlušovali)
- 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).

Autor Jozef Kubík
Študenti pracujúci na zadaní Jakub Žák David Vachálek Adam Olšakovský
Proj20-H1 - Alto

Naprogramujte klon oddychovky Alto's Adventure. Prejdite si aspoň 3 levely, princíp rýchlo pochopíte.

Čo má fungovať:

  • hra je +- plynulá a neseká
  • terén je aspoň trochu náhodne generovaný (t.j. nie je to iba jeden tvar kopca stále dookola)
  • kamene a ich preskakovanie (čím dlhšie hrám, tým viac kameňov), mince a ich zbieranie, priepasti (stačí jeden typ)
  • počíta sa skóre, ktoré sa po konci hry automaticky uloží, pri spustení sa ukáže tabľka top 5 hier
  • aspoň jedna z extra funkcií: saltá (aj s padaním na hlavu), pierka + magnety, "grinds" - šmýkanie sa po strechách/šnúrach, elders - strážcovia ktorí ťa naháňajú (je potreba aby Alto vedel nejako zrýchľovať, a ničnerobením spomaľovať)

Pekná grafika, hudba, lamy, wingsuit potešia (a môžu zlepšíť body), no nie sú nevyhnutné.

Autor Juraj Holas
Študenti pracujúci na zadaní Marek Mužika Martin Krišťák
Proj20-H2 - Osmos

Naprogramujte klon hry Osmos (zahrajte sa trochu:). Pri originálnej hre sa "kamera" hýbe po hracej ploche spolu s hráčom - toto implementovať nemusíte a namiesto toho zobrazte celú plochu naraz. Dôležitým prvkom hry je pohyb našej bunky a pohlcovanie iných, do čoho je zamontovaná celkom uveriteľná fyzika. Môžete použiť napr. tieto moje vzorce (odvodené zo zákona zachovania hybnosti) :

Pri pohybe moja bunka "vypľúva" malé bunky opačným smerom (všetky sú konštantnej hmotnosti \(m_{out}\) a rýchlosti \(v_{out}\)). Moja rýchlosť a hmotnosť sa teda zmení:

\[ m_{po} = m_{pred} - m_{out} \quad;\qquad v_{po} = (v_{pred}.m_{pred} - v_{out}.m_{out})/m_{po} \]

Keď sa veľká bunka (\(V, M\)) dotkne malej (\(v, m\)), každú sekundu z nej vysaje kúsok hmotnosti (\(\Delta m\)). Ich vlastnosti sa zmenia:

\[ m_{po} = m_{pred} - \Delta m \quad;\qquad v_{po} = v_{pred} \]

\[ M_{po} = M_{pred} + \Delta m \quad;\qquad V_{po} = (V_{pred}.M_{pred} + v.\Delta m)/M_{po} \]

Veľkosť bunky sa samozrejme odvíja od jej hmotnosti, napr. \(r = a.\sqrt{m}\), kde \(a\) je nejaká vhodná bulharská konštanta (fyzikálne má niečo spoločné s hustotou).

 

Čo má fungovať:

  • hra je +- plynulá a neseká
  • pohyb a zrážky buniek (napr. podľa vzorcov hore) a odrážanie od stien hracej plochy
  • niekoľko levelov uložených v súboroch a/alebo náhodne generované levely zvyšujúcej sa obtiažnosti
  • save/load hry na jeden klik (vrátane pozícií a rýchlostí buniek)

Za bonusové body sú kvalitne spravení nepriatelia (tí zelení v pôvodnej hre) alebo levely s gravitáciou (tam si už fyziku zistite sami).

Autor Juraj Holas
Študenti pracujúci na zadaní Jakub Toma Michal Slávik Ondrej Richnák
Proj20-K1 Zlepené stromy

xml tree illustrationglue

Majme zaznamenané N-árne stromy, ktoré čítame z nejakých súborov, ale vždy vidíme len nejakú malú časť. Napríklad ako keby sme čítali JSON alebo XML súbor skrolovaním dokumentu v malom okne prehliadača. Časti stromu prečítame a doplníme do existujúcej štruktúry. Problém je, že treba identifikovať, ktorá časť z práve videného podstromu sa už nachádza v pamäti a na ktoré miesto sa má preniesť a "prilepiť". Naprogramujte algoritmus, ktorý nájde správne miesto na ktoré prilepí práve prečítaný podstrom. Zvoľte vhodnú reprezentáciu. Nájdite alebo vytvorte dataset, na ktorom to budete ilustrovať a vyrobte vizualizáciu, ktorá zobrazí prilepovanie stromu v krokoch čítania. Neváhajte sa ozvať s prípadnými otázkami, typy stromov alebo spracovaných dát vieme upresniť.

Úlohy:

[6 bodov] vlastná reprezentácia stromu, načítanie stromu po sekvenciach hĺbky h (parameter v kóde), overenie na dátach, že to funguje, nejaký rozumný výpis

[3 body] vykreslenie lepenia stromov ako animácia, nejake triviálne ovládacie prvky ako pause, play, rýchlosť. 

[2 body] načítanie ľubovoľného stromu z human readeble súboru (napr. načítať JSON alebo XML) alebo viacerých nadväzujúcich súborov (aj s testovacími príkladmi súborov) 

[2 body] moznosť meniť strom (odrezať, prevesiť) a ukladať zmeny

[2 body] vyhodnotenie vyváženosti načítaného stromu, porovnanie 2 zlepených stromov (diff) alebo iné advanced vychytávky (dohoda možná)

 

Autor Kristína Malinovská
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj20-K5 Pandemic19

corona svet ilustraciacovid virus

Adaptujte známu kooperatívnu stolovú hru Pandemic pre momentálnu situáciu doma a vo svete. Naštudujte a ak máte možnosť zahrajte si túto výbornú stolovku a vymyslite ako ju urobiť pre PC. Vaše prevedenie nemusí mať rovnakú komplexnosť ako pôvodná hra. S radosťou poskytnem feedback a komentáre na navrhované riešenie ešte v stave plánovania.

Úlohy:

[9 bodov] hra má layout, herný plán podľa originálnej stolovky, funguje na ťahy a udalosti podľa stolovky a môže ju hrať aspoň jeden hráč za 1 PC (idálne už v tejto fáze mať viac hráčov), počítanie skóre a vyhodnotenie konca hry, ukladanie rozohranej hry (toto je tiež dôležité lebo to nie je hra na 5 minút), dobrá ovládateľnosť a hrateľnosť, berte to tak, že sa to potom určite radi zahráte s kamarátmi

[3 body] grafické prevedenie a efekty 

[3 body] editor: pridávanie a odoberanie miest, spôsobov dopravy, ukladanie a načítavanie zmenených layoutov

 
Autor Kristína Malinovská
Študenti pracujúci na zadaní Martina Repiská
Proj20-H4 - Lemmings

Vytvorte klon klasickej hry Lemmingovia.

V nej má hráč za úlohu bezpečne previesť N lemmingov zo štartu (odkiaľ padajú) do cieľovej brány. Samotní lemmingovia však chodia stále iba rovno, kým nenarazia na stenu, potom sa otočia a idú do opačnej strany.

Hráč musí jednotlivým panáčikom prideľovať úlohy tak, aby vytvoril trasu do cieľa, napr. "ty vykop dieru", "ty stavaj schody", "ty vybuchni", ...

 

Čo má fungovať aby ste mali 15 bodov:

  • Hra je +- plynulá a neseká
  • Korektné ovládanie myšou
  • Hra má aspoň 3 levely (mapy) zvyšujúcej sa obtiažnosti, ktoré sú načítané zo súboru
  • Terén aj jednotlivé typy lemmingov sú obrázky (alebo animácie, +1bod)
  • Lemmingovia sa pohybujú kým nenarazia do steny, potom sa otočia. Malý sklon kopca vedia prejsť, strmý kopec už nie.
  • Padanie: keď lemming padne z veľkej výšky (napr. 10x jeho veľkosť), keď padne do vody, alebo keď padne mimo mapu, tak zomrie
  • Info panel na ktorom vidím: čas, ktorý sa odpočítava, koľko lemmingov je aktuálne na mape, a koľko lemmingov som zachránil (prešli cieľom). Nie je nutné zachrániť 100% lemmingov aby hráč prešiel levelom.
  • Musíte implementovať všetky tieto typy lemmingov:
    • digger - kope jamu priamo dole (v takom prípade sa upravuje priamo terén!) 
    • builder - stavia schody (tempo stavania je nižšie ako rýchlosť chôdze)
    • blocker - otočí lemmingov ktorí k nem prídu
  • Navyše musíte implementovať aspoň tri zo zvyšných piatich typov lemmingov (alebo atomovka):
    • climber - lezie po stenách
    • floater - neublíži mu veľký pád
    • bomber - po piatich sekundách vybuchne, pričom odstráni časť terénu
    • basher - kope vodorovný tunel
    • miner - kope tunel šikmo dole
    • atomovka - zmení všetkých lemmingov na bomberov

 

Pekná grafika, hudba, veľa typov lemmingov, alebo ľubovoľná kreatívna práca navyše potešia (a môžu zlepšíť body), no nie sú nevyhnutné.

Autor Juraj Holas
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj20-H3 - Hexa Game of Life

Conway's Game of Life je jednoduchý tzv. celulárny automat (neplašte sa, s UTI to má málo spoločného), kde máme bunky v mriežke, a každá bunka sa buď narodí alebo umrie podľa toho, koľko buniek je okolo nej.

 

Úlohou je naprogramovať aplikáciu na vizualizáciu alternatívnej verzie - Game of Life na šesťuholníkovej mriežke:

 

Požiadavky:

  • používateľ vie animáciu spustiť, pozastaviť, alebo posunúť o jeden krok (generáciu)
  • na začiatku, alebo keď je animácia zastavená, vie používateľ kliknutím vyrobiť/zabiť vybrané bunky
  • aktuány stav sa dá uložiť do súboru (ideálne textového v nejakej rozumnej podobe), a následne znova načítať
  • veľkosť šesťuholníkovej mriežky sa dá nastaviť
  • vek bunky je zobrazený farebne - napr. čím staršia bunka, tým svetlejšia šedá, alebo pod.

 

Ďalšie detaily/otázky mailom alebo osobne.

Autor Juraj Holas
Študenti pracujúci na zadaní Mário Hlavačka Mariia Pikuleva
Proj20-H5 - Skladačka

Vytvorte hlavolam, v ktorom bude hráč z dostupných dielov skladačky skladať požadovaný tvar.

                  

Čo má fungovať aby ste mali 15 bodov:

  • Pekné GUI, kde na strane hráč vidí cieľový tvar, a na ploche má "rozhádzané" jednotlivé dieliky (náhodná pozícia, otočenie, náhodnou stranou hore)
  • Ovládanie: diely skladačky sa dajú hýbať ťahaním myšou, a otáčať v/proti smere hodinových ručičiek koliečkom myši. Kliknutím pravým tlačítkom dielik otočím spodnou stranou nahor.
  • Keď sa dva dieliky prekrývajú, zvýraznia sa (ako chyba).
  • Detekcia správneho tvaru:
    • hráč nemusí tvar poskladať na pixel presne, musí tam byť nejaká tolerancia
    • poskladaný tvar môže byť aj inak otočený / zrkadlový ako je cieľový tvar
    • niektorý hlavolam môže mať aj viac riešení
  • Úvodná obrazovka, kde hráč dostane na výber z aspoň piatich hlavolamov.

Ako bonus môžete spraviť napr. hlavolamy s oblými hranami, alebo rozumne fungujúci generátor náhodných hlavolamov (ich obtiažnosť by mala byť netriviálna).

Autor Juraj Holas
Študenti pracujúci na zadaní Andrej Paluch Marek Ďurana Richard Nagy