Ciele
- Oboznámiť sa s problematikou implementácie interaktívnych systémov.
- Naučiť sa používať regulárne výrazy pre spracovanie vstupov.
- 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.
Postup
-
Úloha: Implementujte metóduMetóda
void processInput()
v triedeConsoleUI
zabezpečujúcu interakciu s hráčom.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).
-
Vypísať požiadavku na zadanie vstupu so vzorom očakávaného vstupu od používateľa:
-
Ď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 triedeConsoleUI
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 pomocouSystem.exit(0)
. -
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óduvoid openAdjacentTiles(int row, int column)
v triedeField
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óduvoid 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ódyvoid openTile(int row, int column)
aplikovanie metódyvoid openAdjacentTiles(int row, int column)
v prípade odkrytia dlaždice typuClue
s hodnotou0
. -
Otestujte funkčnosť a použiteľnosť hry Minesweeper.
-
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
.
Pattern.compile("O([A-I])([0-8])")
). Pre zadaný vstup overte konzistenciu so vzorom pomocou objektu triedyMatcher
. Objekt triedyMatcher
je možné získať pomocou metódyMatcher matcher(CharSequence input)
vytvoreného objektuPattern
. Na overenie vstupov použite metódyboolean matches()
aString group(int group)
definované v triedeMatcher
.