示例#1
0
        private static QueenBitBoard ComputeBlackQueen(QueenBitBoard inputQueenBB, BitBoard blackPieces, BitBoard allPieces)
        {
            QueenBitBoard result = new QueenBitBoard(ChessPieceColors.Black);

            result.Bits  = Magic.getMagicMoves(inputQueenBB.Bits, allPieces.Bits, true);
            result.Bits |= Magic.getMagicMoves(inputQueenBB.Bits, allPieces.Bits, false);
            result.Bits &= ~blackPieces.Bits;
            return(result);
        }
示例#2
0
        public void Initialize_IsBlackCorrectPlaced_Equal()
        {
            BoardSquare   correctPlacement = BoardSquare.D8;
            QueenBitBoard board            = new QueenBitBoard(ChessPieceColors.Black);

            board.Initialize(null);

            Assert.Equal(correctPlacement, board.Bits);
        }
示例#3
0
        public static List <QueenBitBoard> QueenBitBoardResults(ChessBoard inputChessBoard, ChessPieceColors color, BitBoard blackPieces, BitBoard whitePieces, BitBoard allPieces)
        {
            List <QueenBitBoard> result = new List <QueenBitBoard>();
            List <Tuple <QueenBitBoard, QueenBitBoard> > legalQueenMoves = new List <Tuple <QueenBitBoard, QueenBitBoard> >();
            List <QueenBitBoard> sepQueensInput  = new List <QueenBitBoard>();
            List <QueenBitBoard> sepQueensOutput = new List <QueenBitBoard>();

            if (color == ChessPieceColors.White)
            {
                sepQueensInput = ColoredBitBoard.SplitBitBoard(inputChessBoard.WhiteQueen).ToList();
                foreach (QueenBitBoard sepQueenBB in sepQueensInput)
                {
                    legalQueenMoves.Add(new Tuple <QueenBitBoard, QueenBitBoard>(sepQueenBB, ComputeWhiteQueen(sepQueenBB, whitePieces, allPieces)));
                }
                for (int i = 0; i < legalQueenMoves.Count; i++)
                {
                    sepQueensOutput = ColoredBitBoard.SplitBitBoard(legalQueenMoves[i].Item2).ToList();
                    foreach (QueenBitBoard sepQueenOutBB in sepQueensOutput)
                    {
                        QueenBitBoard boardResult = new QueenBitBoard(color);
                        boardResult.Bits = (inputChessBoard.WhiteQueen.Bits ^ legalQueenMoves[i].Item1.Bits) | sepQueenOutBB.Bits;
                        result.Add(boardResult);
                    }
                }
            }
            else
            {
                sepQueensInput = ColoredBitBoard.SplitBitBoard(inputChessBoard.BlackQueen).ToList();
                foreach (QueenBitBoard sepQueenBB in sepQueensInput)
                {
                    legalQueenMoves.Add(new Tuple <QueenBitBoard, QueenBitBoard>(sepQueenBB, ComputeBlackQueen(sepQueenBB, blackPieces, allPieces)));
                }
                for (int i = 0; i < legalQueenMoves.Count; i++)
                {
                    sepQueensOutput = ColoredBitBoard.SplitBitBoard(legalQueenMoves[i].Item2).ToList();
                    foreach (QueenBitBoard sepQueenOutBB in sepQueensOutput)
                    {
                        QueenBitBoard boardResult = new QueenBitBoard(color);
                        boardResult.Bits = (inputChessBoard.BlackQueen.Bits ^ legalQueenMoves[i].Item1.Bits) | sepQueenOutBB.Bits;
                        result.Add(boardResult);
                    }
                }
            }
            return(result);
        }
示例#4
0
 public static QueenBitBoard ComputeBlackQueen_Test(QueenBitBoard inputQueenBB, BitBoard blackPieces, BitBoard allPieces)
 {
     return(ComputeBlackQueen(inputQueenBB, blackPieces, allPieces));
 }
示例#5
0
 public static QueenBitBoard ComputeWhiteQueen_Test(QueenBitBoard inputQueenBB, BitBoard whitePieces, BitBoard allPieces)
 {
     return(ComputeWhiteQueen(inputQueenBB, whitePieces, allPieces));
 }
