一担挑游戏---模拟人机对弈——C语言.doc_第1页
一担挑游戏---模拟人机对弈——C语言.doc_第2页
一担挑游戏---模拟人机对弈——C语言.doc_第3页
一担挑游戏---模拟人机对弈——C语言.doc_第4页
一担挑游戏---模拟人机对弈——C语言.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

模拟人机对弈-“一担挑游戏” 简单设计计算机模拟棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:(1) 计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元后,置为“O”,未发现时,报告平局后退出。(2) 轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。(3) 谁先三点一线了,则报告谁胜出。(4) 计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。一、 需求分析 该程序模拟人机对弈,具有极大的趣味性。 全程序主要模块包括“设计棋盘格式模块”“玩家移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。三、总体设计一担挑游戏设计棋盘格式模块玩家移动棋子模块计算机移动棋子模块判断胜负模块输出比赛结果四、详细设计1,主函数流程图 三点一线? 计算机下棋玩家下棋制作棋盘输出比赛结果 2,各功能模块设计(1) 棋盘设计模块流程图 将棋盘的每一格定义为空开 始由位置(1,1)起,至位置(3,3)棋盘每格之间显示 “ | ”开 始已显示至第三行吗?换行,显示“ -|-|- ”换 行该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。在程序运行的第一步,主程序调用该模块功能,对棋盘进行初始化。(2) 玩家移动棋子模块开 始选择放置棋子的位置(i,j)行变量i减一,列变量j减一该位置为空吗?错误,重新选择该位置定义为X该模块首先选择放置棋子的位置(i,j),之后行变量i减一,列变量j减一。如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。(3) 计算机移动棋子模块由位置(1,1)起判断开 始该位置为空吗?该局比赛结果为平局行变量i与列变量j分别加一该位置定义为O退 出i与j乘积为9吗?该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。为空时,则将该位置定义为“O”;若不为空,则继续运行。当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局(4)判断胜负模块”开 始某列棋子相同吗?某行棋子相同吗?返回左斜列棋子返回右斜列棋子返回该列棋子返回该行棋子右斜列棋子相同吗?左斜列棋子相同吗?返 回该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。最后,根据结果显示谁赢。五、(1)程序代码#include stdio.h#include stdlib.hvoid init_qipan();void player_move();void computer_move();void disp();char check();int main(void) char done; done= ; init_qipan(); do disp(); player_move(); done=check(); if(done!= ) break; computer_move(); done=check(); while(done= ); if(done=X) printf(You won!n); else printf(You lost! n); disp(); getchar(); return 0;char qipan33;void init_qipan(void) int i,j; for(i=0;i3;i+) for(j=0;j3;j+) qipanij= ;void player_move(void) int x,y; printf(Its your turn:); scanf(%d%*c%d,&x,&y); x-;y-; if(qipanxy!= ) printf(Error, try again.n); player_move(); else qipanxy=X;void computer_move(void) int i,j; for(i=0;i3;i+) for(j=0;j3;j+) if(qipanij= ) break; if(qipanij= ) break;if(i*j=9) printf(pingjun); exit(0);elseqipanij=0;void disp(void) int t; for(t=0;t3;t+) printf(%c|%c|%c ,qipant0,qipant1,qipant2); if(t!=2) printf(n-|-|-n); printf(n); char check(void) int i; for(i=0;i3;i+) if(qipani0=qipani1&qipani0=qipani2) return qipani0; for(i=0;i3;i+) if(qipan0i=qipan1i&qipan0i=qipan2i) return qipan0i; for(i=0;i3;i+) if(qipan00=qipan11&qipan00=qipan22) return qipan00; for(i=0;i3;i+) if(qipan02=qipan11

温馨提示

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

评论

0/150

提交评论