Ciele
- Oboznámiť sa s významom a druhmi kolekcií v jazyku Java.
-
Naučiť sa používať implementáciu
ArrayList
rozhraniaList
. -
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
Minesweeper
sú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 triedyMinesweeper
verejnú 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
BestTimes
a statickú vnorenú trieduPlayerTime
. TriedaBestTimes
definuje manipuláciu s hráčmi a ich dosiahnutými časmi v hre. TriedaPlayerTime
definuje objekty slúžiace na uloženie údajov o hráčovi (meno) a jeho čase.Úloha: V triedePlayerTime
implementujte verejné metódyString getName()
aint getTime()
.Poznámka: Použite refaktorizáciuEncapsulate Fields
prezentovanú 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 triedePlayerTime
implementujte rozhranieComparable
pridaním konštrukcieimplements Comparable<PlayerTime>
a implementujte metóduint compareTo(PlayerTime o)
. Objekty triedyPlayerTime
majú byť usporiadané podľa času hrania (time
).Poznámka: RozhranieComparable
je definované v balíkujava.lang
a 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
Minesweeper
o používanie práve definovanej podpory pre uloženie časov hráčov.Úloha: Pridajte do triedyMinesweeper
súkromnú členskú premennúBestTimes bestTimes
. Inicializujte túto premennú inštanciou triedyBestTimes
.Úloha: V triedeMinesweeper
implementujte verejnú metóduBestTimes getBestTimes()
.Poznámka: Použite refaktorizáciuEncapsulate Field
s prezentovanú na 4. cvičení. -
Upravte implementáciu triedy
Minesweeper
aby zodpovedala návrhovému vzoru Singleton.Úloha: Pridajte do triedyMinesweeper
súkromnú statickú premennúMinesweeper instance
. Inicializujte túto premennú na prvom riadku konštruktora nasledovne:instance = this
.Úloha: V triedeMinesweeper
implementujte 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.