学了二维数组我们就可以试着写一个三子棋小游戏了,但电脑随机的操作让整个游戏根本没难度,所以我给大家带来了一个不是那么笨的三子棋,将人的思维带给电脑,代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3  //宏定义棋盘长宽
#define COL 3
void mvue()   //打印游戏菜单函数
{printf("*************************************\n");printf("*********** 1.开始游戏  *************\n");printf("*********** 0.退出游戏  *************\n");printf("*************************************\n");
}
//******************棋盘内部置空******************************
void initialization(char disc[ROW][COL] )
{int i = 0;for (i = 0; i < ROW; i++){int n = 0;for (n = 0; n < COL; n++){disc[i][n] = ' ';}}
}
//*****************创建棋盘外观,打印棋盘********************************
void print(char disc[ROW][COL] )
{printf("+---+---+---+\n");for (int row = 0; row < ROW; row++){printf("| %c | %c | %c |\n", disc[row][0], disc[row][1], disc[row][2]);printf("+---+---+---+\n");}}
//*****************玩家下棋******************************
void a_fallingseed(char disc[ROW][COL])
{while (1){printf("输入一个坐标(例2,2):");int x = 0;int y = 0;scanf("%d,%d", &x, &y);if ((x > 0 && x <= ROW) && (y > 0 && y <= COL)){if (disc[x - 1][y - 1] == ' '){disc[x - 1][y - 1] = '*';break;}elseprintf("坐标已有棋子\n");}else{printf("坐标非法\n");}}}
//********************电脑下棋****************************
int b_fallingseed(char disc[ROW][COL])//判断敌方横是否为2
{for (int i = 0; i < ROW; i++){int judge1 = 0;int n = 0;for ( n = 0; n < COL; n++){if(disc[i][n] == '*')judge1++;}if (judge1 == 2){for (int max = 0; max < COL; max++){if (disc[i][max] == ' '){disc[i][max] = '#';return 0;}}}}//-------------------------------------------for (int i = 0; i < COL; i++) //判断敌方纵是否为2 {int judge2 = 0;int n = 0;for (n = 0; n < ROW; n++){if(disc[n][i] == '*')judge2++;}if (judge2 == 2){for (int max = 0; max < COL; max++){if (disc[max][i] == ' '){disc[max][i] = '#';return 0;}}}}//----------------判断敌方右斜是否为2  ---------------------------int pa = 0;int pb = 0;int judge3 = 0;for (pa = 0; pa < ROW && pb < COL; pa++,pb++){if (disc[pa][pb] == '*'){judge3++;}if (judge3 == 2){if (disc[0][0] == ' '){disc[0][0] = '#';return 0;}else if (disc[1][1] == ' '){disc[1][1] = '#';return 0;}else{disc[2][2] = '#';return 0;}}}//--------------判断敌方左斜是否为2 -------------------------int judge4 = 0;int pc = 0;int pd = 0;for (pc = 0, pd = COL - 1; pc < ROW && pd >= 0; pc++, pd--){if (disc[pc][pd] == '*'){judge4++;}if (judge4 == 2){if (disc[0][2] == ' '){disc[0][2] = '#';return 0;}else if (disc[1][1] == ' '){disc[1][1] = '#';return 0;}else{disc[2][0] = '#';return 0;}}}if (disc[1][1] == ' ')   //如果没有必走棋,抢中心位置{disc[1][1] = '#';return 0;}else                        //如果中心位置已被占随机下一步棋{                          //这里的随机步还可以优化,让电脑随着你写的一个// 算法落子,每一步占据最大优势,但是这里是最难的,所以我没写while (1){int row = rand() % ROW;int col = rand() % COL;if (disc[row][col] == ' '){disc[row][col] = '#';return 0;}}}
}
int iswin(char disc[ROW][COL])  //判断继续游戏还是平局
{int i = 0;int y = 0;for (i = 0; i < ROW; i++){for (y = 0; y < COL; y++){if (disc[i][y] == ' ')return 1;}}return 0;
}
//---------------------------------------------------
char Win(char disc[ROW][COL])  //判断输赢
{for (int i = 0; i < ROW; i++){if (disc[i][0] == disc[i][1] && disc[i][1] == disc[i][2] && disc[i][1] != ' '){return disc[i][1];}}for (int y = 0; y < COL; y++){if (disc[0][y] == disc[1][y] && disc[1][y] == disc[2][y] && disc[1][y] != ' '){return disc[0][y];}}if (disc[0][0] == disc[1][1] && disc[1][1] == disc[2][2] && disc[1][1] != ' '){return disc[1][1];}else if (disc[0][2] == disc[1][1] && disc[1][1] == disc[2][0] && disc[1][1] != ' '){return disc[1][1];}else{int c = iswin(disc);if (c == 0)return 'Q';elsereturn ' ';}
}
void game()  //游戏执行过程总函数
{printf("玩家先(0)电脑先(1)\n");int vit = 0;scanf("%d", &vit);if (vit == 0)                                //玩家先{char disc[ROW][COL] = { 0 };initialization(disc);//初始化棋盘函数print(disc, ROW, COL); //创建棋盘外观char is = ' ';//判断根据while (1){a_fallingseed(disc);//玩家下棋*print(disc, ROW, COL); //打印棋盘is = Win(disc);    //判断胜负if (is != ' '){break;}b_fallingseed(disc);//电脑下棋#print(disc, ROW, COL);//打印棋盘is = Win(disc);    //判断胜负if (is != ' '){break;}}if (is == '*'){printf("玩家胜利\n");}else if (is == '#'){printf("电脑胜利\n");}else if (is == 'Q')printf("平局\n");}else if (vit == 1)                              //电脑先{char disc[ROW][COL] = { 0 };initialization(disc);//初始化棋盘函数//print(disc, ROW, COL); //创建棋盘外观char is = ' ';//判断根据while (1){b_fallingseed(disc);//电脑下棋#//print(disc, ROW, COL); //打印棋盘is = Win(disc);    //判断胜负if (is != ' '){break;}print(disc, ROW, COL);a_fallingseed(disc);//玩家下棋*//print(disc, ROW, COL);//打印棋盘is = Win(disc);    //判断胜负if (is != ' '){break;}}if (is == '*'){printf("玩家胜利\n");}else if (is == '#'){printf("电脑胜利\n");}else if (is == 'Q')printf("平局\n");}
}
//*************************************************************
int main()
{int input = 0;srand((unsigned int)time(NULL));do{//system("cls");mvue();scanf("%d", &input);switch (input){case 1:game();  //逐步实现游戏过程的函数break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

目前有两个最大的缺点

1.就是随机落子那一块,整个代码只是让电脑不会输的太挫,能够正常操作,如果解决电脑随机落子那一块那么电脑可以算是一个不错的对手了

2.电脑不会去判断自己是否有两个棋子达成条件,而是一味的去堵玩家,不过这一块的代码相对好实现,稍微调整一下复制粘贴判断玩家的棋子代码就可以了,这里我没时间去做修改了,有兴趣的朋友可以试一试

C语言---会思考的三子棋相关推荐

  1. 如何用C语言来实现【三子棋游戏】

    目录 一.前言 二.思维导图 三.思路分析 四.运行结果 五.算法细节 1.游戏相关的测试 2.游戏函数的声明 3.游戏函数的实现 (1)初始化棋盘的函数 (2)打印棋盘的函数 (3)玩家下棋的函数 ...

  2. 【C语言】通过C语言实现简单的三子棋

    [C语言]通过C语言实现简单的三子棋 文章目录 [C语言]通过C语言实现简单的三子棋 前言 一.本次小小小小项目前提 二.游戏简易菜单 1.菜单打印 2.游戏菜单的逻辑执行 三.三子棋游戏 1.初始化 ...

  3. 入门级c语言小游戏———实现三子棋(图文详解,代码可复制)

    想必大家都曾有过上课和同桌一起下三子棋的经历吧,你有没有想过在计算机上写一个三子棋游戏呢?欢迎打开本篇博客,接下来和博主一起用c语言实现简易版三子棋吧! 文章目录 一.问题描述 二.基本实现流程 三. ...

  4. C语言的简单运用——三子棋

    前言 学习新知识固然重要,但如何运用所学的知识解决生活中的问题更为重要.只会学而不会用,何异于纸上谈兵.那么就让我们来看看如何用C语言来实现一个简单的三子棋吧! 目录 前言 一点建议 一.游戏菜单 1 ...

  5. 【C语言小游戏】三子棋(井字棋)

    hello,csdn的伙伴们,大家好,我们已经学习到了分支与循环,函数,数组这三大块知识,那么我们现在就可以尝试综合运用前面所学的知识,来完成一个简单的小游戏-----三子棋(井字棋) 目录 一.采用 ...

  6. 【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)

    C语言--五子棋.井字棋人机对"战" 针对C语言学习过程中的五子棋.三子棋实现记录 五子棋人机对战 C语言--五子棋.井字棋人机对"战" 实际效果 一.头文件( ...

  7. c语言程序设计中三子棋游戏,C语言实现简易版三子棋游戏

    本文实例为大家共享了C语言实现三子棋游戏的详细代码,供大家参考,详细内容如下 什么是多文件? 多数大型的工程的头文件和源文件非常多,我们也不可能把所有的代码都写在同一个文件里,这样也不方便代码的阅读与 ...

  8. 用c语言实现小游戏三子棋

    小游戏之三子棋 小游戏之三子棋 三子棋的基本玩法 游戏制作思路 制作步骤 1.菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6.判断胜利 完整代码 ​​​​​​​小结 三子棋的基本玩 ...

  9. C语言实战项目1——三子棋(可转变为N子棋)

    文章目录 前言 一.三子棋实现步骤 1.什么是三子棋? 2.C语言实现逻辑 3.函数实现 二.源代码 1.头文件 2.函数实现 3.主函数 总结 前言 学习就是一个总结以及融汇贯通的的过程,适当的对知 ...

最新文章

  1. what should you do if you want to become an expert in one domain
  2. 利用matlab点云工具处理点云
  3. ActiveXObject
  4. 最新高清IT职业技能图谱(15图)
  5. 玩玩小爬虫——试搭小架构
  6. Python urllib爬取百度首页
  7. 在B/S系统中引入定时器的功能
  8. [洛谷P3381]【模板】最小费用最大流
  9. 在ubuntu20.04上安装最新版的qq
  10. 对话Ruby创始人松本行弘、阿里高级技术专家朴灵!
  11. 如何在 Excel 图表中添加或删除次坐标轴?
  12. vue项目使用 Recorder.js 实现录音功能
  13. FPGA--ZCU106通过SFP+/SGMII模块传输数据-第一讲(全网唯一)
  14. Bit-M Accelerator全新上线
  15. ng-alain php,在angular中基于ng-alain如何定义自己的select组件?
  16. C语言基本的语法规定
  17. ElastiSearch与Solr和Lucene
  18. 【C语言必经之路——第13节】C语言中的数据类型详解
  19. 记一次对Pixiv日榜的爬虫
  20. 【RocketMQ】消息的存储设计

热门文章

  1. 欧几里得空间 希尔伯特空间
  2. c语言-----判断字符串是否为点分十进制的IP地址
  3. 充分挖掘 AI 潜能,看英特尔® AMX 如何为千行百业注智赋能
  4. 用threejs创建流动的水管
  5. tensorflow的卸载与重装
  6. 快速求素数表——埃氏筛法与欧拉筛法
  7. php有strock吗,HTML中stroke是什么意思?
  8. 使用 certbot 安装免费的安全证书
  9. AIX的vmstat命令详解(原创)
  10. SAP数据输出筛选条件正反向选择实测