Fred - Items
Ciele
  1. Oboznámiť sa s reprezentáciou predmetov v hre.
  2. Precvičenie princípu dedičnosti a použitia abstraktných tried.
  3. 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
  1. 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
    Obrázky reprezentujúce hviezdičku sú items/starX.png. Hviezdičku umiestnite na obrazovku tak, aby zasahovala do Fredovej cesty.
    Ú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.
  2. 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.
  3. Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v prostredí BlueJ a NetBeans!
Doplňujúce úlohy
  1. Vytvorte zoznam, do ktorého sa budú pridávať predmety, ktoré Fred pozbieral. Tento zoznam nech je reprezentovaný pomocou generickej kolekcie ArrayList<Item>().
$Id: 01.xml 49 2011-11-04 08:22:14Z mirek $
$Id$