public LichessAgent(string gameId) { cancellationTokenSource = new CancellationTokenSource(); GameId = gameId; Mutex gameStateReceived = new Mutex(); #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed ChessBot.StreamGameState(GameId, evt => { switch ((string)evt["type"]) { case "gameFull": //TODO: FixIt break; case "gameState": var mvs = ((string)evt["moves"]).Split(" "); if (mvs.Length > (Game.MovesHistory).Count) { var mv = mvs.Last(); var from = new Position('8' - mv[1], mv[0] - 'a'); var to = new Position('8' - mv[3], mv[2] - 'a'); var transformToFigure = Figure.FiguresType.None; if (mv.Length > 4) { switch (mv[4]) { case 'r': transformToFigure = Figure.FiguresType.Rook; break; case 'n': transformToFigure = Figure.FiguresType.Knight; break; case 'b': transformToFigure = Figure.FiguresType.Bishop; break; case 'q': transformToFigure = Figure.FiguresType.Queen; break; } } MoveWanted.WaitOne(); MoveWanted.Reset(); passed = new Move(from, to) { transformTo = transformToFigure }; MoveMade.Set(); } break; } }, cancellationTokenSource.Token, Tokens.FairBotToken); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed }
public UciController() { chessBoard = new ChessBoard(); chessBot = new ChessBot(new OnlyPieceCountMatterEvaluator(), 3, Color.Nobody); commandActions = new Dictionary <string, Action>(); commandActions[UciCommands.Uci] = HandleUCICommand; commandActions[UciCommands.IsReady] = HandleIsReadyCommand; commandActions[UciCommands.NewGame] = HandleNewGameCommand; }
public void PawnAtEndBecomesQueen_BotHandlesIt() { var c = ChessBoard.CreateFromFenString("rn1qk2r/1pP3p1/8/pb1n3p/N7/7P/PPPbNPP1/R1BQKBR1"); var bot = new ChessBot(new OnlyPieceCountMatterEvaluator(), 3, Color.White, true); var move = bot.FindMove(c); Assert.IsTrue(true); }
public void Depth_4_Performance() { var bot = new ChessBot(new OnlyPieceCountMatterEvaluator(), 4, Color.White, true); var board = new ChessBoard(); var botMove = bot.FindMove(board); Assert.IsTrue(true); }
public void MoveIsChosen() { var bot = new ChessBot(new OnlyPieceCountMatterEvaluator(), 1, Color.White, true); var board = new ChessBoard(); var move = new Move { Piece = board.GetPieceAtPosition(0, 1), TargetPosition = new Position(5, 0) }; board.MakeMove(move); var botMove = bot.FindMove(board); Assert.AreEqual(new Position(5, 0), botMove.TargetPosition); }
public void InCheckWhiteIllegalMoveBot() { var bot = new ChessBot(new OnlyPieceCountMatterEvaluator(), 3, Color.White, true); var c = new ChessBoard(); var board = new Piece[8, 8]; board[0, 2] = new King(Color.Black) { AmountOfMoves = 2 }; board[0, 4] = new Rook(Color.Black) { AmountOfMoves = 1 }; board[1, 6] = new Knight(Color.Black); board[2, 6] = new Pawn(Color.Black); board[2, 7] = new Pawn(Color.Black); board[3, 0] = new Pawn(Color.Black); board[5, 1] = new Bishop(Color.Black); board[2, 2] = new Bishop(Color.White); board[3, 1] = new Knight(Color.White); board[4, 0] = new Pawn(Color.White); board[4, 1] = new Pawn(Color.White); board[4, 3] = new Pawn(Color.White); board[5, 4] = new King(Color.White); board[5, 6] = new Pawn(Color.White); board[6, 3] = new Bishop(Color.White); c.Board = board; var allMoves = c.GetAllAvailableMoves(Color.White); bot.FindMove(c); Assert.AreEqual(6, allMoves.Count()); }
public ViewModel() { Moves = new ObservableCollection <Move>(); Board = new ChessBoard(); NextColor = Color.White; Fens = new ObservableCollection <string>(); Fens.Add(Board.GetFenString()); SelectedFen = Fens.Last(); blackDepth = 3; whiteDepth = 3; availableBots = new ObservableCollection <AvailableBot>(); availableBots.Add(new AvailableBot() { Name = "Player", BoardEvaluator = null }); foreach (var boardEvaluator in ConfigManager.LoadAllBots()) { var bot = new AvailableBot() { Name = boardEvaluator.Name, BoardEvaluator = boardEvaluator }; availableBots.Add(bot); } SelectedWhiteBot = availableBots[0]; SelectedBlackBot = availableBots[0]; WhiteBot = new ChessBot(selectedWhiteBot.BoardEvaluator, whiteDepth, Color.White); BlackBot = new ChessBot(selectedBlackBot.BoardEvaluator, blackDepth, Color.Black); }
public void CommitBlackBot() { BlackBot = new ChessBot(selectedBlackBot.BoardEvaluator, blackDepth, Color.Black); }
public void CommitWhiteBot() { WhiteBot = new ChessBot(SelectedWhiteBot.BoardEvaluator, whiteDepth, Color.White); }