C++与easyx实现扫雷

​ 本文是一个初学者对于扫雷实现的想法,希望能有一定的借鉴意义,下面我将分步阐述。

一、已实现的功能

(1)游戏基本逻辑
(2) 添加了背景音乐、点击音效、踩雷音效和胜利音效
(3)游戏结束时可以选择退出或重开
(4)实现了“防止第一步触雷”的功能
(5)实现了”一点一大片“的功能

二、各功能实现的基本介绍

头文件和函数的声明

在这里插入图片描述
除了各部分函数的声明外,我们在此定义了ROW和COL的值,这规定了扫雷的界面大小;同时,我们在此引入了三个全局变量,它们会在将来某些功能的实现中发挥作用。

单元格的设置

在这里插入图片描述

以上为实现扫雷单元格设置所需的代码
在这里插入图片描述
在主函数中,我们还需以上两行代码:第一行用于生成随机数以实现随机埋雷;第二行则是设置了各单元格的初始值

​ 在代码中,我们规定值为”-1“的格子为炸弹格,值为“0~8”的格子为数字格

图片的导入

在这里插入图片描述
在这里插入图片描述

​ 在主函数中,我们先将图片资源导入进来。
​ 在函数中,我们根据不同的值在不同的单元格中输出不同的图片。

		1. 值为-1——*炸弹图像*
		1. 值为0~8——*数字图像*
		1. 值为9~18——*遮盖格图像*
		1. 值为19~28——*插旗格图像*

单元格的覆盖(加密)

在这里插入图片描述

通过对所有单元格的值**+10**,来实现对所有单元格的覆盖

鼠标信息的处理

在这里插入图片描述
在这里插入图片描述

​ 对于鼠标信息的处理,我们首先要确定鼠标点击到哪一格,这时可以用鼠标点击的坐标除去格子的长宽来确定所点格的坐标。
​ 接下来,对于鼠标左键的点击,我们令被点击到的该格的值**-10**,以此实现该格的解密;而对于已经插旗的格子,左键点击将不会有任何效果。这时,还记得我们先前引入的全局变量step嘛,在这里,我们每次鼠标左键点击后,会使step的值自增一次,以记录我们的步数。而当步数为1的时候,若我们点到了炸弹,则会重新埋雷和加载地图,直到该格不为炸弹,再执行打开该格的操作。
​ 而对于鼠标右键的点击,会使该格的值+10,代表插旗,再次右键点击相同的格子会取消该操作。

游戏胜负的判定

在这里插入图片描述
在这里插入图片描述

​ 在开头,我们引入了全局布尔变量gamewin和gameover,当满足游戏胜利或游戏失败的条件时,我们令这些变量的值为true,以此来执行游戏结束的结算。

一点一大片功能的实现

在这里插入图片描述

​ 在这里我们通过函数的递归,不断遍历值为0的格子的相邻8格,实现该功能。

主函数的内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

​ 在主函数中,我们首先依照需求用initgraph函数绘制一个窗口,接着我们导入图像和音频以备接下来的使用。
​ 然后,我们将上述各函数在主函数中引用。其中,当gamewin和gameover中任一变量值为true时,我们通过弹出窗口,询问玩家是否选择重新开始游戏,若否,则会退出该程序。

三、游戏的整体设计

创意部分

游戏进程的展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据现有的插旗数显示剩余炸弹数和不同的表情包,以展现游戏进程

背景音乐和点击音效

在这里插入图片描述
以上为设置播放音效的函数

背景音乐的重复播放函数写在主函数中,并会在游戏结算时终止播放

游戏的全部代码及图像音频

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值