Programovanie 4 - Java / Letný semester 2020/2021

Projekt

Proj22-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í Fedor Kalantaev
Proj22-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í Marcel Palaj Zuzana Mačicová Nikola Kulíková
Proj22-L3 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) = (PX, PY, PZ) + normalize(DX, DY, 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) = (PX, PY, PZ) + 5 * normalize(DX, DY, 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í Nikto nepracuje na tomto zadaní.
Proj21-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í Daniel Hutňan Ján Kelemen Rastislav Urbanek
Proj21-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í Miloš Uriga Claudia Barillová Barbora Forgáčová
Proj21-K4 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 nejakú AI, čím chytrejšia, tým viac bodov

 

Autor Kristína Malinovská
Študenti pracujúci na zadaní Richard Mištík Miroslava Sabolová Lenka Kudláčová
Proj21-P2 - 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 Peter Borovanský
Študenti pracujúci na zadaní Sabína Samporová Pavel Semenov Omar Al-Shafe´i
Proj22-P4 - Zvieratká deda Lesoňa

Zvieratká v lese deda Lesoňa majú športový deň v preťahovaní sa lanom. Majú rôznu silu, čo ilustruje tento diagram. Dve myšky vydajú za jednu mačku, mačka a myška je ako húska a pod. V prehľadnejšej forme s piktogramovou abstrakciou to máte tu:

V rámci súťaže v preťahovaní sa na dvore ziškli rôzne zvieratká, dva príklady vidíte na obrázku. Vašou úlohou je ich rozdeliť najprv na dve, potom na tri rovnako silné družstvá.



Úlohou projektu je vytvoriť prostredie, v ktorom:

  • môžete vytvoriť zadanie hlavolamu, teda umiestniť zvieratká do lesa. Predpokladá sa, že to urobíte prostredníctvom príjemného GUI, nie ako textový konfiguračný súbor :-)
  • v prostredí môžeme hľadať riešenie, t.j. užívateľsky príjemným spôsobom (t.j. myšou) presúvať jednotlivé zvieratká medzi družstvami. Prostredie indikuje, ktorá zo skupín je momentálne silnejšia. Samozrejme, ak sa pomýlime, môžeme zvieratko vrátiť, resp. existuje nejaká funkcionalita typu Undo.
  • v každom momente (pri návrhu hlavolamu či jeho riešení) môžeme stlačiť tlačidlo, ktoré povie, koľko riešení ma hlavolam v momentálnej konfigurácii, keď sme už presunuli niektoré zvieratká do skupín. Zaujímavé sú výsledky 0 ("žiadne"), 1, 2, 3, 4 alebo "5 a viac". Žiadne riešenie indikuje, že sme (asi) urobili chybný ťah, samozrejme, ak pôvodné rozloženie lesa malo riešenie. Príklad lesa, ktorý nemá riešenie je myš a mačka, to sa vám nikdy nepodarí rozdeliť na rovnako silné skupiny. Okrem toho, zvieratká sú anonymné, teda rozdelenie myš1 proti myši2 je to isté, ako myš2 proti myši1. Príklad lesa, ktorý vieme rozdeliť jediným spôsobom na dve rovnako-silné skupiny je 4 myši, mačka, húska. Príklad lesa, ktorý má 3 rôzne riešenia je 4 myši, 2 mačky, 2 húsky. Riešenia sú:
    • 4 myši a 2 mačky proti 2 húsky,
    • 4 myši a húska proti 2 mačky a húska,
    • 2 myši a mačka a húska proti 2 myši a mačka a húska.

    Táto časť musí obsahovať nejaký algoritmus, pravdepodobne backtracking, ktorý hľadá a počíta rôzne riešenia. Ak nie, tak ste niečo nepochopili, a pýtajte sa...
  • v ľubovoľnom momente vypĺňania možme urobiť Save a Load, čo uloží aktuálnu rozohranú konfiguráciu, a opätovne ju načíta. Potom môžeme pokračovať v riešení ďalej.
  • ak nájdeme korektné riešenie (rozloženie zvieratok na polovice, resp. tretiny, podľa sily), program nám gratuluje a môžme hľadať event. ďalšie riešenia.


    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í Anna Camara
