有一个weapon类,一共有三种weapon,每次创建一个dragon ninja iceman的时候会根据其编号获得一个武器,在后面的战斗中,会使用武器攻击别人,武器可以使用两次,优先使用用过的武器,在每次战斗的时候要对武器编号从小到大排序,如何实现c++
时间: 2024-02-18 21:05:21 浏览: 249
可以定义一个Weapon类,其中包括编号、攻击力、剩余使用次数等成员变量和方法,然后在Dragon、Ninja、Iceman类中分别添加一个Weapon类型的成员变量,表示它们所持有的武器。
在创建每个Dragon、Ninja、Iceman的时候,可以根据其编号设置它们所持有的武器。在每次战斗的时候,可以先检查武器的剩余使用次数,如果剩余使用次数为0,则使用另一把武器,如果都用过了,则不使用武器进行攻击。攻击时,可以使用Weapon类中定义的方法计算攻击力。
对武器编号从小到大排序,可以使用STL中的sort函数对Dragon、Ninja、Iceman的武器数组进行排序。
以下是一个简单的实现示例:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Weapon {
public:
int id; // 编号
int attack; // 攻击力
int remain_times; // 剩余使用次数
Weapon(int id, int attack, int times) {
this->id = id;
this->attack = attack;
this->remain_times = times;
}
int getAttack() {
if (remain_times == 0) {
return 0;
}
remain_times--;
return attack;
}
};
class Dragon {
public:
int weapon_num; // 持有的武器数量
Weapon weapons[2]; // 持有的武器
Dragon(int id) {
weapon_num = 2;
weapons[0] = Weapon(id % 3, 3, 2); // 根据编号设置武器
weapons[1] = Weapon((id + 1) % 3, 2, 2);
sort(weapons, weapons + 2, [](Weapon a, Weapon b) { return a.id < b.id; }); // 排序
}
int attack() {
int attack_value = weapons[0].getAttack();
if (attack_value == 0 && weapon_num == 2) { // 如果第一把武器已经用完了,使用第二把
attack_value = weapons[1].getAttack();
}
if (attack_value != 0) { // 如果使用了武器,将持有的武器数量减1
weapon_num--;
}
return attack_value;
}
};
class Ninja {
public:
int weapon_num;
Weapon weapons[2];
Ninja(int id) {
weapon_num = 2;
weapons[0] = Weapon(id % 3, 2, 2);
weapons[1] = Weapon((id + 1) % 3, 3, 2);
sort(weapons, weapons + 2, [](Weapon a, Weapon b) { return a.id < b.id; });
}
int attack() {
int attack_value = weapons[0].getAttack();
if (attack_value == 0 && weapon_num == 2) {
attack_value = weapons[1].getAttack();
}
if (attack_value != 0) {
weapon_num--;
}
return attack_value;
}
};
class Iceman {
public:
int weapon_num;
Weapon weapons[2];
Iceman(int id) {
weapon_num = 2;
weapons[0] = Weapon(id % 3, 4, 2);
weapons[1] = Weapon((id + 1) % 3, 1, 2);
sort(weapons, weapons + 2, [](Weapon a, Weapon b) { return a.id < b.id; });
}
int attack() {
int attack_value = weapons[0].getAttack();
if (attack_value == 0 && weapon_num == 2) {
attack_value = weapons[1].getAttack();
}
if (attack_value != 0) {
weapon_num--;
}
return attack_value;
}
};
int main() {
Dragon dragon(1);
Ninja ninja(2);
Iceman iceman(3);
cout << "Dragon's attack: " << dragon.attack() << endl;
cout << "Ninja's attack: " << ninja.attack() << endl;
cout << "Iceman's attack: " << iceman.attack() << endl;
return 0;
}
```
阅读全文