Untitled

Anonymous
plain_text
02/21/2026 4:50 AM
4.6 KB
11
Indexable
#include <stdio.h>
#include <stdlib.h>

#define SIZE 3


typedef struct {
    char name[50];
    char symbol;  
} Player;


void initializeBoard(char board[SIZE][SIZE]);
void displayBoard(char board[SIZE][SIZE]);
int makeMove(char board[SIZE][SIZE], Player p);
int checkWin(char board[SIZE][SIZE], char symbol);
int checkDraw(char board[SIZE][SIZE]);

int main() {
    char board[SIZE][SIZE];
    Player player1, player2;
    int gameOver = 0;
    int turn = 0;


    printf("Enter name for Player 1 (X): ");
    scanf("%s", player1.name);
    player1.symbol = 'X';

    printf("Enter name for Player 2 (O): ");
    scanf("%s", player2.name);
    player2.symbol = 'O';

    initializeBoard(board);

    while (!gameOver) {
        displayBoard(board);

        if (turn % 2 == 0) {
            makeMove(board, player1);
            if (checkWin(board, player1.symbol)) {
                displayBoard(board);
                printf("?? %s wins!\n", player1.name);
                gameOver = 1;
            }
        } else {
            makeMove(board, player2);
            if (checkWin(board, player2.symbol)) {
                displayBoard(board);
                printf("?? %s wins!\n", player2.name);
                gameOver = 1;
            }
        }

        if (!gameOver && checkDraw(board)) {
            displayBoard(board);
            printf("It's a draw!\n");
            gameOver = 1;
        }

        turn++;
    }

    return 0;
}


void initializeBoard(char board[SIZE][SIZE]) {
    char ch = '1';
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            board[i][j] = ch++;
        }
    }
}


void displayBoard(char board[SIZE][SIZE]) {
    printf("\n");
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf(" %c ", board[i][j]);
            if (j < SIZE - 1)
                printf("|");
        }
        printf("\n");
        if (i < SIZE - 1)
            printf("---|---|---\n");
    }
    printf("\n");
}

int makeMove(char board[SIZE][SIZE], Player p) {
    int choice;
    int row, col;

    while (1) {
        printf("%s (%c), enter your move (1-9): ", p.name, p.symbol);
        scanf("%d", &choice);

        if (choice < 1 || choice > 9) {
            printf("Invalid choice. Try again.\n");
            continue;
        }

        row = (choice - 1) / SIZE;
        col = (choice - 1) % SIZE;

        if (board[row][col] != 'X' && board[row][col] != 'O') {
            board[row][col] = p.symbol;
            break;
        } else {
            printf("Cell already taken. Try again.\n");
        }
    }
    return 1;
}


int checkWin(char board[SIZE][SIZE], char symbol) {
    
    for (int i = 0; i < SIZE; i++) {
        if ((board[i][0] == symbol && board[i][1] == symbol && board[i][2] == symbol) ||
            (board[0][i] == symbol && board[1][i] == symbol && board[2][i] == symbol))
            return 1;
    }

    
    if ((board[0][0] == symbol && board[1][1] == symbol && board[2][2] == symbol) ||
        (board[0][2] == symbol && board[1][1] == symbol && board[2][0] == symbol))
        return 1;

    return 0;
}


int checkDraw(char board[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            if (board[i][j] != 'X' && board[i][j] != 'O')
                return 0;
        }
    }
    return 1;
}
Editor is loading...
Leave a Comment