Ciele

  1. Oboznámiť sa s problematikou implementácie interaktívnych systémov.
  2. Naučiť sa používať regulárne výrazy pre spracovanie vstupov.
  3. Naučiť sa používať rekurzívne funkcie.

Úvod

    Úlohou dnešného cvičenia je implementácia interakcie s hráčom. Pri interakcii je potrebné zabezpečiť vyžiadanie údajov od používateľa, overiť správnosť zadania načítaných údajov, zabezpečiť spätnú väzbu pre používateľa v prípade zle zadaných údajov a vykonať požadovanú operáciu.
    Obr.: : Stavový diagram interakcie s hráčom

Postup

  1. Úloha: Implementujte metódu void processInput() v triede ConsoleUI zabezpečujúcu interakciu s hráčom.
    Metóda void processInput() má:
    • Vypísať požiadavku na zadanie vstupu so vzorom očakávaného vstupu od používateľa: X – ukončenie hry, MA1 – označenie dlaždice v riadku A a stĺpci 1, OB4 – odkrytie dlaždice v riadku B a stĺpci 4.
    • Načítať vstupnú požiadavky od používateľa (metóda String readLine()).
    • Overiť správnosť vstupného reťazca. Na overenie správnosti vstupu použite regulárne výrazy.
    • V prípade požiadavky od používateľa, ktorá nie je v požadovanom tvare je potrebné vyžiadať od používateľa opätovné zadanie vstupu.
    • Na základe identifikácie akcie od používateľa vykonať požadovanú operáciu (označenie dlaždice, odkrytie dlaždice, ukončenie programu).
    Poznámka: Vytvorte objekt triedy Pattern na definíciu vzoru vstupu pomocou regulárneho výrazu (statická metóda Pattern.compile("O([A-I])([0-8])")). Pre zadaný vstup overte konzistenciu so vzorom pomocou objektu triedy Matcher. Objekt triedy Matcher je možné získať pomocou metódy Matcher matcher(CharSequence input) vytvoreného objektu Pattern. Na overenie vstupov použite metódy boolean matches() a String group(int group) definované v triede Matcher.
  2. Ďalším krokom je doplnenie reakcie na úspešné/neúspešné ukončenie hry.
    Úloha: Doplňte do metódy void newGameStarted(Field field) v triede ConsoleUI test na úspešné (field.getState() == GameState.SOLVED) resp. neúspešné (field.getState() == GameState.FAILED) ukončenie hry.
    Poznámka: V prípade úspešného resp. neúspešného ukončenia vypíšte oznam o ukončení a ukončite hru pomocou System.exit(0).
  3. Jednou z funkcií hry Minesweeper je automatické odkrytie všetkých susedných dlaždíc v prípade odkrytia dlaždice typu Clue, ktorej hodnota je rovná 0 (žiadna zo susedných dlaždíc nie je mína).
    Úloha: Implementujte súkromnú metódu void openAdjacentTiles(int row, int column) v triede Field zabezpečujúcu odkrytie všetkých susedných dlaždíc. V tejto metóde použite na odkrytie susedných dlaždíc metódu void openTile(int row, int column).
    Poznámka: Pri implementácii metódy nezabudnite na prípady keď je dlaždica na okraji/v rohu hracieho poľa.
    Úloha: Doplňte do metódy void openTile(int row, int column) aplikovanie metódy void openAdjacentTiles(int row, int column) v prípade odkrytia dlaždice typu Clue s hodnotou 0.
  4. Aktuálny model tried aplikácie je nasledujúcom obrázku.
    Obr.: : Diagram tried aplikácie Minesweeper (na konci cvičenia 6)
  5. Otestujte funkčnosť a použiteľnosť hry Minesweeper.
  6. Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v prostredí NetBeans!

Doplňujúce úlohy

    Úloha: Akceptujte určenie riadku s malým alebo veľkým písmenom vo vstupnej požiadavke ako aj určenie akcie pre označenie dlaždice – M/m, resp. odokrytie dlaždice – O/o.
comments powered by Disqus