full implementation!

bug: level generation will generate nullptrs
This commit is contained in:
2024-07-15 00:09:14 -04:00
parent c3b974c83c
commit 6768d73d16
13 changed files with 407 additions and 46 deletions

76
src/cc3k.cc Normal file
View File

@ -0,0 +1,76 @@
#include "cc3k.h"
#include "constants.h"
CC3K::CC3K(const feature enabled_features,
input *in, display *out, RNG *rng):
enabled_features{enabled_features},
in{in}, out{out}, rng{rng} {
curr_menu = std::make_unique<menu>(enabled_features);
out->clear();
curr_menu->print(out);
out->render();
gresult.status = game_status::main_menu;
}
game_status CC3K::run() {
switch (gresult.status) {
case main_menu: {
auto tmp = curr_menu->run(in);
if (tmp == -2)
return terminated;
if (tmp != -1) {
curr_menu = nullptr;
curr_game = std::make_unique<game>((race)tmp,
enabled_features,
in, out, rng);
out->clear();
curr_game->print();
out->render();
gresult.status = in_game;
return in_game;
}
out->clear();
curr_menu->print(out);
out->render();
return main_menu;
}
case in_game: {
gresult = curr_game->run();
if (gresult.status == restart) {
curr_game = nullptr;
curr_menu = std::make_unique<menu>(enabled_features);
out->clear();
curr_menu->print(out);
out->render();
return main_menu;
} else if (gresult.status == in_game) {
out->clear();
curr_game->print();
out->render();
return in_game;
}
out->clear();
gresult.print(out);
out->render();
return gresult.status;
}
case dead:
case won:
case escaped:
gresult.run(in);
return terminated;
default:
break;
}
return terminated;
}