Proj21-J1 Vlak DOS

Možno si niekto z vás pamätá túto klasiku, ktorá existuje už od roku 1993, teda dlhšie ako vy, či ja sám. V tomto projekte si ju skúsime naprogramovať a jemne prispôsobiť modernej dobe (teda vylepšiť). Zahrajte sa napríklad tu: https://www.retrogames.cz/play_487-DOS.php?language=CZ .

Hra je jedným z klonov typického hada, teda pohybujete sa po obrazovke a zbierate predmety, ktoré zväčšujú vašu dĺžku. Akurát v tejto hre sa neobjavujú objekty po jednom na náhodnom mieste, ale sú vždy fixne na tých istých miestach v konkrétnom leveli. Okrem toho každý level obsahuje aj východ - t.j. miesto, kde hra končí, ak sa tam vlak dostane a pozbieral po ceste všetky predmety. Tým sa teda hra stáva skôr logickou ako náhodnou.

Vzhľadom na to, že hry na spôsob hada sa programujú často, pohráme sa v tomto projekte trochu viac aj s vizuálom - bude na vás, či hru spravíte na retro spôsob, alebo jej vdýchnete nový moderný život, podstatné je, aby hra vyzerala dobre.

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/Ukonči hru

[2 body] - Vykreslenie obrazovky levelu s pomocnými informáciami v spodnej alebo vrchnej časti obrazovky (číslo levelu, skóre) a načítanie levelu zo súboru (formát je na vás)

[3 body] - Vykreslenie vlaku a jeho vágonov v prípade zobratia objektu, vykreslenie objektov, ktoré môže vlak zobrať, vykreslenie prekážok a stien

[3 body] - Správny beh hry (updatuje sa každych 0.x sekundy, pri zobratí objektu sa na vlak napojí nový vagón, v prípade nárazu do steny alebo prejdenia sa správne ukončí level)

[2 body] - Zvuky pre pohyb vlaku, zobratie predmetu, náraz to steny a koniec levelu

[1 bod] - Viac levelov, ktoré sa líšia v štruktúre (aspoň tri, pričom sa predpokladá gradácia obtiažnosti)

[1 bod] - Level možno ľahko resetovať stlačením klávesy R

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

- objekty nie sú všetky rovnaké, ale aspoň tri rôzne druhy (pričom po zobratí sa prejavia ako iný typ vagónu)
- kedykoľvek počas hry sa po stlačení klávesu F4 zastaví hra, aby užívateľ mohol napísať tzv. heslo - heslo je 5 znakový reťazec, ktorý sa môže viazať k určitému levelu, ak je heslo správne, hra sa presunie do daného levelu
- hlavné menu obsahuje aj možnosť Výber levelu, v ktorom sa dá vybrať level, do ktorého sa hráč pri tomto behu aplikácie už dostal (do menu sa dá dostať kedykoľvek stlačením klávesy Escape)
- 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í Sebastián Jankovič Miriam Cidoríková Michaela Sajková
Proj21-J2 Crimsonland

Tento projekt bude založený na pôvodnej hre Crimsonland a jeho hlavným prvkom bude NÁHODA. Trochu si hru 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/Crimsonland#Gameplay , odporúčam pozrieť aj nejaké video k tomu.

Hra začína postavou v centre obrazovky (kamera sa nebude u nás vôbec hýbať). Ovládame ju klasikou, WASD pre pohyb, mierenie myšou, left click pre strieľanie, R pre prebitie zbrane. HP, rýchlosť postavy a jej počiatočná zbraň budú od začiatku hry dané. Údaje môžete (ale nemusíte) zobraziť niekde na obrazovke. Postáv bude viac typov (každý typ bude mať iné hodnoty vlastností a zbraň), pričom typ, s ktorým budeme hrať v danej hre, bude vybraný NÁHODNE. Taktiež bude viac typov zbraní, z ktorých každá z nich bude mať špecifické vlastnosti (rýchlosť strieľania, damage, veľkosť zásobníku).

