计算思维报告_第1页
计算思维报告_第2页
计算思维报告_第3页
计算思维报告_第4页
计算思维报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

课程实验报告课程名称: 计算思维 专业班级:学号:—姓名: 指导教师: 报告日期: 计算机科学与技术学院目录TOC\o"1-5"\h\z实验用C语言编写米子棋 11.1实验目的与内容 11.2实验原理与方案 11.3实验测试与结果 1实验总结与评价 2附录实验源程序代码清单 31实验用C语言编写米子棋1.1实验目的与内容目的:学会使用计算思维相关知识解决具体问题,并从中体会它的运用。内容:用C语言编写一个“米字棋”程序,要求如下:(1)双人游戏,玩家与计算机轮流走棋,每次选一个可以移动的位置走棋,每次只能横向或竖向走一步;(2)—方棋子在某对角线成一条直线就算赢;(3)棋盘可用矩阵标示。1.2实验原理与方案原理:使用数组表现棋局,利用枚举法编写计算机下棋算法。方案:(1)利用“自顶向下,逐步求精”的结构化程序设计思路,将程序分成四个部分:主体部分,打印棋局部分,玩家下棋部分,计算机下棋部分。(2) 利用数组记录棋局,根据数组不同的值打印出相应的棋子或空处,再加上利用循环结构打印的棋盘,最后达到将棋局可视化的目的。(3) 利用数组记录棋局,通过使数组的值做出与玩家输入的值相对应的变化并记录这种变化的方式,达到记录玩家的走棋。(4) 利用对下棋策略的枚举设计计算机下棋的算法,使计算机以非完全随机的拥有一定胜率的方式做出“下棋”操作,同样地,使用数组记录棋局。(5) 将其余三个部分在主体部分中联接,并在其中设计了判断胜负的代码,最终实现了实验的要求。1.3实验测试与结果测试结果如图一图二所示:nowit1nowit1sturnformachine!12 31 XX023 00Xcompirter*win?2实验总结与评价棋局得到了良好的体现,达到了可视化的目的。计算机也以原先的目标进行“下棋,噪作。但是计算机的”智能“还有待提高。总的來说,较成功地完成了实验内容和要求,但在算法特别是计算机下棋方面还有改进的余地。附录实验源程序代码清单#include<stdio.h>#include<stdlib.h>include<math.h>include<tinie.h>voidpnnt_whole(chara[3][3]);voidstep(charp[3][3]);mtmachme_o(chara[3][3]);mtmam(void){charnme[3][3];inti;fdr(i=O;i<3;i-H-)nme[0][i]=,X,;fdr(i=O;i<3;i-H-)nme[l][i]='fdr(i=O;i<3;i-H-)mne[2][i]=O;pimt_whole(nine);priiitf(nstart!(UjustcontiolX)\n”);〃开始走棋while(!«nine[0][0]=nine[1][1])&&(niiie[1][1]=iiine[2][2])&&niiie[l][l]!='?&&!((iuiie[0][2]==nme[!][!])&&(mne[l][l]=nme[2][0])&&mne[l][l]!JJ)step(nine);system(nclsn);piint_whole(iuiie);if(((nine[0][0]=iiine[1][1])&&(iiiiie[1][1]=nine[2][2])&&nine[l][l]!=‘f)||((nine[0][2]==niiie[1][1])&&(niiie[1][1]=nine[2][0])&&nine[l][l]!=‘'))pnntf(nyouretuni0;}piintf(n\imowlt^turnformachine!\iin);if(machine_o(nine))pnnt_whole(nine);pnntf(ncomputefwm!\ii\ii\ii\nn);return0;}elsepiint_whole(nine);}letinn0;}voidpnnt_whole(chaia[3][3]){mtt,k;TOC\o"1-5"\h\zprmtf(" 1”);prmtf(" 2”);prmtf(" 3”);foi(t=0;t<3;t-H-){prmtf(n%dn,t+l);foi(k=0;k<3;k++){pnntf(H%6c,,,a[t][k]);}priiitf(H\nn);}}〃显示进行到哪里了voidstep(charp[3][3]){inta,b;pimtf(nwntedownthecoordsaslx,x,!\iin);scanf(”%d,%d”,&a,&b);if(a<=3&&a>0&&b<=3&&b>0&&p[b-l][a-1]==X){intc.d;pnntf(nwhiclicoordstomoveas,x,x,?\iin);scanf(”%d,%d”,&c、&d);if(c<=3&&c>0&&c<=3&&c>0)mtt=a+b-c-d;if(((t==l)||(t==-l))&&(p[d-l][c-l]=,')){p[b-l][a-l]=,;p[d-l][c-l]=X;}elsepimtf(n\nEiior1!\nn);}elsepnntf(n\iiEnoi2}elsepiintf(H\iiEnoi3}〃按规则行棋mtmachme_o(chara[3][3]){intstep=O,judge=l;char*tluee_a[3],*tluee_b[3];{tlnee_a[O]=&a[0][0];tlnee_a[l]=&a[l][l];tlnee_a[2]=&a[2][2];tlnee_b[O]=&a[0][2];tlnee_b[l]=&a[l][l];tlnee_b[2]=&a[2][0];}〃用于讨论能产生胜负的五个格,两边的斜行分开考虑if(a[l][l]==*'){intsu_i;char*sunound[4];sunound[0]=&a[0][1];sunound[l]=&a[l][0];sunound[2]=&a[1][2];sunound[3]=&a[2][1];for(su_i=0;su_i<4;su_i++)if(*suiTound[su_i]==,O,){*sunound[su_i]-a[l][l]=O;}}step++;}〃如果可能,抢先占据中间的位置else{{intwin_a,win_b,count,what;fbf(wiii_a=0,count=0;wui_a<3;wm_a-H-){if(*tluee_a[win_a]==,Or)count++;elsewhat=wm_a;}if(count==2){if(wliat==0&&*tluee_a[what]=*'){if(a[0][l]==,O'){a[0][l]=M;tluee_a[what]-O1;return1;}if(a[l][0]==*O'){a[l][0]=M;tluee_a[what]-O1;return1;}}if(wliat==2&&*tluee_a[what]=*f)if(a[2][l]==V)a[2][l]=";tluee_a[what]-O1;return1;}if(a[l][2]=9){a[l][2]=,f;tluee_a[what]-O1;return1;}}}//win_afsfbr(wiii_b=O.count=0;wm_b<3;win_b+十){if(*tluee_b[win_b]—O')count++;elsewhat=wm_b;}if(count==2){if(what==0&&*tluee_b[what]==,'){if(a[0][l]==,O'){a[0][l]=,f;tluee_b[what]-O';return1;}if(a[l][2]=9){a[l][2]=,f;tluee_b[what]-O1;return1;}}if(what==2&&*tluee_b[what]==,')if(a[2][l]==V){a[2][l]=「;tluee_b[what]=O;return1;}if(a[l][0]==*O'){a[l][O]=M;tluee_b[what]-O';return1;}}}}〃如果可以获胜,就去获胜{intwin_a,win_b,count,what;fbr(wiii_a=0.count=0;wm_a<3;wm_a-H-){if(*tluee_a[win_a]==,X')count++;elsewhat=wm_a;}if(count==2){if(wliat==0&&*tluee_a[what]==,{if(a[0][l]==,O'){a[0][l]=M;tluee_a[what]-O1;return0;}elseif(a[l][0]==tO,)a[l][0]=";*tluee_a[what]-O1;return0;}if(wliat==2&&*tluee_a[what]==,'){if(a[2][l]==O){a[2][l]=,r;tluee_a[what]-O1;return0;}elseif(a[l][2]=O){a[l][2]=,r;tluee_a[what]-O1;return0;}}}//win_afsfbr(wm_b=0.count=0;wm_b<3;win_b+十){if(*tluee_b[win_b]='X')count++;elsewhat=wm_b;}if(count==2){if(what==0&&*tluee_b[what]==,'){if(a[0][l]==,O'){a[0][l]=,r;tluee_b[what]-O';return0;}elseif(a[2][l]=O)a[2][l]=";*tluee_b[what]=O;return0;}if(wliat==2&&*tluee_b[what]==,'){if(a[2][l]==V){a[2][l]=「;tluee_b[what]=O;return0;}elseif(a[l][0]=O){a[l][0F';tluee_b[what]-O';return0;}}}}〃如果别人要成功,就去破坏它〃随机走while(judge){intn=iandQ%9;switch(n){case0:if(a[0][0]=*'){if(a[0][l]==,O'){a[0][l]=M;a[0][0]=V;judge=0;}elseif(a[l][0]=rO'){a[l][0]=”;a[0][0]='Or;judge=0;}break;casel:if(a[O][l]=,*){if(a[0][2]==*O'){a[0][2]=**;a[O][l]=V;judge=O;}elseif(a[0][0]=0){a[0][0]=**;a[O][l]=V;judge=O;}elseif(a[l][l]='O'){a[l][l]=M;a[O][l]=V;judge=O;}}break;case2:if(a[0][2]=,*){if(a[0][l]==,O'){a[O][l]=";a[0][2]=O;judge=O;}elseif(a[l][2]=O){a[l][2]=";a[0][2]=O;judge=O;}}break;case3:if(a[l][0]==,*){if(a[0][0]==*0'){a[0][0]=**;a[l][0]=O;judge=O;}elseif(a[2][0]=O){a[2][0F*;a[l][0]=O;judge=O;}elseif(a[l][l]='O'){a[l][l]=M;a⑴[0]=V;judge=O;}}break;case4:break;case5:if(a[l][2]==,*){if(a[0][2]==*O'){a[0][2]=「;a[l][2]=O;judge=O;}elseif(a[2][2]=O){a[2][2]=,*;a[l][2]=O;judge=O;}elseif(a[l][l]='O')a[l][2]=V;judge=O;}}break;case6:if(a[2][0]=,'){if(a[l][0]==*O'){a[l][O]=M;a[2][0]=V;judge=O;}elseif(a[2][l]=rO'){a[2][l]=";a[2][0]=O;judge=O;}}break;case7:if(a[2][l]=,*){if(a[2][0]==*O'){a[2][0]=-;a[2][l]=O;

温馨提示

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

评论

0/150

提交评论