Ciele

  1. Oboznámiť sa s významom a druhmi kolekcií v jazyku Java.
  2. Naučiť sa používať implementáciu ArrayList rozhrania List.
  3. Naučiť sa používať všeobecné algoritmy pre prácu s kolekciami v triede Collections.
  4. Pochopiť sekvenčný prístup k elementom kolekcie prostredníctvom objektu Iterator.
  5. 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

  1. Ú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ódy System.currentTimeMillis().
    Úloha: Pridajte do triedy Minesweeper verejnú metódu int getPlayingSeconds(), ktorej návratovou hodnotou je počet sekúnd hrania hry.
    Poznámka: Na určenie počtu sekúnd hrania hry použite aktuálny čas (System.currentTimeMillis()) a hodnotu premennej predstavujúcu čas začatia hrania hrystartMillis. Nezabudnite na to, že dané hodnoty sú v milisekundách.
  2. Rozšírte aplikáciu o možnosť ukladania času najlepších hráčov. Postupujte v súlade s uvedeným modelom.
    Obr.: : Diagram tried aplikácie Minesweeper (cvičenie 8)
    Ú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ú triedu PlayerTime. Trieda BestTimes definuje manipuláciu s hráčmi a ich dosiahnutými časmi v hre. Trieda PlayerTime definuje objekty slúžiace na uloženie údajov o hráčovi (meno) a jeho čase.
    Úloha: V triede PlayerTime implementujte verejné metódy String getName() a int getTime().
    Poznámka: Použite refaktorizáciu Encapsulate Fields prezentovanú na 4. cvičení.
    Úloha: Implementujte verejnú metódu String toString() v triede PlayerTime, ktorá vráti textovú reprezentáciu času hráča (meno a čas).
    Úloha: V triede PlayerTime implementujte rozhranie Comparable pridaním konštrukcie implements Comparable<PlayerTime> a implementujte metódu int compareTo(PlayerTime o). Objekty triedy PlayerTime majú byť usporiadané podľa času hrania (time).
    Poznámka: Rozhranie Comparable je definované v balíku java.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ódu public void addPlayerTime(String name, int time) v triede BestTimes , 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ódu sort(List l) triedy Collections.
    Úloha: Implementujte verejnú metódu String toString() v triede BestTimes, 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 triedy Formatter.
    
    Formatter f = new Formatter();
    //Do the formatting, see docs ...
    return f.toString();
    
  3. Ďalším krokom je rozšírenie triedy Minesweeper o používanie práve definovanej podpory pre uloženie časov hráčov.
    Úloha: Pridajte do triedy Minesweeper súkromnú členskú premennú BestTimes bestTimes. Inicializujte túto premennú inštanciou triedy BestTimes.
    Úloha: V triede Minesweeper implementujte verejnú metódu BestTimes getBestTimes().
    Poznámka: Použite refaktorizáciu Encapsulate Field s prezentovanú na 4. cvičení.
  4. Upravte implementáciu triedy Minesweeper aby zodpovedala návrhovému vzoru Singleton.
    Úloha: Pridajte do triedy Minesweeper súkromnú statickú premennú Minesweeper instance. Inicializujte túto premennú na prvom riadku konštruktora nasledovne: instance = this.
    Úloha: V triede Minesweeper implementujte verejnú statickú metódu Minesweeper getInstance(), ktorej návratová hodnota je jediná inštancia triedy Minesweeper.
  5. Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v prostredí NetBeans!

Zdroje

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