Repository navigation
Expand file tree
/
Copy pathmain.cpp
More file actions
183 lines (159 loc) · 4.57 KB
/
Copy pathmain.cpp
File metadata and controls
183 lines (159 loc) · 4.57 KB
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <iostream>
void drawBoard(char *spaces);
void playerMove(char *spaces, char playerCharacter);
void computerMove(char *spaces, char computerCharacter);
bool checkRows(char *spaces, char playerCharacter);
bool checkColumns(char *spaces, char playerCharacter);
bool checkDiagonals(char *spaces, char playerCharacter);
bool checkForWinner(char *spaces, char playerCharacter, char computerCharacter);
bool checkForTie(char *spaces);
int main()
{
char spaces[9];
std::fill(std::begin(spaces), std::end(spaces), '-');
char playerCharacter = 'X';
char computerCharacter = 'O';
bool gameActive = true;
drawBoard(spaces);
while (gameActive)
{
playerMove(spaces, playerCharacter);
drawBoard(spaces);
if (checkForWinner(spaces, playerCharacter, computerCharacter))
{
gameActive = false;
break;
}
else if (checkForTie(spaces))
{
gameActive = false;
break;
}
computerMove(spaces, computerCharacter);
drawBoard(spaces);
if (checkForWinner(spaces, playerCharacter, computerCharacter))
{
gameActive = false;
break;
}
else if (checkForTie(spaces))
{
gameActive = false;
break;
}
}
return 0;
};
void drawBoard(char *spaces)
{
system("cls");
std::cout << " | | " << '\n';
std::cout << " " << spaces[0] << " | " << spaces[1] << " | " << spaces[2] << " " << '\n';
std::cout << "-----|-----|-----" << '\n';
std::cout << " | | " << '\n';
std::cout << " " << spaces[3] << " | " << spaces[4] << " | " << spaces[5] << " " << '\n';
std::cout << "-----|-----|-----" << '\n';
std::cout << " | | " << '\n';
std::cout << " " << spaces[6] << " | " << spaces[7] << " | " << spaces[8] << " " << '\n';
std::cout << " | | " << '\n';
}
void playerMove(char *spaces, char playerCharacter)
{
int number;
do
{
std::cout << "Enter a position to place a marker (1-9): ";
std::cin >> number;
if (std::cin.fail())
{
std::cin.clear();
std::cin.ignore(10000, '\n');
std::cout << "Invalid input! Please enter a number.\n";
continue;
}
number--;
if (number >= 0 && number < 9 && spaces[number] == '-')
{
spaces[number] = playerCharacter;
break;
}
else
{
std::cout << "Invalid position, please enter a number between 1 and 9 where the space is not already occupied.\n";
}
} while (true);
}
void computerMove(char *spaces, char computeCharacter)
{
int number;
srand(time(NULL));
while (true)
{
number = rand() % 9;
if (spaces[number] == '-')
{
spaces[number] = computeCharacter;
break;
}
}
}
bool checkRows(char *spaces, char playerCharacter)
{
for (int i = 0; i < 9; i += 3)
{
if ((spaces[i] != '-') && (spaces[i] == spaces[i + 1]) && (spaces[i + 1] == spaces[i + 2]))
{
return spaces[i] == playerCharacter;
}
}
return false;
}
bool checkColumns(char *spaces, char playerCharacter)
{
for (int i = 0; i < 3; ++i)
{
if ((spaces[i] != '-') && (spaces[i] == spaces[i + 3]) && (spaces[i + 3] == spaces[i + 6]))
{
return spaces[i] == playerCharacter;
}
}
return false;
}
bool checkDiagonals(char *spaces, char playerCharacter)
{
if ((spaces[0] != '-') && (spaces[0] == spaces[4]) && (spaces[4] == spaces[8]))
{
return spaces[0] == playerCharacter;
}
else if ((spaces[2] != '-') && (spaces[2] == spaces[4]) && (spaces[4] == spaces[6]))
{
return spaces[2] == playerCharacter;
}
return false;
}
bool checkForWinner(char *spaces, char playerCharacter, char computerCharacter)
{
if (checkRows(spaces, playerCharacter) || checkColumns(spaces, playerCharacter) || checkDiagonals(spaces, playerCharacter))
{
std::cout << "Player Wins!\n";
return true;
}
else if (checkRows(spaces, computerCharacter) || checkColumns(spaces, computerCharacter) || checkDiagonals(spaces, computerCharacter))
{
std::cout << "Computer Wins!\n";
return true;
}
return false;
}
bool checkForTie(char *spaces)
{
for (int i = 0; i < 9; ++i)
{
if (spaces[i] == '-')
{
return false;
}
}
std::cout << "It's a tie!\n";
return true;
}