Excel玩“记忆配对”?成品及制作思路分享!
Excel就只能是三十年手速疯狂填数据吗?
Excel就只能是死扣细节制作华丽图表原地成仙吗?
Excel就只能是枯燥乏味的闭眼复制粘贴吗?
NO——我们还可以用它搞点乐子,来吧,既然不能功成名就,那就做个有趣的渣渣。
这次做的也是一个经典小游戏——记忆配对!设计了三种难度,反正我是玩玩简单的行,最高难度的感觉脑细胞受不住(不得不向岁月低头啊~)
成品展示:
获取路径:
完整版 https://wwx.lanzoui.com/i4blcvwi5ne 提取密码:cgyt
解压密码(rste)
PS.食用前记得打开允许宏设置
2007路径:①左上角圆形图标→②Excel选项→③信任中心→④信任中心设置→⑤宏设置→⑥启用所有宏。
2010路径:①左上角“文件”→②选项→③信任中心→④信任中心设置→⑤宏设置→⑥启用所有宏。
(其他版本Excel也差不多,参考设置)
**********游戏制作分享,完全可以不看系列 **********
一、记忆配对的简单介绍
记忆配对小游戏的规则和逻辑非常简单:
在指定区域的网格内,随机分布了n对图形。
点击格子,所选格内的图形显示出来,如果与上一次点击的格子内图形一样,则配对成功。
通过记住不同图形的位置,将其一对一对的找出来。
所有格子的图形均显示出来之后,完成游戏。
二、Excel制作
OK!了解了规则和逻辑,那么接下来就是——
根据规则,梳理要实现的功能;
设计功能实现方法及实现过程;
微微肝一下的搞代码。
基于这个思路,使用Excel制作记忆配对小游戏的步骤大致如下:
1 点击翻开图形
指定9x9的单元格区域,随机选择其中10个单元格,写入“X”,再根据X计算周边单元格的数值。
1.1 布置隐藏面板
有了设计扫雷的经验,这个就很简单了~
思路:
在隐藏面板写好n组固定的值,1列;
做辅助列,利用RAN()为每一组分配一个随机数;
根据辅助随机数大小进行排序,打乱图形;
分段复制到设计好的区域内。
制作:
以简单版为例,4x4网格,共16个8组图形,直接将1~8数字写进N列;
在左侧M列对应写上”=ran()“,生成随机数;
使用代码排序(使用筛选排序不会自动更新);
Range("M1:N16").sort Range("M1"), xlAscending '~~对M1:N16区域进行排序,顺序key是M1(随机数那一列),升序
使用代码,将N列复制一份到O列,排序打乱后的结果就固定下来不在变了;
Range("N1:N16").Copy
Range("O1").PasteSpecial '~~PasteSpecial是选择性粘贴,直接copy也行
利用for循环,以4个值为一个循环,粘贴到网格的1~4列。
For i = 1 To 4
Range(Cells(i * 4 - 3, "O"), Cells(i * 4, "O")).Copy
Cells(2, i + 1).PasteSpecial Next i
1.2 点击交互——SelectionChange
思路:
识别当前点击的行列号(坐标),并进行记录(下次点击使用);
判断有效性,如果点到已配对的图形需要区别处理(后文叙述);
按照行列号,复制隐藏面板的图形至显示面板。
制作:
定义变量zrow和zcol,表示当前选择的行列号;
zrow = Application.Selection.Row
zcol = Application.Selection.Column
将zrow和zcol写进隐藏面板指定单元格,进行记录;
Sheet3.Range("S1") = zrow '~Sheet3为隐藏面板,S1、S2为记录行列号的单元格
Sheet3.Range("S2") = zcol
使显示面板对应格与隐藏面板值相等(此处用Copy命令也可以)。
Sheet1.Cells(zrow, zcol) = Sheet3.Cells(zrow, zcol)
2 判断配对是否成功
使用IF判断,如果当前行列号与上一次行列号对应图形值不同则表示配对不成功,相同则表示成功,首次点击不作判断。
判断的代码嵌入SelectionChange的sub里面。
2.1 配对不成功
思路:
点击显示图形,前次点击的图形消失;
记录当前行列号,覆盖记录;
制作:
按照当前zrow、zcol行列号执行点击显示图片(上述已有,不再重复编代码);
定义lrow、lcol为前此点击行列号变量;
lrow = Sheet3.Range("S1")
lcol = Sheet3.Range("S2")
显示面板lrow、lcol对应的单元格为空;
行列号记录单元格写入zrow、zcol。
Sheet3.Range("S1") = zrow
Sheet3.Range("S2") = zcol
2.2 配对成功
思路:
点击依旧显示图形,上一次点击图形不消失,并删除隐藏面板两次点击对应的图形(用于无效点击判断)。
删除隐藏面板记录的行列号,避免下次删除已配对图形。
制作:
按照当前zrow、zcol行列号执行点击显示图片(上述已有,不再重复编代码);
隐藏面板zrow、zcol和lrow、lcol对应的单元格为空;
行列号记录单元格为空。
2.3 非判断工况:无效点击和首次点击
思路:
点到已配对的图形,为无效点击,不做任何操作;
首次点击时,不做对比判断,记录当前行列号。
制作:
IF语句,如果隐藏面板zrow、zcol对应单元格为空,不做行列号记录和配对判断;
IF语句,如果隐藏面板zrow、zcol对应单元格不为空,且行列号记录为空,行列号记录单元格写入zrow、zcol,不进行配对判断。
2.4 IF判断顺序
根据动作逻辑,使用IF多层判断,顺序为——
无效点击判断
首次点击判断
配对成功与否判断
IF... '~是否无效点击
IF... '~非无效点击,是否首次点击
IF... '~非无效点击、非首次点击,是否配对成功
'成功
'不成功
end if
end if
end if
3 游戏结束
思路:
所有图形配对完,隐藏面板的图形均被清空,游戏结束。
制作:
使用Count函数统计指定区域;
使用IF语句判定。
If Application.WorksheetFunction.CountIf(Sheet3.Range("B2:E5"), "<>") = 0...
4 得分
采用步数和时间双重计数,简单公式计算即可,不重要,略过 。
5 调整细节
调试代码和功能、调整显示细节等。
说实话,小游戏早就做出来了,自己也玩了好多遍 。
但是要把思路和制作过程写出来,真的......
下次尝试只写思路,代码有兴趣的直接找我要好了。
叼馋小野猫
校验提示文案
如山似玉
校验提示文案
叼馋小野猫
校验提示文案
如山似玉
校验提示文案