Postupom času prichádzajú na obrazovku rôzni nepriatelia. Každý typ nepriateľa je graficky rozlíšiteľný a má iné vlastnosti (rýchlosť, HP, typ útoku). Počet nepriateľov v každom leveli je NÁHODNÝ výber z nejakého rozumného intervalu, napr. <23-30>. Nepriatelia prichádzajú na obrazovku z NÁHODNÉHO okraju obrazovky a putujú po obrazovke. Popri tom sa snažia na postavu útočiť (zbraňou, ručne alebo inak). Ak hráčovi klesne HP na 0, zomrie, to isté platí pre každého nepriateľa. Level končí, keď zomrie buď postava, alebo všetci nepriatelia. HP nepriateľov, ako aj postavy, je na vás, je ale rozumné nastaviť ich tak, aby hra bola kompetitívna (nie príliš ľahká, ale ani neprekonateľná).

Po zabití každého nepriateľa je určitá NÁHODNÁ šanca (napr. 15%), že z nepriateľa vypadne nová zbraň alebo perk. Typ tohto vypadnutého predmetu je opäť NÁHODNÝ z nejakého intervalu možností, ktorý má daný typ nepriateľa vopred definovaný. Pokiaľ postava zdvihne daný predmet, ovplyvní ju to. Na zdvihnutie je však nejaký obmedzený čas z rozuméno NÁHODNÉHO intervalu, napr. <3-6> sekúnd.

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 jednoznačne rozoznať.

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ť. Taktiež logika nepriateľov nemusí byť na nejakej extra úrovni, pohyb a prípadná streľba nepriateľov môže byť pseudo-NÁHODNÁ (t.j aspoň nestoja len v rohu, ale hýbu sa, najlepšie smerom k centru mapy)

Bodovanie:

[2 body] - Postava - funkčnosť (plynulý pohyb, strieľanie), vizuál. Každá postava za bod, maximum ale 2 body

[3 body] - Nepriatelia - funkčnosť (plynulý pohyb k postave, typ útoku, špecifické typové vlastnosti). Každý typ nepriateľa za bod, maximum ale 3 body

[2 body] - Zbrane - funkčnosť (rýchlosť strieľania, damage, veľkosť zásobníku). Každý typ zbrane za bod, maximum ale 2 body

[2 body] - Perky, ktoré môžu spadnúť z nepriateľov a nejako ovplyvňujú postavu (zväčšené HP/rýchlosť, dočasná nesmrteľnosť, ...). Každý perk za bod, maximum ale 2 body

[3 body] - Aspoň tri rôzne levely, ktoré majú iné vlastnosti (iné intervaly typov nepriateľov a ich počtov), pričom sa predpokladá gradácia obtiažnosti

[1 bod] - Vykreslenie mapy, spadnutých predmetov

[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:
- hra obsahuje zvuky streľby a úmrtia postavy/nepriateľa
- nepriatelia smeruju rovno za postavou, nepotulujú sa náhodne
- 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, kde je postava, predmety a prichádzajúci nepriatelia)
- vlastný level - používateľ sa môže nejako dostať k nastaveniu levelu (počtu a typov postáv, HP, rýchlosti, zbrane...), pričom po nastavení môže spustiť level s týmito parametrami
- 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í Michaela Mattová Patrik Hampel Klaudia Garajová
Proj21-J3 Age of War

Ďalšia klasika, ktorú si môžte zahrať napríklad tu: https://www.superhry.cz/games/890/ . Hoci pôvodná verzia slúži na hru proti počítaču, my sa v hlavnej časti projektu zameriame na verziu pre dvoch ľudí.

