Esempio n. 1
0
        /// <inheritdoc/>
        public IEnumerable <Path> GetPaths(Point start, Piece piece, IPieceEnumerationProvider squares)
        {
            return(piece.Type == PieceType.Pawn
                ? new[]
            {
                piece.Edge.RotateCounterClockwise(3),
                piece.Edge.Opposite(),
                piece.Edge.RotateClockwise(3)
            }
                   .Where(direction => squares.EnumerateStraightLine(start, direction).Any())
                   .Select(direction =>
            {
                var isMove = direction == piece.Edge.Opposite();
                var moves = squares.EnumerateStraightLine(start, direction).Take(2).ToList();

                return new Path
                {
                    AllowMove = isMove,
                    AllowTake = !isMove,
                    Direction = direction,
                    Start = start,
                    Piece = piece,
                    OppositeEdge = !squares.EnumerateStraightLine(start, piece.Edge.Opposite()).Skip(1).Any(),
                    Squares = moves.Take(piece.HasMoved || !isMove ? 1 : 2)
                };
            })
                : Enumerable.Empty <Path>());
        }
Esempio n. 2
0
 /// <inheritdoc/>
 public IEnumerable <Path> GetPaths(Point start, Piece piece, IPieceEnumerationProvider squares)
 => piece.Type == PieceType.Knight
         ? squares.EnumerateKnight(start).Select(sq => new Path
 {
     AllowMove = true,
     AllowTake = true,
     Start     = start,
     Piece     = piece,
     Direction = Direction.None,
     Squares   = new[] { sq }
 })
         : Enumerable.Empty <Path>();
Esempio n. 3
0
 /// <inheritdoc/>
 public IEnumerable <Path> GetPaths(Point start, Piece piece, IPieceEnumerationProvider squares)
 => piece.Type == PieceType.Bishop || piece.Type == PieceType.Queen
         ? Directions.Diagonals
 .Where(direction => squares.EnumerateStraightLine(start, direction).Any())
 .Select(direction => new Path
 {
     AllowMove = true,
     AllowTake = true,
     Direction = direction,
     Start     = start,
     Piece     = piece,
     Squares   = squares.EnumerateStraightLine(start, direction)
 })
         : Enumerable.Empty <Path>();