java 井字棋 人机_井字棋(人机对战版)
1 #include
2 #include
3
4 const int ROW = 3;5 const int COL = 3;6 intchessboard[ROW][COL];7 intscore[ROW][COL];8
9 voidInitmap();10 void Showmap(); //打印棋局
11 bool isWin(); //判断是否有一方获胜
12 bool isFull(); //判断棋盘是否为满
13 void PcPlay(); //电脑下棋
14 void HumanPlay(); //人下棋
15
16 intmain()17 {18 Initmap();19 Showmap();20 while ((!isFull()) && (!isWin()))21 {22 HumanPlay();23 system("cls");24 Showmap();25 if(isWin())26 break;27
28 Sleep(500); //模拟实际过程,让电脑慢点,hh
29 PcPlay();30 system("cls");31 Showmap();32 }33
34 if(isFull())35 printf("\n\n平局\n");36
37 system("pause");38 return 0;39 }40
41 voidInitmap()42 {43 for (int i = 0; i < ROW; i++)44 for (int j = 0; j < COL; j++)45 chessboard[i][j] = 1;46 }47
48 voidShowmap()49 {50 for (int i = 0; i < ROW; i++)51 {52 for (int j = 0; j < COL; j++)53 {54 if (chessboard[i][j] == 1) //"1"代表空
55 printf("□");56 if (chessboard[i][j] == 2) //"2"代表人
57 printf("■");58 if (chessboard[i][j] == 5) //"5"代表电脑
59 printf("●");60 }61 printf("\n");62 }63 }64
65 boolisWin()66 {67 int sum = 0;68 for (int i = 0; i < ROW; i++) //对每行判断是否获胜
69 {70 for (int j = 0; j < COL; j++)71 sum +=chessboard[i][j];72
73 if (sum == 6)74 {75 printf("人获胜!\n");76 return true;77 }78 if (sum == 15)79 {80 printf("电脑获胜!\n");81 return true;82 }83 sum = 0;84 }85
86 for (int j = 0; j < ROW; j++) //对每列判断是否获胜
87 {88 for (int i = 0; i < COL; i++)89 sum +=chessboard[i][j];90
91 if (sum == 6)92 {93 printf("人获胜!\n");94 return true;95 }96 if (sum == 15)97 {98 printf("电脑获胜!\n");99 return true;100 }101 sum = 0;102 }103
104 for (int i = 0; i < ROW; i++) //对对角线判断是否获胜
105 sum +=chessboard[i][i];106 if (sum == 6)107 {108 printf("人获胜!\n");109 return true;110 }111 if (sum == 15)112 {113 printf("电脑获胜!\n");114 return true;115 }116
117 sum = 0;118 for (int i = 0; i < ROW; i++) //对反对角线判断是否获胜
119 sum += chessboard[i][2 -i];120 if (sum == 6)121 {122 printf("人获胜!\n");123 return true;124 }125 if (sum == 15)126 {127 printf("电脑获胜!\n");128 return true;129 }130
131 return false;132 }133
134 boolisFull()135 {136 for (int i = 0; i < ROW; i++)137 for (int j = 0; j < COL; j++)138 if (chessboard[i][j] == 1)139 return false;140 return true;141 }142
143 voidHumanPlay()144 {145 intx, y;146 printf("请输入棋子的横坐标X:");147 scanf_s("%d", &x);148 printf("请输入棋子的纵坐标Y:");149 scanf_s("%d", &y);150
151 while (x < 1 || x>3 || y < 1 || y>3)152 {153 printf("\n请正确输入!\n");154 printf("x,y均属于1~3\n\n");155
156 printf("请输入棋子的横坐标X:");157 scanf_s("%d", &x);158 printf("请输入棋子的纵坐标Y:");159 scanf_s("%d", &y);160 }161
162 while (chessboard[3 - y][x - 1] != 1)163 {164 printf("\n\n该位置已被占用!\n");165 printf("请选择正确的位置\n\n");166 Sleep(1000);167
168 printf("\n请输入棋子的横坐标X:");169 scanf_s("%d", &x);170 printf("请输入棋子的纵坐标Y:");171 scanf_s("%d", &y);172 }173
174 chessboard[3 - y][x - 1] = 2;175 }176
177 voidPcPlay()178 {179 int sum = 0;180 for (int i = 0; i < ROW; i++)181 for (int j = 0; j < COL; j++)182 score[i][j] = 0;183
184 //对每行进行分数统计
185 for (int i = 0; i < ROW; i++)186 {187 for (int j = 0; j < COL; j++)188 sum +=chessboard[i][j];189
190 switch(sum)191 {192 case 3: //1+1+1;重要性:最低;权重:1
193 for (int k = 0; k < COL; k++)194 {195 if (chessboard[i][k] == 1)196 score[i][k] += 1;197 }198 break;199 case 4: //1+1+2;重要性:次低;权重:10
200 for (int k = 0; k < COL; k++)201 {202 if (chessboard[i][k] == 1)203 score[i][k] += 10;204 }205 break;206 case 8: //1+2+5;重要性:较低,权值50
207 for (int k = 0; k < COL; k++)208 {209 if (chessboard[i][k] == 1)210 score[i][k] += 50;211 }212 break;213 case 7: //1+1+5;重要性:较高;权重:200
214 for (int k = 0; k < COL; k++)215 {216 if (chessboard[i][k] == 1)217 score[i][k] += 200; //把行列的重要性比对角线高
218 }219 break;220 case 5: //1+2+2;重要性:次高;权重:500
221 for (int k = 0; k < COL; k++)222 {223 if (chessboard[i][k] == 1)224 score[i][k] += 500;225 }226 break;227 case 11: //1+5+5;重要性:最高;权重:1000
228 for (int k = 0; k < COL; k++)229 {230 if (chessboard[i][k] == 1)231 score[i][k] += 1000;232 }233 break;234 }235 sum = 0;236 }237
238 //对每列进行分数统计
239 for (int j = 0; j < COL; j++)240 {241 for (int i = 0; i < ROW; i++)242 sum +=chessboard[i][j];243
244 switch(sum)245 {246 case 3:247 for (int k = 0; k < COL; k++)248 {249 if (chessboard[k][j] == 1)250 score[k][j] += 1;251 }252 break;253 case 4:254 for (int k = 0; k < COL; k++)255 {256 if (chessboard[k][j] == 1)257 score[k][j] += 10;258 }259 break;260 case 8:261 for (int k = 0; k <
262 COL; k++)263 {264 if (chessboard[k][j] == 1)265 score[k][j] += 50;266 }267 break;268 case 7:269 for (int k = 0; k < COL; k++)270 {271 if (chessboard[k][j] == 1) //1+1+5;重要性:较高;权重:200
272 score[k][j] += 200;273 }274 break;275 case 5:276 for (int k = 0; k < COL; k++)277 {278 if (chessboard[k][j] == 1)279 score[k][j] += 500;280 }281 break;282 case 11:283 for (int k = 0; k < COL; k++)284 {285 if (chessboard[k][j] == 1)286 score[k][j] += 1000;287 }288 break;289 }290 sum = 0;291 }292
293 //对对角线进行分数统计
294 for (int i = 0; i < ROW; i++)295 sum +=chessboard[i][i];296 switch(sum)297 {298 case 3:299 for (int i = 0; i < COL; i++)300 {301 if (chessboard[i][i] == 1)302 score[i][i] += 1;303 }304 break;305 case 4:306 for (int i = 0; i < COL; i++)307 {308 if (chessboard[i][i] == 1)309 score[i][i] += 10;310 }311 break;312 case 8:313 for (int i = 0; i < COL; i++)314 {315 if (chessboard[i][i] == 1)316 score[i][i] += 50;317 }318 break;319 case 7: //1+1+5;权重:100
320 for (int i = 0; i < COL; i++)321 {322 if (chessboard[i][i] == 1)323 score[i][i] += 100;324 }325 break;326 case 5:327 for (int i = 0; i < COL; i++)328 {329 if (chessboard[i][i] == 1)330 score[i][i] += 500;331 }332 break;333 case 11:334 for (int i = 0; i < COL; i++)335 {336 if (chessboard[i][i] == 1)337 score[i][i] += 1000;338 }339 break;340 }341
342 //对反对角线进行分数统计
343 sum = 0;344 for (int i = 0; i < ROW; i++)345 sum += chessboard[i][2 -i];346 switch(sum)347 {348 case 3:349 for (int i = 0; i < COL; i++)350 {351 if (chessboard[i][2 - i] == 1)352 score[i][2 - i] += 1;353 }354 break;355 case 4:356 for (int i = 0; i < COL; i++)357 {358 if (chessboard[i][2 - i] == 1)359 score[i][2 - i] += 10;360 }361 break;362 case 8:363 for (int i = 0; i < COL; i++)364 {365 if (chessboard[i][2 - i] == 1)366 score[i][2 - i] += 50;367 }368 break;369 case 7:370 for (int i = 0; i < COL; i++)371 {372 if (chessboard[i][2 - i] == 1) //1+1+5;权重:100
373 score[i][2 - i] += 100;374 }375 break;376 case 5:377 for (int i = 0; i < COL; i++)378 {379 if (chessboard[i][2 - i] == 1)380 score[i][2 - i] += 500;381 }382 break;383 case 11:384 for (int i = 0; i < COL; i++)385 {386 if (chessboard[i][2 - i] == 1)387 score[i][2 - i] += 1000;388 }389 break;390 }391
392 int maxRow = 0, maxCol = 0;393 for (int i = 0; i < ROW; i++)394 for (int j = 0; j < COL; j++)395 {396 if (score[i][j] >score[maxRow][maxCol])397 {398 maxRow =i;399 maxCol =j;400 }401 }402 chessboard[maxRow][maxCol] = 5;403 }
java 井字棋 人机_井字棋(人机对战版)相关推荐
- 华字后面配什么字比较好_涟字女孩取名字含义 带涟好名推荐
带川字男孩取名三个字 五行属金宝宝名字 部首:丿 拼音:chuān 笔画:3 五行:金 寓意:传奇.流传.传送.记载,指子承父业.才高八斗.生生不息. 五行属金的宝宝名字 肃川 聚川 释川 钦川 鑫川 ...
- 华字后面配什么字比较好_华字起名配什么字好
华字读音是huà,起名笔画数是14划,五行属水.华字起名配什么字好?华字比较适合做女孩名字.华字为女孩起名,可取名华源,桦华,柏华,逢华,华章. 华字,象征光辉.生华,引申意为精华.美丽光彩.繁荣. ...
- 华字后面配什么字比较好_华字取名和什么字搭配好-尚名网
华字取名和什么字搭配好-尚名网 爸爸妈妈们在给孩子起名的时候,往往希望名字中能寄托父母对于孩子美好的祝福与期望.名字会伴随孩子一生,同时名字中的暗示寓意也在潜移默化的引导着孩子向着父母期望的那样健康成 ...
- 暗黑风java战棋游戏_简约而不简单的类暗黑战棋游戏
评测:<符石守护者>--简约而不简单 一句话总结:国产战棋游戏精品 引入了大量暗黑因素的回合制游戏,在零零散散诸多设定下,竟然呈现出一种暗黑的游戏感,不得不令人叹服. <符石守护者& ...
- mysql的井号如何写入_井号保存为SQL数据库中的问号
我在这上面搜索了一段时间,但似乎没有一个足够相关.在 基本上,我有一个从程序中提取的csv文件.我编写了一个快速的python程序,将csv文件转换为sql文件,以便将其导入数据库.然后,我使用win ...
- 暗棋单机版_中国暗棋游戏下载-中国暗棋下载v1.0.0 安卓版-单机手游网
中国暗棋游戏去棋牌类象棋手游,游戏玩法是将象棋到放,然后不断的反面获得游戏的进程,玩法市面简单方便可以和线上线下朋友一起玩耍哦!小编也给你们带来了中国暗棋手游下载地址!此版本为安卓最新完整版,感兴趣的 ...
- Java笔记(3)_黑马刘意_Java入门_2019_idea版
字符串 API(Application Programming Interface):应用程序编程接口. Java API:指的就是JDK中提供的各种功能的Java类.这些类将底层的实现封装了起来,我 ...
- java电脑最新配置要求_《我的世界》电脑版配置要求
要想玩我的世界电脑需要什么养的配置呢?这次小编就为大家带来我的世界电脑版配置需求介绍,希望对诸位玩家有所帮助. 最低需求: 处理器 : 英特尔 奔腾D or AMD 速龙64 (K8) 2.6 GHz ...
- java 创建日程到期提醒_苹果“快捷指令”日程播报完美版
日程播报是一个常见于"快捷指令"中"早安/晚安"场景中的一项功能.通过与Win10日历时刻同步,可以非常方便的安排未来行程,避免遗忘重要事项.比如这样 每天早上 ...
最新文章
- android monkey原理_Monkey与Appium的使用
- windows下sqlite3的基本操作
- zabbix 自动发现和注册
- python算方差_python计算均值方差
- JSP简单练习-用Servlet获取表单数据
- 08 域控 架构主机 转移_域控制器的角色转移与抢占
- 微软Azure AspNetCore微服务实战第2期(内附PPT下载)
- Jenkins构建.net项目
- Tomcat架构探究
- server2008R2WSUS管理之 计算机管理
- ImageRanger 全萤幕检视操作说明
- CSS Margin 边距详解、CSS 实现水平垂直居中、overflow 兼容 Safari 浏览器
- android 仿旅游日历控件_仿携程日历控件
- TFS2010的生成功能
- IELAB网络实验室 理解IGRP协议
- DELL戴尔笔记本关闭触摸板触控板WIN10
- 清华大学数据挖掘课程幕课习题(第一章)
- 使用计算机视觉来做异常检测
- 大数据商机VS个人隐私 车联网的攻与守
- 白光干涉仪压电陶瓷的大作用 | 科普篇
热门文章
- 一份Python爬虫实战教程清单
- android觀察者模式三種實現方法
- CSS或JS实现逐帧动画方案
- 【CSDN创作活动】 - 我参加过的那些竞赛
- matlab/simulink电力电子仿真三相可编程电压源three phase programmable voltage source的设置与使用
- 通过jason上传图片_Jason Lengstorf通过放慢速度来提高生产率
- Android 开机Process xxx (pid xxxx) has died问题分析
- 实时搜索引擎Elasticsearch(2)——Rest API的使用
- 学习笔记:《数字媒体技术概论》-1/10 数字媒体技术基础-中国大学慕课公开课
- 经历 | 我在拼多多的三年