>>实现简单A星寻路,并且用Unity模拟演示<<
算法原理这里就不再赘述了,网上一大推.我也是参考的https://www.cnblogs.com/lipan/archive/2010/07/01/1769420.html的算法
先上代码---------------------------->>>>>>>>>>>>>>>>
using System;
using System.Collections;
using System.Collections.Generic;
//参考的https://www.cnblogs.com/lipan/archive/2010/07/01/1769420.html的算法
/*寻路算法*/
class AStar
{
//开表
List<Point> open_List = new List<Point>();
//闭表
List<Point> close_List = new List<Point>();
//得到开表中的最小F节点
Point GetMinFPointByOpenList()
{
Point p = null;
foreach (var value in open_List)
{
if (p == null || p.G+p.H > value.G+value.H)
{
p = value;
}
}
return p;
}
/// <summary>
/// 判断障碍物(0为通路,其他都是障碍)
/// </summary>
/// <param name="idx"></下标>
/// <param name="map"></地图数据>
/// <returns></true是障碍>
bool IsHinder(int idx, byte[] map)
{
//越界判断
if (idx >= map.Length)
{
return true;
}
return map[idx] != 0;
}
//判断点是否在开表中
bool IsPointInOpenList(int x, int y)
{
foreach (var p in open_List)
{
if (p.X == x && p.Y == y)
{
return true;
}
}
return false;
}
//判断点是否在闭表中
bool IsPointInCloseList(int x, int y)
{
foreach (var p in close_List)
{
if (p.X == x && p.Y == y)
{
return true;
}
}
return false;
}
//从开表中返回一个坐标数据
Point GetPointByOpenList(int x, int y)
{
foreach (var p in open_List)
{
if (p.X == x && p.Y == y)
{
return p;
}
}
return null;
}
//从闭表中返回一个坐标数据
Point GetPointByCloseList(int x, int y)
{
foreach (var p in close_List)
{
if (p.X == x && p.Y == y)
{