示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="startingCoordinate">The coordinate where you want to calculate steps from</param>
        /// <param name="direction">direction where the step is heading</param>
        /// <param name="tiles">amount of steps to take. defaults on 1</param>
        /// <returns>the ending coordinate</returns>
        public static TileCoordinate CalculateLocationAfterSteps(TileCoordinate startingCoordinate, DiagonalDirection direction, int tiles = 1)
        {
            var newX = startingCoordinate.X;
            var newY = startingCoordinate.Y;

            newX += direction.HasFlag(DiagonalDirection.East) ? tiles : -tiles;
            newY += direction.HasFlag(DiagonalDirection.North) ? tiles : -tiles;
            return(new TileCoordinate(newX, newY));
        }
示例#2
0
        /// <summary>
        /// Gets the corner coordinate for a king to move
        /// </summary>
        /// <param name="coordinate"></param>
        /// <param name="direction"></param>
        /// <returns></returns>
        public static TileCoordinate GetNearestDiagonalEdgeCoordinate(TileCoordinate currentCoordinate, DiagonalDirection direction)
        {
            //north= y+ south= y- east = x+ west = x-
            int x = (direction.HasFlag(DiagonalDirection.East)) ? MAX_X - currentCoordinate.X :
                    MAX_X - (MAX_X - currentCoordinate.X);
            int y = (direction.HasFlag(DiagonalDirection.North)) ? MAX_Y - currentCoordinate.X :
                    MAX_Y - (MAX_Y - currentCoordinate.Y);
            int steps = Math.Min(x, y);
            int newx  = (direction.HasFlag(DiagonalDirection.East)) ? currentCoordinate.X + steps : currentCoordinate.X - steps;
            int newy  = (direction.HasFlag(DiagonalDirection.North)) ? currentCoordinate.Y + steps : currentCoordinate.Y - steps;

            return(new TileCoordinate(newx, newy));
        }