好家伙,1行代码搞定,又火一个...

MarkovJunior是一个概率编程语言,基于马尔科夫算法能随机生成不重复的迷宫、地形图甚至3D建筑。只需指定规则,它就能创建各种模型,为游戏开发提供无限可能。开发者Maxim Gumin将数学算法应用于程序化生成,使得每个迷宫都是独一无二的。
摘要由CSDN通过智能技术生成

转自:量子位 萧箫 | 编辑:JackCui

探索游戏中的迷宫很有趣,然而玩多了就没啥“新鲜感”了?

没错,如果游戏迷宫差别不大,时间一久就容易熟悉地图,降低了探索的乐趣。

现在,一个“横空出现”的概率编程语言MarkovJunior解决了这一问题:

利用马尔科夫算法,随机生成批量迷宫,没有一个是重复的,你永远也不知道玩到的下一个迷宫长什么样子:

a4184ce7d51c6000c2cbfea5bfa6c492.gif

不仅是2D迷宫,就连需要搭建好几层地图的3D迷宫,也能随机生成:

035c23f3bdbb9c0b0031c50f7e351f54.gif

这个项目一出,立刻上了GitHub热榜,目前已经收获4.1k Star。

f6add765f2ebe4927ddd3a811c0ccd64.png

利用这个编程语言就能直接给RPG游戏或动作游戏生成建筑了。

mc玩家狂喜。

基于马尔科夫算法构造

据作者介绍,这套概率编程语言借鉴了马尔科夫算法(Markov algorithms)。

(MarkovJunior这个名字,也是以提出马尔科夫算法的数学家Andrey Markov命名)

具体来说,这套概率编程语言由一系列特定规则(Rewrite Rules,重写规则)组成,是一个有序列表。

它在生成一个(迷宫)模型的过程中,会利用马尔科夫算法实现“随机生成”,再通过制定一系列特定规则,决定生成模型的类别,例如是迷宫、地形图,还是电路图等。

马尔科夫链具有“无记忆”性质,即下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。

所以,这些特定规则究竟长啥样?

例如,一个最简单的规则,就是将“黑色”色块重写为“白色”色块,直到最终填满整个模型:

baa2f0818cf54c579197f7f48ff32849.gif

又例如,执行将“白-黑”色块重写为“白-白”色块的规则,结合马尔科夫算法,就能得到一个概率生成模型:

9f4a36e89ec053cefc240d1c46c66e8b.gif

再例如,基于“推箱子游戏”的规则。

25a5f4af02caf52a9da6143e1bd76e75.gif
推箱子游戏

就能用这批小红点随机将白色方块“搬运”到指定地点:

5c4feb99b862543902cf55f6467a6939.gif

像这样的特定规则还有很多,都包含在MarkovJunior中。

那么,我们究竟要怎么利用这些规则,来生成一个随机(迷宫、电路图等)模型呢?

2D/3D迷宫、地形图和电路图都能画

先以随机生成一个2D迷宫为例:

6b259d489ba67908cb0011b920a69c78.gif

从图片中来看,这个迷宫算法会自动生成一个“起始点”红点,在一块黑色地图中随机探索并重写路径,最终填满整个地图,完成一个有始有终、也有分岔口的“迷宫”。

这样的随机迷宫,MarkovJunior随手就能做出一大把,只需要基于两个规则:

第一个规则,将“红-黑-黑”色块随机重写为“绿-绿-红”色块。

4a77c542cd9dfc441841a5c95ef50d2f.png

第二个规则,在第一个规则被“卡住”,也就是没有符合条件的可选项时,自动执行将“红-绿-绿”色块随机重写为“白-白-红”色块。

66c4464787b37d1515f47f40d6e25527.png

这样一来,算法就能通过第一个规则生成随机路径,并通过第二个规则回溯还没有经过的路径、生成岔路口,最终遍历整个黑色地图,生成一套“2D迷宫”。

还有更简单的思路,将所有“白-黑-黑”替换成“白-A-白”,其中A是一个中间态,不作为起点,在迷宫生成完成后被替换为白色。

0939b42e56947ac6b453dca10beb7326.gif

据作者表示,利用这个规则,1行代码就能随机生成2D或3D迷宫。

86e431006745895200051352a2a354f5.png

基于这样的思路,换套规则组合方法,还能生成随机地形图

例如,试图生成一块河流地形图,就只需要利用上面的生成模型方法,再添加一些其他的重写规则,就能搞出一个随机河流图来:

badb7d1b08d24a182c72a5cdceefa0a6.gif

除了地形图、简单的2D/3D迷宫,更复杂的3D建筑也能搞定,只需要在两层2D“迷宫”之间的随机位置生成一批“楼梯”:

65387242ea60992862d90a782ba4aedc.gif

嗯,连电路图都能画……

3467d1561a99e9b32046cdd4ba84533e.gif

据作者介绍,只要灵活运用这些规则,就能用MarkovJunior随机生成各种各样的建筑和图画。

ab89a527fbba55ee8de5c10640731026.png

非常好用。

这个概率编程语言的作者Maxim Gumin,是一名独立游戏开发者。

从他的GitHub来看,这些年他一直专注于将各种数学算法应用于程序化生成中,做出各种有意思的模型。

说不定你玩过的游戏中,有一些已经用过他开发的算法了。

项目地址:

https://github.com/mxgmn/MarkovJunior

25c4151d1547c03610b6528c7dc43dd3.gif

·················END·················

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值