/// <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);
                }
            }
        }
Exemple #2
0
        /// <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)));
        }