public void Should_find_promotions(string sanText, string expectedMoveText, Colours toPlay, ChessPieceName promotionPiece) { var builder = new ChessBoardBuilder() .Board(" k " + " P" + " " + " " + " " + " " + " " + " K " ); var game = ChessFactory.CustomChessGame(builder.ToGameSetup(), toPlay); var move = new SanMoveFinder(game.BoardState) .Find(sanText.ToSan(), toPlay); Assert.NotNull(move, "No move found!"); Assert.That(move.ToChessCoords(), Is.EqualTo(expectedMoveText)); var moveExtraData = move.ExtraData; Assert.NotNull(moveExtraData); var data = ChessFactory.MoveExtraData(toPlay, promotionPiece); Assert.That(move.ToChessCoords(), Is.EqualTo(expectedMoveText)); Assert.That(data, Is.EqualTo(moveExtraData), $"Unexpected promotion: {moveExtraData}"); }
public void Should_find_coord_moves(string sanText, string expectedMoveText) { var game = ChessFactory.NewChessGame(); var move = new SanMoveFinder(game.BoardState) .Find(sanText.ToSan(), Colours.White); Assert.NotNull(move, "No move found!"); Assert.That(move.ToChessCoords(), Is.EqualTo(expectedMoveText)); }
public void Should_find_castle_moves(string sanText, string expectedMoveText, Colours toPlay) { var builder = new ChessBoardBuilder() .Board("r k r" + " " + " " + " " + " " + " " + " " + "R K R" ); var game = ChessFactory.CustomChessGame(builder.ToGameSetup(), toPlay); var move = new SanMoveFinder(game.BoardState) .Find(sanText.ToSan(), toPlay); Assert.NotNull(move, "No move found!"); Assert.That(move.ToChessCoords(), Is.EqualTo(expectedMoveText)); }
public string Move(string input) { if (!StandardAlgebraicNotation.TryParse(input, out var san)) { // TODO: More detailed error return($"Error: invalid move {input}, are you using upper-case for Files?"); } _sanMoveFinder = new SanMoveFinder(_engine.BoardState); var move = _sanMoveFinder.Find(san, (Colours)_engine.CurrentPlayer); if (move == null) { return($"Error: No matching move found: {input}"); } var validMove = PlayValidMove(move); return(validMove); }