Aby sme mohli ovládať hru pre dvoch na jednom počítači, vytvoríme si kopu klávesových skratiek. V zásade je ich rozloženie na vás (ak máte vlastné, uveďte ho do readme.txt), jedno z možných prikladám v súbore config.txt. Cieľom hry je progresívne vytvárať postavy a zbrane, ktoré nám ničením súpera získavajú viac peňazí, za ktoré môžme kupovať nových vojakov. Jeden hráč začína so základňou v ľavej časti obrazovky, druhý v pravej. Hráčovi vojaci postupne putujú na druhú stranu obrazovky, pričom ak sa stretnú so súperovou postavou, bojujú s ňou. Cieľom hry je zničiť súperovu základňu. Detailov ovládania je viac, najlepšie bude, ak si hru zahráte a sami pochopíte jej pointu.

Samotná logika hra bude dosť na Vás - sami si vyberte, koľko vojakov bude v ktorej dobe, akí budú silní, koľko XP treba do ďalšej doby atď. Táto časť je 'free-ride', teda sami ju určujete, ale pozor, ak ste hrali nejakú stratégiu alebo aj kľudne fps s charaktermi, určite viete, že nájsť balanc medzi všetkým tak, aby niečo nebolo príliš slabé/silné, nie je ľahké. Všetky detaily logiky popíšte do súboru readme.txt, najlepšie aj s komentárom podľa čoho ste sa pri čom rozhodovali.

V hlavnej verzii nie je potrebné riešiť veci typu turrety, strieľanie z ďialky a pod., zamerajte sa na základ a prípadne v bonuse vylepšujte hru. Nebude sa až tak dbať na design, ale všetko podstatné musí byť jasne rozoznateľné a hra musí obsahovať aspoň nejaké obrázky. Posúvanie obrazovky ťahaním myši nebudeme riešiť, takže si bojisko naškálujte tak, aby bolo vidno obe základne zároveň.


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 Play/Quit

[2 body] - Mapa - základne (vykreslenie, HP), informácie o peniazoch a XP (príp. funkcionalitu klávesových skratiek)

[4 body] - Vojaci - funkčnosť (pohyb dopredu, boj pri kontakte s nepriateľom, HP, sila útoku, rýchlosť, typy útoku...). Každý vojak za bod, maximum ale 4 body

[2 body] - Doby - po získaní určitého počtu XP hráč môže postúpiť do ďalšej doby s lepšími vojakmi. Každá doba za bod, maximum ale 2 body

[1 bod] - Special - raz za dobu môže každý z hráčov vyslať útok, ktorý ubližuje len nepriateľovi (veľkosť pokrytia mapy a damage či spôsob vykonania je na vás)

[3 body] - Ovládanie - funkcionalita kláves (vytváranie vojakov, posúvanie dôb, special útok...) a ich správne vykonávanie

