最近在做关卡模块,看到一个要求:根据当前关卡位置,点击任意已开放的关卡,主角自动寻路至该处。
关卡配置表如下:
map = {
[1] = { coordinate = { 1, 1, }, link = { 2, 3, }, },
[2] = { coordinate = { 2, 1, }, link = { 1, 3, }, },
[3] = { coordinate = { 3, 2, }, link = { 4, 3, }, },
[4] = { coordinate = { 8, 2, }, link = { 2, 3, }, },
[5] = { coordinate = { 3, 3, }, link = { 2, 3, }, },
[6] = { coordinate = { 5, 3, }, link = { 2, 3, }, },
[7] = { coordinate = { 9, 3, }, link = { 2, 3, }, },
[8] = { coordinate = { 2, 4, }, link = { 2, 3, }, },
}
map的key值代表第几关,coordinate代表对应关卡的坐标位置,{2,1}代表坐标位置为x=2,y=1,link表代表相连的关卡,{2,3}代表与关卡2和关卡3相连。
第一反应就是AStar算法。毕竟自动寻路嘛,那肯定得是A了。上次使用A还是在上次...enen,
还是上学时候,当时也只是学习了该算法的思路伪代码。要说那用到实践里,那就是一个鸡蛋了。
加上这么长时间过去了,只问其名,却已忘记其身,不得不借助www:度娘,我来了~。
首先找一篇通俗易懂的文章,看看算法的思路吧,代码的事后面再说~
先说下我的理解:A*算法主要用于求最短路径。算法的主要思想是
详情可见:推荐一篇大佬的A*算法文章:https://blog.csdn.net/xinzhilinger/article/details/119643810
搞懂了算法的思想后,我们其实是不需要自己写代码的,因为网上已经有很多成功的案例了,我们只需要站在
巨人的肩膀上操作,去使用它。找到一个A*算法的脚本,如下:
怎么去使用它呢?
由于A*算法是在网格上寻路的,因此我们需要先创建地图网格,使用Star.New(),看Astar算法发现,需要的参数是String
该网格是由网格的长宽,以及每个位置的信息(是否能通过,1代表可通过0代表不可通过)构成的,类似于这样: