解谜设计-华容道
===概述===
示例图
华容道 游戏关卡如下图。

示例工程
考虑到示例工程中的插件太多了,群友单独拿出来会遇到各种问题。
这里我建立了单独的解谜设计工程,并放入了集合中,方便熟悉用法。
| 小型示例工程集合链接: https://pan.baidu.com/s/1Z60Fht7alAGZymWOle68PQ提取码: 3r5e |
另外,示例中的插件一直在更新,而打包工程中的插件不一定会同步更新哦。
灵感来源
2019年11月,作者我写插件大刀阔斧,
在四个星期内完成了 移动路线核心、事件一体化、输入设备核心 。
目的也很简单,希望把鼠标管理层建设完善,设计一个只能用鼠标才能玩的小游戏。
于是直奔主题,简单写一个华容道的插件,就有了下图的原型。

当时考虑华容道游戏专门作为一个插件,
但觉得功能在别的地方也能用,还是要分,才分成了 事件一体化 这些插件。
(后来的事情你们也知道了,华容道的几个插件,更新次数相当多)
(输入设备核心维护到了v2.0,一体化、鼠标触发事件,都直接被推翻重写了)
===华容道 - 游戏===
游戏简介
1)游戏规则
纯鼠标控制的游戏,鼠标左键或右键拖拽方块。
只有含“@”符号的方块部分,压在了“@”的按压板上,才算通关。
玩家在游戏中可以意会到游戏规则,可以不作详细的规则说明。
2)难度分配
障碍方块的长短,能影响解谜的难度。
障碍方块的形状,能影响解谜的难度。
障碍方块放置后剩余的空间,能极大地影响解谜的难度。
3)禁用能力
无。
4)卡关注意事项
该解谜可随时用鼠标重置,不会卡关。
设计者视角
1)用途
可以作为小游戏加入到主线中,作为开门锁、谜题盒子、古代石板迷阵等场景使用。
2)难度安排
如果你需要在你的游戏中添加该解谜类型,
关卡建议最多两关,难度最大到第四关,可作为 支线或主线谜题 。
第五关类似的可以作为 小分支或成就 。
第六关的设计难度和复杂度都很高,不建议加。
另外,此解谜游戏的设计 不要 在你的游戏主线中出现第二次,忌重复的玩法。
谜题解法
1)空位堵路预判法
华容道中,空位和堵路的数量直接决定了解谜的复杂度。
先考虑将所有 空位 集合在一起,再根据目标方块的堵路关系,构思移动路线。
大部分的解谜关卡的会预留很多空位,所以不用担心空位少谜题解不开的情况。
比如第五关,由于三个柱子挡道,可以确定目标大方块的路线是固定的。
由于大方块体积关系,每次前进都必须要有两个纵向的空位,因此大方块的前进路线中,一定不能有竖方块挡道。
所以需要想办法把所有竖方块转移到大方块后面,才能通过。

===华容道 - 实现===
基础插件
如果要从零开始设计,需要下图的插件:


注意,该文档只详细说明 整体设计思路 和 解谜方法 。
对于具体 事件如何写 ,需要去看看:“8.物体 > 大家族-开关.docx”
基础配置
具体注意示例下面的地方:
1)位置重置
游戏流程中,重置关卡 的事件,会手动批量控制所有事件的恢复到原来位置。
离开关卡或刷新地图,也会使得这些方块的位置重置。
(如果你要使得方块位置刷地图时不被重置,可以用“物体-位置存储器”插件)

2)地图事件
所有与该解谜相关的事件 ,都在地图”设计-华容道”中。
这里主要需留意六类事件:
门(触发器,计数开关插件 控制)
按压板(重力开关 控制,指定 重力钥匙 的事件才能起效)
目标方块(含有指定的 重力钥匙 )
进入关卡(移动镜头、关闭鼠标左键控制)
离开关卡(恢复镜头、恢复鼠标左键)
重置关卡(重置中操作 当前关卡 所有方块归位 )

3)地形设计
示例中的地形,不可通行 的部分可以用凹陷或者柱子代替。
另外注意,”@”按压板的位置,占了一块空间。这块空间在部分解谜中可以被利用起来

