Ciele
- Oboznámiť sa s významom a použitím vlákien v jazyku Java.
- Implementovať časovač v hre Minesweeper.
Úvod
-
Úlohou dnešného cvičenia je pridanie podpory pre zobrazenie času hrania hry do hry Minesweeper.
Postup
-
Ďalší krok pri implementácii hry Minesweeper je pridanie podpory pre zobrazenie času hrania hry.Úloha: Implementujte súkromnú metódu
void setTimeLabelText()
v triedeSwingUI
, ktorá sa nachádza v balíkuminesweeper.swingui
. Uvedená metóda nastaví text pre grafický komponenttimeLabel
typujavax.swing.JLabel
tak, aby zobrazoval dĺžku trvania hry v okamihu zavolania metódy. Pre zistenie aktuálnej dĺžky trvania hry zavolajte metódugetPlayingSeconds()
objektu triedyMinesweeper
(pomocou statickej metódygetInstance()
). Čas trvania hry sa uvádza v sekundách, pričom sa používajú vždy tri číslice na vyjadrenie počtu sekúnd hrania hry (napr.008
).Úloha: Pridajte do triedySwingUI
súkromnú členskú premennútimer
typujavax.swing.Timer
. Časovač umožní v pravidelných intervaloch aktualizovať zobrazenie trvania hry.Poznámka: Podrobné informácie o použití časovača nájdete v Java API.Úloha: Do konštruktora triedyPre vytvorenie objektu triedy časovačaSwingUI
doplňte vytvorenie objektu časovača.Timer
použite konštruktorTimer(int delay, ActionListener listener)
. Parameterdelay
predstavuje trvanie časového intervalu v milisekundách, po ktorom nastane udalosť. Vzhľadom na meranie času po sekundách bude postačovať hodnota 100 (v milisekundách). Parameterlistener
predstavuje implementáciu obsluhy udalosti, ktorá nastane po uplynutí časového intervalu. Objekt implementujúci rozhranieActionListener
vytvorte ako anonymnú triedu podľa nasledujúceho zdrojového kódu:
MetódaActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Perform a task... } };
actionPerformed(ActionEvent evt)
má obsahovať aktualizáciu zobrazeného trvania hry (void setTimeLabelText()
). Zobrazenie trvania hry je nutné aktualizovať iba vtedy, ak je hra v staveGameState.PLAYING
, čo je možné zistiť použitím metódygetState()
nad objektom hracieho poľa uloženého v členskej premennejfield
.Úloha: V konštruktore triedySwingUI
spustite časovač zavolaním metódyvoid start()
nad objektomtimer
. -
Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v prostredí NetBeans!
Zdroje
- Trieda Timer v Java API.
Doplňujúce úlohy
Úloha:
Modifikujte hru tak aby bolo možné zvoliť režim hrania hry oproti najlepšiemu času.
Pridajte do menu zaškrtávaciu položku „Beat Best Time Mode”.
Ak je tento režim zvolený, zobrazený čas v sekundách ukazuje koľko času ešte ostáva do dokončenia hry v najlepšom čase.
Úloha:
Dodajte do hry možnosť voľby veľkosti hracieho poľa a počtu mín.
Navrhnite vhodný dialóg a pridajte položku do menu umožňujúcu zobrazenie dialógu.
void setMinesLeftLabelText()
v tej istej triede.