【问题标题】:"Level Generation" algorithm for Mad Virus gameMad Virus 游戏的“关卡生成”算法
【发布时间】:2011-11-10 10:38:34
【问题描述】:

我正在.NET 上制作这款游戏​​(链接:http://www.bubblebox.com/play/puzzle/539.htm)。一切都很好,只是我不知道如何生成一个可以在 N 回合内解决的关卡。 Google+ 上的一个类似游戏是 Flood Fill,但它们是方形的,而不是六边形的。

编辑:这是关于这种游戏的解释:https://www.youtube.com/watch?v=QihKrPLb8e8&feature=player_embedded。 Mad Virus 类似,但它是六边形网格,步数不是恒定的,随着难度的增加而增加。

【问题讨论】:

  • 你能在这里解释一下游戏玩法,而不是强迫别人玩类似的游戏吗?这样也能帮助你找到算法。
  • @youund:我打算,但是,这很难解释。甚至有些人玩那个游戏仍然不明白它是如何玩的。这是一个游戏指导视频:youtube.com/watch?v=QihKrPLb8e8&feature=player_embedded,不过是方格,在这个游戏中,它是一个六边形。

标签: .net algorithm random


【解决方案1】:

从最终结果开始,向后工作。

到第 nth 圈时,网格应该统一为一种颜色,所以从那里开始。然后选择网格的一个连接区域(包含左上角的六边形)并用一些颜色填充它。重复这个过程 n 次,你将得到一个可以在 n 圈内求解的网格。

每个回合的颜色应随机选择,但不得连续两次选择相同的颜色。可能会根据选择每种颜色的时间来对随机选择进行加权。

随机选择每个区域的算法应该(平均而言)使每个区域小于上一个区域。它可以尝试在每个先前的填充过程中保持至少一个六边形。我建议你尝试一些区域选择算法,并测试结果。

此过程为您提供了最快解决方案的上限。我认为验证所需的实际最小匝数的唯一方法是穷举搜索。就我个人而言,我认为对于像这样的关卡生成算法来说,这听起来有点矫枉过正。使用上述形式的算法,匝数会启发式地增加(直到 n 等于最复杂网格的最快解)。

【讨论】:

  • Inresting...Start from the end result and work backwards. 是的,我已经想到了。但我不知道该怎么做。我会尝试按照您的提示进行操作:)我会在发现任何新内容后立即回复。
【解决方案2】:

您可以编写一个生成器来生成一个绝对随机的地图。生成后,您必须检查地图(通过使用深度搜索(使用一些启发式方法))以了解您的条件(如果可以通过 N 次移动解决,则应用)。注意:验证算法不必检查深度搜索的所有树;它必须只检查最好的叶子。

good = false;
while (!good)
{
   map = generate;
   good = verification(map); 
}

【讨论】:

  • 不行,地图不仅可以在N圈内解,而且必须足够复杂,所以在N - n圈(n可能从3到5)内解不出来。跨度>
  • 对于 n 从 3 到 5 这不是解决方案((
  • 我正在做你几天前所做的事情,但我的老板对此并不满意。他相信有一种算法可以生成满足条件的关卡。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多