#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
struct Role
{
std::string name;
int hp;
int atk;
std::string skill_name;
std::string skill_fun;
int cd;
int now_cd;
Role(std::string n, int h, int a, std::string sn, std::string sf, int c)
: name(n), hp(h), atk(a), skill_name(sn), skill_fun(sf), cd(c), now_cd(0) {}
};
std::vector<Role> init_roles()
{
std::vector<Role> r;
// 原有角色
r.push_back(Role("嘉豪", 1000, 110, "时间静止(假)", "注意,时间并没有暂停!", 3));
r.push_back(Role("良子", 1200, 90, "大胃袋", "看我大胃dawn", 3));
r.push_back(Role("雨姐", 950, 130, "大汗脚", "给我掉!味道上头!", 2));
r.push_back(Role("少羽", 900, 140, "我拿筷子", "我拿筷子加水泥", 2));
r.push_back(Role("梦之泪伤", 850, 150, "偷塔", "看我韩信开大!", 4));
r.push_back(Role("旺仔小乔", 1100, 100, "你给我刷过几个子", "直接开户,线下真实!", 3));
r.push_back(Role("柯洁", 1000, 115, "唐", "柯洁,犯规!!!", 3));
r.push_back(Role("我的刀盾", 1300, 85, "我的刀盾", "我的刀盾!", 4));
r.push_back(Role("丹尼尔", 980, 125, "辛巴巴巴鲁比勒", "魔性洗脑!鬼畜频出", 3));
r.push_back(Role("林熙", 1050, 120, "消炎附体", "吃我大计把,斗之力三万段,给我开!!!", 3));
r.push_back(Role("牢大", 950, 135, "曼巴精神", "man!", 3));
r.push_back(Role("奶龙", 1250, 85, "萌力出击", "我是奶龙,我才是奶龙", 3));
r.push_back(Role("豆包", 1000, 110, "智能问答", "你问我答,人工智障!", 3));
r.push_back(Role("哈基米", 900, 105, "喵喵攻击", "哈基米哟南北绿豆", 2));
r.push_back(Role("瓦瓦", 1050, 115, "刀马", "嘿刀马刀马刀马嘿!", 3));
r.push_back(Role("王书瀚", 920, 120, "矮子攻击", "掉!", 3));
r.push_back(Role("邓淅喆、神", 9178, 7891, "可乐喷射", "我射!", 2));
r.push_back(Role("皮若熙", 9999, 0, "唐比开大", "唐比开大!气势拉满!", 3));
// 新增角色
r.push_back(Role("高雅人士", 1100, 120, "太高雅", "你那是高雅吗?你那是伤风败俗!", 3));
r.push_back(Role("单依纯", 1000, 130, "如何呢又能怎", "如何呢?又能怎?区区三万天,试试又能怎!", 3));
r.push_back(Role("丝瓜汤", 1050, 115, "喝完丝瓜汤降降火气吧", "你肝火太旺,喝碗丝瓜汤降降火气吧!", 2));
r.push_back(Role("蒜鸟", 950, 125, "蒜鸟蒜鸟", "蒜鸟蒜鸟,都不容易,消消气哈!", 3));
r.push_back(Role("秦始皇", 1200, 130, "秦始皇骑北极熊", "朕御驾亲征,骑北极熊踏平天下!", 4));
return r;
}
int rand099()
{
return std::rand() % 100;
}
int use_skill(Role &me)
{
if (me.now_cd > 0)
{
std::cout << "【技能冷却中】还剩" << me.now_cd << "回合!\n";
return 0;
}
std::cout << "\n=== " << me.name << ":" << me.skill_name << " ===\n";
std::cout << me.skill_fun << "\n";
int dmg = 0;
// 隐藏神级角色
if (me.name == "周冉祖")
{
dmg = 99999;
std::cout << " 神罚降临!一击秒杀!\n";
}
// 原有角色技能
else if (me.name == "嘉豪")
{
if (rand099() < 80)
{
std::cout << " 失败:时间并没有暂停!\n";
dmg = 0;
}
else
{
dmg = static_cast<int>(me.atk * 1.2);
std::cout << " 成功!时间真的暂停了!1.2倍伤害!\n";
}
}
else if (me.name == "良子")
{
me.hp += 50;
if (me.hp > 1200) me.hp = 1200;
dmg = me.atk + 20;
std::cout << " 好机会,我吃,回血50!攻击+20!\n";
}
else if (me.name == "雨姐")
{
dmg = me.atk + 30;
std::cout << " 带派不老铁!额外30点伤害!\n";
}
else if (me.name == "少羽")
{
dmg = static_cast<int>(me.atk * 1.2);
std::cout << " 筷子加水泥!1.2倍伤害!\n";
}
else if (me.name == "梦之泪伤")
{
dmg = static_cast<int>(me.atk * 1.3);
std::cout << " 偷塔成功!1.3倍伤害!\n";
}
else if (me.name == "旺仔小乔")
{
dmg = 0;
std::cout << " 岛岛妈妈被真实,陷入昏迷\n";
}
else if (me.name == "柯洁")
{
dmg = 50 + std::rand() % 51;
std::cout << " 抽象伤害:" << dmg << "(全看心情)\n";
}
else if (me.name == "我的刀盾")
{
dmg = 30;
std::cout << " 反弹30点伤害!\n";
}
else if (me.name == "丹尼尔")
{
dmg = static_cast<int>(me.atk * 1.1);
std::cout << " 魔音洗脑!1.1倍伤害!\n";
}
else if (me.name == "林熙")
{
dmg = static_cast<int>(me.atk * 1.2);
std::cout << " 吃我一击吧!1.2倍伤害!\n";
}
else if (me.name == "牢大")
{
if (rand099() < 50)
{
std::cout << " 坠机了!技能白给!\n";
dmg = 0;
}
else
{
dmg = static_cast<int>(me.atk * 1.3);
std::cout << " 绝对肘击!曼巴精神!1.3倍伤害!\n";
}
}
else if (me.name == "奶龙")
{
me.hp += 80;
if (me.hp > 1250) me.hp = 1250;
dmg = 0;
std::cout << " 唐死对手!回血80!本回合免伤!\n";
}
else if (me.name == "豆包")
{
dmg = 50 + std::rand() % 41;
std::cout << " 答非所问!智障伤害:" << dmg << "!\n";
}
else if (me.name == "哈基米")
{
dmg = static_cast<int>(me.atk * 1.1);
if (rand099() < 40)
{
dmg += 10;
std::cout << " 南北绿豆!额外+10伤!总伤害:" << dmg << "!\n";
}
else
{
std::cout << " 哈基米卖萌!1.1倍伤害!\n";
}
}
else if (me.name == "瓦瓦")
{
dmg = static_cast<int>(me.atk * 1.2);
std::cout << " 帮帮帮帮,颗秒!1.2倍伤害!\n";
}
else if (me.name == "王书瀚")
{
dmg = static_cast<int>(me.atk * 1.15);
std::cout << " 矮子偷袭!1.15倍伤害!\n";
}
else if (me.name == "邓淅喆")
{
dmg = me.atk + 7788;
std::cout << " 可乐射一脸!额外7788点伤害!射死你!神!\n";
}
else if (me.name == "皮若熙")
{
dmg = 0;
std::cout << " 唐比开大!气势拉满!但没伤害!\n";
}
// 新增角色技能
else if (me.name == "高雅人士")
{
dmg = static_cast<int>(me.atk * 1.25);
std::cout << " 高雅审判!1.25倍伤害!\n";
}
else if (me.name == "单依纯")
{
dmg = static_cast<int>(me.atk * 1.3);
std::cout << " 魔性洗脑!1.3倍伤害!敌人听入迷无法反击!\n";
}
else if (me.name == "丝瓜汤")
{
me.hp += 60;
if (me.hp > 1050) me.hp = 1050;
dmg = me.atk + 35;
std::cout << " 喝口丝瓜汤!回血60!攻击+35!\n";
}
else if (me.name == "蒜鸟")
{
if (rand099() < 60)
{
dmg = static_cast<int>(me.atk * 1.4);
std::cout << " 蒜鸟暴走!1.4倍超高伤害!\n";
}
else
{
dmg = static_cast<int>(me.atk * 0.8);
std::cout << " 蒜鸟劝架!伤害降低!0.8倍伤害!\n";
}
}
else if (me.name == "秦始皇")
{
dmg = static_cast<int>(me.atk * 1.2);
me.hp += 100;
if (me.hp > 1200) me.hp = 1200;
std::cout << " 大秦庇护!回血100!1.2倍伤害!\n";
}
me.now_cd = me.cd;
return dmg;
}
int normal_atk(Role &me)
{
if (me.name == "周冉祖")
{
std::cout << me.name << " 神之普通攻击!秒杀!\n";
return 99999;
}
int d = static_cast<int>(me.atk * (80 + std::rand() % 41) / 100.0);
std::cout << me.name << " 普通攻击!造成" << d << "点伤害\n";
return d;
}
void hurt(Role &tar, int d)
{
if (tar.name == "周冉祖")
{
std::cout << tar.name << " 神之躯!免疫伤害!\n";
std::cout << tar.name << " 剩余HP:" << tar.hp << "\n";
return;
}
if (d < 0) d = 0;
tar.hp -= d;
if (tar.hp < 0) tar.hp = 0;
std::cout << tar.name << " 剩余HP:" << tar.hp << "\n";
}
void cut_cd(Role &r)
{
if (r.now_cd > 0)
r.now_cd--;
}
std::size_t choose_role(std::vector<Role> &rs)
{
std::cout << "\n===== 热梗擂台角色列表 =====\n";
for (std::size_t i = 0; i < rs.size(); ++i)
{
std::cout << i+1 << "." << rs[i].name << "|技能:" << rs[i].skill_name << "\n";
}
std::string input;
while (true)
{
std::cout << "\n选你的角色(1~" << rs.size() << "):";
std::cin >> input;
// 隐藏指令
if (input == "神")
{
std::cout << "\n!!! 隐藏角色解锁:周冉祖 !!!\n";
return 999;
}
if (input == "如何呢")
{
std::cout << "\n!!! 解锁成功:单依纯 !!!\n";
for (size_t i = 0; i < rs.size(); i++)
if (rs[i].name == "单依纯") return i;
}
if (input == "火气")
{
std::cout << "\n!!! 解锁成功:丝瓜汤 !!!\n";
for (size_t i = 0; i < rs.size(); i++)
if (rs[i].name == "丝瓜汤") return i;
}
if (input == "北极熊")
{
std::cout << "\n!!! 解锁成功:秦始皇 !!!\n";
for (size_t i = 0; i < rs.size(); i++)
if (rs[i].name == "秦始皇") return i;
}
// 数字判断
bool is_num = true;
for (std::size_t i = 0; i < input.size(); ++i)
{
if (!isdigit(input[i]))
{
is_num = false;
break;
}
}
if (!is_num)
{
std::cout << "输入无效!\n";
continue;
}
int c = atoi(input.c_str());
if (c >= 1 && c <= (int)rs.size())
{
return (std::size_t)(c - 1);
}
std::cout << "输错啦!1到" << rs.size() << "!\n";
}
}
void fight(Role &p, Role &e)
{
std::cout << "\n 对战开始:" << p.name << " VS " << e.name << "\n";
int round = 1;
bool enemy_skip = false;
bool player_immune = false;
while (p.hp > 0 && e.hp > 0)
{
std::cout << "\n======== 第" << round << "回合 ========\n";
enemy_skip = false;
player_immune = false;
int act;
while (true)
{
std::cout << "\n1.普通攻击 2.【" << p.skill_name << "】\n选择:";
std::cin >> act;
if (act == 1 || act == 2) break;
}
int d = (act == 1) ? normal_atk(p) : use_skill(p);
hurt(e, d);
// 特殊控制效果
if (p.name == "旺仔小乔" && act == 2) enemy_skip = true;
if (p.name == "奶龙" && act == 2) player_immune = true;
if (p.name == "单依纯" && act == 2) enemy_skip = true;
if (e.hp <= 0) break;
// 敌人回合
if (!enemy_skip)
{
std::cout << "\n " << e.name << "回合:";
int ai_act = (rand099() < 30 && e.now_cd == 0) ? 2 : 1;
d = (ai_act == 1) ? normal_atk(e) : use_skill(e);
if (player_immune)
{
std::cout << p.name << " 萌化免伤!本次伤害无效!\n";
d = 0;
}
hurt(p, d);
}
else
{
std::cout << "\n " << e.name << "被控制,本回合无法反击!\n";
}
cut_cd(p);
cut_cd(e);
round++;
}
std::cout << "\n==========================\n";
if (p.hp > 0)
std::cout << " 你赢了!" << p.name << " 胜利!\n";
else
std::cout << " 你输了!" << e.name << " 胜利!\n";
}
int main()
{
std::srand(static_cast<unsigned int>(std::time(NULL)));
std::cout << "=========================================\n";
std::cout << " 热梗擂台 · 欢乐搞笑版\n";
std::cout << " 全是名梗!技能“平衡 ”!红温就完事!\n";
std::cout << "=========================================\n";
std::vector<Role> rs = init_roles();
std::size_t i = choose_role(rs);
Role player = rs[0];
// 正确赋值玩家角色
if (i == 999)
{
player = Role("周冉祖", 99999, 99999, "神罚", "吾即是天!", 1);
}
else
{
player = rs[i];
}
// 随机敌人(不能和玩家一样)
std::size_t ei;
do
{
ei = (size_t)rand() % rs.size();
} while (ei == i);
Role enemy = rs[ei];
fight(player, enemy);
std::cout << "\n游戏结束!感谢游玩!\n";
return 0;
}