• 个人简介

    游戏跑不出来的统一回复,源文件名改成英文命名

    看我主页的是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;
    }
    
  • 最近活动