c语言编程笔录

首页 > C语言 > c语言

c语言

C语言实现三子棋小游戏的示例代码

更新时间:2023-08-09

前言

三子棋小游戏是一种经典的井字棋游戏,由两名玩家在3x3的棋盘上轮流下棋,目标是先在横向、纵向或对角线上连成三个相同颜色的棋子。

示例代码

#include 

// 定义棋盘的大小
#define BOARD_SIZE 3

// 定义棋盘的状态
#define EMPTY ' '
#define PLAYER_X 'X'
#define PLAYER_O 'O'

// 打印棋盘
void printBoard(char board[BOARD_SIZE][BOARD_SIZE]) {
    printf("---------\n");
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            printf("| %c ", board[i][j]);
        }
        printf("|\n---------\n");
    }
}

// 判断是否有玩家获胜
int checkWin(char board[BOARD_SIZE][BOARD_SIZE], char player) {
    // 检查横向
    for (int i = 0; i < BOARD_SIZE; i++) {
        if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
            return 1;
        }
    }
    // 检查纵向
    for (int j = 0; j < BOARD_SIZE; j++) {
        if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
            return 1;
        }
    }
    // 检查对角线
    if ((board[0][0] == player && board[1][1] == player && board[2][2] == player) ||
        (board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
        return 1;
    }
    return 0;
}

int main() {
    char board[BOARD_SIZE][BOARD_SIZE];
    // 初始化棋盘
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            board[i][j] = EMPTY;
        }
    }
    // 当前玩家,默认为玩家X
    char currentPlayer = PLAYER_X;
    // 游戏是否结束的标志
    int gameOver = 0;
    // 游戏循环
    while (!gameOver) {
        printBoard(board);
        // 当前玩家下棋
        int row, col;
        printf("玩家 %c,请输入棋子的位置(行 列):", currentPlayer);
        scanf("%d %d", &row, &col);
        // 下棋位置合法性检查
        if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != EMPTY) {
            printf("无效的位置,请重新输入!\n");
            continue;
        }
        // 在棋盘上落子
        board[row][col] = currentPlayer;
        // 判断是否有玩家获胜
        if (checkWin(board, currentPlayer)) {
            printf("玩家 %c 获胜!\n", currentPlayer);
            gameOver = 1;
        }
        // 判断是否平局
        int full = 1; // 棋盘是否已满
        for (int i = 0; i < BOARD_SIZE; i++) {
            for (int j = 0; j < BOARD_SIZE; j++) {
                if (board[i][j] == EMPTY) {
                    full = 0;
                    break;
                }
            }
            if (!full) {
                break;
            }
        }
        if (full && !gameOver) {
            printf("游戏平局!\n");
            gameOver = 1;
        }
        // 切换当前玩家
        currentPlayer = currentPlayer == PLAYER_X ? PLAYER_O : PLAYER_X;
    }
    printBoard(board);
    return 0;
}

代码解释和规范

首先,我们使用了`#define`指令来定义一些常量。`BOARD_SIZE`表示棋盘的大小,这里我们选择了一个3x3的棋盘。`EMPTY`、`PLAYER_X`和`PLAYER_O`表示棋盘上的空格、玩家X和玩家O。

然后,我们定义了几个函数和变量来实现游戏的逻辑。`printBoard`函数用于打印棋盘。`checkWin`函数用于判断是否有玩家获胜。

在`main`函数中,我们首先初始化棋盘,并设置当前玩家为玩家X。然后进入一个游戏循环,直到游戏结束。每一轮循环中,打印棋盘,提示当前玩家输入下棋位置,下棋位置的合法性检查,落子,判断是否有玩家获胜,判断是否平局,最后切换当前玩家。如果游戏结束,打印最终的棋盘。

这段代码使用了C语言来实现三子棋小游戏,并且采用了常见的编码规范,如命名清晰、注释明确、代码缩进等。通过这个示例代码,开发者可以了解到如何使用C语言来实现简单的游戏逻辑。

总结

本示例代码展示了使用C语言实现三子棋小游戏的基本思路和代码结构。我们定义了常量、函数和变量来表示棋盘、玩家和游戏逻辑,并编写了一个游戏循环来处理玩家的输入、判断胜负和结束游戏。通过这个示例代码,开发者可以了解如何在C语言中实现简单游戏的逻辑。