Beispiel #1
0
        // TODO: Include option to update board in-place (only rows of start, end of move)
        public static void PrintBoard(Game game, IEnumerable <Square> highlighted)
        {
            const string rankDivider = "  -----------------";

            Span <bool> highlightSquares = stackalloc bool[64];

            foreach (var sq in highlighted)
            {
                highlightSquares[BitTranslator.GetSquareIndex(sq.File, sq.Rank)] = true;
            }

            Console.WriteLine(rankDivider);

            for (var rank = 8; rank > 0; rank--)
            {
                Console.Write((char)(rank + '0'));
                Console.Write(" |");

                for (var file = 'a'; file <= 'h'; file++)
                {
                    var contents       = game.GetSquareContents(file, rank);
                    var representation = PiecesAsLetters[contents];

                    var currentIndex = BitTranslator.GetSquareIndex(file, rank);

                    if (highlightSquares[currentIndex])
                    {
                        Console.BackgroundColor = ConsoleColor.Yellow;
                        Console.ForegroundColor = ConsoleColor.Black;
                        Console.Write(representation);

                        Console.ResetColor();
                    }
                    else
                    {
                        Console.Write(representation);
                    }

                    Console.Write('|');
                }

                Console.WriteLine();
                Console.WriteLine(rankDivider);
            }

            Console.Write("  ");
            for (var file = 'A'; file <= 'H'; file++)
            {
                Console.Write(' ');
                Console.Write(file);
            }

            Console.WriteLine();
            Console.WriteLine();
        }
Beispiel #2
0
        public void GeneratesExpectedSquares_MatchesCount(string sq, SquareContents piece, int expectedSquares)
        {
            var   square    = MoveParser.ParseSquare(sq);
            ulong bitSquare = BitTranslator.TranslateToBit(square.File, square.Rank);
            var   board     = BoardState.Empty.SetPiece(bitSquare, piece);
            var   game      = new Game(board);

            var validMoves = game.GetValidMoves(square.File, square.Rank);

            Assert.That(validMoves.Count, Is.EqualTo(expectedSquares));
        }
Beispiel #3
0
        public void GeneratesExpectedSquares_OmitsUnexpected(string sq, SquareContents piece, string expectedSquares)
        {
            var expected = expectedSquares.Split(',').Select(MoveParser.ParseSquare).ToArray();

            var   square    = MoveParser.ParseSquare(sq);
            ulong bitSquare = BitTranslator.TranslateToBit(square.File, square.Rank);
            var   board     = BoardState.Empty.SetPiece(bitSquare, piece);

            var game = new Game(board);

            var validMoves = game.GetValidMoves(square.File, square.Rank).ToArray();

            Assert.That(validMoves, Does.Not.Contain(expected[0]));
        }
Beispiel #4
0
        public void GetValidMoves_DetectsWhenOnEdge(string position, string targetSq, string expectedSq)
        {
            var fen   = new FenSerializer();
            var board = fen.Deserialize(position);

            var target     = MoveParser.ParseSquare(targetSq);
            var targetMask = BitTranslator.TranslateToBit(target.File, target.Rank);

            var validMovesMask = MoveGenerator.GetBishopMovements(targetMask, board);
            var validMoves     = BitTranslator.TranslateToSquares(validMovesMask);

            var expected = MoveParser.ParseSquare(expectedSq);

            Assert.That(validMoves, Does.Contain(expected));
        }
Beispiel #5
0
        public void PawnPromotion_WillClearPawnFromFinalSquare()
        {
            const string fen  = "rnb1kbnr/pppp1ppp/8/8/4q3/1P5P/P1PP1Kp1/RNBQ1BNR";
            const string move = "gxh1=N#";

            var fenBoard = new FenSerializer().Deserialize(fen);
            var game     = new Game(fenBoard, PieceColor.Black);

            var result = game.Move(move);

            var board = game.CurrentState.Board;

            var targetSquare = BitTranslator.TranslateToBit('h', 1);

            Assert.That(board.Pawns & targetSquare, Is.EqualTo(0));
            Assert.That(board.Knights & targetSquare, Is.EqualTo(targetSquare));

            Assert.That(board.WhitePieces & targetSquare, Is.EqualTo(0));
            Assert.That(board.BlackPieces & targetSquare, Is.EqualTo(targetSquare));
        }
Beispiel #6
0
 internal BoardState SetPiece(Square square, SquareContents contents)
 {
     return(BoardStateMutator.SetPiece(this, BitTranslator.TranslateToBit(square.File, square.Rank), contents));
 }