




已阅读5页,还剩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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卫星发射合同4篇
- 买卖服装合同范本-买卖服装合同格式
- 中国邮政2025平顶山市秋招数据分析岗位高频笔试题库含答案
- 中国邮政2025松原市秋招数据分析岗位高频笔试题库含答案
- 移动混凝土车库施工方案
- 中国邮政2025天门市秋招仓储管理岗位面试模拟题及答案
- 贷款考试题目及答案
- 2025年装饰装潢工程承包合同
- 中国邮政集团2025浙江省秋招笔试综合知识题专练含答案
- 草坪学考试题及答案
- 2025曲靖市事业单位定向招聘驻曲部队未就业随军家属(8人)备考练习试题及答案解析
- 包子铺合伙开店协议合同
- 2025广西现代物流集团第三次招聘109人笔试备考题库及答案解析
- 轴承装配工标准化作业考核试卷及答案
- 入住敬老院协议合同模板
- 英语教学发音课件下载
- 2025年特种设备检验人员资格考试(压力管道检验师GDS)历年参考题库含答案详解(5套)
- 溶液计算题目及答案大全
- 光伏施工基本知识培训课件
- 挡土墙、围墙施工方案(技术标)
- 2025年中药三基试题及答案大全
评论
0/150
提交评论