【关于地图生成的研究笔记】简单路径 / Simple Route
生成规则:确定起始点后,随机选一个方向进行访问,然后重复以上循环。我加了个条件,不会出现反方向访问的情况,打个比方,如果它前一步是往右走,那下一步就不能往左走了。(说到左右,我想推荐一下《遇见(钢琴版)》这首歌,它是《向左走向右走》的主题曲,我觉得挺好听(但是你不一定这么认为))
允许重复访问相同的Grid。没有停止生成的条件。
如图(没有双缓冲,屏幕反复刷新,闪屏严重,因此我缩小了尺寸,加上了一个Sleep(),勉强截到一张)

决定还是循环一定次数后再进行渲染,不过不知道是哪里写错了,还是随机数生成器有问题,这次它给了我一个可爱的圈:

我觉得问题应该出在这儿,由于CPU实在太快导致返回的非精确时间都是相同的值:

所以我修改了一下种子,令我惊喜的是,这样简单的一个算法返回了只要修改种子就能返回许多神奇的图案:



然后,我在UP和DOWN上加上了visited检测,但是没有在LEFT和RIGHT上加:

更改seed为std::clock()*ran_num+std::cos(ran_num+4)+std::sin(ran_num)后结果更加有趣了:


代码已经上传至github,你可以修改里面的参数编译,然后查看效果,注意每个循环后面的Sleep()的参数不要超过3,因为每次加1你可能都要因此等待二三十秒才能出结果。
还有,要想生成不同的图案,你必须修改种子然后重新编译,抱歉,可能会花费额外的3-6秒钟,但是我目前还没有想到解决方案使随机数生成器不完全依赖时间。
(感想:突然感觉有机生命体的产生没这么偶然了。。对了,说到有机,今天老师开始上有机化学了!看药品说明书的时候终于看得懂键线式了)
祝我自己生日快乐吧,今天是我存在于这个世界上的第16年!
还有一件事,明天我如果有时间的话会研究一下迷宫生成,初步打算是使用深度优先算法和随机Prim算法实现。
------------------------------------------------------------------------------以下内容写于2019/3/2 17:28
现在每次循环结束只渲染更新的部分,所以不会闪屏了,即使不用Sleep也是如丝般顺滑(每个循环之间时间<=60ms),对于我这样的人类来说足够了。
顺便展示下,一样东西失去控制时的样子:

它在1s之内就几乎填满了40x40的区域!

浙公网安备 33010602011771号