




免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模拟人机对弈-“一担挑游戏”【要求】 简单设计计算机模拟棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:(1) 计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元后,置为“O”,未发现时,报告平局后退出。(2) 轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。(3) 谁先三点一线了,则报告谁胜出。(4) 计算机与对弈者每下一步棋都会使用相应位置变为“O”和“X”,便于在屏上显示矩阵。【提示】 棋盘位置用二维数组表示,初始状态每一位置均应为“ ”(空)。其分隔线(即棋盘线)可用或| |来分隔。【分析】 该程序模拟人机对弈,具有极大的趣味性。 全程序主要模块包括“人移动棋子模块”,“计算机移动棋子模块”以及“判断胜负模块”。“移动棋子模块”模块的难点在于判断人或计算机在棋盘上选择的位置是否合法(包括选择的位置在不在棋盘上及所选择的位置是否为空),“判断胜负模块”的难点在于判断八个“三点一线”内容是否一致,及判断平局。1.总体流程图一担挑游戏初始化棋盘显示棋盘人移动棋子计算机移动棋子判断胜负 2.initialization (void) 初始化棋盘模块将棋盘的每一格定义为空开 始由位置(1,1)起,至位置(3,3)初始化棋盘模块流程图该模块首先设置一个3X3的循环,将棋盘的每一个单元定义为空。在程序运行的第一步,主程序调用该模块功能,对棋盘进行初始化。3.display (void) 显示棋盘模块棋盘每格之间显示 “ | ”开 始已显示至第三行吗?换行,显示“ -|-|- ”换 行显示棋盘模块流程图该模块与“初始化棋盘模块”类似,首先设置一个3X3的循环。不同之处在于显示同一行的一个单元后,棋盘每格之间显示“ | ”;换行之后显示“ -|-|- ”。在程序运行“判断胜负模块”功能之后,调用该模块功能。4.play_move () 人移动棋子模块开 始选择放置棋子的位置(i,j)行变量i减一,列变量j减一该位置为空吗?错误,重新选择该位置定义为X人移动棋子模块流程图该模块首先选择放置棋子的位置(i,j),之后行变量i减一,列变量j减一。如果该位置为空,则将该单元内容定义为“X”;如果该位置不为空,则返回错误信息并重新运行该模块函数,让人重新选择放置棋子的位置。5.computer move () 计算机移动棋子功能流程图由位置(1,1)起判断开 始该位置为空吗?该局比赛结果为平局行变量i与列变量j分别加一该位置定义为O退 出i与j乘积为9吗?计算机移动棋子模块流程图该模块首先设置3X3的循环,从(1,1)开始,依次判断每一个单元是否为空。为空时,则将该位置定义为“O”;若不为空,则继续运行。当移动至(3,3),即行变量i与列变量j乘积为9时,若该单元依然不为空,则判定该局比赛结果为平局。6.char judge (void) 判断胜负模块开 始某列棋子相同吗?某行棋子相同吗?返回左斜列棋子返回右斜列棋子返回该列棋子返回该行棋子右斜列棋子相同吗?左斜列棋子相同吗?返 回判断胜负模块流程图该模块首先设置3X3的循环,依次判断每行,每列以及左斜列,右斜列的内容是否相同。不相同时,返回至主函数;若相同,则将变量result定义为相同的内容。最后,根据result显示“player win!”或者“computer win! ”【一担挑程序】#include stdio.h #include stdlib.h void initialization();/*初始化棋盘*/ void player_move();/*人移动棋子*/ void computer_move();/*计算机移动棋子*/ void display();/*显示棋盘*/ char judge();/*判断胜负*/ int main(void) char result;/*变量result定义为判断胜负的结果*/ result= ;/*变量result初值为空*/ initialization();/*初始化棋盘*/printf(You will play against computer.n);printf(Good luck and God blesses you.n); do display();/*显示棋盘*/ player_move();/*人移动棋子*/ result=judge();/*调用判断胜负函数,并将结果赋予变量result*/ if(result!= )/*当变量result不为空时*/ break;/*跳出*/ computer_move();/*计算机移动棋子*/ result=judge();/*调用判断胜负函数,并将结果赋予变量result*/ while(result= );/*当变量result为空时,继续循环*/ if(result=X)/*当变量result为X时*/ printf(player win!n);/*人获胜*/ else/*否则*/ printf(computer win! n);/*计算机获胜*/ display();/*显示棋盘*/ getchar(); return 0; char chessboard33;/*将棋盘定义为3x3模式*/ void initialization(void)/*初始化棋盘*/ int i,j;/*变量i定义为行,变量j定义为列*/ for(i=0;i3;i+)/*设定3x3的嵌套循环*/ for(j=0;j3;j+) chessboardij= ;/*将棋盘的每一格定义为空*/ void player_move(void)/*人移动棋子*/ int i,j;/*变量i定义为行,变量j定义为列*/ printf(Please select the unit:);/*选择放置棋子的位置*/ scanf(%d%*c%d,&i,&j);/*输入放置棋子的位置*/ i-;j-;/*行变量i减一,列变量j减一*/ if(chessboardij!= )/*当该位置不为空时*/ printf(Error,reselect.n);/*错误,重新选择*/ player_move();/*人移动棋子*/ else chessboardij=X;/*否则,该位置定义为X*/ void computer_move(void)/*计算机移动棋子*/ int i,j;/*变量i定义为行,变量j定义为列*/ for(i=0;i3;i+)/*设定3x3的嵌套循环*/ for(j=0;j3;j+) if(chessboardij= )/*当该位置为空时*/ break;/*跳出*/ if(chessboardij= )/*当该位置不为空时*/ break;/*跳出*/ if(i*j=9)/*当变量i与变量j乘积为9时*/ printf(This game is draw.n);/*平局*/ exit(0);/*退出*/ else chessboardij=O;/*否则,该位置定义为O*/ void display(void)/*显示棋盘*/ int t;/*变量t*/ for(t=0;t3;t+)/*设定循环*/ printf(%c|%c|%c,chessboardt0,chessboardt1, chessboardt2);/*棋盘各单元之间显示|*/ if(t!=2)printf(n-|-|-n); printf(n); char judge(void)/*判断胜负*/ int i;/*变量i*/for(i=0;i3;i+)/*设定循环*/if(chessboardi0=chessboardi1&chessboardi0 =chessboardi2)/*当某行所有单元相同时*/return chessboardi0;/*返回该行内容*/ for(i=0;i3;i+)/*设定循环*/ if(chessboard0i=chessboard1i&chessboard0i =chessboard2i)/*当某列所有单元相同时*/return chessboard0i;/*返回该列内容*/for(i=0;i3;i+)/*设定循环*/if(chessboard00=chessboard11&chessboard00 =chessboard22)/*当右斜列所有单元相同时*/return chessboard00;/*返回右斜列内容*/for(i=0;i3;i+)/*设定循环*/if(chessboard02=chessboard11&chessboard11= chessboard20)/*当左斜列所有单元相同时*/ return chessboard02;/*返回左斜列内容*/return ; 【程序运行截屏】【第二章 “十佳运动员有奖评选系统”模块图】十佳运动员有奖评选系统统 计核 对退 出读入文件信息计算十佳运动员计算十个获奖者浏览选票查找选票返回主菜单1.主函数流程显示一系列功能选项输入,判断是否是1-3根据的值调用2.统计模块流程从文件读入候选运动员记录显示候选运动员记录从文件读入选票记录3.加载模块流程定义指针及循环计数器文件打开成功否输出错误信息读到文件末尾了吗?调用读入一个学生信息,并存入结构体中关闭文件,返回值4.计算十佳参选者模块流程计算选票命中率依据命中率对选票记录排序显示10个获奖参选者信息输出10个获奖者信息到文件5.计算十佳运动员模块流程开 始选票核对完了吗?10个候选号码?20个候选人?函数结束处理下一张选票候选人得票数加一候选号=候选人?6.计算选票的命中率流程开 始选票核对完了吗?10个候选号码?10个候选人?依据题意计算命中率函数结束处理下一张选票【第三章 “学生成绩管理系统”模块图】数据输入数据显示数据查找数据插入成绩排序学生成绩管理系统1.主函数流程输入用户要输入的个数NI从0到N-1调用输入函数input(i) i!=0保存调用函数save(n)2.追加模块流程调用加载函数n=load();并计算可以记录个数n输入用户要追加的人的记录个数mK=m+n从到调用输入函数input(i)保存追加的记录3.插入模块流程调用输入法单个记录的函数显示刚才输入的记录选择功能返回主菜单4.修改模块流程显示所有记录,让用户看哪个要修改输入要修改的名字是否有记录显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东韶关市新丰县国有资产管理集团有限公司第一批专业技术人员招聘有关事项模拟试卷附答案详解(黄金题型)
- 2025北京大兴区旧宫镇红星派出所流动人口和出租房屋管理员招录1人模拟试卷及答案详解(夺冠系列)
- 2025年功能输注装置项目建议书
- 2025广东深圳市龙岗区第五人民医院第二批招聘14人模拟试卷有答案详解
- 2025年拉挤树脂项目合作计划书
- 2025广西玉林市北流市西埌镇招聘村级网格管理员1人模拟试卷及完整答案详解
- 2025年蚌埠国钛纳米材料有限公司公开招聘工作人员50人模拟试卷及答案详解一套
- 2025福建三明明溪县公安局招聘警务辅助人员13名考前自测高频考点模拟试题附答案详解(模拟题)
- 2025内蒙古喀喇沁旗锦山第三中学“绿色通道”引进教师3人第二次考前自测高频考点模拟试题及参考答案详解
- 2025广东云浮市罗定市市场监督管理局招用青年见习人员2人模拟试卷及一套完整答案详解
- 【公开课】重力与弹力+课件人教版(2019)必修第一册
- 护理伦理与法律
- 网赌网贷专题教育
- 物业出纳培训课件内容
- 急性阑尾炎护理诊断及措施
- 教育是唤醒的
- 商务局退休干部活动方案
- GB/T 32910.6-2025数据中心资源利用第6部分:水资源使用效率
- 2025年教师资格证面试结构化面试真题卷:小学信息技术教学案例分析
- 中医美容科管理制度
- 家乡介绍课件英文
评论
0/150
提交评论