示例#6
0
        private static void sacrificeQueenDebugStuffSomethingTestMethod()
        {
            //Winboard winboard = new Winboard();
            ChessBoard lolBoard = new ChessBoard();

            lolBoard.InitializeGame();

            //White
            PawnBitBoard pawnWhite = new PawnBitBoard(ChessPieceColors.White);

            pawnWhite.Bits = BoardSquare.A4 | BoardSquare.C2 | BoardSquare.D3 | BoardSquare.E4 | BoardSquare.F2 | BoardSquare.G2;

            BishopBitBoard bishopWhite = new BishopBitBoard(ChessPieceColors.White);

            bishopWhite.Bits = BoardSquare.E2 | BoardSquare.H4;

            KingBitBoard kingWhite = new KingBitBoard(ChessPieceColors.White);

            kingWhite.Bits = BoardSquare.E1;

            RookBitBoard rookWhite = new RookBitBoard(ChessPieceColors.White);

            rookWhite.Bits = BoardSquare.B1 | BoardSquare.H1;

            KnightBitBoard knightWhite = new KnightBitBoard(ChessPieceColors.White);

            knightWhite.Bits = BoardSquare.D2;

            QueenBitBoard queenWhite = new QueenBitBoard(ChessPieceColors.White);

            queenWhite.Bits = BoardSquare.D1;

            //Black
            PawnBitBoard pawnBlack = new PawnBitBoard(ChessPieceColors.Black);

            pawnBlack.Bits = BoardSquare.A7 | BoardSquare.B7 | BoardSquare.C5 | BoardSquare.E5 | BoardSquare.H5;
            RookBitBoard rookBlack = new RookBitBoard(ChessPieceColors.Black);

            rookBlack.Bits = BoardSquare.A8 | BoardSquare.H7;

            BishopBitBoard bishopBlack = new BishopBitBoard(ChessPieceColors.Black);

            bishopBlack.Bits = BoardSquare.C8 | BoardSquare.F8;

            QueenBitBoard queenBlack = new QueenBitBoard(ChessPieceColors.Black);

            queenBlack.Bits = BoardSquare.B4;

            KingBitBoard kingBlack = new KingBitBoard(ChessPieceColors.Black);

            kingBlack.Bits = BoardSquare.F7;

            KnightBitBoard knightBlack = new KnightBitBoard(ChessPieceColors.Black);

            knightBlack.Bits = BoardSquare.B8;


            //RookBitBoard badMove = new RookBitBoard( ChessPieceColors.Black );
            //badMove.Bits = BoardSquare.B8;
            lolBoard.Update(pawnWhite);
            lolBoard.Update(knightWhite);
            lolBoard.Update(queenWhite);
            lolBoard.Update(rookWhite);
            lolBoard.Update(bishopWhite);
            lolBoard.Update(kingWhite);
            lolBoard.Update(pawnBlack);
            lolBoard.Update(rookBlack);
            lolBoard.Update(bishopBlack);
            lolBoard.Update(queenBlack);
            lolBoard.Update(kingBlack);
            lolBoard.Update(knightBlack);

            List <ColoredBitBoard> legalMoves = new List <ColoredBitBoard>();

            legalMoves = MoveGen.GenerateLegalMoves(lolBoard, ChessPieceColors.Black);
            ColoredBitBoard bestMove = NegaMax.GetBestMove(lolBoard, 3, ChessPieceColors.Black, MoveGen.GenerateLegalMoves, Eval.EvaluateState);

            Console.Write(legalMoves.ToString() + bestMove.ToString());
        }
