forked from sudheerkumar67/HacktoberFEST-2023
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added tic tac toe in c, issue sudheerkumar67#1
- Loading branch information
1 parent
85902e6
commit 443e047
Showing
1 changed file
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,204 @@ | ||
#include <stdio.h> | ||
|
||
// Globally declared 2D-array | ||
char board[3][3]; | ||
|
||
// Function to initialize the game board | ||
void initializeBoard() | ||
{ | ||
for (int i = 0; i < 3; i++) | ||
{ | ||
for (int j = 0; j < 3; j++) | ||
{ | ||
board[i][j] = ' '; | ||
} | ||
} | ||
int count = 1; | ||
printf("\n\n\t "); | ||
for(int i = 0; i < 3; i++) | ||
{ | ||
for(int j = 0; j < 3; j++) | ||
{ | ||
printf("%d", count++); | ||
if (j < 2) | ||
{ | ||
printf(" | "); | ||
} | ||
} | ||
if (i < 2) | ||
printf("\n\t----------------\n\t "); | ||
} | ||
printf("\n\n\n"); | ||
} | ||
|
||
// Function shows the game board | ||
void showBoard(int x, int y) | ||
{ | ||
printf("\n\n\t "); | ||
for (int i = 0; i < 3; i++) | ||
{ | ||
for (int j = 0; j < 3; j++) | ||
{ | ||
printf("%c", board[i][j]); | ||
if (j < 2) | ||
{ | ||
printf(" | "); | ||
} | ||
} | ||
if (i < 2) | ||
printf("\n\t----------------\n\t "); | ||
} | ||
printf("\n\n\n"); | ||
} | ||
|
||
// Function to update the game board | ||
int updateBoard(int cell, char playerSign) | ||
{ | ||
int row = (cell - 1) / 3; | ||
int col = (cell - 1) % 3; | ||
int isValid = 1; | ||
|
||
// accessing already played cell number | ||
if (board[row][col] != ' ') | ||
{ | ||
printf("\nInvalid: Cell is already Filled!\n"); | ||
isValid = 0; | ||
} | ||
|
||
// valid cell position | ||
else | ||
{ | ||
board[row][col] = playerSign; | ||
} | ||
showBoard(row, col); | ||
|
||
return isValid; | ||
} | ||
|
||
// Function to check the winner of the game | ||
int checkWinner(char sg) | ||
{ | ||
// check all rows | ||
if (board[0][0] == sg && board[0][1] == sg && board[0][2] == sg || | ||
board[1][0] == sg && board[1][1] == sg && board[1][2] == sg || | ||
board[2][0] == sg && board[2][1] == sg && board[2][2] == sg) | ||
{ | ||
return 1; | ||
} | ||
// check all columns | ||
else if (board[0][0] == sg && board[1][0] == sg && board[2][0] == sg || | ||
board[0][1] == sg && board[1][1] == sg && board[2][1] == sg || | ||
board[0][2] == sg && board[1][2] == sg && board[2][2] == sg) | ||
{ | ||
return 1; | ||
} | ||
// check both diagonals | ||
else if (board[0][0] == sg && board[1][1] == sg && board[2][2] == sg || | ||
board[0][2] == sg && board[1][1] == sg && board[2][0] == sg) | ||
{ | ||
return 1; | ||
} | ||
|
||
// There is no winner | ||
return 0; | ||
} | ||
|
||
// Start your game from here | ||
void playTicTacToe() | ||
{ | ||
int gameResult = 0; | ||
int cell = 0; | ||
int playCount = 0; | ||
int updationResult = 1; | ||
|
||
char playerSign = ' '; | ||
|
||
// start playing the game | ||
while (!gameResult && playCount < 9) | ||
{ | ||
if (playCount % 2 == 0) | ||
{ | ||
// player 1 | ||
printf("\nPlayer 1 [ X ] : "); | ||
playerSign = 'X'; | ||
} | ||
else | ||
{ | ||
// player 2 | ||
printf("\nPlayer 2 [ O ] : "); | ||
playerSign = 'O'; | ||
} | ||
scanf("%d", &cell); | ||
if (cell > 0 && cell < 10) | ||
{ | ||
updationResult = updateBoard(cell, playerSign); | ||
// if updation is possible | ||
if (updationResult) | ||
{ | ||
gameResult = checkWinner(playerSign); | ||
// print the winner of the game | ||
if (gameResult) | ||
{ | ||
printf("\t *** Player %d Won!! ***\n", playerSign == 'X' ? 1 : 2); | ||
} | ||
playCount++; | ||
} | ||
} | ||
else if (cell == -1) | ||
{ | ||
printf("\n\tGame Terminated\n"); | ||
return; | ||
} | ||
else | ||
{ | ||
printf("\nPlease Enter a valid cell value\n"); | ||
} | ||
} | ||
|
||
// no one won the game | ||
if (!gameResult && playCount == 9) | ||
{ | ||
printf("\n\t *** Draw... ***\n"); | ||
} | ||
printf("\n\t --- Game Over --- \n"); | ||
} | ||
|
||
int main() | ||
{ | ||
printf("--------- Tic Tac Toe ----------\n\n"); | ||
|
||
printf("\n* Instructions \n\n"); | ||
printf("\tPlayer 1 sign = X\n"); | ||
printf("\tPlayer 2 sign = O"); | ||
printf("\n\tTo exit from game, Enter -1\n"); | ||
|
||
printf("\n\n* Cell Numbers on Board\n"); | ||
initializeBoard(); | ||
|
||
char start = ' '; | ||
printf("\n> Press Enter to start..."); | ||
|
||
scanf("%c", &start); | ||
|
||
if (start) | ||
{ | ||
int userChoice = 1; | ||
// restart the game | ||
while (userChoice) | ||
{ | ||
playTicTacToe(); | ||
printf("\n* Menu\n"); | ||
printf("\nPress 1 to Restart"); | ||
printf("\nPress 0 for Exit"); | ||
printf("\n\nChoice: "); | ||
scanf("%d", &userChoice); | ||
if (userChoice) | ||
{ | ||
initializeBoard(); | ||
} | ||
printf("\n"); | ||
} | ||
} | ||
printf("\n :: Thanks for playing Tic Tac Toe game! :: \n"); | ||
return 0; | ||
} |