Ciele

  1. Oboznámiť sa s významom a použitím vlákien v jazyku Java.
  2. Implementovať časovač v hre Minesweeper.

Úvod

    Úlohou dnešného cvičenia je pridanie podpory pre zobrazenie času hrania hry do hry Minesweeper.

Postup

  1. Ďalší krok pri implementácii hry Minesweeper je pridanie podpory pre zobrazenie času hrania hry.
    Úloha: Implementujte súkromnú metódu void setTimeLabelText() v triede SwingUI, ktorá sa nachádza v balíku minesweeper.swingui. Uvedená metóda nastaví text pre grafický komponent timeLabel typu javax.swing.JLabel tak, aby zobrazoval dĺžku trvania hry v okamihu zavolania metódy. Pre zistenie aktuálnej dĺžky trvania hry zavolajte metódu getPlayingSeconds() objektu triedy Minesweeper (pomocou statickej metódy getInstance()). Č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).
    Poznámka: Inšpirujte sa implementáciou metódy void setMinesLeftLabelText() v tej istej triede.
    Úloha: Pridajte do triedy SwingUI súkromnú členskú premennú timer typu javax.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 triedy SwingUI doplňte vytvorenie objektu časovača.
    Pre vytvorenie objektu triedy časovača Timer použite konštruktor Timer(int delay, ActionListener listener). Parameter delay 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). Parameter listener predstavuje implementáciu obsluhy udalosti, ktorá nastane po uplynutí časového intervalu. Objekt implementujúci rozhranie ActionListener vytvorte ako anonymnú triedu podľa nasledujúceho zdrojového kódu:
    
    ActionListener listener = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            //...Perform a task...
        }
    };
    
    Metóda 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 stave GameState.PLAYING, čo je možné zistiť použitím metódy getState() nad objektom hracieho poľa uloženého v členskej premennej field.
    Úloha: V konštruktore triedy SwingUI spustite časovač zavolaním metódy void start() nad objektom timer.
  2. Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v prostredí NetBeans!

Zdroje

  1. 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.
comments powered by Disqus