2

我目前正在使用objective-c为iOS开发一个塔防游戏,并且在为每个级别生成随机路径方面遇到了问题。在google上研究后,我只发现了贝塞尔路径生成器,这不是我要找的。我基本上需要一种生成随机航点的算法,这些航点用直线相互连接。

# * * * # / / / / /   
/ / / / * / # * # /       
/ / / / * / * / * /
/ # * * # / * / * /
/ * / / / / * / * /
/ # * * * * # / * /
/ / / / / / / / # #   

以上是我需要的一个完美示例,其中所有航点(#)相互垂直或水平连接,因此生成的网格具有直线连接线。任何帮助都会很棒。谢谢。

4

3 回答 3

2

这只是一个非常基本的想法,可以帮助您开始:

  • 生成随机点。

  • 通过仅从一个点垂直移动并从另一个点水平移动来重复连接两个随机点(有两种方法可以做到这一点)。有关更多详细信息,请参见示例。

    假设您想要一条不分割的路径,这些选择的点不应该已经连接到任何其他点(但是已经连接的点很好)。

  • 如果您卡住了(如果您无法将一个点连接到任何东西,或者您已经从头到尾制作了一条路径并且有未完成的点)和/或限制您选择点的方式以防止/减少卡住的概率。例如,连接起点和终点以开始,不会让你到任何地方。

例如,要进入迷宫:

随机生成的点将如下所示:(请注意,起点和终点可以在这里固定,或者至少被限制在(某些?)边上)

1 / / / / / / / / /   
/ / / / / / 4 / / /       
/ / / / / / / / / /
/ / / / 3 / / / / /
/ / / / / / / / / /
/ 2 / / / / / / / /
/ / / / / / / / 5 6  

然后通过从 1 水平移动和从 3 垂直移动来连接 1 和 3。另一种方法是从 1 垂直移动并从 3 水平移动。

1 * * * # / / / / /   
/ / / / * / 4 / / /       
/ / / / * / / / / /
/ / / / 3 / / / / /
/ / / / / / / / / /
/ 2 / / / / / / / /
/ / / / / / / / 5 6  

然后以相同的方式连接 3 和 2、2 和 4、4 和 5 以及 5 和 6。

注意,连接5和6时,只能直接连接,不能有交点,因为它们位于同一水平线上。或者您可以将其视为 5 或 6 垂直移动 0 个单位。

于 2013-07-12T11:48:38.173 回答
0

您想要的与迷宫生成有关。

基本上,你会生成一个迷宫,对长而笔直的走廊有某种偏见,然后丢弃除了从开始到结束的单一路径之外的所有东西。

在细节方面我不能给出太多细节,因为你想要的路径类型和游戏的主题会严重影响你想要的结果。

也许一个好的起点是某种分形过程。

于 2013-07-11T20:45:34.087 回答
0

我相信您正在寻找 A-Star 算法,该算法在许多网站上都有很好的解释。请参阅描述如何通过迷宫/地图导航的教程。

于 2013-07-11T19:46:03.557 回答