#include <iostream>
#include <utility>
#include <random>
class 怪物 {
public:
std::string 名字;
int 生命值;
int 攻击力;
explicit 怪物(std::string &名字, int 生命值, int 攻击力)
: 生命值(生命值), 攻击力(攻击力), 名字(名字) {}
};
class 英灵 {
protected:
std::string 名字;
int 生命值;
int 攻击力;
double 命中率;
double 暴击率;
double 暴击倍率;
std::default_random_engine 随机数生成器;
std::bernoulli_distribution 命中;
std::bernoulli_distribution 暴击;
public:
explicit 英灵(std::string &名字, int 生命值, int 攻击力, double 命中率, double 暴击率, double 暴击倍率)
: 名字(std::move(名字)), 生命值(生命值), 攻击力(攻击力), 命中率(命中率), 暴击率(暴击率), 暴击倍率(暴击倍率) {
随机数生成器.seed(time(nullptr));
命中生成器();
暴击生成器();
}
void 命中生成器() {
命中 = std::bernoulli_distribution(命中率);
}
void 暴击生成器() {
暴击 = std::bernoulli_distribution(暴击率);
}
void 显示伤害(std::string &对手名字, int 扣血量) {
std::cout << 名字 << "对" << 对手名字 << "造成" << 扣血量 << "点伤害" << std::endl;
}
virtual void 攻击怪物(怪物 &怪) = 0;
};
class 法阶 : public 英灵 {
protected:
int 法术加成;
public:
explicit 法阶(std::string &名字, int 生命值, int 攻击力, double 命中率, double 暴击率, double 暴击倍率, int 法术加成)
: 英灵(名字, 生命值, 攻击力, 命中率, 暴击率, 暴击倍率), 法术加成(法术加成) {}
void 攻击怪物(怪物 &怪) override {
int 扣血量 = 0;
if (命中(随机数生成器)) {
扣血量 = 攻击力 + 法术加成;
if (暴击(随机数生成器)) {
扣血量 = (int) (扣血量 * 暴击倍率);
}
}
怪.生命值 -= 扣血量;
显示伤害(怪.名字, 扣血量);
};
};
class 弓阶 : public 英灵 {
protected:
int 物理加成;
public:
explicit 弓阶(std::string &名字, int 生命值, int 攻击力, double 命中率, double 暴击率, double 暴击倍率, int 物理加成)
: 英灵(名字, 生命值, 攻击力, 命中率, 暴击率, 暴击倍率), 物理加成(物理加成) {}
void 攻击怪物(怪物 &怪) override {
int 扣血量 = 0;
if (命中(随机数生成器)) {
扣血量 = 攻击力 + 物理加成;
if (暴击(随机数生成器)) {
扣血量 = (int) (扣血量 * 暴击倍率);
}
}
怪.生命值 -= 扣血量;
显示伤害(怪.名字, 扣血量);
};
};
int main() {
auto 盖提亚 = new 怪物(*new std::string("盖提亚"), 10000, 0);
auto 卫宫士郎 = new 弓阶(*new std::string("卫宫士郎"), 100, 120, 0.8, 0.3, 1.2, 90);
auto 梅林 = new 法阶(*new std::string("梅林"), 100, 100, 0.6, 0.5, 1.2, 200);
while (盖提亚->生命值 > 0) {
卫宫士郎->攻击怪物(*盖提亚);
梅林->攻击怪物(*盖提亚);
}
delete (盖提亚);
return 0;
}
cpp虚函数作业
最新推荐文章于 2024-08-16 16:51:12 发布