/// <summary> /// 计算移动方式 /// <para>必须保证 p1 p2相临再跑一步的距离内</para> /// </summary> /// <param name="p1"></param> /// <param name="p2"></param> /// <param name="p3"></param> /// <returns></returns> public RunType CalculationRunType(PositionInfo position, Point p2) { var xd = position.Point.X - p2.X; var yd = position.Point.Y - p2.Y; if (Math.Abs(xd) <= 1 && Math.Abs(yd) <= 1) { return(RunType.Normal); } else { //Point p3 = new Point(p2.X + x, p2.Y + y); var maze = MirContext.Maze(position.MapInfo); int x = p2.X + xd; int y = p2.Y + yd; if (x > MirContext.ReadMap.Width || y > MirContext.ReadMap.Height)//跑步终点坐标超出地图 { return(RunType.Normal); } else { //跑步终点坐标有障碍物则走,否则跑 return(maze[x, y] == 1 ? RunType.Normal : RunType.FastRun); } } }
/// <summary> /// 寻路 /// </summary> /// <param name="position"></param> /// <param name="to"></param> /// <returns></returns> protected ActionResult <List <APoint> > FindPath(PositionInfo position, APoint to) { PathGrid pathGrid = new PathGrid(MirContext.ReadMap.Width, MirContext.ReadMap.Height, MirContext.Maze(position.MapInfo)); return(new ActionResult <List <APoint> >(pathGrid.FindPath(position.Point, to))); }