summaryrefslogtreecommitdiff
path: root/common/state.h
blob: d9b24c4cf899b0333057431e271d59e7e2dd295a (plain)
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
#ifndef STATE_H
#define STATE_H

#include "tile.h"

//! Class containing the game state related to each player.
struct PlayerState {
	//! Player's hand. Concealed tiles is first set, open sets follow in the order they was called in.
	Tilegroups hand;

	//! Discarded tiles.
	Tiles pond;
	
	//! Flag indicating whether player has declared riichi.
	bool riichi;
	
	//! Player's score.
	int score;
	
	//! Player's seat wind.
	int wind;
	
	template<class Archive>
	void serialize(Archive & ar, const unsigned int v) {
		ar & hand;
		ar & pond;
		ar & riichi;
		ar & score;
		ar & wind;
	}
};

//! Class containing the game state unrelated to the players.
struct GameState {
	//! List of dora/kandora.
	Tiles dora;
	
	//! Current player, relative to context. 0 = self, 1 = shimocha and so on.
	int current_player;
	
	//! Round (prevalent) wind.
	int round_wind;
	
	//! Round number (of this wind).
	int round_number;
	
	//! Count of riichi sticks on table (current and leftovers).
	int riichibou;
	
	//! Count of honba sticks on table (indicating renchan).
	int honba;
	
	template<class Archive>
	void serialize(Archive & ar, const unsigned int v) {
		ar & dora;
		ar & current_player;
		ar & round_wind;
		ar & round_number;
		ar & riichibou;
		ar & honba;
	}
};

#endif