Fred - Items
Ciele
- Oboznámiť sa s reprezentáciou predmetov v hre.
- Precvičenie princípu dedičnosti a použitia abstraktných tried.
- Precvičiť vytváranie get a set metód, ich použitie.
Úvod
Úlohou dnešného cvičenia je vytvoriť v hre predmety, ktoré bude môcť Fred rôznym spôsobom použiť.
Postup
-
V hre sa môžu nachádzať predmety rôznych vlastností:
- predmety, ktoré môže Fred vziať a použiť neskôr,
- premety, ktoré budú použité okamžite po Fredovom kontakte s nimi,
- predmety, ktoré Fred vziať nemôže.
Úloha: Vytvorte nový predmet Star reprezentujúci hviezdičku a umiestnite ho na obrazovku.O každom predmete budeme vedieť povedať:- bude sa nachádzať v balíčku items,
- každý predmet bude mať na obrazovke (resp. na mape) svoju polohu,
- bude reprezentovaná animáciou zloženou z obrázkov
Úloha: Zabezpečte, aby Fred vedel hviezdičku zobrať z obrazovky, keď sa jej dotkne.Hviezdička predstavuje pre Freda nejaký bonus a čím viac hviezdičiek Fred zozbiera, tým viac bodov dosiahne. Nezabudnite si preto počet zozbieraných hviezdičiek pamätať.Poznámka: Kód na vyriešenie problému s kolíziami môže vyzerať napríklad takto:public boolean intersect(Item itemX, Item itemY) { Rectangle rectangleX, rectangleY; int itemXWidth = itemX.getCurrentAnimation().getCurrentFrame().getWidth(); int itemXHeight = itemX.getCurrentAnimation().getCurrentFrame().getHeight(); int itemYWidth = itemY.getCurrentAnimation().getCurrentFrame().getWidth(); int itemYHeight = itemY.getCurrentAnimation().getCurrentFrame().getHeight(); rectangleX = new Rectangle(itemX.getX(), itemX.getY(), itemXWidth, itemXHeight); rectangleY = new Rectangle(itemY.getX(), itemY.getY(), itemYWidth, itemYHeight); return rectangleX.intersects(rectangleY); }
Poznámka: Aby ste túto metódu mohli aplikovať pre všetky predmety, s ktorými sa Fred môže v hre stretnúť, musíte mať už vytvorenú abstraktnú triedu Item, ktorú budú vami vytvorené predmety rozširovať.Úloha: Zabezpečte, aby hviezdička z mapy zmizla, keď ju Fred vezme.Úloha: Podobným spôsobom implementujte aj nádobu so živou vodou, po kontakte s ktorou sa Fredovi zvýši energia.Množstvo, o ktoré sa Fredovi energia zvýši, je dané atribútom živej vody. To znamená, že Fred môže nájsť rozličné nádoby so živou vodou s rozličným množstvom živej vody v nich. Pre grafickú reprezentáciu elixíru života môžete použiť obrázky z tohto balíčka.Úloha: Pokúste sa vytvoriť abstraktnú triedu Item, ktorá bude rodičom pre každý predmet a bude v sebe združovať všetky spoločné vlastnosti, ako aj metódy potrebné pre každý predmet. -
Akčný kláves - predmety, ktoré budú zobrateľné, použiteľné.Úloha: Vytvorte rozhranie Usable, pomocou ktorého budú označené všetky predmety, ktoré bude Fred môcť použiť.Toto rozhranie bude obsahovať jednu metódu, ktorou zabezpečíte špecifické správanie predmetu pri jeho použití.Úloha: Vytvorte rozhranie Movable, pomocou ktorého budú označené všetky predmety, ktoré bude Fred vedieť vziať. Toto rozhranie ponechajte prázdne.Podľa toho, ktoré rozhranie bude daný predmet implementovať, viete rozhodovať o tom, aké vlastnosti predmet bude mať (inšpirujte sa napríklad tromi skupinami predmetov, ktoré sú spomenuté na začiatku prvého kroku).Úloha: Zabezpečte, aby Fred zobral "zobrateľné" predmety, keď sa ich dotkne.Úloha: Zabezpečte, aby Fred použil "použiteľný" predmet hneď, ako sa ho dotkne (t.j. predmet má na Freda okamžitý efekt, napr. zvýši sa jeho skóre, bude teleportovaný na iné miesto atď atp).Úloha: Zabezpečte, aby predmet, ktorý je zároveň "zobrateľný" aj "použiteľný", Fred zobral hneď, keď sa ho dotkne, no použije ho až pri stlačení klávesy, špecifikovanej na tento účel.
-
Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v
prostredí BlueJ a NetBeans!
Doplňujúce úlohy
- Vytvorte zoznam, do ktorého sa budú pridávať predmety, ktoré Fred pozbieral. Tento zoznam nech je reprezentovaný pomocou generickej kolekcie ArrayList<Item>().
Ďalšie zdroje
- Obrázky pre animáciu reprezentujúcu živú vodu
- Domovská stránka softvérového rámca Slick2D
- Slick2D Tutorials
- JavaDoc knižnice Slick2D
$Id$