Skip to content

Commit be112fe

Browse files
committed
adding of 'tic tac toe' code
n/a
1 parent b0f7bba commit be112fe

File tree

1 file changed

+263
-0
lines changed

1 file changed

+263
-0
lines changed

index.c

Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,263 @@
1+
#include <stdio.h> // includes printf / scanf ; allows for inputs & outputs
2+
#include <stdlib.h> // includes random number generating functions
3+
#include <time.h> // includes time() function ; seconds passed since 1970
4+
5+
#define side 3
6+
7+
8+
// Initializing functions (allows to call other functions within another function)
9+
10+
11+
void CreateBoard();
12+
void ShowInstruction();
13+
void PlayerMove();
14+
void ComputerMove();
15+
void UpdateBoard();
16+
int FreeSpacesLeft();
17+
char checkWinner();
18+
void ShowWinner(char winner);
19+
20+
21+
// Global variables
22+
23+
24+
int PlayerScore, ComputerScore, Ties;
25+
int GameNumber = 1;
26+
int row, col;
27+
char BoardArr[side][side];
28+
char winner;
29+
char PlayAgain = 'Y';
30+
const char player = 'X';
31+
const char computer = 'O';
32+
33+
34+
// Beginning of main-code function
35+
36+
37+
int main() {
38+
39+
printf("\t\t Welcome to Tic-Tac-Toe");
40+
41+
do {
42+
43+
GameNumber = 1; // resets # of wins for each plater and resets winner to '_' i.e. no winner. Occurs after each BO3 game
44+
PlayerScore = 0;
45+
ComputerScore = 0;
46+
Ties = 0;
47+
48+
do {
49+
50+
winner = '_';
51+
CreateBoard();
52+
ShowInstruction();
53+
54+
while(winner == '_' && FreeSpacesLeft() != 0) {
55+
56+
PlayerMove();
57+
UpdateBoard();
58+
winner = checkWinner();
59+
60+
if (winner != '_' || FreeSpacesLeft() ==0 ) {
61+
62+
break; // will break out of while loop; means there is either a winner or no spaces left i.e. a tie
63+
}
64+
65+
ComputerMove();
66+
UpdateBoard();
67+
winner = checkWinner();
68+
if (winner != '_' || FreeSpacesLeft() ==0 ) {
69+
winner = checkWinner();
70+
break;
71+
}
72+
}
73+
74+
ShowWinner(winner);
75+
printf(" Total Wins");
76+
printf("\n --------");
77+
printf("\nPlayer : %d", PlayerScore);
78+
printf("\nComputer : %d", ComputerScore);
79+
printf("\nTies : %d\n", Ties);
80+
81+
GameNumber++;
82+
83+
} while (GameNumber <= 3); // will exit do-while loop once GameNumber == 3 (i.e. after 3 games as GameNumber increases by 1 per game)
84+
85+
printf("\nWould you like to play again? Enter 'Y' for yes & to play again, enter 'N' for no & to exit program.\n");
86+
printf("Selection: "); scanf("%s", &PlayAgain);
87+
88+
if (PlayerScore > ComputerScore) {
89+
printf("\nPlayer wins best of 3! Thanks for playing.\n");
90+
91+
}
92+
else if (ComputerScore > PlayerScore) {
93+
printf("\nComputer wins best of 3! Better luck next time..\n");
94+
95+
}
96+
else if (ComputerScore == PlayerScore) {
97+
printf("\nIt's a tie! Player wins = Computer wins, close games!\n");
98+
99+
}
100+
101+
102+
} while(PlayAgain == 'Y'); //end of most outer do-while loop; exits program out when PlayAgain != 'Y'
103+
104+
printf("\nClosing program, goodbye :( .");
105+
return 0;
106+
107+
}
108+
109+
110+
// List of functions begin here
111+
112+
void CreateBoard() {
113+
for (int i = 0; i < side; i++) {
114+
for (int j = 0; j < side; j++) {
115+
BoardArr[i][j] = '_' ;
116+
117+
}
118+
}
119+
}
120+
121+
122+
void ShowInstruction() {
123+
124+
printf("\n\t 3 games are played, best of 3 wins!");
125+
printf("\n\n\t\t Game number : %d\n\n", GameNumber);
126+
printf("Please pick a number 1-9 as shown below to pick your play :\n\n");
127+
printf("\t\t\t 1 | 2 | 3 \n");
128+
printf("\t\t\t ---------\n"); // col1 col2 col3
129+
printf("\t\t\t 4 | 5 | 6 \n"); // row 1 [0][0] [0][1] [0][2] == 1 2 3
130+
printf("\t\t\t --------- \n"); // note: row 2 [1][0] [1][1] [1][2] == 4 5 6
131+
printf("\t\t\t 7 | 8 | 9 \n"); // row 3 [2][0] [2][1] [2][2] == 7 8 9
132+
printf("\n-\t-\t-\t-\t-\t-\t-\t-\t-\n");
133+
printf("\t\t Player = 'X' | CPU = 'O'\n");
134+
}
135+
136+
137+
void PlayerMove() {
138+
139+
int SpaceChoice;
140+
141+
do {
142+
printf("\nEnter a number (1-9) to place");
143+
printf("\nSelection : "); scanf("%d", &SpaceChoice);
144+
145+
row = (SpaceChoice - 1) / 3;
146+
col = (SpaceChoice - 1) % 3;
147+
148+
if (BoardArr[row][col] != '_') {
149+
150+
printf("\nInvalid move, space already taken, please pick a different number.\n");
151+
}
152+
153+
else {
154+
155+
BoardArr[row][col] = player;
156+
break;
157+
}
158+
} while ( BoardArr[row][col] != '_' );
159+
}
160+
161+
162+
void ComputerMove() {
163+
//creates a seed of random numbers based off time since code has been running
164+
srand(time(0));
165+
int ComputerPick;
166+
167+
if (FreeSpacesLeft() > 0) {
168+
169+
do {
170+
ComputerPick = ((rand() % 9) + 1 ); //allows to randomly generated numbers between 1-9
171+
row = (ComputerPick - 1) / 3;
172+
col = (ComputerPick - 1) % 3; //converts (1-9) to equivalent BoardArr mem. location
173+
174+
} while( BoardArr[row][col] != '_');
175+
BoardArr[row][col] = computer;
176+
}
177+
else{
178+
179+
ShowWinner('_'); // draw!
180+
}
181+
}
182+
183+
184+
void UpdateBoard() {
185+
186+
printf("\t\t\t %c | %c | %c \n", BoardArr[0][0], BoardArr[0][1], BoardArr[0][2] );
187+
printf("\t\t\t ---------\n");
188+
printf("\t\t\t %c | %c | %c \n", BoardArr[1][0], BoardArr[1][1], BoardArr[1][2] );
189+
printf("\t\t\t --------- \n");
190+
printf("\t\t\t %c | %c | %c \n", BoardArr[2][0], BoardArr[2][1], BoardArr[2][2] );
191+
printf("\n-\t-\t-\t-\t-\t-\t-\t-\t-\n");
192+
}
193+
194+
195+
int FreeSpacesLeft() {
196+
197+
int SpacesLeft = 9;
198+
for (int i = 0; i < side; i++){
199+
for ( int j = 0; j < side; j++) {
200+
201+
if (BoardArr[i][j] != '_') {
202+
SpacesLeft--;
203+
}
204+
}
205+
}
206+
return SpacesLeft;
207+
}
208+
209+
210+
char checkWinner() {
211+
212+
//checking rows for winner
213+
214+
for (int i = 0; i < 3; i++) {
215+
216+
if (( BoardArr[i][0] == BoardArr[i][1] && BoardArr[i][0] == BoardArr[i][2] ) ) {
217+
return BoardArr[i][0];
218+
}
219+
}
220+
221+
//checking columns for winner
222+
223+
for (int i = 0; i < 3; i++) {
224+
225+
if ( (BoardArr[0][i] == BoardArr[1][i] && BoardArr[0][i] == BoardArr[2][i]) ) {
226+
return BoardArr[0][i];
227+
}
228+
}
229+
230+
//checking diagonals for winner
231+
232+
if ( (BoardArr[0][0] == BoardArr[1][1] && BoardArr[0][0] == BoardArr[2][2]) ) {
233+
return BoardArr[0][0];
234+
}
235+
236+
if ( (BoardArr[2][0] == BoardArr[1][1] && BoardArr[2][0] == BoardArr[0][2]) ) {
237+
238+
return BoardArr[2][0];
239+
}
240+
241+
return winner = '_'; //No winner yet : Winner stays = '_' i.e. there is no winner yet, and the game continues
242+
243+
}
244+
245+
246+
void ShowWinner(char winner) {
247+
248+
if (winner == player) {
249+
250+
printf("\nPlayer wins! Computer loses! :)\n\n");
251+
PlayerScore++;
252+
}
253+
else if (winner == computer) {
254+
255+
printf("\nComputer wins! Player loses! :(\n\n"); // will print the winner after each match, and add 1 to their # of wins, resets every 3 matches played
256+
ComputerScore++;
257+
}
258+
else {
259+
260+
printf("\nTie! No winner.\n\n");
261+
Ties++;
262+
}
263+
}

0 commit comments

Comments
 (0)