

Môn:
Lập trình game
Cho đoạn code giả lập hệ thống xử lý enemy trong game:
#include <iostream>
#include <vector>
using namespace std;
class Enemy {
public:
int hp;
int damage;
Enemy(int h, int d) {
hp = h;
damage = d;
}
virtual void attack() {
cout << damage << " ";
}
};
class Boss : public Enemy {
public:
int rage;
Boss(int h, int d, int r) : Enemy(h, d) {
rage = r;
}
void attack() override {
damage += rage / 10;
cout << damage << " ";
}
};
int main() {
vector<Enemy*> enemies;
enemies.push_back(new Enemy(100, 20));
enemies.push_back(new Boss(500, 40, 50));
enemies.push_back(new Boss(700, 60, 100));
for (int i = 0; i < enemies.size(); i++) {
enemies[i]->attack();
}
cout << endl;
for (int i = 0; i < enemies.size(); i++) {
Boss* b = dynamic_cast<Boss*>(enemies[i]);
if (b != nullptr) {
b->hp -= 100;
b->rage += 20;
}
else {
enemies[i]->hp -= 10;
}
}
for (int i = 0; i < enemies.size(); i++) {
enemies[i]->attack();
}
return 0;
}
Kết quả in ra màn hình là:
A.
20 45 70
20 47 72
B.
20 45 70
20 52 82
C.
20 40 60
20 45 70
D.
20 45 70
20 45 70
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Đáp án là : `B`
Dòng đầu in ra là damage của enemy lần lượt là :
enemy `1`:`20`
enemy `2`:`45`
boss`(`enemy `3)`:`70`
Dòng `2` in ra là damage nhận sau `2` vòng loop :
enemy `1`:`20`
enemy `2`:`45+(70/10)=52`
boss`(`enemy `3)`:`70+120/10=82`
=> đáp án là :
`B.20` `45` `70`
`20` `52` `82`
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Đáp án:
Giải thích các bước giải:
Đáp án : B
`-` Giải thích:
`+` Lần 1: Enemy in ra 20. Boss 1 tăng sát thương thêm `\frac{50}{10}`=`5^2` = 45` , boss 2 tăng thêm `\frac{100}{10}`=10` (thành 70). Ta In ra được 20 , 45 , 70
`+` Boss 1 và Boss 2 cùng được tăng 20 nộ nên nộ mới lần lượt là 70 và 120
`+` Lần 2: Enemy vẫn là 20 nên boss 1 cộng tiếp vào sát thương hiện tại: `45 + `\frac{70}{10}` = 52`, boss 2 cộng tiếp là `70 + `\frac{120}{10}` = 82`nên ta In ra là 20 , 52 , 82
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin