我目前正在使用objective-c开发针对iOS的塔防游戏,并且遇到问题,只要为每个级别生成随机路径。在谷歌研究之后,我只发现了bezier路径生成器,这不是我想要的。我基本上需要一种生成随机路点的算法,这些路点用直线相互连接。
# * * * # / / / / /
/ / / / * / # * # /
/ / / / * / * / * /
/ # * * # / * / * /
/ * / / / / * / * /
/ # * * * * # / * /
/ / / / / / / / # #
以上是我需要的完美示例,其中所有航点(#)彼此垂直或水平连接,因此生成的网格具有直线连接线。任何帮助都会很棒。感谢。
答案 0 :(得分: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个单位。
答案 1 :(得分:0)
我相信您正在寻找A-Star算法,这在许多网站上都有很好的解释。请参阅描述如何在迷宫/地图中导航的教程。
答案 2 :(得分:0)
您想要的是maze generation。
基本上,你会产生一种迷宫,对于长直道走廊有某种偏见,然后从开始到结束都丢弃除了单一路径之外的所有东西。
我无法在细节方面做出太多贡献,因为你想要的各种路径以及你游戏的主题会严重影响你想要的结果。
也许一个好的起点是某种分形过程。