• 个人简介

    #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;
    }
    
    
    
    
  • 最近活动