private void MakeTree(int depth, Board board) { var possibleMoves = board.PossibleMoves(); foreach (var move in possibleMoves) { board.MakeMove(move); MoveTree tree; var serial = board.SerialNumber; if (_calculated.ContainsKey(serial)) { tree = _calculated[serial]; if (tree._nodes.Count > 0 && tree._nodes.First().Move.Piece.Color == move.Piece.Color) { throw new Exception(); } } else { tree = new MoveTree(depth - 1, board, _calculated); _calculated[serial] = tree; } var node = new Node(move, tree); _nodes.Add(node); board.UndoLastMove(); } }
public Node(IMove move, MoveTree tree) { Move = move; Tree = tree; }