moved move and move_or_attack implementation into characters.cc

This commit is contained in:
2024-07-02 12:43:39 -04:00
parent b4e7f39dae
commit 2c0b30cd33
4 changed files with 25 additions and 39 deletions

View File

@ -151,3 +151,26 @@ position_list remove_from_list(const position_list &sorted_positions,
return result; 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);
}

View File

@ -43,12 +43,12 @@ public:
// IMPORTANT: available_positions do NOT have characters in them // IMPORTANT: available_positions do NOT have characters in them
direction_list moveable(const position_list &available_positions) const; direction_list moveable(const position_list &available_positions) const;
virtual result move(const direction dir, virtual result move(const direction dir,
const position_list &available_positions) = 0; const position_list &available_positions);
virtual result attack(const direction dir, virtual result attack(const direction dir,
const character_list &chlist) = 0; const character_list &chlist) = 0;
virtual result move_or_attack(const direction dir, virtual result move_or_attack(const direction dir,
const position_list &available_positions, const position_list &available_positions,
const character_list &chlist) = 0; const character_list &chlist);
virtual result apply(direction &dir, virtual result apply(direction &dir,
const potion_list &potions); const potion_list &potions);
virtual result get_hit(const enum race &race, const int atk, virtual result get_hit(const enum race &race, const int atk,

View File

@ -10,19 +10,6 @@ shade::shade(const position_list &available_positions):
hostile = true; 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) { result shade::attack(const direction dir, const character_list &chlist) {
position tmp{pos + MOVE[dir]}; position tmp{pos + MOVE[dir]};
@ -34,25 +21,6 @@ result shade::attack(const direction dir, const character_list &chlist) {
return result::fine; 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) { int calc_dmg(const int ATK, const int DEF) {
return ceil((100 / (100 + DEF)) * ATK); return ceil((100 / (100 + DEF)) * ATK);
} }

View File

@ -13,13 +13,8 @@
class shade final: public character { class shade final: public character {
public: public:
shade(const position_list &available_positions); // spawn at a random place 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, virtual result attack(const direction dir,
const character_list &chlist) override; 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, virtual result get_hit(const enum race &race, const int atk,
const float hitrate) override; const float hitrate) override;
}; };