4IT101 - zadání semestrální úlohy Adventura
Vašim úkolem bude vytvořit jednoduchou „adventure“ hru s textovým rozhraním. Jako vzor vám poslouží varianta projektu Adventura, kterou používá Váš cvičící na cvičeních. Tento projekt použíjte jako základ vašeho řešení.
Jako inspirace pro vytvoření tohoto druhu zadání vyučujícím kurzu sloužila jedna s prvních počítačových her tohoto typu Zork napsaná v letech 1977 - 1979 v programovacím jazyce MLD. Pokud si o ní chcete zjistit více, základní informace najdete na https://en.wikipedia.org/wiki/Zork. Jak zjistíte z řady nalezených odkazů z googlu, hra byla již převedena do mnoha jazyků a můžete si ji zahrát na internetu.
1. Navrhněte svoji hru
Nejprve je třeba popsat výchozí situaci, cíl hry a postup jak zvítězit.
Příklad zadání:
Ztratili jste se v dole. Potkáte trpaslíka. Když najdete něco k jídlu a dáte to trpaslíkovi, trpaslík vám řekne, kde je kouzelná hůlka. Pokud použijete kouzelnou hůlku ve velké jeskyni, otevře se východ z podzemí a vyhrajete.
Vymyslete cokoli zajímavého. Nedělejte hru příliš složitou, maximálně 15 „prostorů“. Vymyslete si věci a postavy, které ve hře použijete.
Zadání je třeba napsat, odevzdat a konzultovat s cvičícím v průběhu jím určeného cvičení (pokud budete nemocní, tak co nejdříve v konzultačních hodinách).
Základní funkcionalita hry, kterou musíte implementovat.
- Hra má několik prostorů/místností.
- Hráč může procházet jednotlivými prostory (již je v projektu Adventura implementováno).
- V některých prostorech mohou být různé věci.
- V jednom prostoru (místnosti) může být více předmětů.
- Některé věci si může hráč z místnosti odnést jiné ne.
- Hráč může přenášet jen omezený počet předmětů.
- Hra musí mít možnost vyhrát.
- Přidejte nejméně čtyři nové příkazy (kromě jdi, konec, pomoc, napoveda).
- Věc i "batoh" (tj. kam se umísťují přenášené věci) budou relizovány přes třídy.
- Jako základ vaší hry použijte projekt Adventura, pokud se s cvičícím nedohodnete jinak.
Doplňkové úkoly:
- V místnosti může být postava (člověk, zvíře, pohádková postava, atd.). Na rozdíl od věcí se mohou postavy v průběhu hry pohybovat po jednotlivých místnostech. Vytvořte opět třídu, na základě které se budou vytvářet instance postav.
- Můžete vytvořit kouzelnou transportní místnost, do které hráč vejde a je přenesen do náhodně vybrané místnosti ve hře.
- Fantazii se meze nekladou, zamyslete se ale vždy nad tím, jestli jste schopni Váš nápad naprogramovat.
Při svém řešení můžete samozřejmě použít zde uvedené rady.
2. Co je třeba odevzdat
V termínu určeném vašim cvičícím je třeba prostřednictvím odevzdávárny v InSIS odevzdat soubor (archiv) ZIP, který bude obsahovat:
- zadání hry (plánek, popis),
- zdrojové kódy s komentáři, musí být dodrženy konvence a zdrojové kódy musí být zkontrolovány pomocí PMD pmd a musí být upraveny tak,aby se při kontrole již nezobrazovala hlášení uvedená v seznamu dále na stránce.
- testy (otestují, že je možné vyhrát, že hráč unese omezený počet věcí, že není možné sebrat nepřenositelné věci atd...)
- spustitelný archiv .jar – musí být možné spouštět hru příkazem:
java –jar jmenoArchivu.jar
- uživatelskou příručku ke hře. Nemusí obsahovat návod jak vyhrát, ale instrukce jak hrát např. jaké příkazy je možné zadávat, co je cílem hry, jak spouštět, atd. Upozorňuji, že zadání není uživatelská příručka. Zadání je určeno programátorovi (představte si situaci, kdy by Váš cvičící řekl, že si zadání máte mezi sebou vyměnit a naprogramovat hru, kterou vymyslel někdo jiný). Příručka je určena uživateli hry a má mu tedy objasnit, jak hrát.
- soubor README, který bude obsahovat
- popis programu (vemi stručný, není to zadání, obsahuje text
typu "jednoduchá hra s textovým rozhraním ...", "hra probíhá
v prostředí ...", "úkolem hráče je ..." apod.)
- jméno autora,
- označení verze,
- případné další komentáře k vytvořenému programu, může se jednat
i o poznámky, které chcete zkonzultovat během obhajoby (např.
"něco mi nešlo, je to v kódu zakomentováno", "PMD mi vypsalo
hlášku, které nerozumím" apod.)
Seznam "chyb" hlášených PMD, které je třeba opravit
- Nepouzivejte prazdne bloky 'catch'
- Nepouzivejte prazdne bloky 'if'
- Nepouzivejte prazdne cykly 'while'
- Nepouzivejte prazdne bloky 'try'
- Nepouzivejte prazdne bloky 'finally'
- Nepouzivejte prazdne prikazy 'switch'
- Postarejte se, aby vzdy byly prekryty obe metody hashCode() i equals()
- Nepouzivejte prikaz 'if' bez slozenych zavorek
- Nepouzivejte prikaz 'while' bez slozenych zavorek
- Nepouzivejte vetev 'else' bez slozenych zavorek
- Nepouzivejte prikaz 'for' bez slozenych zavorek
- Vyhnete se prilis dlouhym metodam ( výjimkou je metoda ze třídy HerniPlan, která inicializuje hru, ta může být dlouhá)
- Nepouzivejte metody, ktere maji prilis mnoho parametru
- metoda je prilis slozita (Cyclomatic Complexity of 15)
- Pro oznaceni typu promenne nepouzivejte konkretni tridu; vhodnejsi je pouziti rozhrani
- Privatni promenna názevProměnné neni nikde v kodu pouzita
- Lokalni promenna názevProměnné neni nikde v metode pouzita
- Vyhnete se vytvareni privatnich metod, ktere nejsou nikde pouzity
- Vyhnete se deklarovani dale nepouzitych formalnich parametru metody
- Vyvarujte se duplicitnich importu
- Neni vhodne importovat z balicku 'java.lang'
- Zruste nevyuzite importy
- Neni potreba importovat tridy/rozhrani ze stejneho balicku
- Nazev metody nezacina malym pismenem
- Jmeno tridy by melo zacinat velkym pismenem
3. Body za semestrální úlohu
Ke splnění této úlohy student:
- prokonzultuje návrh zadání se svým cvičícím (cvičící upřesní v jaké podobě a případně kam se zadání odevzdává),
- odevzdá ve stanoveném termínu archiv s vytvořenou úlohou podle zadání schváleného cvičícím a odpovídajíci výše uvedeným podmínkám,
- osobně předvede funkci programu v termínech k tomu určených cvičícím.
Za tuto semestrální úlohu student může získat 30 bodů. Body se odečítají za následující nedostatky:
Nedostatek | Možná bodová ztráta |
Zpoždění při odevzdání úlohy na insis.vse.cz | 3 body za každý započatý týden zpoždění |
Chybějící komentáře (pro javadoc) u tříd a metod | 1-10 bodů |
Nedodržení konvencí | 1-10 bodů |
Chybějící nebo neúplné testy | 1-15 bodů |
Úloha neobsahuje spustitelný archiv | 5 bodů |
Chybějící uživatelská příručka | 10 bodů |
Chybějící základní funkcionalita specifikovaná výše na stránce | 5 bodů za každou nesplněnou podmínku |
Drobné chyby ve funkčnosti | 1-10 bodů |
Neschopnost vysvětlit jakoukoli část kódu | 1-30 bodů |
Student může získat prémiové body za originální zadání nebo zajímavé řešení úlohy.