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));
        }
Exemple #4
0
        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);
        }