示例#7
0
        private static void blackqueensidecastle()
        {
            //Winboard winboard = new Winboard();
            ChessBoard lolBoard = new ChessBoard();

            lolBoard.InitializeGame();

            //White
            PawnBitBoard pawnWhite = new PawnBitBoard(ChessPieceColors.White);

            pawnWhite.Bits = BoardSquare.A2 | BoardSquare.B2 | BoardSquare.C2 | BoardSquare.D2 | BoardSquare.E4 | BoardSquare.H3;

            BishopBitBoard bishopWhite = new BishopBitBoard(ChessPieceColors.White);

            bishopWhite.Bits = BoardSquare.C1;

            KingBitBoard kingWhite = new KingBitBoard(ChessPieceColors.White);

            kingWhite.Bits = BoardSquare.D3;

            RookBitBoard rookWhite = new RookBitBoard(ChessPieceColors.White);

            rookWhite.Bits = BoardSquare.A1 | BoardSquare.H1;

            KnightBitBoard knightWhite = new KnightBitBoard(ChessPieceColors.White);

            knightWhite.Bits = BoardSquare.D2;

            QueenBitBoard queenWhite = new QueenBitBoard(ChessPieceColors.White);

            queenWhite.Bits = BoardSquare.D1;

            //Black
            PawnBitBoard pawnBlack = new PawnBitBoard(ChessPieceColors.Black);

            pawnBlack.Bits = BoardSquare.A7 | BoardSquare.B7 | BoardSquare.C7 | BoardSquare.C6 | BoardSquare.F7 | BoardSquare.G7 | BoardSquare.H7;

            RookBitBoard rookBlack = new RookBitBoard(ChessPieceColors.Black);

            rookBlack.Bits = BoardSquare.A8 | BoardSquare.H8;

            BishopBitBoard bishopBlack = new BishopBitBoard(ChessPieceColors.Black);

            bishopBlack.Bits = BoardSquare.F5 | BoardSquare.H4;

            QueenBitBoard queenBlack = new QueenBitBoard(ChessPieceColors.Black);

            queenBlack.Bits = BoardSquare.F2;

            KingBitBoard kingBlack = new KingBitBoard(ChessPieceColors.Black);

            kingBlack.Bits = BoardSquare.E8;

            KnightBitBoard knightBlack = new KnightBitBoard(ChessPieceColors.Black);

            knightBlack.Bits = BoardSquare.H6;


            //RookBitBoard badMove = new RookBitBoard( ChessPieceColors.Black );
            //badMove.Bits = BoardSquare.B8;
            lolBoard.Update(pawnWhite);
            lolBoard.Update(knightWhite);
            lolBoard.Update(queenWhite);
            lolBoard.Update(rookWhite);
            lolBoard.Update(bishopWhite);
            lolBoard.Update(kingWhite);
            lolBoard.Update(pawnBlack);
            lolBoard.Update(rookBlack);
            lolBoard.Update(bishopBlack);
            lolBoard.Update(queenBlack);
            lolBoard.Update(kingBlack);
            lolBoard.Update(knightBlack);
            KingBitBoard test = new KingBitBoard(ChessPieceColors.Black);

            test.Bits = BoardSquare.C8;
            lolBoard.Update(test);

            List <ColoredBitBoard> legalMoves = new List <ColoredBitBoard>();

            legalMoves = MoveGen.GenerateLegalMoves(lolBoard, ChessPieceColors.Black);
            ColoredBitBoard bestMove = NegaMax.GetBestMove(lolBoard, 3, ChessPieceColors.White, MoveGen.GenerateLegalMoves, Eval.EvaluateState);

            Console.Write(legalMoves.ToString() + bestMove.ToString());
        }
