/
GameManager.cpp
149 lines (120 loc) · 3.23 KB
/
GameManager.cpp
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "stdafx.h"
#include "GameManager.h"
#include "GameError.h"
#include "GameInput.h"
#include "GameVisualizer.h"
#include "AIPlayer.h"
#include "UserPlayer.h"
#include "GameVisualizerInputStructs.h"
namespace BlackJack
{
/****************/
/* Constructors */
/****************/
GameManager::GameManager()
{
if( m_pGameManager )
throw GameError( "[GameManager::GameManager]: Attempt to instantiate multiple instances of singleton class GameManager." );
m_pGameManager = this;
/* Setup default game settings. */
PlayerConfiguration playerConfig;
// Player defaults: 1 user controlled and 3 AI players.
m_gameConfig.NumPlayers = 4;
playerConfig.IsAIPlayer = false;
m_gameConfig.PlayerConfigs.push_back( playerConfig );
playerConfig.IsAIPlayer = true;
m_gameConfig.PlayerConfigs.push_back( playerConfig );
m_gameConfig.PlayerConfigs.push_back( playerConfig );
m_gameConfig.PlayerConfigs.push_back( playerConfig );
// Dealer defaults.
m_gameConfig.DealerConfig.HitOnSoftSeventeen = false;
// Misc defaults.
m_gameConfig.AllowSplit = true;
m_gameConfig.AllowSurrender = false;
// Add some AI players.
m_players.push_back( new UserPlayer( 1 ) );
m_players.push_back( new AIPlayer( 2 ) );
m_players.push_back( new AIPlayer( 3 ) );
m_players.push_back( new AIPlayer( 4 ) );
/* Create game visualizer and input singletons */
GameInput::Create();
GameVisualizer::Create();
// Visualize game board
GameVisuals()->Visualize( GameVisualizer::GameBoard );
// Initialize visualizations for player names & starting chips
sPlayerXNameChanged nameData;
sPlayerXSetChipsToY chipsData;
for( uint index = 0; index < m_players.size(); ++index )
{
nameData.playerIndex = index;
nameData.name = std::string("Player ") + NumToStr( index + 1 );
chipsData.playerIndex = index;
chipsData.chips = m_players[ index ]->GetChips();
GameVisuals()->Visualize( GameVisualizer::PlayerXNameChanged, (void*)&nameData );
GameVisuals()->Visualize( GameVisualizer::PlayerXSetChipsToY, (void*)&chipsData );
}
}
/***********/
/* Methods */
/***********/
////////////
// Update //
////////////
void
GameManager::Update()
{
m_taskManager.PerformTask();
GameVisuals()->Update();
GameVisuals()->Draw();
}
///////////
// Reset //
///////////
void
GameManager::Reset()
{
m_taskManager.Reset();
}
/**************/
/* Destructor */
/**************/
GameManager::~GameManager()
{
// Free memory allocated for the players
for( PlayerList::iterator playerItr = m_players.begin();
playerItr != m_players.end(); ++playerItr )
{
delete *playerItr;
}
/* Destroy game visualizer and input singletons */
GameInput::Destroy();
GameVisualizer::Destroy();
}
/******************/
/* Static methods */
/******************/
////////////
// Create //
////////////
void
GameManager::Create()
{
new GameManager();
}
/////////////
// Destroy //
/////////////
void
GameManager::Destroy()
{
// Destroy game input and visualizer singletons.
GameInput::Destroy();
GameVisualizer::Destroy();
delete m_pGameManager;
m_pGameManager = NULL;
}
/***************/
/* Static data */
/***************/
GameManager* GameManager::m_pGameManager = NULL;
}