New attack function for single character in characters.h, need implementation (example in shade.h)

This commit is contained in:
2024-07-13 17:13:10 -04:00
parent df9e2d31df
commit 8da12f5360
7 changed files with 127 additions and 5 deletions

76
src/game.cc Normal file
View File

@ -0,0 +1,76 @@
#include "game.h"
#include "races.h"
game::game(const enum race starting_race,
const feature enabled_features,
input *new_in,
display *new_out,
logger *new_log,
RNG *new_rng):
enabled_features{enabled_features},
in{new_in}, out{new_out}, log{new_log}, rng{new_rng} {
const position nil{0, 0};
the_world = false;
// TODO: add the other races
switch (starting_race) {
case race::rshade:
player = std::make_unique<shade>(rng, nil);
break;
}
if (enabled_features & FEATURE_EXTRA_LEVELS)
max_level = rng->rand_between(MIN_LEVEL_CNT, MAX_LEVEL_CNT + 1);
else
max_level = DEFAULT_MAX_LEVEL;
levels.reserve(max_level);
curr_level = 0;
new_level();
}
void game::new_level() {
if (enabled_features & FEATURE_RAND_MAP)
levels.push_back(std::make_unique<level>(player.get(),
rng, enabled_features));
else
levels.push_back(std::make_unique<level>(default_map, player.get(),
rng, enabled_features));
}
game_status game::run() {
auto res = player_moves(in->get_command());
switch (res) {
case result::died:
return game_status::dead;
case result::go_down: {
if (curr_level == max_level - 1)
return game_status::won;
player->discard_level_effects();
++curr_level;
new_level();
break;
}
case result::go_up: {
if (curr_level == 0)
return game_status::escaped;
--curr_level;
player->set_position(levels[curr_level]->get_down_stairs());
break;
}
default:
break;
}
return game_status::in_game;
}