千家信息网

如何用C++实现三子棋游戏

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了如何用C++实现三子棋游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用C++实现三子棋游戏文章都会有所收获,下面我们一起来看看吧。游戏描述:先来
千家信息网最后更新 2026年11月02日如何用C++实现三子棋游戏

这篇文章主要介绍了如何用C++实现三子棋游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用C++实现三子棋游戏文章都会有所收获,下面我们一起来看看吧。

    游戏描述:

    先来点真实的!三子棋其实就是我们小时候经常玩的井字棋,如果一方玩家实现横着三个或者竖着三个,或者对角线三个就算游戏胜利!

    (从头开始)头文件也写在前面:

    #include #include #include #define H 3//行#define L 3//列

    先把游戏与主函数写在前面:

    游戏函数:

    void game()//游戏实现步骤{        char gamemap[L][H] = {0};//存储数据 二维数组        initgamemap(gamemap, H, L);//棋盘初始化        showgamemap(gamemap, H, L);//打印出棋盘        char ret = 0;        while (1)//循环下棋        {                playgame1(gamemap, H, L);//玩家下棋                showgamemap(gamemap, H, L);//玩家下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);//判断玩家是否胜利                if (ret != 'C')                        break;                playgame2(gamemap, H, L);//电脑下棋                showgamemap(gamemap, H, L);//电脑下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);// 判断电脑是否胜利                if (ret != 'C')                        break;        }        if (ret == 'X')        {                printf("玩家赢了!");        }        else if (ret == 'O')        {                printf("电脑赢了!");        }        else        {                printf("平局");        }}

    主函数:

    int main(void){        Menu();//显示游戏菜单        srand((unsigned int)time(NULL));        int input = 0;        do        {                printf("请输入的你选择!");                scanf_s("%d", &input);                switch (input)                {                case 1:                        game();//游戏函数实现三子棋游戏!                        break;                case 0:                        printf("退出游戏!");                        break;                default:                        printf("输入错误,请从新输入!");                        break;                }        }while (input);    return 0;}

    1.构建游戏菜单

    我们用没有范围值类型的Menu函数表示游戏菜单,等下在主函数中直接读取就行。

    朴实无华的printf,毫无感情!玩家输入1,代表玩游戏,输入0代表退出游戏去!去写作业了。

    void Menu()//游戏菜单{        printf("**********************\n");        printf("****** 1.play   ******\n");        printf("****** 0.exit   ******\n");        printf("**********************\n");}

    2.构建棋盘

    2.1棋盘初始化

    我们用void型的initgame函数表示棋盘的初始化,棋盘的空隙我们用’ ‘即空格来表示。

    void initgamemap(char gamemap[L][H], int l, int h)//棋盘初始化函数的声明{        int i = 0;    int j = 0;        for (i = 0; i < H; i++)//H,J分别表示为行和列        {                for (j = 0; j < L; j++)                {                        gamemap[i][j] = ' ';                }        }}

    我们可以选择直接打印出棋盘,但是这样只能把棋盘规定为3x3的,所以我们看第二种方法

    void showgamemap(char gamemap[L][H], int l, int h)//直接打印出棋盘{        int i = 0;        for (i = 0; i < H; i++)        {                printf("%c  | %c |  %c\n", gamemap[i][0], gamemap[i][1],gamemap[i][2]);                if (i < L - 1)                        printf("---|---|---\n");        }}
    void showgamemap(char gamemap[L][H], int l, int h)//打印棋盘{        int i = 0;        for (i = 0; i < H; i++)        {                int j = 0;                for (j = 0; j < L; j++)                {                        printf(" %c ", gamemap[i][j]);                        if (j < L - 1)                                printf("|");                }                printf("\n");                if (i < H - 1)                {                        int j = 0;                        for (j = 0; j < L; j++)                        {                                printf("---");                                if (j < L - 1)                                        printf("|");                        }                        printf("\n");                }        }}

    3.玩家和电脑下棋

    3.1玩家先下

    我们默认为玩家先下棋!

    我们定义使用playgame1(gamemap, H, L);函数来实现玩家下棋!

    oid playgame1(char gamemap[L][H], int l, int h)//玩家下棋{        int x = 0;        int y = 0;        printf("玩家先下!");        while (1)        {                printf("请输入下棋的坐标:>");                scanf_s("%d %d", &x, &y);                //判断坐标合法性                if (x >= 1 && x <= H && y >= 1 && y <= L)                {                        //下棋                        //坐标是否被占用                        if (gamemap[x - 1][y - 1] == ' ')                        {                                gamemap[x - 1][y - 1] = 'X';                                break;                        }                        else                        {                                printf("坐标被占用, 请重新输入\n");                        }                }                else                {                        printf("坐标非法, 请重新输入\n");                }        }}

    3.2电脑下棋

    由于电脑下棋的位置是随机不定的,所以我们要使用到rand函数对应头文件#include ,为了使电脑每次下棋的位置不重复同时我们需要使用随机数种子srand函数。用time()函数去本地时间作为随机种子,time函数对应头文件#include 。

    void playgame2(char gamemap[L][H], int l, int h)//电脑下棋是是随机的{        printf("电脑再下\n");        int x = rand() % L;        int y = rand() % H;//随机产生棋的坐标,利用取余原理,将x,y的范围限制为0-2        while (1)        {                //判断该坐标是否已经被下过了                if (gamemap[x][y] == ' ')                {                        gamemap[x][y] = 'O';//电脑下的用O表示                        break;                }        }}

    4.判断胜负与下棋结果

    我们定义一个返回值为char类型的函数,通过游戏结果的几种不同条件,分别返回不同的字母,通过返回值是输出游戏结果。

    //玩家赢了-X
    //电脑赢了-O
    //平局-Q
    //游戏继续-C

    我们在游戏函数里经过玩家和电脑每次下棋后就直接执行判断游戏是否结束函数。并对返回的字母进行回馈。直到游戏结束

    int gameover1(char gamemap[L][H], int l, int h){        int i = 0;        int j = 0;        for (i = 0; i < H; i++)        {                for (j = 0; j < L; j++)                {                        if (gamemap[i][j] == ' ')                        {                                return 0;//棋盘没满                        }                }        }         return 1;//棋盘满了}char gameover(char gamemap[L][H], int l, int h){        int i = 0;        //判断三行        for (i = 0; i < H; i++)        {                if (gamemap[i][0] == gamemap[i][1] && gamemap[i][1] == gamemap[i][2] && gamemap[i][1] != ' ')                {                        return  gamemap[i][1];//                }        }        //判断三列        for (i = 0; i < L; i++)        {                if (gamemap[0][i] == gamemap[1][i] && gamemap[1][i] == gamemap[2][i] && gamemap[1][i] != ' ')                {                        return gamemap[1][i];                }        }        //判断对角线        if (gamemap[0][0] == gamemap[1][1] && gamemap[1][1] == gamemap[2][2] && gamemap[1][1] != ' ')        {                return gamemap[1][1];        }        if (gamemap[0][2] == gamemap[1][1] && gamemap[1][1] == gamemap[2][0] && gamemap[1][1] != ' ')        {                return gamemap[1][1];        }         //判断平局        //如果棋盘满了返回1, 不满返回0        int ret = gameover1(gamemap, H, L);        if (ret == 1)        {                return 'Q';        }        //继续        return 'C';}

    下棋结果的判断与输出;

    void game()//游戏实现步骤{        char gamemap[L][H] = {0};//存储数据 二维数组        initgamemap(gamemap, H, L);//棋盘初始化        showgamemap(gamemap, H, L);//打印出棋盘        char ret = 0;        while (1)//循环下棋        {                void game()//游戏实现步骤{        char gamemap[L][H] = {0};//存储数据 二维数组        initgamemap(gamemap, H, L);//棋盘初始化        showgamemap(gamemap, H, L);//打印出棋盘        char ret = 0;        while (1)//循环下棋        {                playgame1(gamemap, H, L);//玩家下棋                showgamemap(gamemap, H, L);//玩家下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);//判断玩家是否胜利                if (ret != 'C')                        break;                playgame2(gamemap, H, L);//电脑下棋                showgamemap(gamemap, H, L);//电脑下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);// 判断电脑是否胜利                if (ret != 'C')                        break;        }        if (ret == 'X')        {                printf("玩家赢了!");        }        else if (ret == 'O')        {                printf("电脑赢了!");        }        else        {                printf("平局");        }}//玩家下棋                showgamemap(gamemap, H, L);//玩家下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);//判断玩家是否胜利                if (ret != 'C')                        break;                playgame2(gamemap, H, L);//电脑下棋                showgamemap(gamemap, H, L);//电脑下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);// 判断电脑是否胜利                if (ret != 'C')                        break;        }        if (ret == 'X')        {                printf("玩家赢了!");        }        else if (ret == 'O')        {                printf("电脑赢了!");        }        else        {                printf("平局");        }}

    代码附上:

    #include #include #include #define H 3#define L 3void initgamemap(char gamemap[L][H], int l, int h)//棋盘初始化函数的声明{        int i = 0;    int j = 0;        for (i = 0; i < H; i++)        {                for (j = 0; j < L; j++)                {                        gamemap[i][j] = ' ';                }        }}//void showgamemap(char gamemap[L][H], int l, int h)//直接打印出棋盘//{//      int i = 0;//      for (i = 0; i < H; i++)//      {//              printf("%c  | %c |  %c\n", gamemap[i][0], gamemap[i][1],gamemap[i][2]);//              if (i < L - 1)//                      printf("---|---|---\n");//      }//}void showgamemap(char gamemap[L][H], int l, int h)//打印棋盘{        int i = 0;        for (i = 0; i < H; i++)        {                int j = 0;                for (j = 0; j < L; j++)                {                        printf(" %c ", gamemap[i][j]);                        if (j < L - 1)                                printf("|");                }                printf("\n");                if (i < H - 1)                {                        int j = 0;                        for (j = 0; j < L; j++)                        {                                printf("---");                                if (j < L - 1)                                        printf("|");                        }                        printf("\n");                }        }}void playgame1(char gamemap[L][H], int l, int h)//玩家下棋{        int x = 0;        int y = 0;        printf("玩家先下!");        while (1)        {                printf("请输入下棋的坐标:>");                scanf_s("%d %d", &x, &y);                //判断坐标合法性                if (x >= 1 && x <= H && y >= 1 && y <= L)                {                        //下棋                        //坐标是否被占用                        if (gamemap[x - 1][y - 1] == ' ')                        {                                gamemap[x - 1][y - 1] = 'X';                                break;                        }                        else                        {                                printf("坐标被占用, 请重新输入\n");                        }                }                else                {                        printf("坐标非法, 请重新输入\n");                }        }}void playgame2(char gamemap[L][H], int l, int h)//电脑下棋是是随机的{        printf("电脑再下\n");        int x = rand() % L;        int y = rand() % H;//随机产生棋的坐标,利用取余原理,将x,y的范围限制为0-2        while (1)        {                //判断该坐标是否已经被下过了                if (gamemap[x][y] == ' ')                {                        gamemap[x][y] = 'O';//电脑下的用O表示                        break;                }        }}int gameover1(char gamemap[L][H], int l, int h){        int i = 0;        int j = 0;        for (i = 0; i < H; i++)        {                for (j = 0; j < L; j++)                {                        if (gamemap[i][j] == ' ')                        {                                return 0;//棋盘没满                        }                }        }         return 1;//棋盘满了}char gameover(char gamemap[L][H], int l, int h){        int i = 0;        //判断三行        for (i = 0; i < H; i++)        {                if (gamemap[i][0] == gamemap[i][1] && gamemap[i][1] == gamemap[i][2] && gamemap[i][1] != ' ')                {                        return  gamemap[i][1];//                }        }        //判断三列        for (i = 0; i < L; i++)        {                if (gamemap[0][i] == gamemap[1][i] && gamemap[1][i] == gamemap[2][i] && gamemap[1][i] != ' ')                {                        return gamemap[1][i];                }        }        //判断对角线        if (gamemap[0][0] == gamemap[1][1] && gamemap[1][1] == gamemap[2][2] && gamemap[1][1] != ' ')        {                return gamemap[1][1];        }        if (gamemap[0][2] == gamemap[1][1] && gamemap[1][1] == gamemap[2][0] && gamemap[1][1] != ' ')        {                return gamemap[1][1];        }         //判断平局        //如果棋盘满了返回1, 不满返回0        int ret = gameover1(gamemap, H, L);        if (ret == 1)        {                return 'Q';        }        //继续        return 'C';}//玩家赢了-*//电脑赢了-#//平局-Q//游戏继续-c void Menu()//游戏菜单{        printf("**********************\n");        printf("****** 1.play   ******\n");        printf("****** 0.exit   ******\n");        printf("**********************\n");}void game()//游戏实现步骤{        char gamemap[L][H] = {0};//存储数据 二维数组        initgamemap(gamemap, H, L);//棋盘初始化        showgamemap(gamemap, H, L);//打印出棋盘        char ret = 0;        while (1)//循环下棋        {                void game()//游戏实现步骤{        char gamemap[L][H] = {0};//存储数据 二维数组        initgamemap(gamemap, H, L);//棋盘初始化        showgamemap(gamemap, H, L);//打印出棋盘        char ret = 0;        while (1)//循环下棋        {                playgame1(gamemap, H, L);//玩家下棋                showgamemap(gamemap, H, L);//玩家下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);//判断玩家是否胜利                if (ret != 'C')                        break;                playgame2(gamemap, H, L);//电脑下棋                showgamemap(gamemap, H, L);//电脑下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);// 判断电脑是否胜利                if (ret != 'C')                        break;        }        if (ret == 'X')        {                printf("玩家赢了!");        }        else if (ret == 'O')        {                printf("电脑赢了!");        }        else        {                printf("平局");        }}//玩家下棋                showgamemap(gamemap, H, L);//玩家下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);//判断玩家是否胜利                if (ret != 'C')                        break;                playgame2(gamemap, H, L);//电脑下棋                showgamemap(gamemap, H, L);//电脑下完棋后并打印出该棋盘                ret=gameover(gamemap, H, L);// 判断电脑是否胜利                if (ret != 'C')                        break;        }        if (ret == 'X')        {                printf("玩家赢了!");        }        else if (ret == 'O')        {                printf("电脑赢了!");        }        else        {                printf("平局");        }}int main(void){        Menu();//显示游戏菜单        srand((unsigned int)time(NULL));        int input = 0;        do        {                printf("请输入的你选择!");                scanf_s("%d", &input);                switch (input)                {                case 1:                        game();//游戏函数实现三子棋游戏!                        break;                case 0:                        printf("退出游戏!");                        break;                default:                        printf("输入错误,请从新输入!");                        break;                }        }while (input);    return 0;}

    关于"如何用C++实现三子棋游戏"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"如何用C++实现三子棋游戏"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

    棋盘 电脑 玩家 函数 坐标 输入 胜利 棋后 平局 j++ 三子 菜单 数据 数组 步骤 二维 存储 循环 C++ 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技怎么样 互联网巨头反垄断金融科技 互联网科技的 没上市的科技互联网公司 深圳互联网络科技有限公司 九亚互联网科技 长亮科技 互联网金融 无锡溥仪互联网科技有限公司 深圳市运趣互联网科技有限公司 农村开互联网科技讲堂 开一家科技互联网公司需要多少钱 国大互联网教育科技有限公司工作 洛阳共同富裕互联网科技有限公司 威龙国际互联网科技公司 群盈汇互联网科技有限公司 互联网科技圈年度人物 伍佰万互联网科技怎么赚钱 云南省自由互联网科技有限公司 普陀区互联网教育科技管理办法 中国主要互联网科技公司 互联网科技 南京欣网互联网络科技有限公司 科技互联网公司装修 互联网科技社 宜安科技 互联网金融 小马过河互联网科技 互联网科技创新服务 移动互联网科技公司 城市宝互联网科技有限公司 宁波允成互联网科技有限公司
    0