随机地图,最近几天基本查阅了google上能查到的所有主流算法。但是因为自己游戏玩法的特殊性,还是自己设计了一套简单的算法。
我的地图需求:
1.不同于主流的roguelilke"房间-通道"类型的随机地图,我想做一个关卡就是一整块的地图。
2.地图存在唯一出口,不存在入口,主角的出生点固定。
3.地图内的障碍物密度比例可调。
4.主角从出生点到地图出口,至少存在一条路径可以寻路到达。
5.地图长度可调,在长度固定的情况下,地图的宽度在确定的范围内随机。
解决方案:
1.根据长度,宽度参数,生成一个矩形的地图格子结合。
2.根据地图宽度随机参数,从下到上,依次生成地图的左边缘,右边缘,下边缘,上边缘。
3.在最后的上边缘里取一个格子作为出口。
4.4个边缘内生成地表,边缘上生成障碍,边缘外变成空的格子。
5.根据障碍物的密度,生成障碍物。
6.为了保证存在从出生点到达重点的路径,比较稳妥的办法是,先根据寻路算法计算出一条道路。再在道路以外的地表格子上生成障碍。
7.目前是采取一个简单粗暴的方案。在所有地表格子里随机生成障碍。完毕后用寻路算法测试,是否存在一条路,如果不存在,跳回到步骤1重新开始。这个算法虽然简单,但在极端情况下,可能遇到连续重新创建导致程序卡住,不过在目前50%的障碍物比例下,情况还不错。等待时间从来没有超过一秒。
下面是连续创建的几次地图。深棕色方框为地图边缘,紫色为主角出生点,红色为地图出口,绿色为障碍物,浅土色为地表。
地图不大。
@kuaile:是的,主要是为了演示截图的需要,实际游戏里的地图比这个大很多。