The Witness/Puzzle Set
\(\text{Special For The Witness}\)
简介
说实话这个版块是对于\(\text{The Witness}\)这一游戏的致敬,
这个游戏已经被我玩到可以半天做到全收集(除去那个时间最长的环境谜题),但还是忍不住()
只为它给我带来的强烈的思维和视觉的双重冲击,让我体验到什么才真正可以被称作“第九艺术”。
不论是整个游戏的画质还是其中谜题的质感都让我回味无穷,
特别是特殊环境谜题的出现令人惊喜万分,最起码让我震惊了一整天。
由于个人技术有限不会3D建模还不会设置声音,并且时间精力有限,只能还原游戏中的简单方阵谜题了。
基本规则
这个游戏实质就是寻找图上路径,要求:
- 这个路径不重复经过点,从大圆开始,到图中的圆弧端点结束。
- 这个路径只能按照原来与背景色不同的地方行走(中断处不可走)。
- 路径必须经过所有的小六边形。
接下来的规则略有抽象,为了方便讲解,我们定义连通块:
连通块是由若干小正方形(即网格的最小正方形)组成的(不含小正方形的边框),由玩家所走的路径与网格最外层边框围成的不规则多边形。
如图,不同颜色表示不同的连通块。
- 圆角矩形所在的连通块内部不可以出现不同颜色的图形
- 八角形的同一个连通块内必须有且仅有一个相同颜色的图形
- 矩阵方格中三角形块的数量表示其所在的矩阵方格被路径经过的边数
- 三角叉可以消除存在于同一连通块内部的一个错误,但是仅限一个。
接下来是最复杂的俄罗斯方块图形的规则: - 正立的实心俄罗斯方块图形表示其所在连通块必须与其成形状一致,方向一致的图形。
- 若一个连通块内部有多个实心俄罗斯方块图形,这个连通块必须是这些俄罗斯方块可以通过平移后组合得到的图形,要求形状方向一致但是不要求每个俄罗斯方块图形位于该连通块按照图形划分后对应的位置。
如图,图一和图二不符合规则,图三符合规则。
- 若某一个实心俄罗斯方块图形是倾斜的,那可以在上述(8)(9)规则的平移条件下可以扩充旋转,但是只限于此图形。
- 若连通块内部有空心俄罗斯方块图形,这表示减法,要从你组合得到的图形中减去对应的一块,空心俄罗斯方块图形也有倾斜规则,类似于实心俄罗斯方块图形。
- 实心俄罗斯方块图形的组合可以存在重叠,但是俄罗斯方块图形最后组成的图形不可以存在多层。
补充
有一说一,上面的内容真的只是一小点部分,真正的游戏把整个游戏进行的小岛分为了11个部分,对应的玩法如下:
雨林 环境:声音谜题(多色六边形)
树林 环境:树荫谜题
工厂 三角叉:教学
渔屋 镜像:特殊的谜题盘面(轴对称和重心对称)
沙漠 环境:太阳反光
树屋 八角形:教学+复习(全游臭名昭著的最大题量题库)
工厂 俄罗斯:教学
温室 环境:有色光,有色玻璃
神庙 环境:树枝,遮盖
城堡 环境:混合体(包括声音,虚实,遮盖)
城市 混合:应有尽有
当然这只是一个大概,你可能想象不到具体的内容是什么样的,那我给你描述一下。
有想过给你一个题版上没有任何图形提示的有唯一答案的谜题吗?
在雨林,树林,渔屋,沙漠,神庙,城堡,城市,到处是这样的题板。
那怎么做呢?(注意,下面是剧透,想自己体验的最好先不看)
具体内容(剧透)
在雨林,你要听鸟叫和狼嚎的高低长短判断答案。在树林,题版上树叶的影子告诉你虚假,树枝引导正确的方向
在沙漠,经过太阳反光后得以看到的黑色碳痕告诉你答案。
在温室,经过有色玻璃的有色光过滤掉了进入你眼中的虚假颜色。
在神庙,树枝会叉除你错误的边,又或是间接点明答案的路径。
总而言之,没有脑洞或是没有脑子,都很难把这个游戏玩通。
顺带一提,好像至今没人找到开发者所说的所有一共\(621\)个谜题。
但是最有趣的还在于环境谜题,这是玩这个游戏的人大概率会提到的,所谓“\(\text{Witness后遗症}\)”的直接诱因。
想象在树之间,石缝中,幕帘后,水面中,突破了题版的谜题答案。
游戏中坐落着黑色的黑曜石柱。当你收集完这个柱子上囊括的所有环境谜题的话,他会变成白色。
游戏中还有留声机部分,需要在两首歌时间内解决\(14\)道随机谜题,打开一个隐藏谜题。
游戏中还有风车下有着\(6\)个视频的剧院,解开视频的解码藏在游戏各处。
游戏中还有诸多录音笔,和那些视频一起解释着游戏创始人\(\text{Jonathan}\)所想要表达的东西——
这些就请自己了解吧。
具体谜题内容
规则请参考基本规则部分
提示:以下所有的谜题图片都出自我自己写的C++程序,程序基于\(\text{EasyX}\)实现
可能之后会实现一个C++版的\(\text{The Witness}\)自定义谜题游玩器。
\(\text{W1}\)
C++谜题游玩器外传
哈哈哈哈哈哈哈哈哈哈哈
原来我是一个小丑,连 \(\text{The Witness}\) 的俄罗斯方块部分都写不出。/kk/kk/kk
整个代码架构在DevC++和EasyX上面,每次编译都需要编译10s甚至更多
如果暴力关程序还会卡()
拖动最旁边的查看类的边栏已经会闪了()
当前进度
就贴一张图
实现思路
在这里稍微写一点开发过程(啊对对对写这个东西就是为了在模拟赛断网期间开車)
- 2022.8.9 脑子一热开了EasyX并且开始画Witness里面的图形
写了画出指定位置,指定大小的六边形,圆角矩形,八角形,三角叉的函数
也就是Draw_importer
,Draw_racist
,Draw_friend
,Draw_misser
- 2023.3.14 发现原来自己的U盘里有一个文件叫Witness.cpp的文件
- 2023.3. 停课期间(
划大水)
调题调完调Witness,调完Witness又调题,心态最容易炸的一段时间。
把画三角形的Draw_traingle
补上了,还把画出断路了那个Draw_Blocker
给写了
前前后后把画棋盘的过程给写了,多写了Draw_Starter
和Draw_Ender
就是上面那个参数很多的那一个Draw_Board
然后写了一个可以画谜题的Draw_puzzle
,就是上面更多参数的那一个
为了美观又写了一堆的颜色函数
例如为了实现线路的渐隐写了Moveto
和similiar
还为了区别一些情况写了Darker
和Brighter
还为了看出了什么Bug写了一个Out
更有为了显示错误写了waver
整个过程中为了方面直接调整谜题样式写了一个Did
最后写了一个Check
来检查答案是否合法
为了写这个还补了一个bfs_for_connecter
不合法的情况用WrongShowing
和主函数里的一堆东西实现了
写到这了我的棋盘表达形式还是int
结果我在想到我还要写俄罗斯方块图形的时候心态就炸了。。。
尝试写一个part
的结构体进行补救,没有成功。
后面还是决定再学习一下鼠标操作,
然后把Puzzle设置的过程放在程序里罢。
现在只有短短20K
隔壁的Echo_Invisible写东方都已经50K了()
\(\text{Special for Puzzle}\)
还是开一块来记录一下谜题的出题过程,属于是有感而发。
M1
经典的二进制+数字字母代换
M2
经典LightUp
如果有多解请通知我(在下方评论)
M3
经典数独
算是最离谱的故事之一
一开始出了数独,就直接拿洛谷的板子拿来跑了,只是多写了一个checker
然后!我!写挂了!
写到纸质小说上后被 FWX , SYH 和 DY 三个人Successfully Hacked了(别问,问就是同学)
因为有一组5和一组7是不符合条件的,发现原因是没有最后在全部检查一次/fad/fad/fad
然后改了代码,80%没有/jk/jk/jk
然后开始怀疑不存在,但是可是就是……我低估了数独的数量
如果将(数独的)等价终盘(如旋转、翻转、行行对换,数字对换等变形)不计算,则有5,472,730,538个组合
——Saying by 百度百科
开始询问会五科竞赛的教练(?)和同学
甚至有人拿Chat97整了个活。。。
然后甚至在你谷发了一个贴子
最后发现 OI 里面还有一个东西叫做 DLX(为什么只有我每次都叫成DXL)
拿自己的远古代码过来随手跑了一下就在一秒内出结果了。
后面有同学问我一共有几种,
所以那时尽管我现在在写Blog但是后台还在跑Witness(??)和那个exe
截止2023/3/30 18:18时:(上面一个是解的个数,下面是以毫秒为单位的DLX的dance()
时间)
还是我太逊了/kk/kk/kk
M4
我去我居然会手出LITS了!
简单题,有多解请通知我
M5
我去我会出题了!(尽管是道孬题(bushi))
一开始是一道水箱
后面是好似 Puzzle Hunt 的提取题?
文中还有(一个刻着国际象棋的两个同色的马的)(底部刻着"mutual,protection"的)小盒子作为提示