Problem Set #2: Adventures in Yolkfolk

Znenie zadania

Vytvorte nové dobrodružstvo vo svete Yolkfolku s využitím knižnice GameLib2 v jazyku Java. Mapu herného sveta vytvorte pomocou editora Tiled. Hra musí byť dohrateľná a pre jej riešenie je potrebné využiť sadu adventúrnych krokov. To znamená, že hra nemôže byť lineárne dohrateľná len prechodom z miesta A na miesto B, ale musí obsahovať predmety, ktoré sa budú používať.

Pri práci na zadaní dodržiavajte etický kódex!

Požiadavky pre úspešnú implementáciu

Pre úspešné odovzdanie zadania je potrebné splniť tieto požiadavky:

  • Hra sa bude odohrávať na vami vytvorenej mape v editore Tiled s názvom map.tmx, ktorej rozloha bude minimálne 500 dlaždíc (napríklad 20 x 25) ale nie väčšia ako 2000 dlaždíc (napr. 40 x 50). Viac o mape nižšie.
  • V hre vytvorte minimálne 10 vlastných tried, ktoré budú implementovať rozhranie Actor, resp. rozširovať abstraktnú triedu AbstractActor. Dodržujte pri tom nasledovné požiadavky:
    • Tieto triedy a z nich vytvorené inštancie budú potrebné pre úspešné dosiahnutie cieľa hry, t.j. budú aktívne zapojené do scenára hry. Príkladom aktívneho zapojenia do scenára môže byť použitie kľúča na otvorenie dverí, prepnutie páky vypínača pre zapnutie výťahu a podobne.
    • Nesmie sa jednať o prázdnych actorov - nesmú obsahovať len animáciu (konštruktor) bez žiadneho ďalšieho kódu (bez metód).
    • Do stanoveného počtu sa nerátajú actori, ktorých implementácia je rovnaká alebo veľmi podobná, ako bola opísaná v materiáloch cvičení.
    • Pre grafickú reprezentáciu môžete použiť akýkoľvek sprite bez ohľadu na to, či sa vyskytol v scenároch cvičení. Dôležité je, aby správanie actora bolo nové.
  • Hra musí byť úspešne dohrateľná. Samotný koniec však môže byť dosiahnuteľný rôznym spôsobom, ako napríklad: dosiahnutie konkrétneho miesta na mape, stretnutie s konkrétnym actorom, pozbieranie špecifických predmetov, "vyhnanie" zlého čarodejníka a podobne. Viac o úspešnom scenári hry nižšie.
  • V hre je povinné použiť 4 nasledovné návrhové vzory:
    • State (stav) - reprezentácia stavov niektorého actora,
    • Observer (pozorovateľ) - sledovanie zmeny u actora inými actormi,
    • Decorator (dekorátor) - obohatenie funkcionality alebo správania actora,
    • návrhový vzor podľa vlastného výberu z množiny behaviorálnych návrhových vzorov okrem už uvedených, resp. vzorov použitých/prezentovaných počas cvičení a vzorov iterator, null object a template method.

Úspešný scenár hry

Úspešný scenár predstavuje postupnosť krokov, ktoré vedú k úspešnému dohratiu celej hry. Jeho textová podoba môže vyzerať nasledovne (zdroj: ZX-Spectrum Games: Dizzy 3.5 - Three and Half - návod):

Choďte hore a v korune stromu sa porozprávajte s Dannym (1), ktorý nemá pod kontrolou svoje lietajúce topánky (2). Tiež vám povie, že celú Dizzyho rodinu uniesol zlý čarodejník Zaks do svojho magického kráľovstva. Pri chalúpke vezmite štartovaciu kľuku (3) a skočte vľavo pre dlhé lano (4). Postavte sa na miesto (5), nad ktorým sa vznáša Danny, ktorého pomocou lana stiahnete dolu. Za pomoc vám dá jeho lietajúce topánky (2), ktoré vám pomôžu chodiť po oblakoch (6). Preskáčte po nich vpravo až ku veľkému stroju (7). Vezmite krátke lano (8). Obe laná spojte dokopy, čím vznikne zauzlené lano (9). Zauzlené lano (9) nasaďte na remenice stroja (7). Nakoniec sa pokúste naštartovať stroj (7) štartovacou kľukou (3), čo sa vám podarí na tretíkrát. Aktivovaným teleportom (10) se presuňte do kráľovstva, v ktorom býva zlý čarodejník Zaks.

