javascript实现A星寻路算法javascript
简化搜索区域:java
2.创建起点和终点坐标,用于寻路git
维护open和close列表算法
搜索路径canvas
如何寻路呢,首先咱们引入3个量数组
接下来是寻路具体实现函数
对于curr相邻点,都有如下步骤spa
JS实现的具体方案code
首先创建一个Sopt的类,它里面包含如下信息blog
创建寻路流程
寻路递归函数
创建一个curr表明当前点初始为null,和currIndex序列号初始为0
let currIndex = 0; let curr = null; for(let i = 0; i < openList.length; i++) { if(openList[i].f < openList[currIndex].f) { currIndex = i; } } curr = openList[currIndex]; if(curr === endSopt) { drawPath(curr); return true; } removeFromArray(openList, curr); closedList.push(curr);
3.遍历curr的neighbors,将合适点的parent设为curr
for(let i = 0; i < curr.neighbors.length; i++) { let neighbor = curr.neighbors[i]; if(!closedList.includes(neighbor) && !neighbor.wall) { let tmpF = curr.g + getG(curr, neighbor) + getH(neighbor); let newPath = false; // 是不是更好的路线 if(openList.includes(neighbor)) { if(tmpF <= neighbor.f) { neighbor.f = tmpF; newPath = true; } } else { neighbor.g = curr.g + getG(curr, neighbor); neighbor.h = getH(neighbor); neighbor.f = neighbor.g + neighbor.h; newPath = true; openList.push(neighbor); } if(newPath) { neighbor.parent = curr; } } } 4.递归这个函数,当点和终点一致时,返回这个点,而后递归它的parent属性,则能找到路线
最后附上案例地址:a星算法