关卡设计
方块越短,灵活性越高。
方块越长,难度越高。
设计时,最先考虑挖洞/建墙;再放置长方块;最后在能够确保通关的情况下,陆续加入小的短的方块,从而完善关卡设计。
方块事件设计
| 如果你不想看实现过程,可以直接在示例中复制已有的事件,然后修改行走图、一体化配置即可。可见:方块复制注意 。 |
1)方块3D画法
示例中的华容道方块是已经画好的方块,你可以直接把资源拿来使用。
如果要自己画,可以看看文档:“26.图块 > 图块设计-华容道3D方块的画法.docx”。

2)锁定帧
锁定帧的功能来自插件:
◆Drill_EventFrameLock 行走图 - 锁定帧
锁定帧支持 单行走图、八行走图。
锁定后,无论行走图如何、朝向如何,行走图都为软件编辑器中设置的帧图像。
华容道方块是静态方块,使用鼠标接触、拖动时不能改变方块图像,所以需要锁定帧。

3)鼠标悬停响应
鼠标悬停响应的功能来自插件:
Drill_EventMouseHoverSwitch 物体 - 鼠标悬停响应开关
鼠标悬停响应开关在悬停会按下,离开会弹起。
示例中,”悬停”绑定了独立开关A,”按下”绑定了独立开关C。

你可以参考示例中 机关管理层 现成的鼠标响应开关的事件。
或者 鼠标管理层 的可以点击对话的小爱丽丝。原理都是一样的。

鼠标悬停响应的原理设计如下图。
(更底层原理可以去看看文档:“8.物体 > 触发的本质.docx”)


| 事件页 | 条件 | 描述 | 指令 |
| 1 | 无 | 开关弹起状态 | 鼠标接近立即开启M1。 |
| 2 | 独立开关M2 | 鼠标悬停动作 | 关M2。 |
| 3 | 独立开关M1 | 鼠标悬停状态 | 开M2、M3。 |
| 4 | 独立开关M3 | 开关按下状态 | **并行判断M1的开关;****如果M1被关,立即关闭M3。** |
4)一体化设计
关卡中的事件,
多个事件绑定了”华容道_第一关_方块_1” 的移动标签;
并且还绑定了”华容道_第一关_方块_1” 的触发标签。

移动一体化用于 鼠标拖拽时,能被整体拖拽移动。
触发一体化用于 鼠标接近方块后,可以点亮方块。
另外,事件进行一体化绑定后,与它所在的位置没有关系。
也就是说,即使两个事件距离很远,也能同步移动、朝向、触发一体化。

注意,多个一体化事件中通常都只留一个动力源,
因为存在多个动力源时,会出现谁决定如何移动的问题。


===华容道 - 注意事项===
方块复制注意
使用事件一体化插件,可以使得多个方块组可以划分成一个群体。
复制多个方块时,要注意修改以下设置:
1.行走图
2.事件一体化标签
3.重力钥匙
作者在制作华容道关卡时,主要工作量都在这些方块标签“华容道_第xx关”的修改上,因为要确保这些方块为一个整体,又不能与其他方块错误绑定到一起。


===华容道 - 常见问题(FAQ)===
重力开关占了体积,方块拖不进去
| 问题名称 | 重力开关占了体积,方块拖不进去 |
| 问题图示 | ![]() |
| 问题描述 | 新工程中,拖动方块后,发现拖不进去。 |
| 出现时机 | > 新工程单独复制就出问题。> 示例中复制的事件就没问题。 |
| 原理解析 | 原游戏底层有个设定,就是事件一定会被其他事件阻塞。事件即使“在人物下方”,也会被其他事件阻塞,但不会阻塞玩家。后来作者我可能在 事件穿透关系插件、通行插件 中修改了规则,只有“与人物相同”才会阻塞。这就导致了如果没加那个插件,事件就会被事件阻塞。 |
| 解决方案 | **不需要加额外插件,属于纯粹设计失误。****既然重力开关会阻塞,那么我在事件页中,勾选穿透就行了。**重力开关的全部事件页,设置穿透。![]() ![]() |


