From 74de68cf0d6f99ba96bbb1217645bddb713cac79 Mon Sep 17 00:00:00 2001 From: Peisong Xiao Date: Fri, 5 Jul 2024 12:11:09 -0400 Subject: [PATCH] added: list of arguments edit: future framework of main --- src/arguments.cc | 2 ++ src/arguments.h | 22 +++++++++++++++++++++- src/console_input.cc | 4 ++++ src/constants.h | 6 +++--- src/curses_input.cc | 6 ++++++ src/file_input.cc | 4 ++++ src/game.h | 13 ++++++++----- src/main.cc | 29 ++++++++++++----------------- 8 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 src/arguments.cc diff --git a/src/arguments.cc b/src/arguments.cc new file mode 100644 index 0000000..e22170d --- /dev/null +++ b/src/arguments.cc @@ -0,0 +1,2 @@ +#include "arguments.h" + diff --git a/src/arguments.h b/src/arguments.h index 0b7b393..bc46ae5 100644 --- a/src/arguments.h +++ b/src/arguments.h @@ -1,5 +1,6 @@ #ifndef __ARGUMENTS_H__ #define __ARGUMENTS_H__ +#include #include "log.h" #include "cursor.h" #include "display.h" @@ -7,6 +8,25 @@ #include "constants.h" -feature proc_args(int argc, char **argv, cursor &curse, input &in, logger &log); +/* Arguments +-n : Use ncurses for I/O +-r : Randomly generate maps +-m : Enabled a main menu + options +-c : Enemies chase the player (through doors and up stairs) +-i : Enable inventory +-t : Enable throw +-R : Enable revisiting levels +-S [seed] : Sets initial seed to seed +-s [file] : Enable saves +-L [file] : Enable logging to file +-I [file] : Reads commands from file. CANNOT BE USED WITH -n. +-O [file] : Outputs to file. CANNOT BE USED WITH -n. + */ + +feature proc_args(int argc, char **argv, + std::unique_ptr &curse, + std::unique_ptr &in, + std::unique_ptr &out, + std::unique_ptr &log); #endif diff --git a/src/console_input.cc b/src/console_input.cc index 213d888..568b61b 100644 --- a/src/console_input.cc +++ b/src/console_input.cc @@ -12,6 +12,10 @@ game_command console_input::get_command() { if (cmd == "q") return game_command_terminate; + else if (cmd == "f") + return the_world; + else if (cmd == "r") + return game_restart; else if (cmd == "u") return (game_command)((tmp = get_direction(cmd)) == game_command_panic diff --git a/src/constants.h b/src/constants.h index d649c07..c13bcef 100644 --- a/src/constants.h +++ b/src/constants.h @@ -1,6 +1,3 @@ -// TODO: Consider moving the contents of this header to their relevant -// headers - #ifndef __CONSTANTS_H__ #define __CONSTANTS_H__ #include @@ -27,6 +24,7 @@ enum game_command {game_command_terminate = 0, attack_northeast, attack_northwest, attack_southeast, attack_southwest, up_stairs, down_stairs, + the_world, game_restart, game_command_pass, game_command_panic }; @@ -78,6 +76,8 @@ const feature FEATURE_THROW = 1 << 4; const feature FEATURE_REVISIT = 1 << 5; const feature FEATURE_LOG = 1 << 6; const feature FEATURE_SAVE = 1 << 7; +const feature FEATURE_MENU = 1 << 8; +const feature FEATURE_PANIC = 1 << 29; typedef std::vector position_list; typedef std::vector direction_list; diff --git a/src/curses_input.cc b/src/curses_input.cc index 7c14444..3f82d7e 100644 --- a/src/curses_input.cc +++ b/src/curses_input.cc @@ -37,6 +37,12 @@ game_command curses_input::get_command() { case '>': return game_command::down_stairs; + case 'q': + return game_command_terminate; + case 'f': + return game_command::the_world; + case 'r': + return game_restart; default: return game_command_pass; diff --git a/src/file_input.cc b/src/file_input.cc index 900ef5a..f4e4670 100644 --- a/src/file_input.cc +++ b/src/file_input.cc @@ -12,6 +12,10 @@ game_command file_input::get_command() { if (cmd == "q") return game_command_terminate; + else if (cmd == "f") + return the_world; + else if (cmd == "r") + return game_restart; else if (cmd == "u") return (game_command)((tmp = get_direction(cmd)) == game_command_panic diff --git a/src/game.h b/src/game.h index 8fe47cb..a486547 100644 --- a/src/game.h +++ b/src/game.h @@ -4,7 +4,7 @@ #include #include "constants.h" #include "display.h" -#include "cursor.h" +#include "input.h" #include "rng.h" #include "characters.h" #include "map.h" @@ -12,14 +12,17 @@ class game final { private: - display &out; - cursor &curse; + std::unique_ptr ∈ + std::unique_ptr &out; + std::unique_ptr &log; feature features; std::unique_ptr rng; std::unique_ptr player; - std::vector levels; public: - game(cursor &new_curse, display &new_display, int argc, char **argv); + game(const feature enabled_features, + std::unique_ptr &new_in, + std::unique_ptr &new_out, + std::unique_ptr &new_log); game_status run(); private: int getcmd() const; diff --git a/src/main.cc b/src/main.cc index d3299d5..b9af1e6 100644 --- a/src/main.cc +++ b/src/main.cc @@ -5,28 +5,23 @@ #include "arguments.h" // The way things are designed to work: -// 1. out initializes a new display (this is a virtual one) -// 2. out initializes output based on given args -// This is when curse is initialized (curse.init()) -// 3. game_proc binds output to out and curses (if needed) +// to be filled... -// Notes: -// 1. game sends all output to display and gets all input from input -// 2. display either renders to file (console) or curse -// 3. +int main(int argc, char **argv) { + std::unique_ptr curse; + std::unique_ptr in; + std::unique_ptr out; + std::unique_ptr log; -int main(int argc, char **argv) { - logger log; - cursor curse; - input in(curse); - feature enabled_features = proc_args(argc, argv, curse, in, log); - display out(curse, enabled_features); + feature enabled_features = proc_args(argc, argv, curse, in, out, log); - // binds display to the game - game game_proc(in, out, argc, argv); + if(enabled_features & FEATURE_PANIC) + std::cerr<<"Wrong arguments you dumbass :)"<render(); return 0; }