波函数坍缩算法的简陋实现

Posted by wyj on June 27, 2019

这个名字超级高大上的算法实际上只是用来生成一张随机地图使用的。我参考这个知乎网页进行了时实现。可惜效果比Github上别人家的效果差很多。

这个游戏是波函数坍缩算法的实例。我才知道在ubuntu中居然存在可以双击运行的程序。觉得Unity引擎是个挺有趣的东西,以后打算了解一下。

这是我在回班准备期末考试之前就写完了的,然而文化课太忙了(我太懒了)所以没有加入git仓库以及写博客。

当时实现就有一些小bug。知乎上说这个算法成功的概率极大,然而我一次都没有成功过。我不知道是哪里写错了,也难以把程序改成回溯的,所以只好在出错的时候硬着头皮continue。

由于网上没有写明细节,也看不懂别人的代码(不是C、C++、Pascal、Python中任何一种),我只好自己yy。用了hash、zkw线段树等等简单算法维护,跑得还算快,100×100的图,“重合度”为5的时候也只要一秒不到。可惜效果真的和人家有着天壤之别。

下面是别人的效果 别人的效果

因为我依旧不会读png,我主要是如此实验的:

wget https://raw.githubusercontent.com/mxgmn/WaveFunctionCollapse/master/samples/???.png
convert ???.png 1.ppm
rm ???.png
./1 <<< "100 100"
convert 2.ppm ???_k.png

下面就是我一个一个尝试下来的效果(懒得用sm.ms了):

源码在此