Merge branch 'master' of peisongxiao.com:~/cs246/a5
This commit is contained in:
@ -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);
|
||||||
|
}
|
||||||
|
@ -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,
|
||||||
|
32
src/races.cc
32
src/races.cc
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user