Git repository for mines3d founded, mines3d v1.0 imported.
[mines3d.git] / core / board.h
blobf374fa86b95b00a5d08c7f8a8a06432dd060a048
1 /*
2 * File: board.h
3 * Author: Petr Kubiznak
4 */
6 #ifndef _BOARD_H
7 #define _BOARD_H
9 #include <iostream>
10 #include "field.h"
11 using namespace std;
13 //predvolby pro nastaveni hry (rozmery desky a pocet min)
14 static const int PRESETS[3][4] = {
15 { 3, 5, 5, 4 }, //rookie (3 vrstvy, 5 radek, 5 sloupcu, 4 miny)
16 { 5, 8, 8, 20 }, //advanced
17 { 8, 12, 12, 100 } //suicide
20 class Board {
21 protected:
22 Field ***board;
23 int layers, rows, cols;
24 int minesCount;
26 /* rozmisti miny po hracim poli */
27 int placeMines(void);
28 /* ocisluje policka podle pritomnosti min na sousednich polich */
29 int numberBoard(void);
31 public:
32 //mod hry odpovidajici zvolenemu nastaveni
33 enum GameMode {ModeRookie=0, ModeAdvanced=1, ModeSuicide=2, ModeCustom=3};
35 /* vytvori 3d hraci pole o rozmerech w x h x d a rozlozi do nej zadany pocet min */
36 Board(int w, int h, int d, int minesCount);
37 ~Board(void);
39 /* vraci pocet vrstev */
40 int getLayersCount(void) const;
41 /* vraci pocet radku */
42 int getRowsCount(void) const;
43 /* vraci pocet sloupcu */
44 int getColsCount(void) const;
45 /* vraci pocet min v celem poli */
46 int getMinesCount(void) const;
47 /* vraci referenci na pole dane souradnicemi
48 * v pripade neplatnych souradnic vyhazuje vyjimku ERR_OUT_OF_BOUNDS */
49 Field & getField(int layer, int row, int col) const;
50 /* ternarni operator () - getter pro ziskani pole na danych souradnicich (vola getField)
51 * v pripade neplatnych souradnic vyhazuje vyjimku ERR_OUT_OF_BOUNDS */
52 Field & operator () (int layer, int row, int col) const;
53 /* vytiskne cele pole (pro debug) */
54 void print(void) const;
55 /* pretizeny operator vystupu - tiskne cele pole v hernim modu */
56 friend ostream & operator << (ostream &os, const Board &board);
57 /* odkryje zadane pole, nema-li v okoli zadne miny, odkryje i sousedni pole;
58 * vraci true, pokud je pritomna mina */
59 bool uncover(int layer, int row, int col);
60 /* vraci true, pokud jsou odkryta vsechna pole bez min */
61 bool isCleared(void) const;
62 /* vraci pocet poli oznacenych jako zaminovana */
63 int getMarkedCount(void) const;
65 /* vraci herni mod podle rozmeru desky */
66 Board::GameMode getMode(void) const;
67 /* vraci herni mod podle zadanych rozmeru */
68 static Board::GameMode getMode(int layers, int rows, int cols, int mines);
71 #endif /* _BOARD_H */