这个游戏起源于我去西班牙度假时,为了消磨时间而写的一个生成器。由于我大部分时间都在卧床上,唯一的消遣是那些逻辑谜题书。虽然我很喜欢它们,但书本有限制,80个案件之后就结束了,而且纸张无法实现我一直渴望的功能:让我能够测试一个假设并回溯。

在休息时,我开始写一个生成器,作为一个练习,来看看是否可以生成不受纸张限制的案件。

技术陷阱原来是最有趣的部分,所以我先来说说。

引擎。每个案件都是程序生成的,然后证明有一个逻辑上的唯一解。解决方案是一个位图约束引擎:每个嫌疑人的可能位置是一个位图,证词编译成一元和二元约束,一个回溯计数器验证唯一性。但是,唯一性还不够——一个谜题可以是唯一的,但仍然令人沮丧——所以另一个,人类风格的解决方案重新演绎案件,只使用传播加“假设”轮,案件难度的等级由它所需的轮数决定。初学者案件必须使用零假设解决;专家案件则故意选择需要几个假设。生成的案件如果不在难度范围内,就会被丢弃并重新生成。

狡猾的家伙。更难的案件添加一个同伙:一个嫌疑人,每个说词都是假的。生成这些案件意味着证明在“信任哪个证词集”的空间中唯一性——引擎验证了只有一个选择的同伙才能产生唯一的解,所以工作出在撒谎本身就是一个推理,而不是猜测。一些案件也需要谋杀的动机,而不仅仅是嫌疑人的名字。

即使装饰也是验证的。装饰景色是生成器放置的真实障碍——并且每个障碍都是经过试验的:放置、重新解决并保留,只要难度不变。书架永远不会被允许不小心将难度从高变成中等。

后端,因为我无法自制。它在两大洲的自己的机器上运行——Postgres有备份,Cloudflare的免费计划提供地理感知路由(一个主机名技巧,因为免费计划无法根据地理位置路由),自愈部署通过私有的npm注册表发送,发送版本包。~90个自动化测试将每个版本的发布阻塞。对流量的流量过大,实际上是这个游戏的一部分。

如何玩:你会得到一个地图,一个角色表和每个嫌疑人的一个证词——“她在钢琴的同一列”、“他在花园者下三行”。将每个人放在正确的位置,直到只有一个人可能独自一人与受害者在一起。点击一个证词,地图会将它所排除的区域突出。有铅笔标记,一个“假设”模式,让你放置一个整个假设行,并确认或丢弃它——纸张无法实现的东西。

有关数字,感兴趣的人:每天共享10个案件,从5×5的初学者到10×9的专家,涵盖23个手绘犯罪现场,在15种语言中可玩(我是西班牙人,所以包括加泰罗尼亚语,瓦伦西亚语,加利西亚语和巴斯克语)。还有可打印的案件单,如果你是一个铅笔人。它在浏览器中免费使用,无需下载,无需账号。

玩游戏:https://kludoku.com

我真心希望这个社区能够为这个游戏提供反馈:玩几个案件并告诉我什么会打破什么会不公平。难度曲线,证词措辞,同伙案件是否像推理一样或像掷骰子一样——任何东西都行。快速修复,通常是同一天。快来玩吧!