C语言三子棋游戏实现:逻辑拆解与完整源码

沿途有光
沿途有光
发布时间:2026-10-16 | 5人浏览过
原创

本文展示了如何使用 C 语言实现经典的三子棋游戏,详细解析了从菜单交互、棋盘渲染到核心胜负判定逻辑的完整代码结构,帮助开发者快速掌握面向过程设计与二维数组应用。

游戏架构与模块划分

三子棋游戏的核心在于状态管理与规则判断。在 C 语言的面向过程编程模式下,通常将功能拆分为独立的函数模块以提高可读性。本项目主要包含以下核心功能:

  • 交互层:负责游戏主菜单显示与输入处理。
  • 状态层:负责棋盘的初始化、渲染打印,以及存储当前棋子分布。
  • 逻辑层:包含玩家移动、电脑随机移动策略,以及行、列、对角线的胜负判定。

为了实现清晰的工程结构,通常创建一个头文件 game.h 用于声明接口,源文件用于具体实现。

核心数据结构与初始化

游戏地图本质上是一个固定大小的字符型二维数组。为了便于维护,建议使用宏定义行列尺寸。若需要修改为五子棋或其他规格,只需调整宏即可。

#define ROW 3
#define COL 3

// 定义棋盘类型
char board[ROW][COL];

在每局游戏开始前,必须对棋盘进行清空处理。初始化函数遍历数组,将每个元素重置为空格字符 ' ',确保起始状态纯净。

void InitBoard(char board[ROW][COL], int row, int col) {
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            board[i][j] = ' ';
        }
    }
}

菜单交互与主控逻辑

游戏启动后,首先需要展示欢迎界面。简单的控制台交互可以通过 printf 输出文字,配合 switch-case 结构控制游戏流程(开始、重开、退出)。

void menu() {
    printf("********************************\n");
    printf("****** 1. Start Game ******\n");
    printf("****** 0. Exit Game   ******\n");
    printf("********************************\n");
}

主循环中,用户输入选项后执行对应动作。实际运行中,test() 函数通常会包裹在 do-while 循环中以支持多局游玩。

棋盘可视化与渲染

为了让二维数组在终端呈现出类似九宫格的视觉效果,打印函数需处理网格线。逻辑上,每一行由“字符+分隔符”组成,行与行之间也需要分隔线。

void DisplayBoard(char board[ROW][COL], int row, int col) {
    for (int i = 0; i < row; i++) {
        // 打印棋格内容
        for (int j = 0; j < col; j++) {
            printf(" %c ", board[i][j]);
            if (j < col - 1)
                printf("|" );
        }
        printf("\n");
        
        // 打印行分隔线
        if (i < row - 1) {
            for (int k = 0; k < col; k++) {
                printf("---");
                if (k < col - 1)
                    printf("|");
            }
            printf("\n");
        }
    }
} 

玩家与电脑的逻辑实现

第1步:玩家下棋

玩家通过键盘输入坐标 (x, y)。由于人类习惯从 1 开始计数,而数组索引从 0 开始,因此需要进行偏移量修正。同时需校验坐标合法性(未越界且该位置为空),无效输入应提示重试。

void PlayerMove(char board[ROW][COL], int row, int col) {
    int x, y;
    while(1) {
        printf("请输入坐标(x,y): \n");
        scanf("%d %d", &x, &y);
        
        // 检查边界
        if (x >= 1 && x <= row && y >= 1 && y <= col) {
            // 检查是否已被占用
            if (board[x-1][y-1] == ' ') {
                board[x-1][y-1] = '*'; // 玩家标记
                break;
            } else {
                printf("该位置已有棋子,请重新输入!\n");
            }
        } else {
            printf("输入非法,请重新输入!\n");
        }
    }
}

第2步:电脑下棋

简易 AI 策略采用伪随机方式。调用 rand() 生成 0 到 row-1 之间的随机数作为坐标。若生成的点已被占用,则继续生成直到找到空位。

// 需在main入口处 srand(time(NULL)) 以生成不同序列
#include <time.h>
#include <stdlib.h>

void ComputerMove(char board[ROW][COL], int row, int col) {
    printf("电脑思考中...\n");
    while(1) {
        int x = rand() % row;
        int y = rand() % col;
        
        if (board[x][y] == ' ') {
            board[x][y] = '#'; // 电脑标记
            break;
        }
    }
}

胜负判定机制

游戏结束条件包括:某一方连成三子、或棋盘满员平局。判定函数按优先级检查:

  1. 横向胜利:遍历每行,检查三个元素是否相等且非空。
  2. 纵向胜利:遍历每列,检查三个元素是否相等且非空。
  3. 对角线胜利:检查 (0,0)-(2,2) 和 (0,2)-(2,0) 两条对角线。
  4. 平局判断:若未分出胜负但棋盘无空格,返回平局标识。
  5. 游戏继续:以上均未满足,返回继续标识。
char IsWin(char board[ROW][COL], int row, int col) {
    // 检查行
    for (int i = 0; i < row; i++) {
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') {
            return board[i][0];
        }
    }
    // 检查列
    for (int i = 0; i < col; i++) {
        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') {
            return board[0][i];
        }
    }
    // 检查对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') {
        return board[0][0];
    }
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ') {
        return board[0][2];
    }
    
    // 检查平局
    int full = 1;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            if (board[i][j] == ' ') {
                full = 0;
                break;
            }
        }
    }
    
    if (full) return 'Q'; // Draw
    
    return 'C'; // Continue
}

以上就是用C语言实现三子棋游戏的详细内容,更多关于C语言小游戏开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表