




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、人工智能project报告学号:名字:王沙沙班级:指导老师:赵老师2011年10月25日目录1 .自动扫雷3需求分析,需求分析,需求分析游戏规则3扫雷游戏设计3自动扫雷设计5用户手册5驾驶结果,驾驶结果,驾驶结果。结论,结论,结论,结论主要的算法代码71自动扫雷1 .问题的说明、需求分析扫雷是Windows操作系统拥有的桌面游戏之一,其规则简单,长期受电脑用户欢迎。 自动扫雷在开始扫雷后,根据扫雷规则使用计算机进行扫雷。 要开始局面,点击第一个按钮。 因为执行第一个动作时,所有按钮都雷鸣的概率相同,所以为了方便起见,每次按第一个按钮,不幸的是如果第一个按钮是雷,请单击“开始”-“重新开始”。2
2、 .游戏规则游戏界面如下图所示,游戏区域是由mnn个格子构成的“雷区”,左上角的数字表示雷区上没有显示的地雷的数量,右上角的数字表示用户第一次点击后的时间,以秒为单位。 中间的图标表示游戏的状态(完成:笑容失败:哭脸。 用户必须通过鼠标操作来确定地雷的位置左键点击:尝试电网是否有地雷。 如果在这个格子下有地雷,游戏会失败,该格子下没有地雷,但如果在其周围的8个格子下有地雷,就会显示出其周围的8个格子的地雷数量.如果在这个格子下没有地雷,周围的8个格子下也没有地雷,就在这里挖。 右键单击:更改网格上是否有雷电标记。 或者同时点击左右键,如果该格子周围显示的地雷数量与格子中的数字相同,则挖掘周围的
3、剩馀格子。 暗示在该格子周围标识的地雷的数量比格子少的情况下3 .扫雷游戏设计各格子有以下状态MS_NORMAL,MS_OPEN,MS_FLAG,MS_QUEST,MS_EXPLODE MINESTATUS1 )格子类共享变量如下所示MINESTATUS m_nStatus; /晶格状态int m_nMineNum; /格子周围的雷的数量,即格子上显示的数字CWnd *m_pParent; /父窗口int m_nX,m_nY; 按下/按钮的横纵轴成员函数设置状态(minestatus nstatus ) /状态获取GetStatus()/状态设定SetMineNum(int nMineNum)
4、/光线数获取GetMineNum() /光线数绘制DrawItem(BOOL bFail=TRUE) /网格2 )布莱尔类共享变量如下所示int m_nRow,m_nCol; /盘上有几行几列int m_nMineNum; /盘上的雷数int m_nX,m_nY; /盘的位置int m_nOldMine;int m_aMineTest9;int m_nMineTest;CMineButton *m_aLandMine10000; /盘盘CWnd *m_pParent;成员函数创建(int nCol,int nCol,int nMineNum,int nX,int nY,CWnd *pParen
5、t );Reset(int nRow,int nCol,int nMineNum) /重新布局更新ReDraw(BOOL bFail) /局面按LButtonDown(CPoint point) /左按钮同时按下BothButtonDown(CPoint point) /左按钮和右按钮RButtonDown(CPoint point) /右键单击MouseMove(CPoint point,int bBothDown) /鼠标移动LButtonUp(CPoint point) /左弹BothButtonUp(CPoint point) /左和右同时跳起OpenMine(int nCurMine
6、) /开局函数IsSuccess (); /判断扫雷是否成功rndbtshddn (内部编号)获取GetMineNum()/板的光线数取得GetRight(int nCurMine)/四附近的中心点像素的右侧相邻的像素点的位置获取GetLeft(int nCurMine)/附近中心点像素正下方的左像素点的位置获取GetTop(int nCurMine)/附近中心点像素正上方的像素点的位置取得GetBot(int nCurMine)/附近中心点像素正下方的像素点的位置3 )布莱尔算法:首先定义n*n的二维数组,该数组的i-1到i 1,j-1到j 1除了I、j本身。 周围有几个雷的值。 如果数组值
7、为10,则本身就是雷。 然后自动生成m个雷,使这m个雷分布在界面上。 所选择的值I、j点的值为10,从i-1到i 1,从j-1到j 1的值都为1,然后在接口上区分n*n个网格,并使网格的坐标和二维阵列相关联,这首先产生一个矩阵,例如10*10的区域里面用数字表示雷是否在结构的阵列中保存雷的隐藏,关于标记的情况和你说的扩展,可能是阵列的边界问题,到达阵列的边界后,遇到下标越境错误,在矩阵上添加边界。 例如,生成3*3的雷区,但实际上需要定义5*5的数组。 阵列周围定义为没有雷的空地。 0表示空地,1表示雷电0000001010001000000000000在阵列中间的3*3区域进行搜索,例如在点
8、击了ime (2,2,2 )的区域中,即在所显示的雷区的第一个空白区域中,程序先判定这里是否有雷,然后计算周围8个区域的雷的状况,并将累计结果放入该区域if ime (2,2 )=1then踩地雷的代码没有踩else地雷for i=1 to 3for j=1 to 3if i=2 and j=2 then nextimesum=imesum ime(i,j )这样,j i统计了该地区周围的雷电的数量4 )在程序中追加背景音乐playsound (makeintraesource (IDR _ wave1),30getmodulehandle(null ),snd _ async|snd _ r
9、esource|snd _ no default|snd _ loop );注意:要播放音轨,必须添加以下两个头文件#include /读入声音头文件导入#pragma comment(lib, WINMM.LIB)/声音头文件库4 .自动扫雷设计在您第一次点击之前,所有网格下存在地雷的概率是相同的,因此您只要点击其中一个就可以了,并定义IsChange变量以用于排雷。如果一个格子(x )上显示的数字(Mine(X ) )等于其周围标记为地雷的格子数,则在其周围未标记的格子下一定没有地雷。 此时,可以在其周围的初始状态的网格上点击,或者同时左、右点击该显示数字的网格。中心点格子的数值等于周围未
10、知格子的数量时,在其周围未标记为地雷的格子下一定有地雷。 此时,您可以右键单击周围未标记为地雷的网格。以上两个阶段分别对应于for循环,第一个循环一定是表示为雷的格子(即插即用旗),第二个循环寻找中心点的格子的数量与周围的未知状态的格子的数量相等的格子(即,从第一个循环的结果表示不是雷在第一次循环执行了立旗动作isechange=1的情况下,在第二次循环执行了点击的动作isechange=1的情况下,第二次循环执行了点击的动作is echange=1. is change!=0时,执行或推测双重循环直到打扫结束(踩雷的只有第一步,也就是说第一步不是雷的话,下一步棋就不踩雷)。4 .用户手册运行
11、程序,然后单击游戏。 在正常情况下地雷排除成功,在偶然的情况下推测时显示提示对话框程序的执行结果:第一次扫雷成功预计扫雷情况如下:结论该扫雷算法的大部分情况可以完成扫雷任务主要算法代码:voicminedlg :3360 on命令重新启动()举止bFail=FALSE;PS (PS )KillTimer(1)bStart=FALSE;LandMine.Reset(LandMine.GetRow ()、LandMine.GetCol ()、LandMine.GetMineNum ();TimeCount.SetNumber(0)miner count.setnumber (landmine.ge
12、t minnum ();m_Face.SetBitmap(m_FaceNormal )RedrawWindow ();PS、PS;int MineNum=LandMine.GetMineNum ();int IsChange; /用于结束循环。PS、PS、PS 1; /Num存储获取8附近MS_EXPLODE状态的个数,t用于获取8个区域点的位置intall item=landmine.getrow () * landmine.get col (); /获取板的大小,即阵列的长度OnLButtonDown(1,cpoint (landmine.m _ landmine 0-m _ NX,Lan
13、dMine.m_aLandMine0-m_nY ) ); /每次按下第一个按钮。 因为首先按哪个概率是相等的OnLButtonUp(1,cpoint (landmine.m _ a landmine 0-m _ NX,LandMine.m_aLandMine0-m_nY ) );while (ms _ explode landmine.m _ landmine 1-m _ nstatus=ms _ normal landmine.m _ landmine 10 -m _ nstatus=ms _ normal )举止if (landmine.m _ landmine 0-m _ nstatus
14、=ms _ explode ) break;LandMine.Reset(LandMine.GetRow ()、LandMine.GetCol ()、LandMine.GetMineNum ();OnLButtonDown(1,cpoint (landmine.m _ landmine 0-m _ NX,LandMine.m_aLandMine0-m_nY ) ); /每次按第一个按钮。 因为首先按哪个概率是相等的OnLButtonUp(1,cpoint (landmine.m _ a landmine 0-m _ NX,LandMine.m_aLandMine0-m_nY ) );以下PS第一种情况IsChange=0;for (i=0; 对于im _ n stats=ms _ open landmine.m _ landmine I -m _ nmine num0)/打开的按钮举止t=LandMine.GetLeft(i) /4附近PS (t=0landmine.m _ landmine t -m _ nstatus!=MS_OPEN )Num;t=LandMine.GetTop(i )if (t=0)举止PK (landmine.m _ landmine t -m _ nstatus!=MS_OPEN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 渗透模拟面试题及答案
- 2025【合同范本】有限责任公司章程(合资公司)
- 中考病句秒改秘籍:6类标志词+口诀
- 2024年厦门市湖里区招商服务有限公司招聘考试真题
- 2024年武汉市东西湖区卫生健康局招聘真题
- 2024年海南师范大学招聘专任教师真题
- 江西省新余市实验中学2024-2025学年高三下学期冲刺模拟(三)数学试题(解析)
- 2023-2024年亚太区装修成本指南-仲量联行
- 2025年二手交易电商平台信用评价体系与消费者信任度培养策略研究报告
- 非物质文化遗产展示中心企业制定与实施新质生产力项目商业计划书
- 浙江省杭州市文澜中学2025届初三第三次(4月)联考英语试题含答案
- 高血压危象的急救与护理
- 建筑工程行业项目成本控制方案
- 无线电管理一体化平台互联互通规范
- 合同范本之简易版劳动合同5篇
- 2025年中国第三方支付系统市场运行态势及行业发展前景预测报告
- 一年级下册语文课件统编版-11 浪花【新课标版】
- 新加坡专业服务公司指南 202502
- 大学物理上册总复习
- 《土壤与土壤改良》课件
- 儿科学知到智慧树章节测试课后答案2024年秋山东第一医科大学
评论
0/150
提交评论