点赞再看,养成习惯;尺有所短,寸有所长。
微信搜索【亦心Excel】关注这个不一样的自媒体人。
本文 GitHub https://github.com/hugogoos/Excel 已收录,包含Excel系统学习指南系列文章,以及各种Excel资料。
最近刷短视频经常看到有人玩数字炸弹小游戏,今天小编就想和大家分享如果用Excel制作一个数字炸弹小游戏。
先简单介绍一下游戏规则:在数字范围内,把其中一个数字定为炸弹,谁猜中这个数,谁就要接受惩罚。比如数字范围是0~100,炸弹数字是66,然后猜一个数字是28,28不是炸弹数字,那么现在可以猜的数字范围就缩小到28~100;又猜一个数字77,77也不是炸弹,那么现在数字范围又缩小到28~77,每次猜不能猜边界上的数字,直到有人猜中这个炸弹,然后接受惩罚,游戏结束。
先来看看最后成品:
下面就跟着小编来一步一步制作一个数字炸弹吧。
1、设计布局
首先第一步我们设计一下整个小游戏的布局。
如上图,分为数字炸弹区域,猜数字区域和数字区间区域。数字炸弹主要是存放要设置的炸弹数字;猜数字主要是每次猜炸弹的记录;而数字区间主要存放对应每次猜测应该显示的结果。
2、处理数字炸弹区域
第二步我们先来处理数字炸弹区域。
我们先来说说这一块的逻辑:首先这里存放数字炸弹,而且在猜测过程中是不可见的;其次当猜测正确的时候这里应该显示出来。
既然逻辑清楚了,那么我们就对应相应要求做相应处理即可。对于猜测过程中不可见,我们可以把数字设置为单元格背景色相同颜色默认即白色;对于猜测正确以后显示出来,我们可以用条件格式,当猜测数字正确,把数字炸弹单元格设为红色背景,以突出显示。
下面我们来具体制作过程:
① 在B5单元格中输入66,然后设置字体颜色为白色;
② 选中B5单元格,选中「数据」选项卡,点击「样式」命令组中的「条件格式」下拉列表,选择「新建规则」;
③ 选择规则类型「使用公式确定要设置格式的单元格」,并输入公式「=VLOOKUP(B5,D:D,1,0)」,设置预览中的「格式」选择「填充」选项卡,选择红色点击确定,完成新建规则;
④ 在猜数字区域输入数字进行测试。
由于篇幅过程就不详细讲解函数意思了,「=VLOOKUP(B5,D:D,1,0)」表示查找D列中和B5相同的数,1表示返回的列号,因为查找的就是D列所以返回1,0表示完全相等比较。
动态操作如下:
3、实现猜数字区域输入数据区间显示
我们先实现一个简单功能,就是猜数字区域输入什么就在数据区间显示什么。按照逻辑来说,如果数字区域什么都不输入,那么数据区间也应该什么都不显示;如果数字区域输入了内容,那么数据区间也应该显示相应的内容。这时小编想到了IF函数,我们这里用数组公式「=IF(D5="","",D5)」,这个公式表示的含义是如果D5输入空,那么公式所在单元格也展示空,否则D5输入什么公式所在单元格显示什么。
另外注意:数组公式在单元格中输入完后不能直接按Enter回车,需要按「Ctrl+Shift+Enter」快捷键,按完以后公式会变为「{=IF(D5="","",D5)}」,大括号表示数组公式。
下面看看这个小实现:
4、输入合法性验证
对于猜数字区域我们完全不知道使用者会输入什么,因此我们需要对输入数据做一些校验。
如果用户输入的不是0-100中的任意一个数,那边我们就给出提示,比如“砰砰砰,不要闹”。结合IF函数我们立马想到OR函数,这个验证我们可以分成两个输入小于0或者输入大于100,正好可以用OR函数组织起来。
我们这里用数组公式「=IF(D5="","",IF(OR(D5<0, D5>100),"砰砰砰,不要闹", D5))」。
5、处理猜对的情况
在前面的基础上我们继续前进,如果猜对了,那我们就把数字炸弹显示处理(这个前面已经完成),并且数字区间给出提示,比如显示“嘣嘣嘣”,猜测不正确还是显示输入值。而新加的功能还是用IF函数来处理。
我们这里用数组公式「=IF(D5="","",IF(OR(D5<0, D5>100),"砰砰砰,不要闹", IF(D5=$B$5,"蹦蹦蹦",D5)))」。
6、处理猜错的情况
如果猜错根据游戏规则我们需要在数字区间显示下次可猜数字范围“xx-xx”的方式展示。
我们先从最简单的第一次猜测开始,假如猜测的数字比炸弹数字小,那么应该显示“xx-100”,如果猜测的数字比炸弹数字大,那么应该显示“0-xx”。
我们把前后两个数字分开单独来看,前面的数字为:当猜测数字比炸弹数字小的时候显示当前猜测值,如果比炸弹数字大显示0,因此转换为数组公式为「=IF(D5<$B$5,D5,0)」,同理后面的数字对应的数组公式应该为「=IF(D5>$B$5,D5,100)」。
结合之前做的步骤,这里使用数组公式:「=IF(D5="","",IF(OR(D5<0,D5>100),"砰砰砰,不要闹",IF(D5=$B$5,"蹦蹦蹦",IF(D5<$B$5,D5,0)&"-"&IF(D5>$B$5,D5,100))))」。
当第二次第三次还是猜测错误后面就会发现问题,如下图。
通过上面公式我们可以解释通,之所以出现这样的情况,是因为猜数字区域每个单元格单独和炸弹数字进行比较而导致的,因此猜数字区域单元格不但要和炸弹数字比较还要和猜数字区域的数字进行比较,才能得出正确结果。
我们还是分开来,先说前面的数字,如果猜测的数字比炸弹数字小,那么前面数字应该为:在猜数字区域中小于炸弹数字的所有数中,最大的那个数,转换为数组公式为「=MAX(IF($D$5:D5<$B$5,$D$5:D5,0))」。相应的后面的数字对应的数组公式为「=MIN(IF($D$5:D5>$B$5,$D$5:D5,100)」。
结合之前组织为数组公式:「=IF(D5="","",IF(OR(D5<0,D5>100),"砰砰砰,不要闹",IF(D5=$B$5,"蹦蹦蹦",IF(D5<$B$5,D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))&"-"&IF(D5>$B$5,D5,MIN(IF($D$5:D5>$B$5,$D$5:D5,100))))))」。
运行之后我们发现还是有问题,如下图:
很明显前面的数字有问题。我们继续回到公式,细细来分析前面的数字的公式「IF(D5<$B$5,D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))」,如果输入数字小于炸弹数字,则显示输入数字…,咦,这儿有逻辑错误,应该是小于炸弹数字,并且是猜数字区域小于炸弹数字中最大的那个数才能显示输入数字。因此公式要改为「IF(AND(D5<$B$5,D5>MAX(IF($D$5:D5<$B$5,$D$5:D5,0))),D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))」,意为如果输入数字小于炸弹数字并且是猜数字区域小于炸弹数字中最大的那个数,才显示输入数字,否则显示…。
另外后面的数字也有同样的逻辑,应该也是错的,只是刚才没有测出来,因此公式也要修改为:「IF(AND(D5>$B$5,D5< MIN(IF($D$5:D5>$B$5,$D$5:D5,100))),D5,MIN(IF($D$5:D5>$B$5,$D$5:D5,100)))」。
最终数组公式为:结合之前组织为数组公式:「=IF(D5="","",IF(OR(D5<0,D5>100),"砰砰砰,不要闹",IF(D5=$B$5,"蹦蹦蹦",IF(AND(D5<$B$5,D5>MAX(IF($D$5:D5<$B$5,$D$5:D5,0))),D5,MAX(IF($D$5:D5<$B$5,$D$5:D5,0)))&"-"&IF(AND(D5>$B$5,D5<MIN(IF($D$5:D5>$B$5,$D$5:D5,100))),D5,MIN(IF($D$5:D5>$B$5,$D$5:D5,100))))))」。
注意:按「Ctrl+Shift+Enter」。
今天的分享到这里就结束了,但是学习的道路才刚刚开始,希望我们可以在学习的道路上不断地前进,坚持不懈。
如果你有感兴趣的功能,可以告诉小编哦,小编会为你写一篇相应的文章。当然是先到先写哈,我会列一个计划表,尽量满足大家的需求,所以如果下一篇不是你要的文章,请不要着急,可能就在下下篇。记得告诉小编你想学习的功能哦。
文章持续更新,可以微信搜索「 亦心Excel 」第一时间阅读,本文 GitHub https://github.com/hugogoos/Excel 已经收录,包含Excel系统学习指南系列文章,欢迎Star。