Exemple #1
0
 public static (SquareEnum From, SquareEnum To) GetRookRokadeSquares(this SquareEnum kingMoveSquare, bool isWhiteToMove)
 {
     if (kingMoveSquare.File() == 6)
     {
         return(isWhiteToMove ? SquareEnum.h1 : SquareEnum.h8, (SquareEnum)((int)kingMoveSquare - 1));
     }
     else
     {
         return(isWhiteToMove ? SquareEnum.a1 : SquareEnum.a8, (SquareEnum)((int)kingMoveSquare + 1));
     }
 }
Exemple #2
0
 public bool Contains(PiecesEnum piece, SquareEnum square)
 {
     if (!this.Piece.IsEqual(piece))
     {
         return(false);
     }
     foreach (var sq in Iterator.Iterate())
     {
         if (square.Equals(sq.Square))
         {
             return(true);
         }
     }
     return(false);
 }
Exemple #3
0
        public static IEnumerable <(PieceEnum Piece, SquareEnum Square)> Create(PieceEnum piece, SquareEnum square, IPositionImpl position)
        {
            var moves = Create(piece);

            foreach (var m in moves.GetIteratorFor(square, position, piece).Iterate())
            {
                yield return(m.Piece, m.Square);
            }
        }
Exemple #4
0
 public Position.PiecesIterator <PieceEnum> GetIteratorFor(SquareEnum square, Option <Position> position, PieceEnum pieceEnum = PieceEnum.Bishop)
 => position.Match(
Exemple #5
0
 private static Unit ShowMoves(PieceEnum piece, SquareEnum square, (PieceEnum Promoted, SquareEnum Square)[] moveSquares)
Exemple #6
0
 // A8: 0 / 8 = 0
 // H8: 7 / 8 = 0;
 // A1: 56 / 8 = 7;
 // H1: 63 / 8 = 7;
 public static int Row(this SquareEnum square)
 => (int)square / 8;
Exemple #7
0
 public static bool IsRokadeMove(this PieceEnum piece, SquareEnum square, SquareEnum moveSquare)
 => PieceEnum.King.Equals(piece) && Math.Abs((int)square - (int)moveSquare) == 2;
Exemple #8
0
 public static bool IsKingsideRokadeMove(this PieceEnum piece, SquareEnum square, SquareEnum moveSquare)
 => piece.IsRokadeMove(square, moveSquare) && moveSquare.File() == 6;
Exemple #9
0
 public static ulong DownBitsOff(this SquareEnum square, int sub = 0)
 => ~square.DownBitsOn(sub);
Exemple #10
0
 public static char ConvertPieceToChar(IDictionary <SquareEnum, PieceOnSquare <PiecesEnum> > dictionary, SquareEnum square)
 => ConvertPieceToChar(dictionary.ContainsKey(square) ? (int)dictionary[square].Piece : 0);
Exemple #11
0
 public static ulong UpBitsOff(this SquareEnum square, int add = 0)
 => ~square.UpBitsOn(add);
Exemple #12
0
 public static ulong DownBitsOn(this SquareEnum square, int sub = 0)
 => 0x7ffffffffffffffful >> ((int)square - sub);
Exemple #13
0
 public static ulong UpBitsOn(this SquareEnum square, int add = 0)
 => 0xfffffffffffffffeul << (63 - ((int)square + add));
Exemple #14
0
 // A8: 0 % 8 = 0
 // H8: 7 % 8 = 7;
 // A1: 56 % 8 = 0;
 // H1: 63 % 8 = 7;
 public static int File(this SquareEnum square)
 => (int)square % 8;
Exemple #15
0
        internal static Option <Move> ToMove(this string parameter)
        {
            Match match = regex.Match(parameter);

            if (match.Success)
            {
                string     value;
                PieceEnum  piece   = PieceEnum.Pawn;
                SquareEnum from    = SquareEnum.a1;
                SquareEnum to      = SquareEnum.a1;
                PieceEnum  promote = PieceEnum.Pawn;
                if (IsKingsideRokade(match.Groups))
                {
                    return(Move.Of(RokadeEnum.KingSide));
                }
                else if (IsQueensideRokade(match.Groups))
                {
                    return(Move.Of(RokadeEnum.QueenSide));
                }
                else
                {
                    if (IsPawnMove(match.Groups))
                    {
                        piece = PieceEnum.Pawn;
                        if (TryGetGroupValue(match.Groups, "Promote", out value))
                        {
                            value.TryPieceParse().Map(p => promote = p);
                        }
                        else
                        {
                            promote = piece;
                        }
                    }
                    else
                    {
                        if (!TryGetGroupValue(match.Groups, "Piece", out value))
                        {
                            return(None);
                        }
                        value.TryPieceParse().Map(p => promote = piece = p);
                        if (TryGetGroupValue(match.Groups, "Promote", out value))
                        {
                            return(None);
                        }
                    }
                    if (!TryGetGroupValue(match.Groups, "From", out value))
                    {
                        return(None);
                    }
                    from = value.ParseEnum <SquareEnum>();
                    if (!TryGetGroupValue(match.Groups, "To", out value))
                    {
                        return(None);
                    }
                    to = value.ParseEnum <SquareEnum>();
                }

                return(Move.Of(piece, from, to, promote));
            }
            else
            {
                return(None);
            }
        }