ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:50.39KB ,
资源ID:7206004      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7206004.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(人工智能井字棋的实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

人工智能井字棋的实现.docx

1、人工智能井字棋的实现人工智能 井字棋的实现学院:信息工程学院教师:罗会兰 专业:计算机应用技术学号:6120160166姓名:王硕豪简介2016年3月9日,李世石与 AlphaGo 的人机大战开始。这将成为写入人类史册的一天。计算机 AI 可以在围棋上战胜人类顶尖棋手的时代已经到来。两个月之后,美国白宫就推动成立了机器学习与人工智能分委会,由其主持和协调撰写了三个关于人工智能发展的报告:为人工智能的未来做好准备国家人工智能研究和发展战略计划和人工智能、自动化与经济报告。欧盟、英国和日本等也相继发布了研发和应用人工智能的报告。显然,中国应当参与到这种战略布局当中,这种布局不仅是国家和民族的需要,

2、而且也是赢得未来的利器。再厉害的程序员,也是从“hello world”程序开始写起。再“聪明”的机器,也是从零样本开始“训练”出来的。所以今天就来写一个最简单棋类游戏:Tic Tac Toe,又叫井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。大致说下井字棋的规则:1.棋盘为 3*3 共 9 格,类似汉字“井”;2.一方为 o,一方为 x,轮流落子;3.任一方先有连成一条线的 3 个棋子(横、竖、斜皆可)则为胜利;4.棋盘摆满仍没有一方胜利,则为平局。这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一

3、位玩家在角位行第一子的话赢面最大(见图一),第二位玩家若是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇”。图一运行开始的时候,会让你输入你的名字,我则输入我名字的缩写wsh;接下来,由我们来选择是先下还是后下,1是先下,2是后下;我们的符号是X,电脑的是O,由于我们选择了先下,我们在3*3的棋盘上先下在第2行第2列;电脑则下在了第1行第1列,再次由我们决定,如果我们下在了已经有棋子的位置上则会提示你已经下过了;我们决定下在第1行第3列,电脑则下在第3行第1列,我们需要注意到如果电脑再下到第2行第1列就获得胜利,所以我们需要防守我们为了防守下在了第2行第1列,电脑

4、又下在了第2行第3列,这时候其实我们可以注意到如果想要胜利只有将第2列连成直线一种方法了;我们下在了第1行第2列,电脑下在了第3行第2列,这时候已经可以看出是个平局了;我们把最后一个位置填上,电脑告诉我们这是一个平局,是否还想要再玩;输入y,电脑让我们再次选择先后手,大家就可以根据自己的想法来试着战胜电脑了。如果失败了,也会询问你是否再次挑战,如果输入n则会直接跳出;代码实现棋盘本身的数据,用int a33来表示,棋盘中0表示空,1表示我们下的,其余的则是电脑下的;void print() int i,j; coutn; for(i=0;i3;i+) for(j=0;j3;j+) if(aij

5、=0) cout.t; else if(aij=1) coutXt; else coutOt; coutendl; 检查是否有人获胜,分别是三行,三列,对角线的8种情况int check() for(int i=0;i3;i+) if(ai0!=0&ai0=ai1&ai1=ai2)|(a0i!=0&a0i=a1i&a1i=a2i) return 1; if(a00!=0&a00=a11&a11=a22) return 1; else if(a02!=0&a02=a11&a11=a20) return 1; else return 0;我们下棋的时候,下第几行第几列,如果输入大于2或者小于0提示

6、输入正确的数字,如果下的位置已经被下过了提示这里已经被下过了;void pin() int r=0,c=0; coutr; coutc; r-; c-; if(r2|c2|r0|c0) strcpy(str,Enter correct value ); strcat(str,name); strcat(str,.n); puts(str); pin(); else if(arc!=0) coutIt is already filled.n; pin(); else arc=t;电脑的防守策略,即我们选择先手时电脑的应对策略int defend(int c, int p, int b) if(b

7、3) return 0; else if(a00+a11+a22=2*c&a00!=p&a11!=p&a22!=p) for(int i=0;i3;i+) if(aii=0) aii=y; coutComputer turn: i+1 i+1endl; return 1; else if(a02+a11+a20=2*c&a02!=p&a11!=p&a20!=p) for(int i=0;i3;i+) if(ai2-i=0) ai2-i=y; coutComputer turn: i+1 3-iendl; return 1; else int i,j; for(i=0;i3;i+) if(ai0

8、+ai1+ai2=2*c&ai0!=p&ai1!=p&ai2!=p) for(j=0;j3;j+) if(aij=0) aij=y; coutComputer turn: i+1 j+1endl; return 1; else if(a0i+a1i+a2i=2*c&a0i!=p&a1i!=p&a2i!=p) for(j=0;j3;j+) if(aji=0) aji=y; coutComputer turn: j+1 i+1endl; return 1; return 0;电脑的进攻策略,即我们选择后手时电脑的落子策略int attack()/takes a move as to win in

9、future. int i,j; if(a00+a02+a20+a22=t|a00+a02+a20+a22=2*t) for(i=0;i3;i+) if( ai0+ai1+ai2=y & (ai0=y|ai1=y|ai2=y) ) if(i=1) for(j=0;j3;j+) if(aij=0) aij=y; coutComputer turn: i+1 j+1=0;j-) if(aij=0) aij=y; coutComputer turn: i+1 j+1endl; return 1; if(a0i+a1i+a2i=y & (a0i=y|a1i=y|a2i=y) if(i=1) for(j

10、=0;j3;j+) if(aji=0) aji=y; coutComputer turn: j+1 i+1=0;j-) if(aji=0) aji=y; coutComputer turn: j+1 i+1=0;i-) if(ai2-i=0) if(ai0+ai1+ai2=t&(ai0=t|ai1=t|ai2=t)&(a02-i+a12-i+a22-i=t&(a02-i=t|a12-i=t|a22-i=t) ai2-i=y; coutComputer turn: i+1 3-i=0;i-) if(ai2-i=0) ai2-i=y; coutComputer turn: i+1 3-i=0;i-

11、) if(aii=0)& (ai0+ai1+ai2=y&(ai0=y|ai1=y|ai2=y) |( (a0i+a1i+a2i=y)&(a0i=y|a1i=y|a2i=y) aii=y; coutComputer turn: i+1 i+1=0;i-) if(aii=0) if(ai0+ai1+ai2=t&(ai0=t|ai1=t|ai2=t)&(a0i+a1i+a2i=t&(a0i=t|a1i=t|a2i=t) aii=y; coutComputer turn: i+1 i+1=0;i-) if(aii=0) aii=y; coutComputer turn: i+1 i+1=0;i-) i

12、f(ai2-i=0&(ai0+ai1+ai2=y&(ai0=y|ai1=y|ai2=y)|( (a02-i+a12-i+a22-i=y)&(a02-i=y|a12-i=y|a22-i=y) ai2-i=y; coutComputer turn: i+1 3-i=0;i-) if(ai2-i=0) if(ai0+ai1+ai2=t&(ai0=t|ai1=t|ai2=t)&(a02-i+a12-i+a22-i=t&(a02-i=t|a12-i=t|a22-i=t) ai2-i=y; coutComputer turn: i+1 3-i=0;i-) if(ai2-i=0) ai2-i=y; cout

13、Computer turn: i+1 3-iendl; return 1; else for(i=0;i3;i+) if( ai0+ai1+ai2=y & (ai0=y|ai1=y|ai2=y) ) if(i=1) for(int j=0;j3;j+) if(aij=0) aij=y; coutComputer turn: i+1 j+1=0;j-) if(aij=0) aij=y; coutComputer turn: i+1 j+1endl; return 1; else if(a0i+a1i+a2i=y & (a0i=y|a1i=y|a2i=y) if(i=1) for(j=0;j3;j

14、+) if(aji=0) aji=y; coutComputer turn: j+1 i+1=0;j-) if(aji=0) aji=y; coutComputer turn: j+1 i+1endl; return 1; return 0;电脑的AI运用进攻和防守策略控制其的落子void ai(int b) if(!defend(y,t,b) if(!defend(t,y,b) if(a00+a02+a20+a22=t+y|a00+a02+a20+a22=t+2*y)&a11=0) for(int i=0;i3;i+=2) for(int j=0;j3;j+=2) if(aij=0) aij

15、=y; coutComputer turn: i+1 j+1endl; goto end; else if(b=2&a11=0) a11=y; coutComputer turn: 2 2n; goto end; if(!attack() if(b=0) time_t seconds; time(&seconds); srand(unsigned int) seconds); int i,j; a(rand()%2)*2(rand()%2)*2=y; for(i=0;i3;i+=2) for(j=0;j3;j+=2) if(aij=y) coutComputer turn: i+1 j+1endl; else if(a11=0) a11=y; coutComputer turn: 2 2n; else int i,j; for(i=0;i3;i+) for(j=0;j3;j+) if(aij=0) aij=y; coutComputer turn: i+1 j+1endl; goto end; end: coutendl;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1