资源描述:
《人工智能扫雷课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、人工智能project报告目录1.自动扫雷…………………………………………………………3需求分析…………………………………………………………3游戏规则…………………………………………………………3扫雷游戏设计……………………………………………………3自动扫雷设计……………………………………………………5用户手册…………………………………………………………5运行结果…………………………………………………………6结论………………………………………………………………7主要算法代码……………………………………………………7141自动扫雷1.
2、问题描述、需求分析扫雷是Windows操作系统自带的桌面小游戏之一,由于其规则简单,长期以来一直受到电脑用户的欢迎。自动扫雷是开始扫雷后根据扫雷规则利用计算机进行扫雷。开始棋局,单击第一个按钮,因为执行第一个动作时所有按钮是雷的概率都相等,为了方便起见每次开局后都按下第一个按钮,如果不幸第一个按钮就是雷,那么单击--开始--重新开局。2.游戏规则游戏界面如下图所示,游戏区域是由MXN个格子组成的“雷区”,左上方的数字显示雷区中未被标出的地雷的个数,右上方的数字显示用户从第一次点击开始所用的时间,单位是秒。中间的图标指示游戏的状态(完
3、成:笑脸;失败:哭脸)。用户需要通过鼠标操作来确定雷区中所有地雷的位置:14左键单击:尝试某个格子是否有地雷。如果该格子下有地雷,则游戏失败·如果该格子下没有地雷但其周围八个格子下有地雷,该格子会显示其周围八个格子中地雷的个数;如果该格子下没有地雷且其周围八个格子下也没有地雷,则此处被挖开。右键单击:改变某个格子是否有雷的标志(工)。或左右键同时单击:当该格子周围已标地雷的个数与格子中的数字相同时,则挖开周围的其余格子。当提示该格子周围已标地雷的个数少于格子;143.扫雷游戏设计每个格子有如下几种状态:{MS_NORMAL,MS_O
4、PEN,MS_FLAG,MS_QUEST,MS_EXPLODE}MINESTATUS1)格子类共有变量如下:MINESTATUSm_nStatus;//格子状态intm_nMineNum;//格子周围的雷数,即格子上显示的数字CWnd*m_pParent;//父窗口intm_nX,m_nY;//按下按钮的横纵坐标成员函数14SetStatus(MINESTATUSnStatus)//设置状态GetStatus()//获取状态SetMineNum(intnMineNum)//设置雷数GetMineNum()//获取雷数DrawItem
5、(BOOLbFail=TRUE);//绘制格子2)布雷类共有变量如下intm_nRow,m_nCol;//棋盘有多少行多少列intm_nMineNum;//棋盘上的雷数intm_nX,m_nY;//棋盘的位置intm_nOldMine;intm_aMineTest[9];intm_nMineTest;CMineButton*m_aLandMine[10000];//棋盘CWnd*m_pParent;成员函数Create(intnRow,intnCol,intnMineNum,intnX,intnY,CWnd*pParent);Res
6、et(intnRow,intnCol,intnMineNum);//重新布局ReDraw(BOOLbFail);//刷新棋局LButtonDown(CPointpoint);//左键按下BothButtonDown(CPointpoint);//左键与右键同时按下RButtonDown(CPointpoint);//右键按下MouseMove(CPointpoint,intbBothDown);//鼠标移动LButtonUp(CPointpoint);//左键弹起BothButtonUp(CPointpoint);//左键与右键同时
7、弹起OpenMine(intnCurMine);//开局函数IsSuccess();//判断是否扫雷成功RndBtShdDn(intnCurMine);GetMineNum()//获取棋盘的雷数GetRight(intnCurMine)//获取四邻域的中心点像素正右方像素点的位置GetLeft(intnCurMine)//获取四邻域的中心点像素正下左像素点的位置GetTop(intnCurMine)//获取四邻域的中心点像素正上方像素点的位置GetBot(intnCurMine)//获取四邻域的中心点像素正下方像素点的位置3)布雷算
8、法:首先定义一个n*n的二维数组,该数组的i-1到i+1,j-1到j+1除去i,j本身。值为周围有几个雷。如果该数组的值为10则本身是雷。然后自动生成m个雷,让这m个雷分布在界面上。被选中的值i,j点的值为10,从i-1到i+1,从j