function minimax(state, depth, maximizing_player): if state is terminal or depth is 0: return evaluate(state) if maximizing_player: best_score = -infinity for each possible move: score = minimax(next_state, depth - 1, false) best_score = max(best_score, score) return best_score else: best_score = +infinity for each possible move: score = minimax(next_state, depth - 1, true) best_score = min(best_score, score) return best_score