vector<Move> calculate() { vector<Move> list_moves; Search* engine; if (method_flag == 0) { engine = new AB(2); } else if (method_flag == 1) { Board::init(); engine = new MCTS(); } else if (method_flag == 2) { AB * minimax = new AB(2); minimax->setPruning(false); engine = minimax; } else { vector<Move> moves = Board::available_moves(initial_board, Board::move_to_player(initial_move), initial_move, 0, 1); list_moves.push_back(moves[rand() % ((int)moves.size())]); moves = Board::available_moves(Board::make_move(initial_board, list_moves[0], Board::move_to_player(initial_move)), Board::move_to_player(initial_move + 1), initial_move + 1, 1, 0); list_moves.push_back(moves[rand() % ((int)moves.size())]); } if (method_flag != 3) { engine->solve(initial_board, initial_move); list_moves = engine->get_solution(); delete engine; } return list_moves; }