Mad Virus游戏的“等级生成”算法

时间:2011-09-05 08:00:23

标签: .net algorithm random

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

通过n th 转动网格应该是一种颜色,所以从那里开始。然后选择网格的连接区域(包含左上六边形)并用一些颜色填充。通过重复这个过程n次,你将获得一个可以在n圈内解决的网格。

每个回合的颜色应随机选择,条件是不应连续两次选择相同的颜色。可能会发现,根据最近每种颜色的选择,对随机选择进行加权。

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

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