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:
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)
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.
f(x, y) = z
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
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.
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.
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.
Úlohy:
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
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.
[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
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:
Ďalšie detaily/otázky mailom alebo osobne.
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:
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ť.
[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
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)
[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
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
Ď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ň.
[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
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
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.
[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
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
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.
[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
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
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).
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.
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ť.
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/
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ť.
V tejto úlohe budete programovať dav ako agentový systém v ktorom sa šíri nejaká emócia ovplyvňujúca správanie agentov. Agentový systém sa od particle systému líši tak, že jednotlivé entity (agenty) sú komplexnejšie a sú v zložitejšej vzájomnej interakcii. Vašou úlohou bude naprogramovať takýto systém a simulovať a kresliť ho v reálnom čase. Jedného agenta bude ovládať používateľ.
Vytvorte hraciu plochu v tvare štvorčekového papiera konkrétnych zvoliteľných rozmerov, na ktorom môžete vyznačiť farebný geometrický útvar, napr. trojuholník, štvoruholník, ... Na tejto hracej ploche môže dieťa riešiť nasledujúce úlohy:rôznymi farbami nakresli všetky možné troj-/štvor-uholníky do hracej plochy. Symetrické (podľa akéjkoľvek zhodnej symetrie) sa počítajú len raz, preto treba okrem rozmerov štorčekového papiera kontrolovať aj symetrie útvarov.
téma pochádza z dielne prof.Hejného, obrázky z učebnice Matematika pro 4.ročník ZŠ - pracovní sešit, www.fraus.cz
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:
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.
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.
[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ý.
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.
[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
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ť.
[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á)