#include "conversion.hpp" #include "game/options.hpp" #include "randomization.hpp" #include #include #include #include #include namespace { void optarg_error(char arg, const std::string_view &error) { std::cout << "Error: Invalid option argument for -" << arg << ". " << error << std::endl; exit(EXIT_FAILURE); } /** * Returns the current optarg as a string view. */ std::string_view get_str_optarg() { return std::string_view(optarg); } /** * Returns the current optarg as a unsigned integer. * * @param arg The current command-line argument character * @param check_zero Whether or not to make sure that the result is not zero */ unsigned int get_uint_optarg(char arg, bool check_zero = false) { unsigned int num = 0; try { num = str_to_uint(get_str_optarg()); if (check_zero && num == 0) { throw "It should not be 0"; } } catch (const char *error) { optarg_error(arg, std::string_view(error)); } return num; } } // namespace constexpr std::array options = { option({"seed", required_argument, nullptr, 's'}), option({"help", no_argument, nullptr, 0}), option({nullptr, 0, nullptr, 0})}; int main(int argc, char *argv[]) { auto args = std::vector(argv, argv + argc); GameOptions game_options; char arg = 0; while ((arg = static_cast( getopt_long(argc, argv, "s:", options.data(), nullptr))) != -1) { switch (arg) { case 's': { auto seed = get_uint_optarg(arg, true); game_options.random_gen = std::make_shared(seed); break; } case 0: { std::cout << "Usage: " << args[0] << " [OPTION]...\n\n" "Options:\n" << " -s, --seed SEED The randomization seed used\n" " --help Displays usage information" << std::endl; return EXIT_SUCCESS; } case '?': { std::cout << "\nTry '" << args[0] << " --help' for more information" << std::endl; return EXIT_FAILURE; } default: abort(); } } if (game_options.random_gen == nullptr) { game_options.random_gen = std::make_shared(); } // auto game = Game(game_options); // game.run(); }