Beispiel #1
0
 public static int GetDistance(MapCell p, MapCell q)
 {
     return((int)Heuristic.Octile(Math.Abs(p.X - q.X), Math.Abs(p.Y - q.Y)));
 }
Beispiel #2
0
        public MapCell GetLastGoodPosition(short x, short y, MoveType type, ClientSession session)
        {
            var cell = new MapCell {
                X = x, Y = y
            };

            switch (type)
            {
            case MoveType.Right:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.X -= 1;
                }

                return(cell);

            case MoveType.Left:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.X += 1;
                }

                return(cell);

            case MoveType.Up:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.Y += 1;
                }

                return(cell);

            case MoveType.Down:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.Y -= 1;
                }

                return(cell);

            case MoveType.DiagUpRight:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.Y += 1;
                    cell.X -= 1;
                }

                return(cell);

            case MoveType.DiagUpLeft:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.Y += 1;
                    cell.X += 1;
                }

                return(cell);

            case MoveType.DiagDownLeft:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.Y -= 1;
                    cell.X += 1;
                }

                return(cell);

            case MoveType.DiagDownRight:
                while (!GetDefinedPosition(cell.X, cell.Y))
                {
                    cell.Y -= 1;
                    cell.X -= 1;
                }

                return(cell);
            }

            return(cell);
        }