From 2c0b30cd330ec3a0a1e519a94cf9920e6690d816 Mon Sep 17 00:00:00 2001 From: Peisong Xiao Date: Tue, 2 Jul 2024 12:43:39 -0400 Subject: [PATCH] moved move and move_or_attack implementation into characters.cc --- src/characters.cc | 23 +++++++++++++++++++++++ src/characters.h | 4 ++-- src/races.cc | 32 -------------------------------- src/races.h | 5 ----- 4 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/characters.cc b/src/characters.cc index e47eb28..358531f 100644 --- a/src/characters.cc +++ b/src/characters.cc @@ -151,3 +151,26 @@ position_list remove_from_list(const position_list &sorted_positions, return result; } + +// IMPORTANT: remember to check if player is on the stairs +result character::move(const direction dir, + const position_list &available_positions) { + if (find(available_positions, pos + MOVE[dir]) + != available_positions.size()) { + pos += MOVE[dir]; + return result::moved; + } + + return result::fine; +} + +result character::move_or_attack(const direction dir, + const position_list &available_positions, + const character_list &chlist) { + auto res = this->move(dir,available_positions); + + if(res != result::fine) + return res; + + return this->attack(dir,chlist); +} diff --git a/src/characters.h b/src/characters.h index 5be2c96..9962f7e 100644 --- a/src/characters.h +++ b/src/characters.h @@ -43,12 +43,12 @@ public: // IMPORTANT: available_positions do NOT have characters in them direction_list moveable(const position_list &available_positions) const; virtual result move(const direction dir, - const position_list &available_positions) = 0; + const position_list &available_positions); virtual result attack(const direction dir, const character_list &chlist) = 0; virtual result move_or_attack(const direction dir, const position_list &available_positions, - const character_list &chlist) = 0; + const character_list &chlist); virtual result apply(direction &dir, const potion_list &potions); virtual result get_hit(const enum race &race, const int atk, diff --git a/src/races.cc b/src/races.cc index 532cac1..9594b3d 100644 --- a/src/races.cc +++ b/src/races.cc @@ -10,19 +10,6 @@ shade::shade(const position_list &available_positions): hostile = true; } -// TODO: this shouldn't be a pure virtual functions -// IMPORTANT: remember to check if player is on the stairs -result shade::move(const direction dir, - const position_list &available_positions) { - if (find(available_positions, pos + MOVE[dir]) - != available_positions.size()) { - pos += MOVE[dir]; - return result::moved; - } - - return result::fine; -} - result shade::attack(const direction dir, const character_list &chlist) { position tmp{pos + MOVE[dir]}; @@ -34,25 +21,6 @@ result shade::attack(const direction dir, const character_list &chlist) { return result::fine; } -result shade::move_or_attack(const direction dir, - const position_list &available_positions, - const character_list &chlist) { - position tmp{pos + MOVE[dir]}; - - if (find(available_positions, tmp) - != available_positions.size()) { - pos = tmp; - return result::moved; - } - - for (auto &ch : chlist) - if (tmp == ch->get_position()) { - return ch->get_hit(race, ATK, base_hitrate); - } - - return result::fine; -} - int calc_dmg(const int ATK, const int DEF) { return ceil((100 / (100 + DEF)) * ATK); } diff --git a/src/races.h b/src/races.h index 079955d..0351a9e 100644 --- a/src/races.h +++ b/src/races.h @@ -13,13 +13,8 @@ class shade final: public character { public: shade(const position_list &available_positions); // spawn at a random place - virtual result move(const direction dir, - const position_list &available_positions) override; virtual result attack(const direction dir, const character_list &chlist) override; - virtual result move_or_attack(const direction dir, - const position_list &available_positions, - const character_list &chlist) override; virtual result get_hit(const enum race &race, const int atk, const float hitrate) override; };