Excel怎么玩扫雷?成品及制作思路分享!
创作立场声明:本文是基于Excel放飞自我的一种体验式原创分享。
人生一世,些许言语,悦人悦己,亦为值。
Excel就只能是三十年手速疯狂填数据吗?
Excel就只能是死扣细节制作华丽图表原地成仙吗?
Excel就只能是枯燥乏味的闭眼复制粘贴吗?
NO~~~
我们还可以用它搞点乐子!来吧,既然不能功成名就,那就努力做个有趣的灵魂!
扫雷,相信大家都玩过,但是用Excel玩应该没几个,自己做完自己玩,应该没有谁会这么可爱吧~哈哈哈~
成品展示:
获取路径:
制作思路(如果)
一、扫雷的简单介绍
首先我们弄清楚扫雷的规则和逻辑,以最低难度为例:
在9x9的网格内,随机分布了10颗地雷。
在格子内显示周边地雷的数量,通过不同格的数字来分析和推理地雷的分布。
点到有地雷的格即为输。
二、Excel制作
梳理要实现的功能:
点击单元格,自动显示当前单元格的隐藏数值
根据当前单元格数值进行判断,并自动进行扩展显示等相应操作
判断游戏胜利和失败
当游戏开始时,操作区域是未知的,但你点与不点,地雷就在那里,不离不弃!所以,在操作区域之外,还需要设定一个隐藏区域,用于存放已定确定的地雷和数值分布。
基于这个思路,使用Excel制作扫雷小游戏的步骤大致如下:
1 地雷“X”分布
指定9x9的单元格区域,随机选择其中10个单元格,写入“X”,再根据X计算周边单元格的数值。
1.1 “X”随机写入
1.1.1 随机选取10个单元格
思路:
通过行、列号来确定区域内的单元格位置。
为了避免重复,将所有单元格的行列号组成数组,随机获取10组,再提前行号和列号。
将“X”写入已定位的随机单元格。
制作:
设定单元格区域为A1:I9。
按照行列号,由11~99(剔除含0数字)组成整数数组,填充为一列。
做辅助列,使用RADN函数填充,再通过SMALL函数查找辅助列中最小的10个随机数,再使用MATCH函数得到这10个最小随机数的行号,最后使用INDEX函数返回行号对应的数组。(事实证明,这一步也可以使用VBA排序,然后复制前十即可,更简单!)
SMALL(查找区域,指定第几小)
MATCH(查找条件,区域,方法)
INDEX(区域,行号,列号)
使用LEFT和RIGHT函数提取行号和列号。
LEFT(单元格,左起截取几个)
RIGHT(单元格,右起截取几个)
使用VBA的for...next循环,按照行、列号写入"X"
事实证明,因为涉及自动刷写,这里使用Excel函数虽然可以并不能减少对VBA代码的依赖,反而更复杂了。专业版直接使用for...next写入并在中间做一个非重复的判断就实现了同样的效果,简单了很多。
1.2 地雷数量的计算和写入
创建另一区域,以写好”X“排布的区域为基础,使用IF和COUNTIF函数组合,计算空白单元格周围区域的地雷数量。
COUNTIF(区域,要查找的内容)
2 操作策略设计
设计鼠标点击时,相应的操作和逻辑。
2.1 值判定
思路:
如果所选单元格,对应隐藏区域单元格的值为0,则复制该单元格及周边区域的值。
如果所选单元格,对应隐藏区域单元格的值不为0,则只复制该单元格的值。
制作:
以当前选择单元格的行、列号定位隐藏区域对应的单元格。
VBA界面使用IF...THEN...语句进行判定和复制操作。
2.2 结果判定
思路:
当所选单元格,对应隐藏区域单元格的值为X时,游戏结束。
所有非X单元格被点击识别出之后,游戏胜利。
制作:
在值判定的IF...THEN...中增加一项X判定,成立则输出“游戏结束”并end sub。
在值判定之后,增加新的IF...THEN...语句,操作面板的数值和等于隐藏区域的数值和(即所有数字单元格都均已经识别出)时,输出“游戏胜利”
2.3 点击自动操作
思路:
点击操作面板单元格之后,自动进行值判定、结果判定。
制作:
将值判定和结果判定,写进同一个sub。
将sub更改为Private Sub Worksheet_SelectionChange(ByVal Target As Range),放在操作面板对应的sheet。
设置所选单元格的行、列号为变量,通过变量贯穿计算。
3 操作面板设计
3.1 设计面板区域
3.1.1 限定窗口滚动
在VBA界面的Sheet属性中,修改ScrollArea即可。
3.1.2 限定选择范围
修改游戏区域为“未锁定”,保护工作表,选择“选定未锁定单元格”。
3.2 增强显示效果
使用条件格式,对单元格为空值、数字、X分别以不同的颜色显示。
4 调整细节
略过



d_on
校验提示文案
张大妈潜水员
校验提示文案
放飞理想2020
校验提示文案
放飞理想2020
校验提示文案
张大妈潜水员
校验提示文案
d_on
校验提示文案