-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGameState.cs
64 lines (53 loc) · 1.61 KB
/
GameState.cs
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
namespace CarlosSeptica
{
public class GameState : Clonable
{
public Player PlayerHuman
{
get;
}
public Player PlayerAI
{
get;
}
public CardDealer Dealer
{
get;
}
public GameTable Table
{
get;
}
public Player CurrentTurn
{
get;
set;
}
public GameState()
{
PlayerHuman = new Player(PlayerType.PLAYER_HUMAN);
PlayerAI = new Player(PlayerType.PLAYER_AI);
Dealer = new CardDealer();
Table = new GameTable();
}
private GameState(Player human, Player ai, CardDealer dealer, GameTable table, Player currentTurn)
{
PlayerHuman = human;
PlayerAI = ai;
Dealer = dealer;
Table = table;
CurrentTurn = currentTurn;
}
public Clonable Clone()
{
Player humanClone = (Player)PlayerHuman.Clone();
Player aiClone = (Player)PlayerAI.Clone();
CardDealer dealerClone = (CardDealer)Dealer.Clone();
GameTable tableClone = (GameTable)Table.Clone();
// Remember to set references
tableClone.HandOwner = (Table.HandOwner.Type == PlayerType.PLAYER_AI) ? aiClone : humanClone;
Player currentTurnReferenceClone = (CurrentTurn.Type == PlayerType.PLAYER_AI) ? aiClone : humanClone;
return new GameState(humanClone, aiClone, dealerClone, tableClone, currentTurnReferenceClone);
}
}
}