public void ConvertStringMoveToBitBoard_IsCorrectPromotionQueenBitBoardReturned_Equal()
        {
            ChessBoard chessBoard = new ChessBoard();

            chessBoard.WhitePawn.Bits = BoardSquare.A2 | BoardSquare.B2 | BoardSquare.C2 | BoardSquare.D2 | BoardSquare.E7 | BoardSquare.F2 | BoardSquare.G2 | BoardSquare.H2;
            string stringMove = "e7e8q";

            StringBitboardConverter converter = new StringBitboardConverter(chessBoard, ChessPieceColors.White);

            PawnBitBoard currentMoveBitBoard = (PawnBitBoard)converter.ConvertStringMoveToBitBoard(stringMove);

            PawnBitBoard correctMoveBitBoard = new PawnBitBoard(ChessPieceColors.Black);

            correctMoveBitBoard.Bits = BoardSquare.A2 | BoardSquare.B2 | BoardSquare.C2 | BoardSquare.D2 | BoardSquare.E8 | BoardSquare.F2 | BoardSquare.G2 | BoardSquare.H2;
            correctMoveBitBoard.Promote(PawnBitBoard.PromotionPiece.Queen);

            Assert.Equal(correctMoveBitBoard.GetType(), currentMoveBitBoard.GetType());
            Assert.Equal(correctMoveBitBoard.Bits, currentMoveBitBoard.Bits);
            Assert.Equal(correctMoveBitBoard.Promotion, currentMoveBitBoard.Promotion);
        }
示例#2
0
        private void DoMove()
        {
            if (whiteTurn && isFirstGo)
            {
                winboardColor      = ChessPieceColors.Black;
                engineColor        = ChessPieceColors.White;
                _winboardConverter = new StringBitboardConverter(chessBoard, winboardColor);
                _engineConverter   = new StringBitboardConverter(chessBoard, engineColor);
            }
#if DEBUG
            Stopwatch sw = new Stopwatch();
            sw.Start();
#endif
            ColoredBitBoard bitBoardMoveTaken = NegaMax.GetBestMove(chessBoard, depth, engineColor, MoveGen.GenerateLegalMoves, Eval.EvaluateState);
#if DEBUG
            sw.Stop();
            Logger.OutputTime(sw.ElapsedMilliseconds.ToString());
            sw.Reset();
#endif

            if ((bitBoardMoveTaken != null) && (chessBoard.State != ChessBoardGameState.Draw))
            {
                string stringMoveTaken = _engineConverter.ConvertBitBoardMoveToString(bitBoardMoveTaken);

                Debug.Assert(STRINGMOVE_FORMAT.IsMatch(stringMoveTaken));

                chessBoard.Update(bitBoardMoveTaken);
                Logger.OutputMove(stringMoveTaken);


#if DEBUG_SOLO
                if (Enemy)
                {
                    Console.WriteLine(stringMoveTaken);
                }
                else
                {
                    OtherProcess.StandardInput.WriteLine(stringMoveTaken);
                }
#else
                Console.WriteLine("move " + stringMoveTaken);
#endif

                whiteTurn = !whiteTurn;
            }
            else
            {
                if (chessBoard.WhiteKing.IsChecked)
                {
                    chessBoard.State = ChessBoardGameState.BlackMate;
                    Console.WriteLine("result 0-1 {Black Wins by Checkmate}");
                }
                else if (chessBoard.BlackKing.IsChecked)
                {
                    chessBoard.State = ChessBoardGameState.WhiteMate;
                    Console.WriteLine("result 1-0 {White Wins by Checkmate}");
                }
                else
                {
                    chessBoard.State = ChessBoardGameState.Draw;
                    Console.WriteLine("result 1/2-1/2 {Draw}");
                }
            }
        }