【问题标题】:How to randomly create a fair maze for a multiplayer game?如何为多人游戏随机创建一个公平的迷宫?
【发布时间】:2019-02-15 02:16:42
【问题描述】:

[最后更新了我的问题] 我正在创建一个发生在迷宫内的 2d 多人 RTS 游戏。我使用Growing Tree algorithm 随机生成迷宫。我认为迷宫对每个团队来说都是公平,只要每个团队解决迷宫的最短路径与另一个团队相同。我通过在我的游戏中制定一条规则来确保这一点,该规则规定每支球队的起点都是另一支球队的终点,反之亦然,因此最短路径对于两支球队来说总是相等的。但在实践中,我注意到了别的东西。

当我尝试使用 solution,特别是 @tobias-k 的答案将由此产生的完美迷宫变成非完美迷宫时,我突然想到了这个问题。

如果您已经有一个从开始到目标的单一路径形式的迷宫,请使用此变体:

  • 从起点和终点进行广度优先搜索,并为迷宫中的每个单元格记录该单元格离开的步数 从起点到目标。

  • 通过将所有靠近起点的单元格放入起点组和所有靠近目标的单元格来细分迷宫 进入目标设定。

  • 移除两个区域之间的墙以添加从起点到目标的额外路径。

生成的路径可能在 常见,但它们应该是从开始到目标的唯一无循环路径。 这是第一种情况的说明:

根据每个单元格距离分离迷宫的结果 从起点或终点

但是,当我使用 BFS 计算从起点到终点的所有距离时,并且在移除一堵墙以创建一个不完美的迷宫之前,我大多会得到这样的结果:

在这张图片中,336 个单元格距离红队起点较近,只有 105 个单元格距离蓝队起点较近。 即使移除这两个部分之间的一堵墙(或不止一堵墙)也无济于事。

我的游戏是关于收集随机分布在迷宫中的宝藏并在另一队退出迷宫之前离开,这样产生的迷宫是完全不公平的,因为它让一个团队有更高的机会更快地到达迷宫中的更多宝藏与其他球队相比。

所以我的问题是:

  1. 上面提到的生长树迷宫生成器的结果是否意味着迷宫对于多人游戏不公平(为简单起见,让我们假设游戏发生在两个玩家之间)?
  2. 我是否需要将我的迷宫生成器更改为产生均匀纹理的东西,例如 Wilson 或 Aldous-Broder 算法? (这是基于Astrolog引入的算法)
  3. @btilly 建议使用对称迷宫来解决迷宫公平的问题,但现在我不得不问哪一个可以保证创建公平的随机迷宫:对称方法(like the one proposed in this article 或制服一个(比如Wilson's algorithm)?

【问题讨论】:

  • 这与编程没有直接关系。我认为你最好在MathGameDevelopment 上问这个问题
  • 也许尝试用棋盘的对角线一半生成一个迷宫,然后为其他团队复制它
  • @derHugo 感谢您的建议。我实际上考虑过 GameDev 堆栈交换,但我从未想到过数学。我是新手,不知道是否允许或不赞成在另一个堆栈交换站点上提出相同的问题。我该怎么办?
  • 其实我也不清楚使用in need of moderator intervention 提出自己的问题,并请推动者将您的问题转移到另一个社区。​​span>
  • 我投票决定将此问题作为离题结束,因为它与编程没有直接关系。

标签: algorithm graph language-agnostic maze


【解决方案1】:

一种解决方案是构建一个旋转对称的迷宫。从两端开始,成长,同时成长。然后当你填满东西后,打开一堵墙,使其与另一侧的长度接近。

现在您将拥有一个迷宫,两支队伍的路径长度相同,机会非常、非常公平。

【讨论】:

  • 感谢您的回复。我现在有两个关于对称迷宫的资源,一个是 Astrolog,它定义了对称迷宫,另一个是 this article on Algorithms for making more interesting mazes,它建议使用 Prim 算法的修改版本来创建对称迷宫。但是我的问题已经演变成这样:哪一个可以保证创建一个公平的随机迷宫:对称方法还是统一方法?
  • 您对我提出的问题实际上是完全正确的。对于那些有同样问题的人,您可以查看具体示例以帮助您了解情况。 Jamis Buck 以其关于迷宫生成的作品而闻名,他的图书馆'Theseus' 是我用来创建对称迷宫的工具,我自己看看对称如何帮助解决随机迷宫的公平问题。该库是开源的,可用作实现随机对称迷宫生成器的指南。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 2012-09-20
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多