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); }
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}"); } } }