1.该项目主要实现了扫雷的基本游戏功能,以及能够自主设计行数、列数、以及雷数
设计思路如下:一个物体状态为 所处位置、是否被标记、是否被打开、是否是雷,以及如果不是雷,被打开后会显示什么数字能够概括其全部内容,设计一个类来表示该物体
将该类用无参构造和有参构造初始化
2.物体被设计好后,我设计了一个容器用来装雷的坐标,以及一个二维容器来装所有的物体,并设计了一些菜单栏功能。
3.下一步,也是最重要的一步,函数的实现。
new_game函数 ,即开始一局新游戏,对游戏失败变量进行初始化,根据每回合提供的行数,列数,雷数,重新设置界面的大小,对物体进行初始化,以及上一次游戏空间的清理
释放空间:
对物体进行初始化: 首先,将装有雷坐标的容器进行清空,根据雷的数目,随机生成雷的坐标,并将他放置在雷容器中;其次,根据行数和列数,初始化二维容器,假如是雷,则isMine设置为true;最后,当不是雷时,判断该格子是否在有效区域内,再计算该格子周围8个格子,其中为雷的个数。
判断区域有效:
画家绘制背景板还有循环绘制每个物体:
每个物体的绘制如下: 当处于被标记状态,若游戏结束,将雷显示出来,未结束,则显示旗子的图片。当处于被打开状态,如果该数字为0,则为纯白色,不为0时,则将数字画出来(需要将数字转化为QString类型);否则,即没被打开,也没被标记,则为蓝色。
接下来是对鼠标单击事件的处理。首先获得鼠标处格子的坐标,判断是否在游戏区域内,定义一个对象指针指向该坐标,如果是鼠标左键点击,只能在不是被打开,且被标记状态下点击成功,如果是雷的话,则游戏结束;不是雷的话,交给画家将数字显示出来。当打开所有的非雷,标记所有的雷,则游戏结束。鼠标右键点击,处于被标记状态时,就取消标记状态,当没有被打开时,才能被标记。
当所有的雷被标记,所有的非雷被打开,则找到了全部
当数字为0时,打开他,并查找其周围数字也为0的元素,再递归寻找空白区域附近的数字元素,并把数字元素也打开。
游戏结束后,遍历所有的格子,将雷展示出来,非雷都打开。
自定义雷的个数、行数、列数,我设计了一个类,将得到的字符类型转化为整型,再回传给大类,大类设计了一个槽函数,点击自定义时会将这个类show出来,然后产生一个dia_test信号,收到信号后,会调用自定义生成槽函数。
游戏效果图如下所示:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)