今天开始准备开一个新的项目,以后也会将项目中的好的demo分享出来。这个项目的第一步就是关于随机生成地图的,便整理了一下,写了一个新手也能看懂的版本。望大家多多支持,以后也会分享更多有趣的技术和demo
.
首先给大家简单介绍一下洗牌算法。洗牌算法时非常经典的算法,也有很多版本,这里使用到的是经典版本
--
--
Knuth
-
Shuffle算法。
引出:有一个大小为
100
的数组,里面元素为
1
-
100
,从里面随机选取
50
个不同的数。最简单的思路:直接随机一个(
1
,
100
)的数,判断这个数是否出现过,没出现过就放到一个目标数组中,直到取满
50
个,这样会出现一个问题,越到后面取的数重复性越高。这样每个数出现的概率并不相等,也就是不公平的。而洗牌算法可以解决这个问题。其基本思路就是每取一个元素就将它与数组最后一位交换,然后长度减小
1
,再从剩下的数组中重复即可(如果不了解,读者可自己去学习一下,这里不重点介绍)
这里把洗牌算法放到单独的一个类里,这里的Coord是一个结构体,代表一个坐标,定义在MapController里的。

Coord结构体的定义:

MapController脚本里的基本设置:

然后是生成地图,基本思路就是以一个空物体为基础位置,然后用二维数组去生成地图,注意为了后面的洗牌算法,要边生成边将坐标放入到一个List里。同时为了方便管理把生成的Tile设为空物体的子物体。

最后是生成障碍物,这里meish没什么好讲的,直接上代码。

放一个效果图,注意:障碍物的数量要小于MapSize的平方(地图的大小)

做完后续的功能,会上传到Github,到时候会把链接给出来。