C语言小游戏:三字棋(增强版本)
来源:互联网 发布:郑州网络推广公司 编辑:程序博客网 时间:2024/06/11 02:51
上一篇博客发表了关于用C语言来实现小游戏三字棋的代码,但是这个代码中的电脑难度可谓是极低,我通过改变电脑落子的算法,增强了电脑的难度。具体思路为:一、让电脑优先判断自己是否有可能赢。二、判断自己可能赢的前提是,让自己能够知道自己在行、列、两条对角线中是否有两个相同的棋子,并且第三个地方为空,也就是‘ ’。三、如果电脑没有任何赢的可能,那么判断玩家在有行、列、两条对角线中是否有两个相同的棋子,并且第三个地方为空,进行对玩家的堵截。四、若电脑跟玩家都没有可能赢的情况那么让电脑自己随机产生一个坐标进行落子。以下为增强后的电脑下棋代码:
void RobotMove(char board[ROW][COL], int row, int col)//电脑走{ int i = 0; int j = 0; int a = 0;//a 用于限制一旦有一种判断成功,就不再进行其他判断 int b = 0;//b 用于对电脑即将赢的时候,不同判断产生后,进入不同的case int c = 0;//c 用于对玩家即将赢的时候,不同判断产生后,进入不同的case //电脑有两个连成线 if (a == 0) { for (i = 0; i < ROW; i++)//判断行 { if ((board[i][0] == board[i][1] && board[i][0] == 'O'&&board[i][2] != 'X') || (board[i][1] == board[i][2] && board[i][1] == 'O'&&board[i][0] != 'X') || (board[i][0] == board[i][2] && board[i][0] == 'O'&&board[i][1] != 'X')) { a = 1; b = 1; break; } } } if (a == 0) { for (j = 0; j < ROW; j++)//判断列 { if ((board[0][j] == board[1][j] && board[0][j] == 'O'&&board[2][j] != 'X') || (board[1][j] == board[2][j] && board[1][j] == 'O'&&board[0][j] != 'X') || (board[0][j] == board[2][j] && board[0][j] == 'O'&&board[1][j] != 'X')) { b = 2; a = 1; break; } } } if ((board[0][0] == board[1][1] && board[0][0] == 'O'&&board[2][2] != 'X')//第一条斜对角 || (board[1][1] == board[2][2] && board[1][1] == 'O'&&board[0][0] != 'X') || (board[0][0] == board[2][2] && board[0][0] == 'O'&&board[1][1] != 'X') && (a == 0)) { b = 3; a = 1; } if ((board[0][2] == board[1][1] && board[0][2] == 'O'&&board[2][0] != 'X')//第二条斜对角 || (board[1][1] == board[2][0] && board[1][1] == 'O'&&board[0][2] != 'X') || (board[0][2] == board[2][0] && board[0][2] == 'O'&&board[1][1] != 'X') && (a == 0)) { b = 4; a = 1; } switch (b) { case 1: do { j = rand() % 3;//固定行不变,改变列,让棋子进入空白处 if (board[i][j] == ' ') { board[i][j] = 'O'; break; } } while (1); break; case 2: do {//rand()%3 产生0 1 2 之间的随机数 i = rand() % 3;//固定列不变,改变行,让棋子进入空白处 if (board[i][j] == ' ') { board[i][j] = 'O'; break; } } while (1); break; case 3: do {//第一条对角线 i = rand() % 3; j = rand() % 3; if ((i == j) && (board[i][j] == ' ')) { board[i][j] = 'O'; break; } } while (1); break; case 4: do {//第二条对角线 i = rand() % 3; j = rand() % 3; if ((i == j) && (board[i][j] == ' ') && (i == 1) || (i == j + 2) && (board[i][j] == ' ') || (j == i + 2) && (board[i][j] == ' ')) { board[i][j] = 'O'; break; } } while (1); break; } //玩家有两个连起来的时候 if (a == 0) { for (i = 0; i < ROW; i++) { if ((board[i][0] == board[i][1] && board[i][0] == 'X'&&board[i][2] != 'O') || (board[i][1] == board[i][2] && board[i][1] == 'X'&&board[i][0] != 'O') || (board[i][0] == board[i][2] && board[i][0] == 'X'&&board[i][1] != 'O')) { c = 1; a = 1; break; } } } if (a == 0) { for (j = 0; j < ROW; j++) { if ((board[0][j] == board[1][j] && board[0][j] == 'X'&&board[2][j] != 'O') || (board[1][j] == board[2][j] && board[1][j] == 'X'&&board[0][j] != 'O') || (board[0][j] == board[2][j] && board[0][j] == 'X'&&board[1][j] != 'O')) { c = 2; a = 1; break; } } } if ((board[0][0] == board[1][1] && board[0][0] == 'X'&&board[2][2] != 'O') || (board[1][1] == board[2][2] && board[1][1] == 'X'&&board[0][0] != 'O') || (board[0][0] == board[2][2] && board[0][0] == 'X'&&board[1][1] != 'O') && (a == 0)) { c = 3; a = 1; } if ((board[0][2] == board[1][1] && board[0][2] == 'X'&&board[2][0] != 'O') || (board[1][1] == board[2][0] && board[1][1] == 'X'&&board[0][2] != 'O') || (board[0][2] == board[2][0] && board[0][2] == 'X'&&board[1][1] != 'O') && (a == 0)) { c = 4; a = 1; } switch (c) { case 1: do { j = rand() % 3; if (board[i][j] == ' ') { board[i][j] = 'O'; break; } } while (1); break; case 2: do { i = rand() % 3; if (board[i][j] == ' ') { board[i][j] = 'O'; break; } } while (1); break; case 3: do { i = rand() % 3; j = rand() % 3; if ((i == j) && (board[i][j] == ' ')) { board[i][j] = 'O'; break; } } while (1); break; case 4: do { i = rand() % 3; j = rand() % 3; if ((i == j) && (board[i][j] == ' ') && (i == 1) || (i == j + 2) && (board[i][j] == ' ') || (j == i + 2) && (board[i][j] == ' ')) { board[i][j] = 'O'; break; } } while (1); break; } //若没有任何两个连线,则随机产生一个坐标 if (a == 0) { do { i = rand() % 3; j = rand() % 3; if (board[i][j] == ' ') { board[i][j] = 'O'; break; } } while (1); }}
如有问题,请及时联系博主,便于及时更改错误,谢谢大家!
阅读全文
0 0
- C语言小游戏:三字棋(增强版本)
- C语言小游戏:三字棋
- 贪吃蛇小游戏(C语言版本)
- c语言小游戏(贪食蛇)
- c语言图形小游戏(俄罗斯方块)
- c语言图形小游戏(黑白棋)
- 24点小游戏(c语言)
- C语言实现小游戏(一)
- C语言实现小游戏(二)
- C语言小游戏源代码
- C语言控制台小游戏
- c语言数数小游戏
- 猜拳小游戏 C语言
- C语言小游戏 - 俄罗斯方块
- C语言小游戏
- C语言小游戏开发
- C语言小游戏"三子棋"
- C语言小游戏“扫雷”
- TensorFlow中nn.conv2d与nn.avg_pool的理解
- 数字累加
- 【Scikit-Learn 中文文档】模型选择:选择估计量及其参数
- JS中关于跨域同源的一些问题
- 新开博客,瞎写写
- C语言小游戏:三字棋(增强版本)
- 【Scikit-Learn 中文文档】无监督学习: 寻求数据表示
- numpy基础入门-多维数组对象
- after all 用法, although but 用法
- ajax和flask附cookie跨域
- SpringMVC(1):基础配置文件web.xml 和 <servlet-name>-servlet.xml / springmvc.xml
- for in 枚举, 记录判断数组中元素中第一个字符是否包含“*”
- Android 拍照后图片信息ExifInterface
- 详解大端模式和小端模式(转)