人工智能化井字棋的实现_第1页
人工智能化井字棋的实现_第2页
人工智能化井字棋的实现_第3页
人工智能化井字棋的实现_第4页
人工智能化井字棋的实现_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...人工智能井字棋的实现学院:信息工程学院教师:罗会兰专业:计算机应用技术学号:6120160166姓名:王硕豪简介2016年3月9日,李世石与AlphaGo的人机大战开场。这将成为写入人类史册的一天。计算机AI可以在围棋上战胜人类顶尖棋手的时代已经到来。两个月之后,美国白宫就推动成立了机器学习与人工智能分委会,由其主持和协调撰写了三个关于人工智能开展的报告:?为人工智能的未来做好准备??国家人工智能研究和开展战略方案?和?人工智能、自动化与经济报告?。欧盟、英国和日本等也相继发布了研发和应用人工智能的报告。显然,中国应当参与到这种战略布局当中,这种布局不仅是国家和民族的需要,而且也是赢得未来的利器。再厉害的程序员,也是从“helloworld〞程序开场写起。再“聪明〞的机器,也是从零样本开场“训练〞出来的。所以今天就来写一个最简单棋类游戏:TicTacToe,又叫井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。大致说下井字棋的规那么:1.棋盘为3*3共9格,类似汉字“井〞;2.一方为o,一方为x,轮流落子;3.任一方先有连成一条线的3个棋子〔横、竖、斜皆可〕那么为胜利;4.棋盘摆满仍没有一方胜利,那么为平局。这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一位玩家在角位行第一子的话赢面最大〔见图一〕,第二位玩家假设是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇〞。图一运行开场的时候,会让你输入你的名字,我那么输入我名字的缩写wsh;接下来,由我们来选择是先下还是后下,1是先下,2是后下;我们的符号是X,电脑的是O,由于我们选择了先下,我们在3*3的棋盘上先下在第2行第2列;电脑那么下在了第1行第1列,再次由我们决定,如果我们下在了已经有棋子的位置上那么会提示你已经下过了;我们决定下在第1行第3列,电脑那么下在第3行第1列,我们需要注意到如果电脑再下到第2行第1列就获得胜利,所以我们需要防守我们为了防守下在了第2行第1列,电脑又下在了第2行第3列,这时候其实我们可以注意到如果想要胜利只有将第2列连成直线一种方法了;我们下在了第1行第2列,电脑下在了第3行第2列,这时候已经可以看出是个平局了;我们把最后一个位置填上,电脑告诉我们这是一个平局,是否还想要再玩;输入y,电脑让我们再次选择先后手,大家就可以根据自己的想法来试着战胜电脑了。如果失败了,也会询问你是否再次挑战,如果输入n那么会直接跳出;代码实现棋盘本身的数据,用inta[3][3]来表示,棋盘中0表示空,1表示我们下的,其余的那么是电脑下的;voidprint(){inti,j;cout<<"\n";for(i=0;i<3;i++){for(j=0;j<3;j++){if(a[i][j]==0)cout<<".\t";elseif(a[i][j]==1)cout<<"X\t";elsecout<<"O\t";}cout<<endl;}}检查是否有人获胜,分别是三行,三列,对角线的8种情况intcheck(){for(inti=0;i<3;i++)if((a[i][0]!=0&&a[i][0]==a[i][1]&&a[i][1]==a[i][2])||(a[0][i]!=0&&a[0][i]==a[1][i]&&a[1][i]==a[2][i]))return1;if(a[0][0]!=0&&a[0][0]==a[1][1]&&a[1][1]==a[2][2])return1;elseif(a[0][2]!=0&&a[0][2]==a[1][1]&&a[1][1]==a[2][0])return1;elsereturn0;}我们下棋的时候,下第几行第几列,如果输入大于2或者小于0提示输入正确的数字,如果下的位置已经被下过了提示这里已经被下过了;voidpin(){intr=0,c=0;cout<<"Enterrow:";cin>>r;cout<<"Entercolumn:";cin>>c;r--;c--;if(r>2||c>2||r<0||c<0){strcpy(str,"Entercorrectvalue");strcat(str,name);strcat(str,".\n");puts(str);pin();}elseif(a[r][c]!=0){cout<<"Itisalreadyfilled.\n";pin();}elsea[r][c]=t;}电脑的防守策略,即我们选择先手时电脑的应对策略intdefend(intc,intp,intb){if(b<3)return0;elseif(a[0][0]+a[1][1]+a[2][2]==2*c&&a[0][0]!=p&&a[1][1]!=p&&a[2][2]!=p){for(inti=0;i<3;i++){if(a[i][i]==0){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}}elseif(a[0][2]+a[1][1]+a[2][0]==2*c&&a[0][2]!=p&&a[1][1]!=p&&a[2][0]!=p){for(inti=0;i<3;i++){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}else{inti,j;for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==2*c&&a[i][0]!=p&&a[i][1]!=p&&a[i][2]!=p){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}elseif(a[0][i]+a[1][i]+a[2][i]==2*c&&a[0][i]!=p&&a[1][i]!=p&&a[2][i]!=p){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}}}return0;}电脑的进攻策略,即我们选择后手时电脑的落子策略intattack()//takesamoveastowininfuture.{inti,j;if(a[0][0]+a[0][2]+a[2][0]+a[2][2]==t||a[0][0]+a[0][2]+a[2][0]+a[2][2]==2*t){for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y)){if(i==1){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}}if(a[0][i]+a[1][i]+a[2][i]==y&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)){if(i==1){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}}else{if(a[0][0]+a[1][1]+a[2][2]==y&&(a[0][0]==y||a[1][1]==y||a[2][2]==y)){for(i=2;i>=0;i--){if((a[i][i]==0)&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||((a[0][i]+a[1][i]+a[2][i]==y)&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)))){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}for(i=2;i>=0;i--){if(a[i][i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][i]+a[1][i]+a[2][i]==t&&(a[0][i]==t||a[1][i]==t||a[2][i]==t))){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}}for(i=2;i>=0;i--){if(a[i][i]==0){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}}elseif(a[0][2]+a[1][1]+a[2][0]==y&&(a[0][2]==y||a[1][1]==y||a[2][0]==y)){for(i=2;i>=0;i--){if(a[i][2-i]==0&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||((a[0][2-i]+a[1][2-i]+a[2][2-i]==y)&&(a[0][2-i]==y||a[1][2-i]==y||a[2][2-i]==y)))){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}for(i=2;i>=0;i--){if(a[i][2-i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}else{for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y)){if(i==1){for(intj=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}}elseif(a[0][i]+a[1][i]+a[2][i]==y&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)){if(i==1){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}}}}}return0;}电脑的AI运用进攻和防守策略控制其的落子voidai(intb){if(!defend(y,t,b)){if(!defend(t,y,b)){if((a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+y||a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+2*y)&&a[1][1]==0){for(inti=0;i<3;i+=2){for(intj=0;j<3;j+=2)if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;gotoend;}}}elseif

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论