示例#8
0
        private static void anotherIllegalMoveFromMovegen()
        {
            //Winboard winboard = new Winboard();
            ChessBoard lolBoard = new ChessBoard();

            lolBoard.InitializeGame();

            //White
            PawnBitBoard pawnWhite = new PawnBitBoard(ChessPieceColors.White);

            pawnWhite.Bits = BoardSquare.A3 | BoardSquare.C3 | BoardSquare.C4 | BoardSquare.F4 | BoardSquare.G4 | BoardSquare.H3;

            BishopBitBoard bishopWhite = new BishopBitBoard(ChessPieceColors.White);

            bishopWhite.Bits = 0;

            KingBitBoard kingWhite = new KingBitBoard(ChessPieceColors.White);

            kingWhite.Bits = BoardSquare.C2;

            RookBitBoard rookWhite = new RookBitBoard(ChessPieceColors.White);

            rookWhite.Bits = BoardSquare.A1 | BoardSquare.E2;

            KnightBitBoard knightWhite = new KnightBitBoard(ChessPieceColors.White);

            knightWhite.Bits = BoardSquare.B1;

            QueenBitBoard queenWhite = new QueenBitBoard(ChessPieceColors.White);

            queenWhite.Bits = 0;

            //Black
            PawnBitBoard pawnBlack = new PawnBitBoard(ChessPieceColors.Black);

            pawnBlack.Bits = BoardSquare.A7 | BoardSquare.B7 | BoardSquare.C6 | BoardSquare.E7 | BoardSquare.F7 | BoardSquare.G7 | BoardSquare.H7;

            RookBitBoard rookBlack = new RookBitBoard(ChessPieceColors.Black);

            rookBlack.Bits = BoardSquare.D8 | BoardSquare.H8;

            BishopBitBoard bishopBlack = new BishopBitBoard(ChessPieceColors.Black);

            bishopBlack.Bits = BoardSquare.F8;

            QueenBitBoard queenBlack = new QueenBitBoard(ChessPieceColors.Black);

            queenBlack.Bits = BoardSquare.D1;

            KingBitBoard kingBlack = new KingBitBoard(ChessPieceColors.Black);

            kingBlack.Bits = BoardSquare.C8;

            KnightBitBoard knightBlack = new KnightBitBoard(ChessPieceColors.Black);

            knightBlack.Bits = 0;


            //RookBitBoard badMove = new RookBitBoard( ChessPieceColors.Black );
            //badMove.Bits = BoardSquare.B8;
            lolBoard.Update(pawnWhite);
            lolBoard.Update(knightWhite);
            lolBoard.Update(queenWhite);
            lolBoard.Update(rookWhite);
            lolBoard.Update(bishopWhite);
            lolBoard.Update(kingWhite);
            lolBoard.Update(pawnBlack);
            lolBoard.Update(rookBlack);
            lolBoard.Update(bishopBlack);
            lolBoard.Update(queenBlack);
            lolBoard.Update(kingBlack);
            lolBoard.Update(knightBlack);


            ColoredBitBoard bestMove = NegaMax.GetBestMove(lolBoard, 3, ChessPieceColors.White, MoveGen.GenerateLegalMoves, Eval.EvaluateState);
        }
示例#9
0
        private static void f3d5failmove()
        {
            //Winboard winboard = new Winboard();
            ChessBoard lolBoard = new ChessBoard();

            lolBoard.InitializeGame();

            //White
            PawnBitBoard pawnWhite = new PawnBitBoard(ChessPieceColors.White);

            pawnWhite.Bits = BoardSquare.A3 | BoardSquare.B3 | BoardSquare.C3 | BoardSquare.D3 | BoardSquare.H4;

            BishopBitBoard bishopWhite = new BishopBitBoard(ChessPieceColors.White);

            bishopWhite.Bits = BoardSquare.C1;

            KingBitBoard kingWhite = new KingBitBoard(ChessPieceColors.White);

            kingWhite.Bits = BoardSquare.F2;

            RookBitBoard rookWhite = new RookBitBoard(ChessPieceColors.White);

            rookWhite.Bits = BoardSquare.A1 | BoardSquare.H1;

            KnightBitBoard knightWhite = new KnightBitBoard(ChessPieceColors.White);

            knightWhite.Bits = BoardSquare.B1 | BoardSquare.G1;

            QueenBitBoard queenWhite = new QueenBitBoard(ChessPieceColors.White);

            queenWhite.Bits = BoardSquare.F3;

            //Black
            PawnBitBoard pawnBlack = new PawnBitBoard(ChessPieceColors.Black);

            pawnBlack.Bits = BoardSquare.A7 | BoardSquare.B7 | BoardSquare.C5 | BoardSquare.D7 | BoardSquare.G7 | BoardSquare.G4 | BoardSquare.H7;

            RookBitBoard rookBlack = new RookBitBoard(ChessPieceColors.Black);

            rookBlack.Bits = BoardSquare.A8 | BoardSquare.F8;

            BishopBitBoard bishopBlack = new BishopBitBoard(ChessPieceColors.Black);

            bishopBlack.Bits = BoardSquare.C8 | BoardSquare.D6;

            QueenBitBoard queenBlack = new QueenBitBoard(ChessPieceColors.Black);

            queenBlack.Bits = BoardSquare.G6;

            KingBitBoard kingBlack = new KingBitBoard(ChessPieceColors.Black);

            kingBlack.Bits = BoardSquare.G8;

            KnightBitBoard knightBlack = new KnightBitBoard(ChessPieceColors.Black);

            knightBlack.Bits = BoardSquare.D5;


            //RookBitBoard badMove = new RookBitBoard( ChessPieceColors.Black );
            //badMove.Bits = BoardSquare.B8;
            lolBoard.Update(pawnWhite);
            lolBoard.Update(knightWhite);
            lolBoard.Update(queenWhite);
            lolBoard.Update(rookWhite);
            lolBoard.Update(bishopWhite);
            lolBoard.Update(kingWhite);
            lolBoard.Update(pawnBlack);
            lolBoard.Update(rookBlack);
            lolBoard.Update(bishopBlack);
            lolBoard.Update(queenBlack);
            lolBoard.Update(kingBlack);
            lolBoard.Update(knightBlack);


            ColoredBitBoard bestMove = NegaMax.GetBestMove(lolBoard, 3, ChessPieceColors.White, MoveGen.GenerateLegalMoves, Eval.EvaluateState);
        }
