Mac10goesBRRRT
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 1034 additions and 0 deletions
@ -0,0 +1,903 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <string.h> |
||||
|
#include <stdbool.h> |
||||
|
|
||||
|
#include "ticTacToe.h" |
||||
|
|
||||
|
|
||||
|
void printPrompt(){ |
||||
|
printf("Let's play Tic Tac Toe. You will use O, I will use X.\nJust enter the number of the field you choose as row col.\nYou start.\n"); |
||||
|
} |
||||
|
|
||||
|
void printField(char field[3][3]){ |
||||
|
for (int i = 0; i < 3; i++){ |
||||
|
for (int j = 0; j < 3; j++){ |
||||
|
printf("%c", field[i][j]); |
||||
|
if (j < 2) { |
||||
|
printf("|"); |
||||
|
} |
||||
|
} |
||||
|
printf("\n"); |
||||
|
} |
||||
|
printf("/n"); |
||||
|
} |
||||
|
|
||||
|
void initField(char field[3][3]) { |
||||
|
for (int i = 0; i < 3; i++) { |
||||
|
for (int j = 0; j < 3; j++) { |
||||
|
field[i][j] = '-'; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void getPlayerInput(char field[3][3]){ |
||||
|
int row, col; |
||||
|
bool valid = false; |
||||
|
while (!valid){ |
||||
|
printf("Enter the field as row col: "); |
||||
|
scanf("%d %d", &row, &col); |
||||
|
row -= 1; |
||||
|
col -= 1; |
||||
|
if(validatePlayerInput(row, col)){ |
||||
|
field[row][col] = 'O'; |
||||
|
valid = validatePlayerInput(row, col); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
bool validatePlayerInput(int row, int col){ |
||||
|
if (row < 3 && row >= 0){ |
||||
|
if (col < 3 && col >= 0){ |
||||
|
return true; |
||||
|
} |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
int wasGameWon(char field[3][3]){ |
||||
|
int winner = NOWINNERYET; |
||||
|
bool fieldFull = true; |
||||
|
for (int i = 0; i < 3; i++){ |
||||
|
for (int j = 0; j < 3; j++){ |
||||
|
if(field[i][j]=='-'){ |
||||
|
fieldFull = false; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (fieldFull == true) winner = DRAW; |
||||
|
if(field[0][0] == 'O' || field[0][0] == 'X'){ |
||||
|
if (field[0][0] == field[0][1] && field[0][2] == field[0][1]){ |
||||
|
if (field[0][0] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[0][0] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
if (field[0][0] == field[1][0] && field[1][0] == field[2][0]){ |
||||
|
if (field[0][0] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[0][0] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
if (field[0][0] == field[1][1] && field[1][1] == field[2][2]){ |
||||
|
if (field[0][0] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[0][0] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if(field[2][2] == 'O' || field[2][2] == 'X'){ |
||||
|
if (field[2][2] == field[2][1] && field[2][2] == field[2][0]){ |
||||
|
if (field[2][2] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[2][2] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
if (field[2][2] == field[1][2] && field[1][2] == field[0][2]){ |
||||
|
if (field[2][2] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[2][2] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if(field[1][1] == 'O' || field[1][1] == 'X'){ |
||||
|
if (field[1][1] == field[0][1] && field[0][1] == field[2][1]){ |
||||
|
if (field[1][1] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[1][1] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
if (field[1][1] == field[1][0] && field[1][0] == field[1][2]){ |
||||
|
if (field[1][1] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[1][1] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
if (field[2][0] == field[1][1] && field[1][1] == field[0][2]){ |
||||
|
if (field[1][1] == 'O'){ |
||||
|
winner = PLAYER; |
||||
|
} |
||||
|
else if (field[1][1] == 'X'){ |
||||
|
winner = COMPUTER; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return winner; |
||||
|
} |
||||
|
|
||||
|
void getComputerInput(char field[3][3]){ |
||||
|
bool symbolSet = false, *pt = &symbolSet; |
||||
|
fillAlmostFull(field, pt); |
||||
|
while (!symbolSet){ |
||||
|
int row, col; |
||||
|
row = rand() % 3; |
||||
|
col = rand() % 3; |
||||
|
if (field[row][col] == '-'){ |
||||
|
field[row][col] = 'X'; |
||||
|
symbolSet = true; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void fillAlmostFull(char field[3][3], bool* pt) { |
||||
|
if (field[0][0] == 'X') { |
||||
|
if (field[0][1] == 'X') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'X') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][0] == 'X') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'X') { |
||||
|
if( field[1][0] == '-'){ |
||||
|
field[1][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[0][1] == 'X') { |
||||
|
if (field[0][0] == 'X') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'X') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][1] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[0][2] == 'X') { |
||||
|
if (field[0][0] == 'X') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][1] == 'X') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'X') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'X') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[1][0] == 'X') { |
||||
|
if (field[1][1] == 'X') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'X') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'X') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[1][1] == 'X') { |
||||
|
if (field[1][0] == 'X') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'X') { |
||||
|
if( field[1][0] == '-'){ |
||||
|
field[1][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][1] == 'X') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][1] == 'X') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'X') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'X') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'X') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'X') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[1][2] == 'X') { |
||||
|
if (field[1][0] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[1][0] == '-'){ |
||||
|
field[1][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'X') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'X') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[2][0] == 'X') { |
||||
|
if (field[2][1] == 'X') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'X') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'X') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][0] == 'X') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[2][1] == 'X') { |
||||
|
if (field[2][0] == 'X') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'X') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][1] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[2][2] == 'X') { |
||||
|
if (field[2][0] == 'X') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][1] == 'X') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'X') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'X') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'X') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'X') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (field[0][0] == 'O') { |
||||
|
if (field[0][1] == 'O') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'O') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][0] == 'O') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'O') { |
||||
|
if( field[1][0] == '-'){ |
||||
|
field[1][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[0][1] == 'O') { |
||||
|
if (field[0][0] == 'O') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'O') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][1] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[0][2] == 'O') { |
||||
|
if (field[0][0] == 'O') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][1] == 'O') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'O') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'O') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[1][0] == 'O') { |
||||
|
if (field[1][1] == 'O') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'O') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'O') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[1][1] == 'O') { |
||||
|
if (field[1][0] == 'O') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'O') { |
||||
|
if( field[1][0] == '-'){ |
||||
|
field[1][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][1] == 'O') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][1] == 'O') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'O') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'O') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'O') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][0] == 'O') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[1][2] == 'O') { |
||||
|
if (field[1][0] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[1][0] == '-'){ |
||||
|
field[1][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'O') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'O') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[2][0] == 'O') { |
||||
|
if (field[2][1] == 'O') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'O') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'O') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][0] == 'O') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[2][1] == 'O') { |
||||
|
if (field[2][0] == 'O') { |
||||
|
if( field[2][2] == '-'){ |
||||
|
field[2][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][2] == 'O') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[0][1] == '-'){ |
||||
|
field[0][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][1] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (field[2][2] == 'O') { |
||||
|
if (field[2][0] == 'O') { |
||||
|
if( field[2][1] == '-'){ |
||||
|
field[2][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[2][1] == 'O') { |
||||
|
if( field[2][0] == '-'){ |
||||
|
field[2][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][2] == 'O') { |
||||
|
if( field[1][2] == '-'){ |
||||
|
field[1][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][2] == 'O') { |
||||
|
if( field[0][2] == '-'){ |
||||
|
field[0][2] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[1][1] == 'O') { |
||||
|
if( field[0][0] == '-'){ |
||||
|
field[0][0] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
else if (field[0][0] == 'O') { |
||||
|
if( field[1][1] == '-'){ |
||||
|
field[1][1] = 'X'; |
||||
|
*pt = true; |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int play() { |
||||
|
printPrompt(); |
||||
|
int counter = 0; |
||||
|
char field[3][3]; |
||||
|
initField(field); |
||||
|
int winner = NOWINNERYET; |
||||
|
while (winner == NOWINNERYET) { |
||||
|
if (counter % 2 == 0) { |
||||
|
printField(field); |
||||
|
getPlayerInput(field); |
||||
|
winner = wasGameWon(field); |
||||
|
} |
||||
|
else if (counter % 2 == 1) { |
||||
|
printField(field); |
||||
|
getComputerInput(field); |
||||
|
winner = wasGameWon(field); |
||||
|
} |
||||
|
counter += 1; |
||||
|
} |
||||
|
printField(field); |
||||
|
printWinner(winner); |
||||
|
return winner; |
||||
|
} |
||||
|
|
||||
|
void printWinner(int winner){ |
||||
|
if(winner == PLAYER){ |
||||
|
printf("You won\n"); |
||||
|
} |
||||
|
else if(winner == COMPUTER){ |
||||
|
printf("I won\n"); |
||||
|
} |
||||
|
else if(winner == DRAW){ |
||||
|
printf("It's a draw\n"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
#ifndef TICTACTOE_H |
||||
|
#define TICTACTOE_H |
||||
|
#include <stdbool.h> |
||||
|
|
||||
|
enum Winner{ |
||||
|
PLAYER, |
||||
|
COMPUTER, |
||||
|
NOWINNERYET, |
||||
|
DRAW |
||||
|
}; |
||||
|
|
||||
|
void printPrompt(); |
||||
|
void printField(char field[3][3]); |
||||
|
void initField(char field[3][3]); |
||||
|
void getPlayerInput(char field[3][3]); |
||||
|
bool validatePlayerInput(int row, int col); |
||||
|
int wasGameWon(char field[3][3]); |
||||
|
void getComputerInput(char field[3][3]); |
||||
|
void fillAlmostFull(char field[3][3], bool *pt); |
||||
|
int play(); |
||||
|
void printWinner(int winner); |
||||
|
|
||||
|
#endif |
@ -0,0 +1,108 @@ |
|||||
|
#ifdef TEST |
||||
|
#include "unity.h" |
||||
|
#include "ticTacToe.h" |
||||
|
#include <stdbool.h> |
||||
|
|
||||
|
void setUp(void) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
void tearDown(void) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
void test_ticTacToe_validUserInput(void) |
||||
|
{ |
||||
|
/* arrange */ |
||||
|
bool result; |
||||
|
int row = 2, col = 0; |
||||
|
|
||||
|
/* act */ |
||||
|
result = validatePlayerInput(row, col); |
||||
|
|
||||
|
/* assert */ |
||||
|
TEST_ASSERT_EQUAL_INT(true, result); |
||||
|
} |
||||
|
|
||||
|
void test_ticTacToe_invalidUserInput(void) |
||||
|
{ |
||||
|
/* arrange */ |
||||
|
bool result; |
||||
|
int row = 1, col = 3; |
||||
|
|
||||
|
/* act */ |
||||
|
result = validatePlayerInput(row, col); |
||||
|
|
||||
|
/* assert */ |
||||
|
TEST_ASSERT_EQUAL_INT(false, result); |
||||
|
} |
||||
|
|
||||
|
void test_ticTacToe_playerWins(void) |
||||
|
{ |
||||
|
/* arrange */ |
||||
|
int result; |
||||
|
char field[][3] = { |
||||
|
{'O', 'O', '-'}, |
||||
|
{'-', 'O', '-'}, |
||||
|
{'-', '-', 'O'} |
||||
|
}; |
||||
|
|
||||
|
/* act */ |
||||
|
result = wasGameWon(field); |
||||
|
|
||||
|
/* assert */ |
||||
|
TEST_ASSERT_EQUAL_INT(PLAYER, result); |
||||
|
} |
||||
|
|
||||
|
void test_ticTacToe_ComputerWins(void) |
||||
|
{ |
||||
|
/* arrange */ |
||||
|
int result; |
||||
|
char field[][3] = { |
||||
|
{'X', '-', '-'}, |
||||
|
{'X', '-', '-'}, |
||||
|
{'X', '-', '-'} |
||||
|
}; |
||||
|
|
||||
|
/* act */ |
||||
|
result = wasGameWon(field); |
||||
|
|
||||
|
/* assert */ |
||||
|
TEST_ASSERT_EQUAL_INT(COMPUTER, result); |
||||
|
} |
||||
|
|
||||
|
void test_ticTacToe_NooneWins(void) |
||||
|
{ |
||||
|
/* arrange */ |
||||
|
int result; |
||||
|
char field[][3] = { |
||||
|
{'X', 'O', 'O'}, |
||||
|
{'O', 'X', 'X'}, |
||||
|
{'X', 'O', 'O'} |
||||
|
}; |
||||
|
|
||||
|
/* act */ |
||||
|
result = wasGameWon(field); |
||||
|
|
||||
|
/* assert */ |
||||
|
TEST_ASSERT_EQUAL_INT(DRAW, result); |
||||
|
} |
||||
|
|
||||
|
void test_ticTacToe_NoWinnerYet(void) |
||||
|
{ |
||||
|
/* arrange */ |
||||
|
int result; |
||||
|
char field[][3] = { |
||||
|
{'X', 'O', 'O'}, |
||||
|
{'O', '-', 'X'}, |
||||
|
{'X', 'O', 'O'} |
||||
|
}; |
||||
|
|
||||
|
/* act */ |
||||
|
result = wasGameWon(field); |
||||
|
|
||||
|
/* assert */ |
||||
|
TEST_ASSERT_EQUAL_INT(NOWINNERYET, result); |
||||
|
} |
||||
|
|
||||
|
#endif // TEST |
Write
Preview
Loading…
Cancel
Save
Reference in new issue