是结构体类型,结构体中的
um成员代表格内当前处于什么状态,值为1表示有雷,值为0表示已经变成空白格或者显示过数字,rou
d
um成员统计每个格子周围有多少地雷,flag变量主要是鼠标右键测试的标志,如果flag为1则表示格子显示红旗,这样鼠标左键点在这个格子中将无效。算法的重点是一开始统计好每个格子周围有多少地雷,然后当鼠标左键点在没地雷的格子上时进行两种判断,如果格子周围没地,雷就先在原来的格子位置显示空白格,然后用递归的方法同样判断周围的8个格子;如果格子周围有地雷,就在该格子上显示具体的雷数。在递归判断8个格子时,如果格子上有雷或者格子已经显示过雷数或者空白格,以及格子上有红旗标志的话,就不再对格子进行任何判断。
f具体的函数流程如图53所示1mai
主函数定义使用到的常数、全局变量、函数原型说明。然后初始化图形系统,调用游戏控制函数,游戏只接受鼠标操,作按任意键结束游戏,关闭图形系统,程序结束。2Co
trol游戏控制函数调用函数GameBegi
显示游戏初始界面,调用GamePlay为具体游戏操作过程,该函数返回有两种可能:一种是正在玩中,提前结束游戏;一种是玩完,要么失败,要么胜利。如果是前者,则重新开始游戏,如果是后者,则判断是否单击了笑脸,是则重新开始,否则结束程序。3GameBegi
画初始界面这个函数完成初始界面的设计以及随机生成地雷数。初始界面的主要工作是确定图的位置和方格显示的位置。外边框的左上角坐标为(19060),右下角坐标为390,290,显示笑脸和地雷数的区域为(190,60)(390,90),每个方格的宽度和高度均为16。读者可以参照修改区域的大小。4DrawSmile画笑脸利用画椭圆函数fillellipse和bar画笑脸,设置好填充模式。5DrawEmpty两种格子的显示函数的参数为四个,确定格子的坐标i和j、模式和颜色。格子有两种:一种是可以单击的格子;一种是已经显示空白的格子,比前一种格子略小一
f些,通过参数模式和颜色来控制。6DrawRedflag显示红旗用单击鼠标右键表示起地雷,起雷后显示一个小红旗。7GamePlay游戏过程游戏过程主要是对鼠标按键的处理,具体算法如下:1统计每个格子周围有多少地雷。2如果没有按键盘则循环执行;(1)如果单击了鼠标左键则判断如果鼠标单击了笑脸则游戏重新开始。如果单击了方格,判断该格子里有红旗,则按键无效。如果单击的格子没有显示过数字或空白,则判断;如果是地雷,游戏结束,显示地雷分布;如果不是地雷,则统计该格子周围(8r