QT实现扫雷项目

QT实现扫雷项目,第1张

1.该项目主要实现了扫雷的基本游戏功能,以及能够自主设计行数、列数、以及雷数

设计思路如下:一个物体状态为 所处位置、是否被标记、是否被打开、是否是雷,以及如果不是雷,被打开后会显示什么数字能够概括其全部内容,设计一个类来表示该物体

将该类用无参构造和有参构造初始化

 2.物体被设计好后,我设计了一个容器用来装雷的坐标,以及一个二维容器来装所有的物体,并设计了一些菜单栏功能。

3.下一步,也是最重要的一步,函数的实现。

new_game函数 ,即开始一局新游戏,对游戏失败变量进行初始化,根据每回合提供的行数,列数,雷数,重新设置界面的大小,对物体进行初始化,以及上一次游戏空间的清理

 释放空间:

对物体进行初始化: 首先,将装有雷坐标的容器进行清空,根据雷的数目,随机生成雷的坐标,并将他放置在雷容器中;其次,根据行数和列数,初始化二维容器,假如是雷,则isMine设置为true;最后,当不是雷时,判断该格子是否在有效区域内,再计算该格子周围8个格子,其中为雷的个数。

判断区域有效:

 

 画家绘制背景板还有循环绘制每个物体:

 

 

 每个物体的绘制如下: 当处于被标记状态,若游戏结束,将雷显示出来,未结束,则显示旗子的图片。当处于被打开状态,如果该数字为0,则为纯白色,不为0时,则将数字画出来(需要将数字转化为QString类型);否则,即没被打开,也没被标记,则为蓝色。

 接下来是对鼠标单击事件的处理。首先获得鼠标处格子的坐标,判断是否在游戏区域内,定义一个对象指针指向该坐标,如果是鼠标左键点击,只能在不是被打开,且被标记状态下点击成功,如果是雷的话,则游戏结束;不是雷的话,交给画家将数字显示出来。当打开所有的非雷,标记所有的雷,则游戏结束。鼠标右键点击,处于被标记状态时,就取消标记状态,当没有被打开时,才能被标记。

 当所有的雷被标记,所有的非雷被打开,则找到了全部

当数字为0时,打开他,并查找其周围数字也为0的元素,再递归寻找空白区域附近的数字元素,并把数字元素也打开。

 

 游戏结束后,遍历所有的格子,将雷展示出来,非雷都打开。

 自定义雷的个数、行数、列数,我设计了一个类,将得到的字符类型转化为整型,再回传给大类,大类设计了一个槽函数,点击自定义时会将这个类show出来,然后产生一个dia_test信号,收到信号后,会调用自定义生成槽函数。

 

 

 游戏效果图如下所示:

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/2990107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存