C语言实现井字棋详解:从模块化思路到完整代码

拾柒
拾柒
发布时间:2026-10-13 | 5人浏览过
原创

利用 C 语言中的二维数组和模块化函数思想,本文详细演示了如何构建并实现一个简单的终端版井字棋游戏。通过拆解初始化、界面渲染、人机交互以及胜负判定等核心功能,提供清晰易懂的完整代码框架。

1. 整体设计与模块化思路

在 C 语言中开发稍具规模的程序时,将所有逻辑堆砌在主函数内不仅难以维护,也无法体现结构化编程的优势。推荐采用“模块化”开发模式,将主程序的调用逻辑(如菜单选择)与实际的游戏运行机制分离。

首先定义棋盘的行列常量,并在主函数中调用核心测试/运行函数:

#include <stdio.h>
#include <time.h>
#define ROW 3
#define COL 3

void test();
int main()
{
    test();
    return 0;
}

2. 基础功能函数编写

完成游戏的核心在于几个关键的独立函数:负责界面的显示、玩家与电脑的移动策略,以及最终结果的判定。

第1步:实现基础菜单

提供一个简单的交互入口,供用户决定是否开启游戏:

void menu()
{
    printf("输入1开始游戏\n");
    printf("输入0退出游戏\n");
}

第2步:构建游戏调度循环 (test)

test 函数作为游戏的主调度器,使用 srand(time(NULL)) 获取随机种子以保证每次运行电脑的逻辑不同,并通过死循环配合开关语句来维持游戏的持续交互状态。

void test()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        switch(input)
        {
            case 1:
                game(); // 进入游戏模块
                break;
            case 0:
                printf("退出游戏\n");
                break;
            default:
                printf("选择错误,请重新输入\n");
                break;
        }
    } while(input); // 根据需求可优化为 while(input != 0)
}

第3步:棋盘数据初始化 (InitBoard)

创建一个字符型的二维数组来存储棋盘状态,并用空格(' ')将其全部填满,确保开局干净无误。

void InitBoard(char arr[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for(i = 0; i<row; i++)
    {
        for(j = 0; j<col; j++)
        {
            arr[i][j] = ' '; // 初始化为空格
        }
    }
}

第4步:棋盘打印渲染 (DisplayBoard)

将二维数组的内容按格式输出至控制台。为了模拟真实的网格外观,每一行单元格后需要拼接竖线(|),每一格之间需要拼接横线(---)。

void DisplayBoard(char board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf(
相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表