예제 #1
0
        /// <summary>
        /// Get available coordinates from given piece making sure that all chess rules are applied
        /// </summary>
        /// <param name="piece"></param>
        /// <param name="xRay"></param>
        /// <returns></returns>
        public List<Coords> GetAvailableCoords(Piece piece, bool xRay = false)
        {
            if (piece.EPiece == EPiece.King)
                return GetKingAvailableCoords((King) piece);

            King king = piece.Side == PieceColor.White ? Board.WhiteKing : Board.BlackKing;
            if (king.Checks.Count == 0)
                return piece.AvailableCoords(Board.Tiles, xRay);

            return piece.AvailableCoords(Board.Tiles, xRay)
                .Intersect(king.Checks.Where(x => x.IsAttackBlockable).Select(x => x.Coordinate))
                .ToList();
        }