public static bool TryMove(this MCTS <GameNode> root, int iterations, out MCTS <GameNode> newRoot, bool preferAutoMove = true) { if (preferAutoMove && root.TryAutoMove(out newRoot)) { return(true); } else { root.Execute(iterations); if (root.GetBestMove() < 0) { newRoot = root; return(false); } else { newRoot = root.GetChildByMove(root.GetBestMove()); return(true); } } }