井字棋Dev-c++

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
const int ROW = 3;
const int COL = 3;
char board[ROW][COL] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} };
char player1 = 'O';
char player2 = 'X';
int turn = 1;
bool gameOver = false;

void drawBoard();
void play();
bool isMoveValid(int, int);
void makeMove(int, int, char);
bool isGameOver();
bool isWinner(char);

int main()
{
    drawBoard();
    while (!gameOver) {
        play();
        turn++;
        gameOver = isGameOver();
    }

    if (isWinner(player1)) {
        cout << "Player 1 (" << player1 << ") wins!" << endl;
    }
    else if (isWinner(player2)) {
        cout << "Player 2 (" << player2 << ") wins!" << endl;
    }
    else {
        cout << "It's a tie!" << endl;
    }

    return 0;
}

void drawBoard() {
    cout << " " << setw(3) << "1" << setw(3) << "2" << setw(3) << "3" << endl;
    for (int i = 0; i < ROW; i++) {
        cout << i + 1 << setw(3);
        for (int j = 0; j < COL; j++) {
            cout << "|" << setw(2) << board[i][j] << setw(2);
        }
        cout << "|" << endl;
    }
}

void play() {
    int row, col;
    char player;
    if (turn % 2 == 0) {
        player = player2;
    }
    else {
        player = player1;
    }

    cout << "Player " << turn << " (" << player << ") turn: ";
    cin >> row >> col;

    if (!isMoveValid(row - 1, col - 1)) {
        cout << "Invalid move! Try again." << endl;
        play();
        return;
    }

    makeMove(row - 1, col - 1, player);
    drawBoard();
}

bool isMoveValid(int row, int col) {
    if (row < 0 || row >= ROW || col < 0 || col >= COL) {
        return false;
    }
    if (board[row][col] != ' ') {
        return false;
    }
    return true;
}

void makeMove(int row, int col, char player) {
    board[row][col] = player;
}

bool isGameOver() {
    if (isWinner(player1) || isWinner(player2)) {
        return true;
    }
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            if (board[i][j] == ' ') {
                return false;
            }
        }
    }
    return true;
}

bool isWinner(char player) {
    for (int i = 0; i < ROW; i++) {
        if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
            return true;
        }
        if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
            return true;
        }
    }
    if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
        return true;
    }
    if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
        return true;
    }
    return false;
}

以上是用c++写的井字棋,用来无聊时打发打发时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的 C 语言井字棋游戏,使用 Dev-C++ 编写: ```c #include <stdio.h> #include <stdlib.h> char board[3][3]; // 存放棋盘状态的二维数组 void init_board(); // 初始化棋盘 void print_board(); // 打印棋盘 int check_win(char); // 检查是否获胜 int check_full(); // 检查是否棋盘已满 int main() { char player = 'X'; // 玩家先手,使用 X 表示 int row, col; init_board(); // 初始化棋盘 print_board(); // 打印棋盘 while (1) { printf("Player %c, enter row and column: ", player); scanf("%d %d", &row, &col); if (row < 1 || row > 3 || col < 1 || col > 3) { // 判断输入是否合法 printf("Invalid input! Please enter again.\n"); continue; } if (board[row-1][col-1] != ' ') { // 判断该位置是否已经有棋子 printf("This place has been occupied! Please enter again.\n"); continue; } board[row-1][col-1] = player; // 在该位置放置棋子 print_board(); // 打印棋盘 if (check_win(player)) { // 判断玩家是否获胜 printf("Player %c wins!\n", player); break; } if (check_full()) { // 判断棋盘是否已满 printf("The game is draw!\n"); break; } player = (player == 'X') ? 'O' : 'X'; // 切换玩家 } return 0; } void init_board() { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { board[i][j] = ' '; } } } void print_board() { int i, j; printf(" 1 2 3\n"); for (i = 0; i < 3; i++) { printf("%d ", i+1); for (j = 0; j < 3; j++) { printf("%c", board[i][j]); if (j != 2) { printf("|"); } } printf("\n"); if (i != 2) { printf(" -----\n"); } } } int check_win(char player) { int i, j; for (i = 0; i < 3; i++) { if (board[i][0] == player && board[i][1] == player && board[i][2] == player) { // 检查行 return 1; } if (board[0][i] == player && board[1][i] == player && board[2][i] == player) { // 检查列 return 1; } } if (board[0][0] == player && board[1][1] == player && board[2][2] == player) { // 检查对角线 return 1; } if (board[0][2] == player && board[1][1] == player && board[2][0] == player) { // 检查反对角线 return 1; } return 0; } int check_full() { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (board[i][j] == ' ') { // 只要有一个空格,就说明棋盘未满 return 0; } } } return 1; } ``` 这个程序实现了一个简单的井字棋游戏,可以在 Dev-C++ 中编译并运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值