Mapa herného sveta

Mapu je potrebné vytvoriť pomocou editora Tiled. Odporúčame vám však použiť verziu vyššiu ako 0.12. Táto mapa bude mať tri vrstvy, ktorých názvy budú nasledovné:

  1. background - Táto vrstva bude definovať pozadie mapy, po ktorom bude hráč môcť kráčať bez akýchkoľvek obmedzení.
  2. obstacles - Táto vrstva bude definovať všetky časti mapy, cez ktoré nebude možné prejsť. Vrstva samotná bude neviditeľná. Na zadefinovanie týchto častí používajte len jednu dlaždicu alebo polygón.
  3. objects - Táto vrstva bude obsahovať všetkých actorov, ktorí sa budú na hernej mape nachádzať.

Mapu uložte do súboru core/assets/map.tmx.

Príklad výslednej mapy pre horeuvedený úspešný scenár môže vyzerať takto:

Obr. 1: Mapa herného sveta hry Dizzy 3.5 (zdroj).

Dôsledne dbajte na názvy vrstiev! Ak sa totiž vrstvy budú volať inak, ako je uvedené vyššie, rámec zabezpečujúci fungovanie hry a metódy v ňom nebudú pracovať správne! Pri názvoch taktiež záleží na veľkosti písmen!

Odporúčania

  • Triedy umiestňujte do rôznych balíčkov, ako bolo doporučené v rámci cvičení.
  • Pred odoslaním vášho riešenia do Git-u využite možnosť automatického formátovania kódu. Uľahčíte tým jeho čitateľnosť a zvýšite svoju šancu na lepšie hodnotenie pri ústnej kontrole.
  • Kontrolujte hlásenia nástroja PMD a prípadné chyby včas opravte.
  • Vyvarujte sa použitiu nič-nehovoriacich názvov premenných, metód, atď., vo vašom kóde. Nevhodné sú napríklad názvy x1, premenna, TriedaA, temp, pomocnaMetoda() a podobne.

Odovzdávanie

Zadanie odovzdajte prostredníctvom systému na správu verzií Git na školskom GitLab serveri https://git.cnl.sk. Projekt pomenujte oop-2015-yolkfolk.

Kódovanie všetkých odovzdávaných súborov musí byť UTF8 alebo ASCII. Pri názvoch vytváraných súborov a priečinkov záleží na veľkosti písmen!

Štruktúra vášho projektu spolu s predpísanými triedami a rozhraniami bude nasledovná:

            .
            ├── magicland
            │   └── // project files goes here
            ├── README
            └── .gitignore
Triedy vlastných actorov umiestnite do balíčkov podľa vlastného uváženia.

Obsah súboru README nech je nasledovný:

STUDENT ID: S1234567890
GROUP     : 01

Upozornenie:  Je dôležité, aby vaše súbory zachovali uvedenú štruktúru. Ak sa niektorý zo súborov síce v repozitári nachádza, ale v inom priečinku, bude to považované za chybu a takýto projekt nebude považovaný za správny.

Hodnotenie zadania

Za zadanie môžete získať max. 25 bodov. V rámci pohovoru budeme testovať:

  • Statickú analýza vášho kódu pomocou nástroja PMD. Váš kód sa bude kontrolovať vzhľadom na tieto pravidlá.
  • Návrh a použitie vlastných actorov.
  • Použitie návrhových vzorov.
  • Dodržiavania objektovo-orientovaných princípov.
  • Originalitu a zaujímavosť vášho riešenia - prekvapte nás dobrým nápadom ;)

Diskusia

Upozornenie: Do svojich príspevkov nevkladajte správne riešenia úloh a ani ich od ostatných nežiadajte! Nepoužívajte sprosté slová! Takéto príspevky budú zmazané! Riaďte sa podľa pravidiel etického kódexu.