New attack function for single character in characters.h, need implementation (example in shade.h)
This commit is contained in:
76
src/game.cc
Normal file
76
src/game.cc
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user