Introduction
Tic-Tac-Toe is a classic two-player game where players take turns marking a grid of 3×3 with either an ‘X’ or an ‘O’. The objective of the game is to be the first to form a horizontal, vertical, or diagonal line of three matching symbols.
In this program, we will create a simple text-based Tic-Tac-Toe game in the C programming language. Players will input their moves by specifying the row and column where they want to place their symbol. The program will check for a winner after each move and declare the winner once one player achieves the objective or if the game ends in a draw.
Objective
The objective of this program is to provide a clear example of how a simple Tic-Tac-Toe game can be implemented in C. This program will demonstrate how to:
- Create a game board using a 2D array.
- Implement game logic to allow two players to take turns.
- Check for a winner or a draw after every move.
Code
#include char board[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}}; int player = 1; // Player 1 starts int choice; int row, column; char mark; void printBoard() { printf("\n\n"); printf(" Tic-Tac-Toe \n"); printf(" Player 1 (X) - Player 2 (O) \n\n"); printf(" %c | %c | %c \n", board[0][0], board[0][1], board[0][2]); printf(" ---|---|--- \n"); printf(" %c | %c | %c \n", board[1][0], board[1][1], board[1][2]); printf(" ---|---|--- \n"); printf(" %c | %c | %c \n", board[2][0], board[2][1], board[2][2]); printf("\n\n"); } int checkWin() { // Check rows and columns for a winner for (int i = 0; i < 3; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) return 1; if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) return 1; } // Check diagonals if (board[0][0] == board[1][1] && board[1][1] == board[2][2]) return 1; if (board[0][2] == board[1][1] && board[1][1] == board[2][0]) return 1; return 0; } int checkDraw() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i][j] != 'X' && board[i][j] != 'O') { return 0; } } } return 1; } int main() { printf("Welcome to Tic-Tac-Toe Game!\n"); printBoard(); while (1) { // Alternate between player 1 and player 2 player = (player % 2) ? 1 : 2; // Get player input printf("Player %d, enter a number (1-9): ", player); scanf("%d", &choice); // Determine row and column row = (choice - 1) / 3; column = (choice - 1) % 3; // Check if the cell is already filled if (board[row][column] == 'X' || board[row][column] == 'O') { printf("This cell is already filled, please try again.\n"); continue; } // Mark the board mark = (player == 1) ? 'X' : 'O'; board[row][column] = mark; // Print the updated board printBoard(); // Check if there is a winner if (checkWin()) { printf("Player %d wins!\n", player); break; } // Check for a draw if (checkDraw()) { printf("The game is a draw!\n"); break; } // Switch players player++; } return 0; }
Explanation of the Program Structure
This C program is designed to implement a simple Tic-Tac-Toe game for two players. Here’s a breakdown of the program’s structure:
- Board Representation: The game board is represented as a 2D array `board[3][3]`, where each element corresponds to a cell in the grid.
- Player Turns: The variable `player` tracks the current player (either 1 or 2). Player 1 uses ‘X’ and Player 2 uses ‘O’.
- Input Handling: Players input their move by entering a number between 1 and 9, which corresponds to a position on the board.
- Game Logic: After each move, the program checks for a winner using the `checkWin` function, and checks for a draw using the `checkDraw` function. If a player wins or the game ends in a draw, the game announces the result and exits.
How to Run the Program
- Copy the C code provided above into a text file and save it with a `.c` extension (e.g., `tictactoe.c`).
- Compile the code using a C compiler, for example, using GCC:
gcc tictactoe.c -o tictactoe
. - Run the compiled program by typing:
./tictactoe
in the terminal. - Follow the on-screen instructions to play the game.