Motivácia
Hry, ktoré budete v rámci cvičení implementovať, patria prevažne do skupiny dlaždicových hier a spôsob ich návrhu býva podobný. Cvičenia budú preto v nasledujúcich týždňoch popisovať postupnosť krokov vedúcich k vytvoreniu dlaždicovej hry a demonštrácia bude opísaná na príklade hry Minesweeper použitím technológie Java. V štúdii budete pokračovať priebežne, preto si medzi prvými krokmi pripravíte repozitár v systéme GitLab, do ktorého budete pravidelne nahrávať implementáciu z každého týždňa.
Vašou úlohou v rámci dnešného cvičenia je vytvoriť návrh vašej hry vo forme diagramu tried a stavového diagramu. V poslednom kroku sa budete zaoberať návrhom základnej logiky hry - generovania herného poľa, ovládania, a pod.
Ciele
- Príprava repozitára pre zadanie v systéme GitLab .
- Identifikovať základné entity, vzťahy a operácie dlaždicovej hry a vytvoriť konceptuálny model vlastnej hry.
- Identifikovať základné stavy hry a prechody medzi nimi.
- Navrhnúť základnú logiku hry.
Postup
Krok 1
Úloha 1.1
Vytvorte si projekt prostredníctvom aplikácie Gitlab Classroom podľa uvedeného postupu.
- Kliknutím na uvedený odkaz budete v GitLab-e vyzvaní na prihlásenie sa a autorizáciu aplikácie Gitlab Classroom, ktorú pre vás pripravil Manager.
- Autorizovaním aplikácie budete presmerovaní na stránku vytvárania projektov, kde si zvolíte skupinu podľa rozvrhovej jednotky, ktorú v rámci predmetu navštevujete.
- Do textového políčka zadáte názov hry, ktorú v rámci zadania riešite (napr. Míny).
- Kliknutím na tlačidlo pre vytvorenie projektu sa pre vás vytvorí v GitLab-e prázdny repozitár. Do neho budete postupne pridávať vaše riešenie úloh z jednotlivých cvičení.
Krok 2
Na príklade hry Minesweeper sa inšpirujte pri vytváraní návrhu vašej hry. Minesweeper je počítačová hra určená pre jedného hráča. Cieľom hry je vyčistenie herného poľa od mín bez ich detonácie.
Ďalšie informácie o tejto hre je možné získať napr. na Wikipédii a zahrať si ju môžete na http://minesweeperonline.com/.
Pri tvorbe konceptuálneho modelu sa využíva metóda analýzy objektov a akcií, kde sa postupuje v dvoch smeroch: od objektov (entít) k akciám a od akcií k objektom.
- Najprv sa identifikujú základné objekty navrhovaného systému (v našom prípade hry) a následne sa identifikujú všetky akcie, ktoré sa s týmito objektami môžu vykonávať.
- Keď už nevzniká žiadna nová akcia, postupne sa prechádzajú všetky doposiaľ identifikované akcie a kontroluje sa, či pri ich vykonávaní nie je potrebný nejaký nový objekt.
Tento postup sa môže opakovať. Tiež sa identifikujú najdôležitejšie vlastnosti objektov a vzťahy medzi jednotlivými objektami.
Úloha 2.1
Analyzujte vašu hru. Na základe objektov a ich akcií, vlastností a vzťahov, ktoré v hre identifikujete, vytvorte konceptuálny model vašej hry.
Jednou z reprezentácií konceptuálneho modelu môže byť diagram tried.
Z objektov odvádzame triedy, z ich akcií vznikajú metódy, z ich vlastností vznikajú premenné tried a zo vzťahov medzi objektami vznikajú vzťahy medzi triedami v diagrame tried (dedičnosť, asociácia, agregácia, kompozícia).
Poznámka
Na kreslenie môžete využiť niektorý z nástrojov pre kreslenie UML diagramov (Diagrams.net, smartdraw, UMLet, Diagram Editor, Gliffy) alebo iný podľa vlastného výberu.
Nasledujúci obrázok predstavuje príklad jednoduchého diagramu tried pre hru Minesweeper.
Úloha 2.2
Na základe analýzy objektov a akcií opíšte štruktúru balíkov a tried.
Pri návrhu dlaždicových hier odporúčame navrhnúť balíky pre členenie kódu - základný balík s názvom hry, napr. minesweeper
, a v ňom vnorený balík pre implementáciu jadra hry s hernou logikou core
a balík pre konzolové rozhranie consoleui
.
Základná štruktúra projektu pre hru Minesweeper môže vyzerať takto:
minesweeper
- základný balík, obsahuje hlavné triedy aplikácie.Minesweeper
- hlavná trieda aplikácie s metódoumain
.
minesweeper.core
- balík obsahuje triedy definujúce logiku herného poľa, nezávislé od používateľského rozhrania.Field
- trieda reprezentujúca herné pole a jeho funkčnosť. Herné pole obsahuje dlaždice.Tile
- trieda reprezentujúca dlaždicu herného poľa. Dlaždice sú dvoch typov: mínaMine
a pomoc pri hľadaní mínClue
.Mine
- trieda reprezentujúca dlaždicu typu mína.Clue
- trieda reprezentujúca dlaždicu typu pomoc pri hľadaní mín.TileState
- enumeračný typ vyjadrujúci stav dlaždice.GameState
- enumeračný typ vyjadrujúci stav hry.
minesweeper.consoleui
- balík obsahuje triedy definujúce interakciu s používateľom.ConsoleUI
- trieda definujúca interakciu hry s používateľom.
Poznámka
Štruktúra balíkov a tried u dlaždicových hier môže byť podobná, no samozrejme ju patrične prispôsobte vašej hre.
Krok 3
Úloha 3.1
Identifikujte všetky stavy herných dlaždíc a stavy hry. Pre ich vyjadrenie a opis nakreslite stavový diagram. V stavovom diagrame zaznačte aj akcie (reprezentujúce názvy metód), ktoré spôsobujú prechody medzi jednotlivými stavmi.
Napríklad, dlaždica v hre Minesweeper môže byť v stave odkrytá OPEN
, neodkrytá CLOSED
alebo označená MARKED
.
Základné stavy hry u jednoduchých dlaždicových hier sú zväčša veľmi podobné, hra môže prebiehať (stav PLAYING
), byť úspešne ukončená (stav SOLVED
) alebo byť neúspešne ukončená (stav FAILED
).
Môže sa ale stať, že vaša hra bude mať stavov viac. Napríklad pri hre Bejeweled sa môže vyskytnúť stav NO_POSSIBLE_MOVES
, do ktorého sa hráč môže dostať po ktoromkoľvek ťahu. V tomto stave je možnou akciou napr. náhodné premiešanie dlaždíc.
Poznámka
Pri identifikovaní prechodov medzi stavmi dlaždíc a hry sa môže stať, že identifikujete novú operáciu (metódu). Všetky takéto nové operácie doplňte do diagramu tried z predošlého kroku. Diagram tried a diagram stavov môžete vytvárať súbežne.
Krok 4
Úloha 4.1
Opíšte základnú logiku hry. Môžete použiť vývojový alebo sekvenčný diagram, prípadne využiť textový opis.
Poznámka
Pre opis základnej logiky hry je väčšinou potrebné opísať:
- Spôsob generovania herného poľa.
- Spôsob overovania stavov hry - či je hra vyhratá, prehratá, alebo prebieha.
- Spôsob prechodu medzi stavmi dlaždíc, ťahy hráča.
Pri hre Minesweeper je pri generovaní herného poľa potrebné:
- Náhodne vygenerovať zadaný počet mín
mineCount
v hernom poli.- V cykle sa do poľa dlaždíc (
field
) na náhodnom riadku a náhodnom stĺpci vkladá mína - inštancia triedyMine
. - Aby sa zabezpečilo, že nová mína nebude vložená na miesto, kde už predtým bola nejaká mína vložená, skontroluje sa, či je náhodne vygenerovaná pozícia prázdna.
- Cyklus končí, keď je do herného poľa vložený potrebný počet (
mineCount
) dlaždíc.
- V cykle sa do poľa dlaždíc (
- Zvyšné prázdne miesta v poli sa vyplnia pomocnou dlaždicou typu
Clue
.- Hodnota pomocnej dlaždice sa určí zrátaním počtu mín v okolitých dlaždiciach, čo môže byť riešené oddelenou metódou (napr.
countAdjacentMines()
).
- Hodnota pomocnej dlaždice sa určí zrátaním počtu mín v okolitých dlaždiciach, čo môže byť riešené oddelenou metódou (napr.
Po každom ťahu v hre Minesweeper sa kontroluje, či je hra prehratá alebo vyhratá.
- Ak hráč otvorí dlaždicu typu
Mine
, hra sa označí ako prehratá a skončí. - Hra sa považuje za vyhratú, ak platí: počet všetkých dlaždíc - počet odokrytých dlaždíc = počet mín.
- Ak hra nebola ani vyhratá ani prehratá, pokračuje sa ďalším ťahom hráča.
Ťah hráča spočíva vo výbere typu akcie:
- otvorenie dlaždice, len ak dlaždica je v stave
CLOSED
, realizované napr. metódouopenTile(int row, int column)
, - označenie alebo od-značenie dlaždice - ak je dlaždica v stave
CLOSED
, prejde do stavuMARKED
a opačne, realizované napr. metódoumarkTile(int row, int column)
.
Krok 5
Úloha 5.1
Nahrajte súbory s vašim návrhom (diagramy, textové dokumenty) do vášho repozitára na GitLab-e. Súbory môžete aktualizovať, popri tom ako na nich budete ďalej pracovať. Pred ďalším cvičením sa uistite, že máte v repozitári vaše aktuálne súbory. Zároveň si pripravte otázky, ktoré by ste na cvičení chceli vyriešiť.
Zdroje
- Detailnejšie informácie o hre Minesweeper na Wikipedii
- Hra Minesweeper online
Nástroje pre tvorbu diagramov: