-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBoard.h
133 lines (108 loc) · 2.63 KB
/
Board.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* File: Board.h
* Author: Tomáš Čerevka, Adam Činčura
*
* Created on November 2, 2011, 10:19 AM
*/
#ifndef BOARD_H
#define BOARD_H
#include <vector>
#include "Tower.h"
#include "Move.h"
using namespace std;
/**
* Hraci deska, na ktere se nachazi jednotlive veze.
* @author Tomáš Čerevka
* @author Adam Činčura
*/
class Board {
public:
/**
* Prazdny konstruktor.
* Nutne pak desku inicializovat pomocí {@link #init}.
*/
Board();
/**
* Konstrutor.
* @param int Pocet vezi.
*/
Board(int);
/**
* Destruktor.
*/
virtual ~Board();
/**
* Inicializuje desku - pripravi na ni veze.
* @param int Pocet vezi.
*/
void init(int);
/**
* Prida token na vrchol veze.
* Nekontroluje, zda pak bude vez validni!
* @param int Index veze.
* @param int Hodnota tokenu.
*/
void addTowerTop(int, int);
/**
* Vrati vrchol cilove veze.
* @param int Index cilove veze.
* @return int Vrchol cilove veze.
*/
int getTowerTop(int) const;
/**
* Rozhodne, zda je tah na desce mozny.
* @param const Move& Posuzovany tah.
* @return TRUE tah je mozny, jinak FALSE
*/
bool isMoveCorrect(const Move&) const;
/**
* Vykona nad deskou tah.
* @param const Move& Provadeny tah.
*/
void doMove(const Move&);
/**
* Rozhodne, zda je vez kompletni.
* @param int Index veze.
* @return TRUE vez je kompletni, jinak FALSE.
*/
bool isTowerComplete(int) const;
/**
* Vrati velikost desky.
* @return int Pocet vezi na desce.
*/
inline int size(void) const {
return towers.size();
}
/**
* Vraci dolni mez reseni - minimalni pocet tahu, ktery je schopny
* transformovat desku to hledaneho reseni.
* @param int Index cilove veze.
* @return int Pocet tahu potrebnych k transformaci.
*/
int getLowerBound(int) const;
/**
* Serializuje desku.
* @param char* Buffer.
* @param int& Pozice v bufferu.
*/
void serialize(char*, int&) const;
/**
* Deserializuje desku.
* @param char* Buffer.
* @param int& Pozice v bufferu.
*/
void deserialize(char*, int&);
private:
/** Mnozina vezi. */
vector<Tower> towers;
/** Celkovy pocet tokenu. */
int tokensCount;
/**
* Pretizeni operatoru pro vypis do streamu.
* @param ostream& Vstupni stream.
* @param const Board& Vypisovany objekt.
* @return ostream& Vystupni stream.
*/
friend ostream& operator<<(ostream&, const Board&);
};
#endif /* BOARD_H */