Algorithm 生成塔防游戏的航路点

Algorithm 生成塔防游戏的航路点,algorithm,path-finding,Algorithm,Path Finding,我目前正在使用objective-c为iOS开发一款塔防游戏,在为每个关卡生成随机路径方面遇到了问题。在谷歌搜索之后,我只找到了贝塞尔路径生成器,这不是我要找的。我基本上需要一个生成随机航路点的算法,这些航路点通过直线相互连接 # * * * # / / / / / / / / / * / # * # / / / / / * / * / * / / # * * # / * / * / / * / / / / * / * / / # * * * * # / * / / / /

我目前正在使用objective-c为iOS开发一款塔防游戏,在为每个关卡生成随机路径方面遇到了问题。在谷歌搜索之后,我只找到了贝塞尔路径生成器,这不是我要找的。我基本上需要一个生成随机航路点的算法,这些航路点通过直线相互连接

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

上面是我需要的一个完美例子,所有的航路点(#)彼此垂直或水平连接,因此生成的网格具有直线连接线。任何帮助都会很好。谢谢。

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

你想要的与你的生活相关

基本上,你会生成一个迷宫,在长直的走廊上有一定的偏差,然后从开始到结束,除了单一的路径,你会丢弃所有的东西

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


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

这只是一个非常基本的想法:

  • 生成随机点

  • 重复连接两个随机点,只从一个点垂直移动,从另一个点水平移动(有两种方法)。有关更多详细信息,请参见示例

    假设您想要一个非分割路径,这些选择的点不应该都已经连接到任何其他点(但是一个已经连接的点是可以的)

  • 如果您被卡住(如果您无法将一个点连接到任何东西,或者您已经从起点到终点建立了一条路径,并且存在未完成的点),则进行回溯和/或限制您选择点的方式,以防止/减少卡住的可能性。例如,将起点和终点连接到起点将无法实现任何目标

例如,要进入迷宫:

随机生成的点如下所示:(注意,起点和终点可以在此处固定,或者至少约束到(某些?)边)

然后通过从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个单位。

为什么你希望它是随机的?那么你就无法控制它有多容易/难了。看看迷宫生成算法:连接两个航路点的线能穿过另一条线吗?@RamyAlZuhouri最好不能,但它们不能。
1 * * * # / / / / /   
/ / / / * / 4 / / /       
/ / / / * / / / / /
/ / / / 3 / / / / /
/ / / / / / / / / /
/ 2 / / / / / / / /
/ / / / / / / / 5 6