示例#10
0
        private static void anotherBlackQueenSideCastleFail()
        {
            ChessBoard lolBoard = new ChessBoard();

            lolBoard.InitializeGame();

            //White
            PawnBitBoard pawnWhite = new PawnBitBoard(ChessPieceColors.White);

            pawnWhite.Bits = BoardSquare.A2 | BoardSquare.C3 | BoardSquare.E3 | BoardSquare.H3;

            BishopBitBoard bishopWhite = new BishopBitBoard(ChessPieceColors.White);

            bishopWhite.Bits = 0;

            RookBitBoard rookWhite = new RookBitBoard(ChessPieceColors.White);

            rookWhite.Bits = BoardSquare.A1;

            KnightBitBoard knightWhite = new KnightBitBoard(ChessPieceColors.White);

            knightWhite.Bits = BoardSquare.B1;

            QueenBitBoard queenWhite = new QueenBitBoard(ChessPieceColors.White);

            queenWhite.Bits = BoardSquare.E2;

            KingBitBoard kingWhite = new KingBitBoard(ChessPieceColors.White);

            kingWhite.Bits = BoardSquare.D2;

            //black
            PawnBitBoard pawnBlack = new PawnBitBoard(ChessPieceColors.Black);

            pawnBlack.Bits = BoardSquare.A7 | BoardSquare.B7 | BoardSquare.C5 | BoardSquare.F7 | BoardSquare.G7 | BoardSquare.H5;

            BishopBitBoard bishopBlack = new BishopBitBoard(ChessPieceColors.Black);

            bishopBlack.Bits = BoardSquare.E4 | BoardSquare.F8;

            RookBitBoard rookBlack = new RookBitBoard(ChessPieceColors.Black);

            rookBlack.Bits = BoardSquare.A8 | BoardSquare.H8;

            KnightBitBoard knightBlack = new KnightBitBoard(ChessPieceColors.Black);

            knightBlack.Bits = BoardSquare.F4;

            QueenBitBoard queenBlack = new QueenBitBoard(ChessPieceColors.Black);

            queenBlack.Bits = BoardSquare.H3;

            KingBitBoard kingBlack = new KingBitBoard(ChessPieceColors.Black);

            kingBlack.Bits = BoardSquare.C8;

            //Update

            lolBoard.Update(pawnWhite);
            lolBoard.Update(knightWhite);
            lolBoard.Update(queenWhite);
            lolBoard.Update(rookWhite);
            lolBoard.Update(bishopWhite);
            lolBoard.Update(kingWhite);
            lolBoard.Update(pawnBlack);
            lolBoard.Update(rookBlack);
            lolBoard.Update(bishopBlack);
            lolBoard.Update(queenBlack);
            lolBoard.Update(kingBlack);
            lolBoard.Update(knightBlack);

            ColoredBitBoard bestMove = NegaMax.GetBestMove(lolBoard, 3, ChessPieceColors.White, MoveGen.GenerateLegalMoves, Eval.EvaluateState);
        }
