游戏跑不出来的统一回复,源文件名改成英文命名
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
看我主页的是GAY
翻到最底下的是拉
你们怎么知道我抽火花给希儿抽到0+2了,呜呜呜~~~
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <windows.h>
#include <conio.h>
using namespace std;
enum Attribute {
PHYSICAL, ICE, FIRE, THUNDER, WIND, QUANTUM, IMAGINARY
};
struct Character {
string name;
Attribute attr;
Attribute weak;
int hp;
int max_hp;
int def;
int spd;
int tough;
int max_tough;
int tp;
int max_tp;
int dot_damage;
int dot_round;
int burn_round;
int stun_round;
bool transformed;
bool is_support;
int atk_dmg;
int skill_dmg;
int ult_dmg;
string atk_line;
string skill_line;
string ult_line;
Character(string n = "", Attribute a = PHYSICAL, Attribute w = PHYSICAL,
int h = 100, int d = 10, int s = 100, int t = 10,
int ad = 0, int sd = 0, int ud = 0,
string al = "", string sl = "", string ul = "", bool sup = false)
: name(n), attr(a), weak(w), hp(h), max_hp(h), def(d), spd(s),
tough(t), max_tough(t), tp(3), max_tp(3),
dot_damage(0), dot_round(0), burn_round(0), stun_round(0), transformed(false), is_support(sup),
atk_dmg(ad), skill_dmg(sd), ult_dmg(ud),
atk_line(al), skill_line(sl), ult_line(ul) {}
};
void color(int c) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void cls() { system("cls"); }
void sleep(int ms) { Sleep(ms); }
void playSoundAtk(const string &name) {
if (name == "希儿") Beep(784, 120);
else if (name == "飞霄") Beep(698, 140);
else if (name == "卡芙卡") Beep(622, 150);
else if (name == "丹恒·饮月") Beep(880, 130);
else if (name == "流萤") Beep(587, 160);
else if (name == "花火") Beep(740, 110);
else if (name == "托帕") Beep(659, 150);
else if (name == "知更鸟") Beep(930, 150);
else if (name == "阿格莱雅") Beep(600, 220);
else if (name == "大黑塔") Beep(659, 210);
else if (name == "阮梅") Beep(850, 160);
else if (name == "银枝") Beep(950, 140);
else if (name == "黄泉") Beep(1000, 130);
else Beep(523, 150);
}
void playSoundSkill(const string &name) {
if (name == "希儿") Beep(880, 180);
else if (name == "飞霄") Beep(784, 200);
else if (name == "卡芙卡") Beep(698, 220);
else if (name == "丹恒·饮月") Beep(988, 170);
else if (name == "流萤") Beep(622, 240);
else if (name == "花火") Beep(830, 160);
else if (name == "托帕") Beep(700, 200);
else if (name == "知更鸟") Beep(1046, 250);
else if (name == "阿格莱雅") Beep(784, 300);
else if (name == "大黑塔") Beep(740, 300);
else if (name == "阮梅") Beep(930, 250);
else if (name == "银枝") Beep(1174, 250);
else if (name == "黄泉") Beep(1318, 250);
else Beep(587, 200);
}
void playSoundUlt(const string &name) {
if (name == "希儿") Beep(1046, 250), Beep(1174, 250);
else if (name == "飞霄") Beep(988, 250), Beep(1046, 250);
else if (name == "卡芙卡") Beep(880, 250), Beep(988, 250);
else if (name == "丹恒·饮月") Beep(1174, 300), Beep(1318, 300);
else if (name == "流萤") Beep(784, 300), Beep(880, 300);
else if (name == "花火") Beep(930, 250), Beep(1046, 250);
else if (name == "托帕") Beep(830, 250), Beep(930, 250);
else if (name == "知更鸟") Beep(1046, 250), Beep(1174, 250);
else if (name == "阿格莱雅") Beep(784, 300), Beep(880, 300);
else if (name == "大黑塔") Beep(740, 300), Beep(830, 300);
else if (name == "阮梅") Beep(930, 250), Beep(1046, 250);
else if (name == "银枝") Beep(1174, 250), Beep(1318, 250);
else if (name == "黄泉") Beep(1318, 250), Beep(1480, 250);
else Beep(659, 200), Beep(740, 200);
}
string attrToString(Attribute a) {
switch (a) {
case PHYSICAL: return "物理";
case ICE: return "冰";
case FIRE: return "火";
case THUNDER: return "雷";
case WIND: return "风";
case QUANTUM: return "量子";
case IMAGINARY: return "虚数";
default: return "未知";
}
}
bool isWeak(Attribute atk, Attribute def) {
return atk == def;
}
int calcDamage(int dmg, int def, bool weak, bool broken) {
int res = dmg - def;
if (res < 1) res = 1;
if (weak) res *= 1.5;
if (broken) res *= 2.5;
return res;
}
vector<Character> initAllChars() {
vector<Character> c;
c.emplace_back("流萤", PHYSICAL, THUNDER, 100,12,102,10, 18,28,50,
"看好了!", "此火,可燎原!", "我将!点燃星海!");
c.emplace_back("素裳", PHYSICAL, ICE,95,10,107,10,17,25,40,
"斩!", "剑势,起!", "此剑,为神州而挥!");
c.emplace_back("镜流", ICE, FIRE,90,9,109,10,16,24,42,
"霜起。", "剑随心动。", "此身,已堕魔渊。");
c.emplace_back("杰帕德", ICE, FIRE,115,22,90,10,0,0,0,
"坚守。", "守护,是我的职责。", "银鬃铁卫,绝不后退!", true);
c.emplace_back("知更鸟", ICE, FIRE,98,11,106,10,17,26,43,
"鸣啼!", "冰刃出鞘!", "记忆是梦的开场白!");
c.emplace_back("姬子", FIRE, ICE,92,10,101,10,17,26,44,
"点燃。", "星穹,在燃烧。", "宇宙,也会化为灰烬。");
c.emplace_back("托帕", FIRE, ICE,96,11,104,10,18,27,42,
"债务清算!", "账,该算了!", "上吧,账账!");
c.emplace_back("卡芙卡", THUNDER, WIND,94,10,106,10,16,22,35,
"触电。", "感受这份痛楚。", "所有痛苦,一并奉还!");
c.emplace_back("景元", THUNDER, WIND,99,13,99,10,15,20,45,
"神君,行动。", "引雷。", "百战,决胜!");
c.emplace_back("飞霄", WIND, QUANTUM,97,12,110,10,18,25,42,
"风至。", "踏风而行。", "长风,破万里!");
c.emplace_back("藿藿", WIND, QUANTUM,102,14,96,10,0,0,0,
"呜…", "请、请不要受伤…", "我会保护大家的!", true);
c.emplace_back("希儿", QUANTUM, IMAGINARY,93,9,113,10,17,25,42,
"看我。", "于暗影中穿行。", "死生,一瞬!");
c.emplace_back("银狼", QUANTUM, IMAGINARY,91,10,108,10,14,20,35,
"入侵成功。", "漏洞,找到了。", "系统,全面瘫痪!");
c.emplace_back("阮梅", QUANTUM, IMAGINARY,95,11,105,10,17,26,43,
"起舞。", "寒梅绽放。", "量子深渊!");
c.emplace_back("花火", QUANTUM, IMAGINARY,92,10,111,10,0,0,0,
"独角戏!", "梦游鱼!", "谜诡降临,战技点满!", true);
c.emplace_back("丹恒·饮月", IMAGINARY, QUANTUM,100,12,107,10,19,28,50,
"龙啸。", "化龙之姿。", "饮月沧澜,天地逆旅!");
c.emplace_back("罗刹", IMAGINARY, QUANTUM,103,14,98,10,0,0,0,
"安心。", "伤势,退散。", "以刃渡愈,万法不侵。", true);
c.emplace_back("符玄", IMAGINARY, QUANTUM,108,17,92,10,0,0,0,
"静。", "阵法,启。", "天机,现!", true);
c.emplace_back("银枝", IMAGINARY, QUANTUM,94,10,106,10,18,28,46,
"奏响。", "玫瑰绽放。", "美学,即是暴力!");
c.emplace_back("黄泉", IMAGINARY, PHYSICAL,92,9,111,10,19,30,50,
"寂灭。", "黄泉之路。", "万物,归于虚无!");
c.emplace_back("星·毁灭", PHYSICAL, ICE,100,13,100,10,16,22,38,
"碾碎!", "毁灭,降临。", "规则,是用来打破的!");
return c;
}
void showTitle() {
color(11);
cout << "======================================" << endl;
cout << " 崩坏:星穹铁道 全五星大乱斗 " << endl;
cout << " 属性官方修正版 " << endl;
cout << "======================================" << endl;
color(7);
}
void showChars(const vector<Character>& chars) {
cout << "\n======= 可选择角色 =======\n";
for (unsigned int i = 0; i < chars.size(); ++i) {
color(10); cout << i+1 << ". ";
color(14); cout << chars[i].name << "\t";
color(11); cout << "[" << attrToString(chars[i].attr) << "]";
if (chars[i].is_support) cout << "【辅助】";
cout << endl;
color(7);
}
}
void showBattleUI(Character& p, Character& e) {
cls();
showTitle();
color(12); cout << "\n【我方】" << p.name << endl;
color(7); cout << "HP:" << p.hp << "/" << p.max_hp << " 韧:" << p.tough << " TP:" << p.tp << endl;
color(13); cout << "\n【敌方】" << e.name << endl;
color(7); cout << "HP:" << e.hp << "/" << e.max_hp << " 韧:" << e.tough << " TP:" << e.tp << endl;
cout << "----------------------------------\n";
}
void speak(const string &voice) {
color(14);
cout << "\"" << voice << "\"" << endl;
color(7);
}
void attack(Character& a, Character& d) {
if (a.is_support) {
cout << a.name << "是辅助,无法攻击!\n";
sleep(500);
return;
}
bool weak = isWeak(a.attr, d.weak);
bool broken = (d.tough <= 0);
int dmg = calcDamage(a.atk_dmg, d.def, weak, broken);
cout << endl;
speak(a.atk_line);
playSoundAtk(a.name);
color(12); cout << a.name << " 普攻!造成 " << dmg << "伤害!\n"; color(7);
d.hp -= dmg; if (d.hp < 0) d.hp = 0;
sleep(200);
if (weak) {
d.tough -= 2;
if (d.tough < 0) d.tough = 0;
color(10); cout << "[弱点命中] 韧性-2\n"; color(7);
}
if (d.tough == 0 && !broken) {
color(13); cout << "!!! 击破!敌方眩晕!\n"; color(7);
d.stun_round = 1;
a.tp++; if (a.tp > a.max_tp) a.tp = a.max_tp;
if (a.name == "希儿") {
color(11); cout << "【希儿·闪回】立即再行动!\n"; color(7);
attack(a, d);
}
if (a.name == "飞霄") {
color(14); cout << "【飞霄·追击】\n"; color(7);
int ex = calcDamage(14, d.def, weak, 1);
d.hp -= ex; if (d.hp < 0) d.hp = 0;
}
}
}
void useSkill(Character& a, Character& d) {
if (a.tp < 1) { cout << "TP不足!\n"; sleep(500); return; }
a.tp--;
cout << endl;
speak(a.skill_line);
playSoundSkill(a.name);
if (a.is_support) {
color(10);
if (a.name == "杰帕德") { a.def += 10; cout << "杰帕德防御强化!\n"; }
if (a.name == "藿藿") { a.hp += 20; if (a.hp > a.max_hp) a.hp = a.max_hp; cout << "藿藿治疗!\n"; }
if (a.name == "罗刹") { a.hp += 25; if (a.hp > a.max_hp) a.hp = a.max_hp; cout << "罗刹治愈!\n"; }
if (a.name == "符玄") { d.stun_round = 1; cout << "符玄眩晕敌方!\n"; }
if (a.name == "花火") { a.tp += 2; if (a.tp > 5) a.tp = 5; cout << "花火:战技点+2!\n"; }
color(7);
sleep(400);
return;
}
bool weak = isWeak(a.attr, d.weak);
bool broken = (d.tough <= 0);
int dm = calcDamage(a.skill_dmg, d.def, weak, broken);
d.hp -= dm; if (d.hp < 0) d.hp = 0;
color(11); cout << a.name << " 战技!造成 " << dm << "伤害!\n"; color(7);
if (weak) { d.tough -= 2; if (d.tough < 0) d.tough = 0; }
sleep(300);
}
void useUlt(Character& a, Character& d) {
if (a.tp < 3) { cout << "TP不足!\n"; sleep(500); return; }
a.tp -= 3;
cout << endl;
speak(a.ult_line);
playSoundUlt(a.name);
if (a.is_support) {
color(10);
if (a.name == "杰帕德") { a.hp += 40; if (a.hp > a.max_hp) a.hp = a.max_hp; cout << "杰帕德大幅护盾!\n"; }
if (a.name == "藿藿") { a.hp += 50; if (a.hp > a.max_hp) a.hp = a.max_hp; cout << "藿藿全力治疗!\n"; }
if (a.name == "罗刹") { a.hp = a.max_hp; cout << "罗刹:完全恢复!\n"; }
if (a.name == "符玄") { d.stun_round = 2; cout << "符玄:敌方深度眩晕!\n"; }
if (a.name == "花火") { a.tp = 5; cout << "花火:战技点全满!\n"; }
color(7);
sleep(500);
return;
}
bool weak = isWeak(a.attr, d.weak);
bool broken = (d.tough <= 0);
int dm = calcDamage(a.ult_dmg, d.def, weak, broken);
if (a.name == "丹恒·饮月") dm *= 1.4;
color(12); cout << "【终结技】造成 " << dm << "巨额伤害!\n"; color(7);
d.hp -= dm; if (d.hp < 0) d.hp = 0;
sleep(400);
}
void saveGame(Character& p, Character& e) {
ofstream f("save.dat");
f << p.name << endl << p.hp << endl << p.tough << endl << p.tp << endl;
f << e.name << endl << e.hp << endl << e.tough << endl << e.tp << endl;
f.close();
color(10); cout << "\n? 已保存\n"; color(7);
}
bool loadGame(vector<Character>& chars, Character& p, Character& e) {
ifstream f("save.dat");
if (!f) return false;
string n1, n2;
f >> n1 >> p.hp >> p.tough >> p.tp;
f >> n2 >> e.hp >> e.tough >> e.tp;
for (unsigned int i = 0; i < chars.size(); ++i) {
if (chars[i].name == n1) p = chars[i];
if (chars[i].name == n2) e = chars[i];
}
if (p.hp < 1) p.hp = 1;
if (e.hp < 1) e.hp = 1;
f.close();
return true;
}
void roundEnd(Character& c) {
if (c.stun_round > 0) c.stun_round--;
if (c.tp < c.max_tp) c.tp++;
}
int main() {
srand((unsigned)time(NULL));
vector<Character> chars = initAllChars();
Character player, enemy;
int ch;
cls(); showTitle();
cout << "\n1.新游戏 2.读档\n选择:"; cin >> ch;
if (ch == 2 && loadGame(chars, player, enemy)) {
color(10); cout << "\n读档成功!\n"; color(7); sleep(500);
} else {
showChars(chars);
int c1, c2;
cout << "\n你的角色:"; cin >> c1;
cout << "敌方角色:"; cin >> c2;
player = chars[c1-1];
enemy = chars[c2-1];
}
while (player.hp > 0 && enemy.hp > 0) {
showBattleUI(player, enemy);
if (player.stun_round == 0) {
cout << "\n1.普攻 2.战技 3.大招 4.存档\n选择:"; cin >> ch;
if (ch == 1) attack(player, enemy);
else if (ch == 2) useSkill(player, enemy);
else if (ch == 3) useUlt(player, enemy);
else if (ch == 4) saveGame(player, enemy);
} else {
cout << "眩晕中!\n"; player.stun_round--; sleep(500);
}
if (enemy.hp <= 0) break;
showBattleUI(player, enemy); sleep(500);
if (enemy.stun_round == 0) {
int ai = rand()%3 +1;
if (enemy.is_support) ai = 2;
if (ai ==1) attack(enemy, player);
else if (ai ==2) useSkill(enemy, player);
else useUlt(enemy, player);
} else {
cout << "敌方眩晕!\n"; enemy.stun_round--; sleep(500);
}
roundEnd(player); roundEnd(enemy);
sleep(300);
}
cls(); showTitle();
color(10); cout << "\n\n 战斗结束!\n"; color(12);
if (player.hp > 0) cout << " " << player.name << " 胜利!\n";
else cout << " " << enemy.name << " 胜利!\n";
color(7);
system("pause>nul");
return 0;
}
#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("邓淅喆", 980, 110, "可乐喷射", "我射!", 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 + 25;
std::cout << " 可乐射一脸!额外25点伤害!\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;
}