#include <iostream>
#include <ale_interface.hpp>
#ifdef __USE_SDL
#include <SDL.h>
#endif
using namespace std;
int main(int argc, char** argv) {
if (argc < 2) {
std::cerr << "Usage: " << argv[0] << " rom_file" << std::endl;
return 1;
}
ale::ALEInterface ale;
ale.setInt("random_seed", 123);
ale.setFloat("repeat_action_probability", 0.25);
#ifdef __USE_SDL
ale.setBool("display_screen", true);
ale.setBool("sound", true);
#endif
ale.loadROM(argv[1]);
ale::ModeVect modes = ale.getAvailableModes();
ale::DifficultyVect difficulties = ale.getAvailableDifficulties();
cout << "Number of available modes: " << modes.size() << endl;
cout << "Number of available difficulties: " << difficulties.size() << endl;
ale::ActionVect legal_actions = ale.getLegalActionSet();
for (int i = 0; i < modes.size(); i++) {
for (int j = 0; j < difficulties.size(); j++) {
ale.setDifficulty(difficulties[j]);
ale.setMode(modes[i]);
ale.reset_game();
cout << "Mode " << modes[i] << ", difficulty " << difficulties[j] << ":"
<< endl;
float totalReward = 0;
while (!ale.game_over()) {
ale::Action a = legal_actions[rand() % legal_actions.size()];
float reward = ale.act(a);
totalReward += reward;
}
cout << "Episode ended with score: " << totalReward << endl;
ale.reset_game();
}
}
return 0;
}