示例#11
0
        private static void KingSideCastlingFAIL()
        {
            ChessBoard lolBoard = new ChessBoard();

            lolBoard.InitializeGame();

            //White
            PawnBitBoard pawnWhite = new PawnBitBoard(ChessPieceColors.White);

            pawnWhite.Bits = BoardSquare.A4 | BoardSquare.B4 | BoardSquare.C2 | BoardSquare.F4 | BoardSquare.H5;

            BishopBitBoard bishopWhite = new BishopBitBoard(ChessPieceColors.White);

            bishopWhite.Bits = BoardSquare.E3;

            RookBitBoard rookWhite = new RookBitBoard(ChessPieceColors.White);

            rookWhite.Bits = BoardSquare.C1 | BoardSquare.H1;

            KnightBitBoard knightWhite = new KnightBitBoard(ChessPieceColors.White);

            knightWhite.Bits = BoardSquare.G1;

            QueenBitBoard queenWhite = new QueenBitBoard(ChessPieceColors.White);

            queenWhite.Bits = 0;

            KingBitBoard kingWhite = new KingBitBoard(ChessPieceColors.White);

            kingWhite.Bits = BoardSquare.F2;

            //black
            PawnBitBoard pawnBlack = new PawnBitBoard(ChessPieceColors.Black);

            pawnBlack.Bits = BoardSquare.A7 | BoardSquare.B7 | BoardSquare.E7 | BoardSquare.E4 | BoardSquare.G4 | BoardSquare.G5 | BoardSquare.H7;

            BishopBitBoard bishopBlack = new BishopBitBoard(ChessPieceColors.Black);

            bishopBlack.Bits = BoardSquare.C3 | BoardSquare.C4;

            RookBitBoard rookBlack = new RookBitBoard(ChessPieceColors.Black);

            rookBlack.Bits = BoardSquare.A8 | BoardSquare.H8;

            KnightBitBoard knightBlack = new KnightBitBoard(ChessPieceColors.Black);

            knightBlack.Bits = BoardSquare.D4;

            QueenBitBoard queenBlack = new QueenBitBoard(ChessPieceColors.Black);

            queenBlack.Bits = 0;

            KingBitBoard kingBlack = new KingBitBoard(ChessPieceColors.Black);

            kingBlack.Bits = BoardSquare.G8;

            //Update

            lolBoard.Update(pawnWhite);
            lolBoard.Update(knightWhite);
            lolBoard.Update(queenWhite);
            lolBoard.Update(rookWhite);
            lolBoard.Update(bishopWhite);
            lolBoard.Update(kingWhite);
            lolBoard.Update(pawnBlack);
            lolBoard.Update(bishopBlack);
            lolBoard.Update(queenBlack);
            lolBoard.Update(knightBlack);
            lolBoard.Update(kingBlack);

            List <ColoredBitBoard> legalMoves = new List <ColoredBitBoard>();

            legalMoves = MoveGen.GenerateLegalMoves(lolBoard, ChessPieceColors.White);
            ColoredBitBoard bestMove = NegaMax.GetBestMove(lolBoard, 3, ChessPieceColors.White, MoveGen.GenerateLegalMoves, Eval.EvaluateState);
        }
示例#12
0
        public void Undo_BlackKingLeft_Equal()
        {
            ChessBoard testBoard = new ChessBoard();

            testBoard.InitializeGame();

            PawnBitBoard move1 = new PawnBitBoard(ChessPieceColors.White);

            move1.Bits = (testBoard.WhitePawn.Bits ^ BoardSquare.H2) | BoardSquare.H3;
            PawnBitBoard move2 = new PawnBitBoard(ChessPieceColors.Black);

            move2.Bits = (testBoard.BlackPawn.Bits ^ BoardSquare.C7) | BoardSquare.C6;
            PawnBitBoard move3 = new PawnBitBoard(ChessPieceColors.White);

            move3.Bits = (move1.Bits ^ BoardSquare.H3) | BoardSquare.H4;
            QueenBitBoard move4 = new QueenBitBoard(ChessPieceColors.Black);

            move4.Bits = (testBoard.BlackQueen.Bits ^ BoardSquare.D8) | BoardSquare.C7;
            PawnBitBoard move5 = new PawnBitBoard(ChessPieceColors.White);

            move5.Bits = (move3.Bits ^ BoardSquare.H4) | BoardSquare.H5;
            KingBitBoard move6 = new KingBitBoard(ChessPieceColors.Black);

            move6.Bits = (testBoard.BlackKing.Bits ^ BoardSquare.E8) | BoardSquare.D8;
            PawnBitBoard move7 = new PawnBitBoard(ChessPieceColors.White);

            move7.Bits = (move5.Bits ^ BoardSquare.H5) | BoardSquare.H6;
            PawnBitBoard move8 = new PawnBitBoard(ChessPieceColors.Black);

            move8.Bits = (move2.Bits ^ BoardSquare.B7) | BoardSquare.B6;
            PawnBitBoard move9 = new PawnBitBoard(ChessPieceColors.White);

            move9.Bits = (move7.Bits ^ BoardSquare.G2) | BoardSquare.G3;
            BishopBitBoard move10 = new BishopBitBoard(ChessPieceColors.Black);

            move10.Bits = (testBoard.BlackBishop.Bits ^ BoardSquare.C8) | BoardSquare.B7;
            PawnBitBoard move11 = new PawnBitBoard(ChessPieceColors.White);

            move11.Bits = (move9.Bits ^ BoardSquare.G3) | BoardSquare.G4;
            KingBitBoard move12 = new KingBitBoard(ChessPieceColors.Black);

            move12.Bits = (move6.Bits ^ BoardSquare.D8) | BoardSquare.C8;

            ulong expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move1);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move1);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move2);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move2);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move3);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move3);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move4);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move4);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move5);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move5);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move6);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move6);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move7);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move7);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move8);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move8);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move9);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move9);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move10);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move10);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move11);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move11);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move12);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
        }