[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:
- na základňu si hráč môže kupiť tzv 'turret' - ten automaticky strieľa po nepriateľoch v určitej blízkosti základne (pre lepší turret z novej doby treba najskôr predať starý)
- druhý hráč môže byť počítač - nie je úplne hlúpy (nerobí random veci), ale sleduje nejakú stratégiu
- určití vojaci môžu útočiť aj cez svojich vojakov pred nimi (ako napr. strelci), pričom svojím vojakom neubližujú
- iné funkcionality hodné bodov

Vypracované úlohy a bonusové funkcionality popíšte do súboru readme.txt

Autor Jozef Kubík
Študenti pracujúci na zadaní Filip Zaikner Ľudovít Jackulík Vladimír Ačjak
Proj21-J4 Minigolf

Naprogramujeme si jednoduchý minigolf. Podobných hier je na internete veľa, my sa zameriame na čisto 2D verziu, jednoduchý príklad je dostupný napr. tu: https://www.zahraj.sk/online-hra/247-minigolf/ . Hru si prispôsobime pre viac hráčov.

Hra bude pre 1-3 hráčov. Od začiatku bude určený počet jamiek, mapy aj par (doporučený počet úderov na jamke, ten skúste určiť rozumne vy). Aby to nebolo len o strieľaní loptičky a odrážaní od stien, na naše jamky pridáme pár vecí, ktoré nejako interagujú s loptičkou. Príkladom je voda (ak tam loptička skončí, nedá sa nič robiť, hráč musí ísť znova od miesta, odkiaľ strieľal), piesok (značne spomalí loptičku) alebo pohybujúce sa prekážky.

Vzhľadom na to, že hry na spôsob minigolfu sa programujú často, pohráme sa v tomto projekte trochu viac aj s vizuálom - očakávaný je slušný vizuál každej mapy a taktiež pomocné informácie na obrazovke (počet úderov, par, číslo jamky). Po každej jamke sa zobrazí tabuľka s momentálnym stavom.

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 s x hráčmi, x ∈ <1,3>

[4 body] - Aspoň 8 rôznych jamiek s gradáciou obtiažnosti

[2 body] - Na každej jamke vykreslenie počtu úderov, par a číslo jamky; po prejdení jamky všetkými hráčmi sa zobrazí updatovaná tabuľka s počtami úderov

[1 bod] - Správne strieľanie loptičky - je na vás či sa sila úderu určí natiahnutím alebo klikom (čím silnejšie natiahnutie/väčšia vzdialenosť kliku, tým väčšia sila)

[1 bod] - Správny odraz loptičky od stien, príp. objektov

[3 body] - Objekty meniace trasu loptičky - vnútorná stena (odraz), piesok (spomalenie), voda (reset loptičky), viac a rôzne objekty pre neskôršie jamky

[2 body] - Posledné jamky majú aj pohybujúce sa vnútorné steny, odraz sa pre ne počíta v momente dotyku loptičky so stenou

[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:
- jamka nemusí byť kompletne uzavretá mapa, pričom ak náhodou loptičky vyjde mimo mapy, resetuje sa jej pozícia na poslednú známu a pripočíta sa penalizácia +1 úder
- zvuky pri údere, spadnutí loptičky do jamky, spadnutí loptičky do vody, odraze od steny...
- hra registruje highscore každej jamky a celkového počtu úderov po odohratí všetkých jamiek, pričom dané údaje sa zobrazujú na relevantných miestach (pri jamke, resp. tabuľke úderov), toho highscore si samozrejme hra zapamútá aj pri jej vypnutí a opätovnom zapnutí
- iné funkcionality hodné bodov

Vypracované úlohy a bonusové funkcionality popíšte do súboru readme.txt

Autor Jozef Kubík
Študenti pracujúci na zadaní Patrik Modrovský Adam Rigan Matej Čiernik
Proj21-J5 Guličky

Kedysi veľmi populárny typ oddychovky, ktorý sa možno neprávom vytráca - implementácií je veľa, príklad je tu: https://www.superhry.cz/hra/18823-bubble-shooter-hd . Zahrajte sa, inšpirujte sa, pochopte.

Hra začína s x (nejaká konštanta) riadkami guličiek rôznych farieb. Posledných aspoň 5 riadkov je na začiatku úplne voľných. Úlohou hráča je strieľaním nových guličiek spájať 3 a viac guličiek rovnakej farby dokopy. Ak sa tak stane, všetky spojené guličky rovnakej farby spadnú, resp. zmiznú. Po určitom počte výstrelov, pri ktorých sa nevymaže žiadna gulička, sa všetky guličky posunú o riadok nižšie a na vrchu sa vytvorí nový riadok guličiek. Hráč prehráva, ak sa guličky dostanú až do najspodnejšieho riadku - a naopak vyhráva, ak sa mu podarí zbaviť všetkých guličiek.

Aby bolo jasné, nepredpokladá sa presná fyzika guličky, už len zo zahratia sa prídete na to, že guličky nepodliehajú presne stopercentne fyzike odrazu a dopadu. Može to byť niečo jednoduchšie, nejakú napr. mreža x-uholníkových útvarov, ktoré sa vizuálom budú tváriť ako guličky. Na všetko isto prídete pri implementácii, alebo možno aj skôr. Pointou je, aby to vyzeralo dobre a reálne.

Vizuál môže byť jednoduchý (koniec koncov moc sa tu vymyslieť nedá), ale mal by dobre vypadať. Hocijaké pomocné informácie pre hráča môžte, ale nemusíte zobraziť, to už je na vás.

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] - Aspoň 3 levely s postupnou gradáciou obtiažnosti (viac riadkov s guličkami, viac farieb guličiek, menší počet výstrelov bez vymazania guličky)

[1 bod] - Vygenerovanie počiatočného nastavenia levelu - môže byť dané, ale aj náhodné, výber je na vás

[3 body] - Vizuál - Pekné obrázky guličiek, jasne rozoznateľné farby, šípka ukazujúca smer streľby

[3 body] - Správne riešenie kontaktu guličky so stenou (odraz) a s inou guličkou (tej istej / inej farby)

[1 bod] - Správne vyhodnotenie konca hry - či už prehry alebo výhry

[2 body] - Ak istá skupinka guličiek stratí kontakt so všetkými inýmy skupinami guličiek a hornou stenou (teda nič ju nedrží zhora a zboku), automaticky spadne/zmizne

[1 body] - Zvuky pri streľbe, dopade guličky, spadnutí guličiek

[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:
-na začiatku sa okrem guličiek nageneruje aj istý počet trvalých prekážok - môžte ich zobraziť ako čierne guličky, s ktorými nejde nič robiť a jediný spôsob, ako môžu zmiznúť, je spadnutím po strate kontaktu so všetkými okolitými skupinami guličiek
- evidovanie highscore pre každý level - časového aj bodového (t.j koľko výstrelov trvalo, kým hráč prešiel level), momentálny časový aj bodový údaj treba potom zobraziť pri hraní levelu, čím menej to hráčovi trvalo, tým lepšie
- na začiatku sa okrem guličiek nageneruje aj istý počet premenlivých guličky - menia svoju farbu každý výstrel (z určitej množiny farieb, týchto množín bude viac)
- na začiatku sa okrem guličiek nageneruje aj istý počet viacfarebných guličky - guličky reagujú na viacero farieb, je to nejako na danej guličke zobrazené
- iné funkcionality hodné bodov

Vypracované úlohy a bonusové funkcionality popíšte do súboru readme.txt

Autor Jozef Kubík
Študenti pracujúci na zadaní Róbert Vangor Simona Dubeková Natália Macková
Proj21-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.

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

[4 body] pekná grafika, 3D s možnosťou otáčať hrací plán, šikovné ovládacie prvky, kreativite sa medze nekladú.

[3 body] vyhodnotenie konca hry a špeciálnych stavov (šach).

Autor Kristína Malinovská
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj22-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í Nikto nepracuje na tomto zadaní.
Proj21-M2 2D particle engine

 

V tejto úlohe vytvoríte program pre konfiguráciu particle systémov v 2D. Časticiam sa bude dať nastaviť počiatočná rýchlosť, zrýchlenie, rotácie okolo vlastnej osi a okolo počiatočnej pozície. Ďalej sa budú dať nastaviť grafické zmeny - profil úpravy farby v čase, priehľadnosť.

  • [3] Základný update + draw loop naviazaný na čas
  • [2] Vykreslenie častíc
  • [1] Inicializácia častíc s mierou náhody
  • [1] Rýchlosť a zrýchlenie
  • [2] Rotácie
  • [2] Dynamický vizuál
  • [2] Používateľské rozhranie (pre nastavovanie parametrov, ukladanie a načítanie súboru, ...)
  • [1] Uloženie particle systému do súboru
  • [1] Načítanie particle systému zo súboru
Autor Matej Fandl
Študenti pracujúci na zadaní Katarína Dzurendová
Proj22-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í Nikto nepracuje na tomto zadaní.
Proj22-M4 Raycasting prechádzka

Raycasting je technika renderovania, ktorá sa používala vo veľmi starých 3D hrách, ako napríklad Wolfenstein 3D. Nepracujete v nej s trojuhoľníkovou geometriou, ale na základe konkrétnych pravidiel a jednoduchej reprezentácie sveta prekresľujete vertikálne linky na obrazovke, čím navodzujete ilúziu 3D priestoru.

Vašou úlohou bude vytvoriť malý svet podobný bludisku, v ktorom sa hráč môže prechádzať.

  • [3] Základný update + draw loop naviazaný na čas
  • [3] Vykreslenie sveta so stenami podľa mapy v súbore (pohľad z prvej osoby), podlahou a oblohou (teda bez stropu)
  • [2] Pohyb hráča po mape s možnosťou kráčania dopredu a dozadu a otáčania sa doľava a doprava
  • [2] Detekcia kolízie, teda hráč nebude môcť prechádzať cez steny
  • [1] Načítanie mapy zo súboru
  • [1] Vizuálny efekt - hmla
  • [1] Vizuálny efekt - dážď
  • [2] Vizuálny efekt - svetlá
Autor Matej Fandl
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj22-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í Ján Pastorek
Proj22-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í.
Proj21-P-7 - Geodoska

Geodoska je štvorcová doska s parametrizovateľnými rozmermi, ktorá má klince v mrežových bodoch. K dispozícii máte roznofarebné gumičky, ktoré môžete okolo klincov natiahnúť, najlepšie ilustruje obrázok. Ramená gumičky tvoria úsečky, ale gumička sa nesmie prekrížiť. Vytvorte hraciu plochu (playground), v ktorom sa dieťa môže hrať s virtuálnymi gumičkami rôznych farieb, vytvárať rôzne útvary, uvažovať o ich obvode a obsahu.

Funkcionalita:

  1. veľkosť geodosky je parametrizovateľná v programe,
  2. umožnite natiahnuť gumičku - vytvoriť uzavretú lomenú čiaru,
  3. kontrolujte neprekríženie gumičky, aj uzavretosť lomenej čiary,
  4. natiahnutá gumička sa dá nejako editovať, prekolíkovať,
  5. implementujte farby - gumičky rôznych farieb,
  6. počíajte obvod a obsah vykolíkovanej oblasti.

Autor Peter Borovanský
Študenti pracujúci na zadaní Barbora Ďuračková
Proj21-P3 - Stavby z kociek

Stavba z rovnakých nezplených kociek kociek leží na podložke. Ku každej stavbe existuje pôdorys, ktorý má tvar priemetu kociek do roviny podstavy, pričom číslo v štvorčeku označuje počet kociek v danom stĺpci. Kocky nie sú zlepené dokopy, preto nijako nemôžu visieť vo vzduchu. Ku každej stavbe z kociek viete vyrobiť pôdorys s číslami.
Aj opačne, zamyslite sa. Ku každému pôdorysu stavby viete vyrobiť stavbu z kociek. Lepšia ilustrácia na obrázku.

Funkcionalita:
Navrhnite hraciu plochu, kde dieťa môže k zobrazenej stavbe z kociek naeditovať pôdorysný plán a program mu riešenie skontroluje. Rovnako, k pôdorysnému plánu viete zostrojiť stavbu z kociek. Pritom musíte vyriešiť 3D zobrazovanie kociek, a pohyb v priestore. Predpokadané riešenie bude kresliť kocky do canvasu (od najzadnejšej kocky k prednejším - to zabezpečí prekrývanie) a dovolí pohyb v 3D priestore. Na to máte 2x2 šípky, a ešte potrebujete 2 znaky na ďalšiu súradnicu.


Téma pochádza z dielne prof.Hejného, tzv. Hejného metóda vyučovania matematiky.

Autor Peter Borovanský
Študenti pracujúci na zadaní Adam Gonšenica Marek Lichvár
Proj21-K1 Dopredná neurónová sieť a jej vizualizácia

Najznámejší model umelej neurónovej siete je takzvaný viacvrstvový perceptrón (MLP), ktorý sa učí algoritmom spätného šírenia chyby. Tento klasický model stojí aj za momentálne veľmi populárnymi hlbokými neurónovými sieťami. Na takúto neurónovú sieť sa môžeme pozerať ako na vstupno-výstupné zobrazenie, čiže funkciu, ktorú ale neriešime analyticky ale na základe dát. Najbežnejšia úloha pre MLP je klasifikácia, čiže priradenie označenia nejakej triedy nejakému dátovému bodu, napríklad, ktoré číslo je na obrázku.   

To ako sa neurónová sieť učí môžeme sledovať na základe toho akú veľkú robí pri učení chybu, nazývame to krivka učenia. Aj keď je primárnou úlohou neurónovej siete určiť, čo je na obrázku, vieme sa pozrieť aj na to, ako si každú dátovú triedu sieť predstavuje.

MNIST je databáza tisícov malých čiernobielych obrázkov ručne písaných číslic. Je to snáď najznámejší benchmark vo svete neurónových sietí a strojového učenia. 

Úlohy:   

[6b] naštudovanie a implementácia MLP, overenie úspešnosti učenia (ponúkam plnú podporu)

[6b] vizualizácia učenia neurónovej siete v každom kroku učenia - graf učenia a obrázky naučených dátových prototypov

[3b] extra: vylepšenie základného učenia niektorou z bežných regularizačných techník (momentum, weight-decay)

Poznámky:

Ak máte záujme o tento projekt, rozhodne sa mi ozvite osobne, dodám potrebné know-how a ďalšie podrobnosti a nápady na vizualizáciu siete.

Projekt je vhodný ako ročníkový.

Autor Kristína Malinovská
Študenti pracujúci na zadaní Roman Marko Martin Zavadzan Anton Kravets
Proj21-K2 Samoorganizujúca sa neurónová sieť: vizualizácia

Samoorganizácia alebo učenie bez učiteľa je spôsob stavania a trénovania neurónových sietí, ktoré sa učia len z dát. Známy príklad je Samoorganizujúca sa mapa (SOM) alebo Kohonenova sieť. Takáto sieť dostáva na vstupe vysokorozmerné vektory a robí niečo ako ich projekciu do nízkorozmerného priestoru - mapy. Takýmto spôsobom nám umožňuje pozrieť sa na podobnosti v dátach, ktoré voľným okom nevidíme. 

Ak poznáme aké dátové triedy v dátach máme vieme naučenú mapu ofarbiť na základe týchto a vidieť aké sú súvislosti medzi dátovými triedami. Väčšinou sa toto zobrazenie robí až s natrénovanou sieťou, no zaujímavé by bolo aj pozorovať ako sa sieť učí, čo je aj predmetom tohto projektu. 

MNIST je databáza tisícov malých čiernobielych obrázkov ručne písaných číslic. Je to snáď najznámejší benchmark vo svete neurónových sietí a strojového učenia. Základná úloha s týmto datasetom je klasifikácia (ktoré číslo je na obrázku), no zaujímavá bude aj jeho projekcia cez SOM, ktorá ukáže podobnosti a rozdiely medzi týmito ťažko čitateľnými obrázkami.

Úlohy:   

[5b] naštudovanie a implementácia SOM (ponúkam plnú podporu, prípadne aj svoj vlastný kód na inšpiráciu)

[6b] vizualizácia neurónovej siete v každom kroku učenia

[2b] extra: vizualizácia učenia: zvýraznenie víťaza a okolia neurónov, ktoré sa učia s ním

[2b] extra: vizualizácia naučených dátových prototypov

Poznámky:

Ak máte záujme o tento projekt, rozhodne sa mi ozvite osobne, dodám potrebné know-how a ďalšie podrobnosti a nápady na vizualizáciu siete.

Projekt je vhodný ako ročníkový.

 
Autor Kristína Malinovská
Študenti pracujúci na zadaní Nikto nepracuje na tomto zadaní.
Proj21-K5 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í Slavomír Holenda