-
Notifications
You must be signed in to change notification settings - Fork 0
/
Controller.cpp
118 lines (93 loc) · 2.35 KB
/
Controller.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
// file View.cpp
#include <cctype>
#include <iostream>
//#include <cstdlib>
#include "Controller.h"
#include "StepFactory.h"
//---------------------------------------------------------------
Controller::Controller() : human_m(), computer_m(),
game_m(&human_m, &computer_m),
view_m(), continue_game_m(true),
step_m_p(NULL)
{
StepFactory the_factory;
step_m_p = the_factory.getSteps();
// seed the random number generators
srand(time(0));
}
//---------------------------------------------------------------
Controller::
~Controller()
{
if ( NULL != step_m_p )
{
delete step_m_p;
step_m_p = NULL;
}
}
//---------------------------------------------------------------
bool Controller::addResponse(char input, string& message)
{
bool return_value = true;
switch (toupper(input))
{
case 'Y':
{
game_m.reset(&human_m, &computer_m);
bool computer_first = ( 1 == (rand() % 2) );
if ( computer_first )
{
message += "Computer moves first.\n";
game_m.addMove(8, &computer_m);
}
else
{
message += "Human moves first.\n";
}
message += view_m.show(&human_m, &computer_m, &game_m);
message += CT_MOVE_MESSAGE;
}
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{
int move = input - '0';
int translated_move = mapper_m.humanToComputer(move);
message.clear();
bool more_moves = step_m_p->makeMove(translated_move,
message,
&human_m,
&computer_m,
&game_m);
message += view_m.show(&human_m, &computer_m, &game_m);
if ( more_moves )
message += CT_MOVE_MESSAGE;
else
message += "Play again? (Y/N)\n";
}
break;
case 'Q':
case 'N':
{
message = CT_BYE_MESSAGE;
return_value = false;
}
break;
default:
{
message = CT_BAD_ENTRY_MESSAGE;
message += CT_MOVE_MESSAGE;
return_value = true;
}
break;
}
return return_value;
}
//---------------------------------------------------------------