added: input and its subclasses

This commit is contained in:
2024-07-04 22:47:25 -04:00
parent c67dbcc62a
commit f5b5f180a0
9 changed files with 245 additions and 18 deletions

42
src/console_input.cc Normal file
View File

@ -0,0 +1,42 @@
#include "console_input.h"
#include <utility>
#include <string>
console_input::console_input(std::istream &cin):
in{cin} {}
inline game_command get_direction(std::string &str, const char *COMMANDS[],
const int COMMANDS_CNT) {
for (int i = 0; i < COMMANDS_CNT; ++i)
if (str == COMMANDS[i] &&
i >= game_command::move_north &&
i <= game_command::move_southeast)
return (game_command)i;
return game_command_panic;
}
game_command console_input::get_command() {
const char *COMMANDS[] = {
"q", "no", "so", "ea", "we", "ne", "nw", "se", "sw", "u", "a"
};
const int COMMANDS_CNT = 11;
std::string cmd;
in >> cmd;
game_command tmp;
if (cmd == "q")
return game_command_terminate;
else if (cmd == "u")
return (game_command)((tmp = get_direction(cmd, COMMANDS,
COMMANDS_CNT)) == game_command_panic
? tmp : tmp - move_north + apply_north);
else if (cmd == "a")
return (game_command)((tmp = get_direction(cmd, COMMANDS,
COMMANDS_CNT)) == game_command_panic
? tmp : tmp - move_north + attack_north);
else // is just moving
return get_direction(cmd, COMMANDS, COMMANDS_CNT);
return game_command_pass;
}