CV07 - Zadání - 3
Zadání úlohy na cvičení - kolekce a lambdy
Kolekce
Z vašeho projektu z minulého cvičení nebo z projektu s řešením minulého cvičení (https://gitlab.vsb.cz/jez04-vyuka/java1/labs/lab07v3.git)
Přepracujte třídu lab.Scene tak aby využívala vhodnu kolekci k ukládání objektů typu DrawableSimulable. Přidejte metody add a remove, které umožní přidávat a odebírat entity ze světa. Musí se, ale provádět v době kdy se neiteruje kolekcí entit. Proto je třeba si v metodách add a remove uložit entity do pomocných kolekcí a až na konci metody simulate vše najednou přidat a odebrat.
- Upravte tlačítko spawn tak aby přidalo novou Lochnesku do objektu třídy lab.Scene
- Lochnesku upravte tak aby se při kontaktu s lodí odebrala ze světa a na její místo se vloží objek Rock.
Vnořené třídy - lambdy
Vytvořte rozhraní DeadListener, které umožní posluchačům naslouchat události, která nastane pokud se Lochneska střetne s lodí a změní se v kámen.
- Rozhraní DeadListener bude mít metodu lochnessDead
- Třída LochNess bude mít instanční proměnnou typu kolekce v níž budou ukládání posluchači DeadListener
- třída LochNess bude mít metody addDeadListener a removeDeadListener, které budou vkládat objekdy do kolekce posluchačů
- Třída LochNess při střetu s hráčem pošle všem posluchačům událost, tedy projde kolekci posluchačů a na každého z nich zavolá metodu lochnessDead.
- Změňte tlačítko Change tak aby vytvářelo nové lochnesky.
- Při vytvoření nové lochnesky zaregistrujte posluchače, který bude logovat do konzoly v případě její smrti.
- Při vytváření lochnesky se GameController také zaregistruje jako posluchač a v případě smrti lochnesky může počítat zásahy a zobrazovat je v GUI. Třeba místo jména hráče.
- Pro registraci použijte nejprve vnořenou třídu, a z té posléze udělejte lambdu.
Třídění - lambdy
Vyřešte problém, kamenů, které se vykreslují v popředí před lodí a ostatními lochneskami.
- do rozhraní DrawableSimulable přidejte metodu getZIndex(), která bude určovat pořadí vykreslování obdobně jako v HTML.
- Upravte třídu WorldEntity aby měla instanční proměnnou zIndex, která se bude inicializovat v konstruktoru.
- Při vytváření jednotlivých grafických objektů, nastavujte tuto hodnotu zIndex. Nejlépe v konstruktoru při volání konstruktoru předka super(...)
- Poté co se na konci simulační smyčky odeberou a přidají do kolekce objketů pro simulacia vkreslování všechny nové objekty. Objekty setřiďte pomocí metody sort. Musíte vytvořit komparátor jako lambdu nebo vnořenou třídu.
Odevzdání
Řešení odevzdejte do systému Kelvin jako úlohu "Java 1 - 7. cvičení v3". Do systému nahrejde celý obsah složky src a soubor pom.xml. Pozor omezte velikost obrázků. Možná velikost uploudu do systému kelvin je omezena. Postupujte dle videa na DU02 k odevzdání v době 3. cvičení.
Následně bude projekt zkompilován a provedou se Unit Testy. Vzhledem k povaze projektu a prozatímnímu testovacímu využití systému Kelvin v předmětu Java 1 v případě selhání nezoufejte.
Jedná se o pomocný test, vše bude ještě hodnoceno ručně. Důležité je nahrát soubory aby bylo možno vše vyhodnotit a provést analýzu na plagiáty. Věřím, že je to je formalita a všichni z Vás tvoří vlastní kód.
Řešení
Řešení zadání najdete v gitu ve větvi solution https://gitlab.vsb.cz/jez04-vyuka/java1/labs/lab07v3/-/tree/solution?ref_type=heads