Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最优多层迷宫生成算法_Algorithm_Language Agnostic_Maze - Fatal编程技术网

Algorithm 最优多层迷宫生成算法

Algorithm 最优多层迷宫生成算法,algorithm,language-agnostic,maze,Algorithm,Language Agnostic,Maze,我正在做一个简单的多人游戏,其中2-4名玩家被放置在迷宫中的不同入口点,需要到达一个目标点。生成一个迷宫通常是很容易的,但在这种情况下,游戏的目标是在其他人之前达到目标,我不希望生成算法对一个玩家过于偏爱 因此,我正在寻找一种迷宫生成算法,其中每个玩家从起点到目标的最佳路径不超过平均路径的10%。这样一来,球员们或多或少处于一个平等的竞争环境中。有人能想出这样的算法吗 (目前我有一个想法,但它没有经过深思熟虑,似乎远没有达到最佳状态——我将把它作为答案发布。)我能想到的最简单的解决方案是像正常情

我正在做一个简单的多人游戏,其中2-4名玩家被放置在迷宫中的不同入口点,需要到达一个目标点。生成一个迷宫通常是很容易的,但在这种情况下,游戏的目标是在其他人之前达到目标,我不希望生成算法对一个玩家过于偏爱

因此,我正在寻找一种迷宫生成算法,其中每个玩家从起点到目标的最佳路径不超过平均路径的10%。这样一来,球员们或多或少处于一个平等的竞争环境中。有人能想出这样的算法吗


(目前我有一个想法,但它没有经过深思熟虑,似乎远没有达到最佳状态——我将把它作为答案发布。)

我能想到的最简单的解决方案是像正常情况一样随机生成整个迷宫,然后随机选取目标点和球员起点。完成后,计算从每个起点到目标的最短路径。找到平均值并开始“平滑”(移除/移动障碍——不知道这将如何工作)显著高于平均值的路径,直到所有路径都在适当的边界内。此外,可以选择明显低于平均水平的障碍物,并插入额外的障碍物。

首先选择球员的位置、目标和等长路径,然后根据定义的路径构建迷宫,怎么样?如果路径不相交,这应该很容易实现,我想我会通过设置目标和每个玩家的入口点,然后为每个玩家生成到目标的类似长度的路径来实现这一点。然后我会开始沿着这些路径添加假分支,小心避免链接到其他玩家的路径,或者让分支连接回路径。所以基本上每个分支都是死胡同


这样,您可以保证路径的长度相似。然而,它不允许玩家相互交流。但是,您可以通过在分支之间创建链接来实现这一点,从而使任一路径上的分支入口点与目标之间的距离相似。在这个分支上,你可以分支出更多的死胡同以获得乐趣和利润:-)

freespace的答案的另一个替代方法是生成一个随机迷宫,然后为每个单元格指定一个值,表示到达迷宫末端的移动次数(如果你决定从“末端”开始,你可以同时执行这两个操作)。然后选择一个距离(可能是该距离上有n个点的最高距离?),并将玩家放置在具有该值的正方形上。

选择中间的某个退出点

从那里开始N个路径,每个循环的每个路径加1, 直到它们达到你想要的长度

有N个起点,它们都是相同的长度


添加额外的分支线,直到迷宫填满为止。

heh,我们都同样愚蠢!:-)嗯,我喜欢这个。我不知道结果如何,但我认为值得一试。谢谢:)@Vinko Vrsalovic在我开始打字时没有看到你的反应,对不起:P正如他们所说的,天才思维相似,而傻瓜从不不同:P这是一个很好的答案,是的,freespace的非常相似:)我想这可能是正确的方法。谢谢你的意见。这绝对是完美的——正是所需要的类型。万分感谢!:)