Ciele
- Oboznámiť sa s významom a druhmi kolekcií v jazyku Java.
-
Naučiť sa používať implementáciu
ArrayListrozhraniaList. -
Naučiť sa používať všeobecné algoritmy pre prácu s kolekciami v triede
Collections. -
Pochopiť sekvenčný prístup k elementom kolekcie prostredníctvom objektu
Iterator. - Implementovať meranie trvania hry.
Úvod
-
Ďalší krok pri implementácii hry Minesweeper je pridanie podpory pre meranie trvania hry.
Popri tom sa naučíme používať kolekcie a ukážeme si ako implementovať návhový vzor
Singleton.
Postup
-
Úloha: Pridajte do triedy
Minesweepersúkromnú členskú premennúlong startMillis. Táto premenná bude slúžiť na uloženie času začiatku hrania hry. Nastavte danú premennú na začiatku hrania hry použitím metódySystem.currentTimeMillis().Úloha: Pridajte do triedyMinesweeperverejnú metóduint getPlayingSeconds(), ktorej návratovou hodnotou je počet sekúnd hrania hry. -
Rozšírte aplikáciu o možnosť ukladania času najlepších hráčov. Postupujte v súlade s uvedeným modelom.Úloha: Pridajte do projektu do balíka minesweeper zdrojový text BestTimes.java.Úloha: Oboznámte sa s obsahom daného zdrojového textu. Daný zdrojový text obsahuje triedu
BestTimesa statickú vnorenú trieduPlayerTime. TriedaBestTimesdefinuje manipuláciu s hráčmi a ich dosiahnutými časmi v hre. TriedaPlayerTimedefinuje objekty slúžiace na uloženie údajov o hráčovi (meno) a jeho čase.Úloha: V triedePlayerTimeimplementujte verejné metódyString getName()aint getTime().Poznámka: Použite refaktorizáciuEncapsulate Fieldsprezentovanú na 4. cvičení.Úloha: Implementujte verejnú metóduString toString()v triedePlayerTime, ktorá vráti textovú reprezentáciu času hráča (meno a čas).Úloha: V triedePlayerTimeimplementujte rozhranieComparablepridaním konštrukcieimplements Comparable<PlayerTime>a implementujte metóduint compareTo(PlayerTime o). Objekty triedyPlayerTimemajú byť usporiadané podľa času hrania (time).Poznámka: RozhranieComparableje definované v balíkujava.langa slúži na definovanie usporiadania objektov. Preštudujte dokumentáciu k danému rozhraniu. Vďaka implementácii rozhrania bude definované usporiadanie časov hráčov.Úloha: Implementujte verejnú metódupublic void addPlayerTime(String name, int time)v triedeBestTimes, ktorá umožní pridanie mena hráča a času do zoznamu.Poznámka: Zabezpečte aby objekty boli usporiadané v zozname. Použite statickú metódusort(List l)triedyCollections.Úloha: Implementujte verejnú metóduString toString()v triedeBestTimes, ktorá vráti textovú reprezentáciu časov dosiahnutých hráčmi vrátane ich mien a poradia.Poznámka: Pre vytváranie reťazca použite objekt triedyFormatter.Formatter f = new Formatter(); //Do the formatting, see docs ... return f.toString(); -
Ďalším krokom je rozšírenie triedy
Minesweepero používanie práve definovanej podpory pre uloženie časov hráčov.Úloha: Pridajte do triedyMinesweepersúkromnú členskú premennúBestTimes bestTimes. Inicializujte túto premennú inštanciou triedyBestTimes.Úloha: V triedeMinesweeperimplementujte verejnú metóduBestTimes getBestTimes().Poznámka: Použite refaktorizáciuEncapsulate Fields prezentovanú na 4. cvičení. -
Upravte implementáciu triedy
Minesweeperaby zodpovedala návrhovému vzoru Singleton.Úloha: Pridajte do triedyMinesweepersúkromnú statickú premennúMinesweeper instance. Inicializujte túto premennú na prvom riadku konštruktora nasledovne:instance = this.Úloha: V triedeMinesweeperimplementujte verejnú statickú metóduMinesweeper getInstance(), ktorej návratová hodnota je jediná inštancia triedyMinesweeper. -
Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v prostredí NetBeans!
Zdroje
- Zdrojové kódy:
Doplňujúce úlohy
Úloha:
Doplňte do triedy
ConsoleUI do metódu void update() výpis času hrania hry.
Úloha:
Doplňte do triedy
BestTimes metódu void reset() slúžiacu na zrušenie
záznamov o hráčoch a ich časoch.




System.currentTimeMillis()) a hodnotu premennej predstavujúcu čas začatia hrania hrystartMillis. Nezabudnite na to, že dané hodnoty sú v milisekundách.