设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

自动生成的迷宫

查看数: 6709 | 评论数: 19 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-10 15:24

正文摘要:

本帖最后由 guoxiaomi 于 2022-6-10 00:47 编辑 v0.6.2版本下载:https://7niu.gxmatmars.com/p1/pyramid_v0.6.2.zip 演示视频:https://www.bilibili.com/video/BV115411h7nd 最近开了个新坑,唯一的打怪地图是 ...

回复

guoxiaomi 发表于 2020-6-29 21:53:19
v0.5.2版本发布!新增了一些迷宫的事件,并且优化了存档结构。迷宫的核心框架应该不会大改了,接下来就要安心做数值,设计各种道具、装备和任务……

下载地址(未脱离RTP):pyramid-0.5.2.zip

再稍微做几个版本就发到游戏发布区吧……
guoxiaomi 发表于 2020-6-21 16:32:31
现在你可以在迷宫里打奶奶了:

未来大致会按照这种思路去设计装备、怪物和迷宫房间的事件,总之现在应该难度比较低,有兴趣可以下载一试:pyramid-0.3.1.zip
guoxiaomi 发表于 2020-5-27 05:16:48
本帖最后由 guoxiaomi 于 2020-5-27 05:43 编辑
九夜神尊 发表于 2020-5-26 23:11
重要的一个理论,就是倒过来生成。
当你生成一个最小单元的迷宫后,再增加时,只需要确认在原基础上增加图 ...


大概理解了你的想法。这就跟数独游戏一样,首先要创建一个填好的数独,然后一步一步的从里面移除一些数字,最终成为一个有一定难度的数独谜题。我称这个为谜题的“逆向设计”,这是一个很自然的方案,但个人认为这个方案的有自己的适用范围。

因为“逆向设计”有 2 个缺点:
其一,是难以控制问题的难度,因为这个思路只能保证“有解”,却难以保证是“唯一解”或者是“最优解”。举2个例子:比如游戏是还原魔方,从拼好的魔方一步步随机打乱,比如...20步吧。然而这个谜题的真实难度远不止20步就能解决的,套用常见的魔方公式通常需要上百步才能还原,而不懂魔方的人甚至会无法解决此问题。再比如,非单连通的迷宫里有门和钥匙。从迷宫的深处出发,依次执行关门,放钥匙,去关另一个门,放另一个钥匙...的行动。但由于迷宫里的房间有多个门,可能存在一条巧妙的路径,可以不用上全部的钥匙就能打开最终的宝箱。

其二,效率的问题,如果要尝试逆向模拟角色的行为,实现起来思路会比“正向设计”更复杂。参见https://rpg.blue/thread-481929-1-1.html十字分割算法就是典型的“正向设计”,而深度优先遍历算法就有一点“逆向设计”的味道了。在生成巨大迷宫的时候,两者的执行效率天差地别。

所以这里我还是想说说如何做“正向设计”。根据我们现有的数学知识,可以知道有些谜题是可解的,并且难度可控。比如R7里的拼图谜题。在初始结构的逆序数和结尾的逆序数相同的时候,谜题一定有解(反之则无),而解决谜题的方法只需要从左上角一行一列的拼起来慢慢做就行了。再比如常见的猜数字游戏,这个游戏也被认为是难度可控。汉诺塔也算一个吧。难度再高一点的,比如扫雷,扫雷也是正向设计的谜题,并且有一定的概率无解(要靠蒙)。(纸牌可能就不是正向设计的谜题了,因为随机搞一个常常无解,寻找生成有解方案的算法,可能不如逆向设计来的快。)

当然,很多这样的谜题都只能以小游戏的形式出现,因为其结构太“数学”而不适合成为RPG世界的“任务”,但是如果能找到适用的场景,正向设计会更简单可控。

总结我对逆向设计的看法:逆向设计只在以下情况下适用——谜题的解较少或者唯一

最后提一个正向设计的idea,我设计了一个哥德巴赫赌博机,当你投入X硬币的时候,它会随机加码X-2X的硬币,并告诉你总硬币是Z(偶数),然后你宣称将获得的收益是P个硬币,如果P和Z-P都是素数,你就可以拿走P个硬币,否则就是0收益。根据哥德巴赫猜想,这个素数P是一定存在的。至于你赚不赚得到钱,就凭你的本事了。
九夜神尊 发表于 2020-5-26 23:11:54
重要的一个理论,就是倒过来生成。
当你生成一个最小单元的迷宫后,再增加时,只需要确认在原基础上增加图块后也合理即可,这样使用归纳法,可以确定最终的迷宫也合理。
例如随机推箱子地图,先随机出地图,目标,箱子。箱子在目标上然后随机移动一个箱子,只要移动后的箱子可以被还原,那当前地图就合理,继续移动,只要每次移动都合理,那么最终的地图就一定合理。

添加钥匙,开关,解锁等谜题的思路也一样,不过这时候不是随机移动了,是随机触发事件。
你需要一个侦察兵功能的对象,就是根据当前的状态,所有能探寻到的地方,然后逆向随机生成谜题,只要确认上一次状态合理,这一次状态可以回到上一次状态,那么生成的地图最终是合理的。
b565185756 发表于 2020-5-26 21:59:46
感觉可以做成一个自动扫地走迷宫,但是不需要玩家任何操作,只是静静的看着他走到多少层,因为是无限生成,所以可以一直走到999999999999999999999999999999层,反正挂机就行了。

点评

可怕的郭兄大人!!!  发表于 2020-5-27 09:32
战斗会跟魔塔类似不进入战斗场景,而是碰一下就自动出结果,跟6R群侠传那种一样,输出一个日志  发表于 2020-5-27 04:42
当然手动也是可以的,但如果加入魔塔的战斗的话说不定才会有动力0.0  发表于 2020-5-27 04:34
因为上下楼梯的门是随机对应的,所以一定会回到起点,我上次测试了一下最高到了13层,不过如果运气好说不定可以999呢  发表于 2020-5-26 22:10
SailCat 发表于 2020-5-26 01:27:07

点评

说句实话,我一点也不喜欢这个迷宫生成算法……看看生成的都是啥形状,顺便吐槽一下VA的90X90复杂度到XP里要120X150的图才放的下……  发表于 2020-5-26 01:28
guoxiaomi 发表于 2020-5-25 16:06:37
本帖最后由 guoxiaomi 于 2020-5-25 17:29 编辑

自动生成迷宫的demo:http://7niu.gxmatmars.com/p1/pyramid-0.1.zip

这个版本应该是没有扫地机器人,墙壁也是同一个格子,缓存和效率都不理想,但是自动生成迷宫的核心代码基本定型了。

现在在写迷宫里的战斗,然后还要结合战斗做一些宝箱/敌人/房间的设计。等全部做完了就开源工程吧~

素材都是steam上买的,所以不能拿去用……
if216 发表于 2020-5-25 08:07:36
代码和demo不拿出来贡献或者卖吗?

点评

我估计只是一个demo大家应该是没兴趣的,所以还是把整个游戏做完再发布?  发表于 2020-5-25 14:48
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-28 19:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表