private IEnumerable <MoveAndNodes> GetMovesAndNodeRoot(int depth)
        {
            if (depth == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(depth), depth, null);
            }

            var possibleMoves = _moves[depth];
            var moveCount     = 0;

            _moveGenerator.GetAllLegalMoves(_currentBoard, possibleMoves, ref moveCount);
            for (var i = 0; i < moveCount; i++)
            {
                var move = possibleMoves[i];
                //_currentBoard.TestMove(move);
                _currentBoard.DoMove2(move, false);
                //_eval.Evaluate(_currentBoard);
                var nodes = GetNodesInner(_currentBoard, depth - 1);
                //var nodes = 1;
                _currentBoard.UndoMove(false);
                var moveStr      = move.ToPositionString();
                var moveAndNodes = new MoveAndNodes(moveStr, nodes, move);
                yield return(moveAndNodes);
            }
        }
Example #2
0
        private static void TestMove()
        {
            var board = MakeBoard("rnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR b KQkq -");

            //board.DoMove2(new Move(ChessPosition.D2, ChessPosition.D3, ChessPiece.WhitePawn));
            //board.UndoMove();
            Console.WriteLine(board.Print());
            var slidingMoveGenerator = new MagicBitboardsService();
            //var evaluationService = new EvaluationService();
            //Console.WriteLine(evaluationService.Evaluate(board));

            var attacksService = new AttacksService(slidingMoveGenerator);
            var pinDetector    = new PinDetector(slidingMoveGenerator);
            var validator      = new MoveValidator(attacksService, slidingMoveGenerator, pinDetector);
            var movesService   = new MoveGenerator(attacksService, slidingMoveGenerator, pinDetector, validator);
            var forWhite       = true;
            var moves          = new Move[218];
            var moveCount      = 0;

            movesService.GetAllLegalMoves(board, moves, ref moveCount);
            //var dests = moves.Select(x => x.To);
            //var toMoveBoard = fact.PositionsToBitBoard(dests);
            //var attacked = attacksService.GetAllAttacked(board);

            //var newMove = new Move(4,2,ChessPiece.WhiteKing);
            //board.DoMove2(newMove);

            //Debugging.ShowBitBoard(board.BitBoard[ChessPiece.WhiteKing], board.BitBoard[ChessPiece.WhiteRook]);
        }