示例#13
0
        public void Undo_WhiteKingQueenSideCastling_Equal()
        {
            ChessBoard testBoard = new ChessBoard();

            testBoard.InitializeGame();

            KnightBitBoard move1 = new KnightBitBoard(ChessPieceColors.White);

            move1.Bits = (testBoard.WhiteKnight.Bits ^ BoardSquare.B1) | BoardSquare.C3;
            PawnBitBoard move2 = new PawnBitBoard(ChessPieceColors.Black);

            move2.Bits = (testBoard.BlackPawn.Bits ^ BoardSquare.H7) | BoardSquare.H6;
            PawnBitBoard move3 = new PawnBitBoard(ChessPieceColors.White);

            move3.Bits = (testBoard.WhitePawn.Bits ^ BoardSquare.B2) | BoardSquare.B3;
            PawnBitBoard move4 = new PawnBitBoard(ChessPieceColors.Black);

            move4.Bits = (move2.Bits ^ BoardSquare.H6) | BoardSquare.H5;
            BishopBitBoard move5 = new BishopBitBoard(ChessPieceColors.White);

            move5.Bits = (testBoard.WhiteBishop.Bits ^ BoardSquare.C1) | BoardSquare.A3;
            PawnBitBoard move6 = new PawnBitBoard(ChessPieceColors.Black);

            move6.Bits = (move4.Bits ^ BoardSquare.H5) | BoardSquare.H4;
            QueenBitBoard move7 = new QueenBitBoard(ChessPieceColors.White);

            move7.Bits = (testBoard.WhiteQueen.Bits ^ BoardSquare.D1) | BoardSquare.B1;
            PawnBitBoard move8 = new PawnBitBoard(ChessPieceColors.Black);

            move8.Bits = (move6.Bits ^ BoardSquare.H4) | BoardSquare.H3;
            QueenBitBoard move9 = new QueenBitBoard(ChessPieceColors.White);

            move9.Bits = (move7.Bits ^ BoardSquare.B1) | BoardSquare.B2;
            PawnBitBoard move10 = new PawnBitBoard(ChessPieceColors.Black);

            move10.Bits = (move8.Bits ^ BoardSquare.G7) | BoardSquare.G5;
            KingBitBoard move11 = new KingBitBoard(ChessPieceColors.White);

            move11.Bits = (testBoard.WhiteKing.Bits ^ BoardSquare.E1) | BoardSquare.C1;

            ulong expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move1);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move1);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move2);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move2);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move3);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move3);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move4);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move4);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move5);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move5);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move6);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move6);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move7);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move7);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move8);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move8);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move9);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move9);
            expectedHash = testBoard.BoardHash.Key;

            testBoard.Update(move10);
            testBoard.Undo();
            Assert.Equal(expectedHash, testBoard.BoardHash.Key);
            testBoard.Update(move10);
            expectedHash = testBoard.BoardHash.Key;

            expectedHash = testBoard.BoardHash.Key;
            testBoard.Update(move11);
            testBoard.Undo();
            ulong testHash = testBoard.BoardHash.Key;

            Assert.Equal(expectedHash, testHash);
        }