分类调试中
快捷导航

如何生成一个「有趣」的rougelike地牢

4
回复
265
查看
[复制链接]

该用户从未签到

22

主题

22

帖子

1729

积分

Test组

Rank: 7Rank: 7Rank: 7Rank: 7

积分
1729
发表于 2020-2-18 02:49:21 | 显示全部楼层 |阅读模式
游戏开发
类别: 理论研究&设计思路 
前言
  本文主要是基于下文的翻译,有自己的一些小改动。该文的主要内容是关于程序自动生成地牢的算法介绍,但你也可以从中学习到一些设计概念。
Creating Measurably "Fun" Maps​www.roguebasin.com基础观点
问:是什么造成了地牢关卡不够有趣?
答:玩家在大量区域都未探索的情况下就能通关地牢。这意味着玩家无需挑战与抉择就可以规避大部分的怪物、陷阱等地牢中设计的障碍;也可以说玩家抵达了地牢的终点,却没有付出太多的代价。
(译者注:这个观点的前提是游戏设计的机制本身是有趣的,只是程序自动生成的关卡不够完善,从而导致玩家没有办法充分体验机制。)
  为了预防这个问题,我们认为玩家必须对地牢进行了一定的程度的探索后才能通关。这也是我们生成的地牢所要达到的目标。
理论准备
  下面是作者为他的游戏ADND设计的一套任务型地牢的生成算法。要实现这个算法,需要基础的图论知识(离散数学了解一下),还需要了解Dijkstra最短路径(DSP)算法。
  我们会把地牢视为一个无向图,每一个房间是一个节点,两个房间的连接我们称之为边。那么给一组起点房间与终点房间的(x, y)坐标,DSP算法即可返回从(x_start, y_start)到(x_end, y_end)最短路径的(x, y)坐标数组(如果最短路径存在的话)。这是我们实现地牢生成算法的有效工具。
  掌握了这些,我们就可以开始生成地牢啦~
地牢生成算法
(译者注:作者这里的算法其实是对一个已生成好的地牢进行一些处理,使其变的「有趣」。如果想对地牢生成从0开始研究的,可以看文末的延伸阅读部分。)
  通常来说,地牢的起点房间是一个洞穴入口、楼梯或者无论什么适合让玩家开始的地方,而终点房间由你自己定义。我们首要先做的操作就是连接地牢的起点与终点,通过DSP连接这两个房间,你会得到一条路径(起点到终点经过最少房间的路径,也就是最短路径)。那么此时就有了两类节点(作者在这里就开始统一用了节点这个词,为了便于理解,这里再次强调,地牢里的每一个房间就是一个节点):一类是在该路径上的节点,我们称之为路径节点(所谓必经之路);另一类是不在该路径上的节点,我们称之为无意义节点。这里的关键就是如何处理无意义节点,使得玩家想要或者不得不去探索它们,从而把这些无意义节点转化成路径节点。
v2-5fba0a114fa019cd7545b603e5ee5d67_r.jpg
黄色即为路径节点,蓝色的为无意义节点
  其实有很多方法来解决无意义节点的问题,但在这之前,你要把无意义节点进行分组,使它们变成一片片无意义区域。一片无意义区域是指在没有穿过任何路径节点前提下,所有可以互相到达的无意义节点的集合。例如你的地牢是一个正方形,起点在左下角,目标点在右上角,那么路径就是从左至右的一条对角线,无意义区域有两个,分别是对角线上方的三角形和对角线下方的三角形。
v2-8ab90fa9ab9973878ffaa76d86b7f474_r.jpg
两个灰色部分即可视为两个无意义区域
  不管怎样,只要循环执行以下操作,直到所有无意义区域里的无意义节点小于自己设置的阈值即可达到我们的目的。
  1. 选择一个最大的无意义区域(无意义节点最多的区域)
  2. 通过以下流程来处理这些无意义区域。
a. 选择离任何路径节点距离最远的一个节点(以下称为P点)。
b. 执行下列任意一个操作。
      i. 根据无意义区域的大小,放置一个小型、中型或大型的奖励在P点上。
     ii. 选择路径上的一个毗连该无意义区域的节点,用门挡住该路径。把钥匙放在P点上。(门与钥匙可以替换为其他包装)
    iii. 如果该无意义区域非常小,可以直接标记为「已处理」而不做任何处理。
    iv. 在房间里放置一个令人讨厌的陷阱或者其他可以转移注意力的元素,以保持玩家对地牢的未知感。
c. 从地牢的起点到终点重新计算路径,这样会第一次访问到「已处理」的节点,也得到了新的路径节点列表,同时自然要将这些节点从无意义节点列表里移除。
  3. 重新计算无意义区域,并按大小排序。
  4. 如前所述,如果最大的无意义区域里包含的无意义节点的数量小于阈值,算法结束。



v2-3ec184de11e46a7ab33dc9843b1da446_ipico.jpg
回复

使用道具 举报

  • TA的每日心情
    开心
    2020-3-6 16:57
  • 0

    主题

    8

    帖子

    73

    积分

    骑士

    Rank: 8Rank: 8

    积分
    73
    发表于 2020-2-18 10:09:12 | 显示全部楼层
    66666666666666
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:26
  • 0

    主题

    145

    帖子

    667

    积分

    圣殿骑士

    Rank: 36Rank: 36Rank: 36

    积分
    667
    发表于 2020-2-27 11:14:26 | 显示全部楼层
    这个怎么玩!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    19

    积分

    云游的佣兵

    Rank: 3Rank: 3Rank: 3

    积分
    19
    发表于 2020-3-27 09:59:42 | 显示全部楼层
    很有启发,谢谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    可爱
    7 天前
  • 1

    主题

    17

    帖子

    62

    积分

    潇洒的战士

    Rank: 5Rank: 5

    积分
    62
    发表于 7 天前 | 显示全部楼层
    6666666666666666666666
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    更多+

    最新信息

    更多+
    Copyright  © 2015-2016  gamesoho虚幻独立游戏开发  Powered   by  Discuz!  技术支持:gamesoho    ( 豫ICP备12009821号-1 )