问题标题: 酷丁编程:***

0
0
已解决
胡子靖
胡子靖
初级守护
初级守护

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <iomanip>
#ifdef _WIN32
#include <windows.h>
#endif

using namespace std;

enum ItemType {
    HP_POTION,
    RAGE_POTION,
    UPGRADE_MAT,
    NONE
};

struct Item {
    string name;
    ItemType type;
    int effectValue;
    int count;
    float dropRate;
};

struct Role {
    string name;
    int hp;
    int maxHp;
    int atk;
    int def;
    float dodge;
    bool isAlive;
    vector<Item> dropItems;
};

// 新增:技能类型枚举
enum SkillType {
    SINGLE_TARGET,  // 单体攻击
    AREA_TARGET,    // 范围攻击
    HEALING         // 治疗
};

struct Skill {
    string name;
    int damage;
    int heal;
    int cd;
    int cdLeft;
    float crit;
    int level;
    int maxLevel;
    int rageCost;
    int upgradeCost;
    SkillType skillType;  // 新增:技能类型
    int areaTargets;      // 新增:范围攻击的目标数量
};

struct Player : Role {
    int rage;
    int maxRage;
    vector<Skill> skills;
    vector<Item> inventory;
    int matCount;
};

const int PLAYER_MAX_RAGE = 200;
const int RAGE_GAIN_PER_ATTACK = 25;
const int SKILL_MAX_LEVEL = 3;

void clearScreen() {
#ifdef _WIN32
    system("cls");
#else
    system("clear");
#endif
}

// ====================== 【增强版:超多新道具】 ======================
vector<Item> initItemTemplates() {
    return {
        // 基**恢复
        {"小型回血药",    HP_POTION,    30, 0, 0.4f},
        {"中型回血药",    HP_POTION,    70, 0, 0.35f},
        {"大型回血药",    HP_POTION,   120, 0, 0.25f},
        {"超级血瓶",      HP_POTION,   200, 0, 0.2f},
        {"神级血瓶",      HP_POTION,   350, 0, 0.15f},
        {"永恒生命药剂",  HP_POTION,   500, 0, 0.1f},

        // 怒气恢复
        {"小型怒气药",    RAGE_POTION,  20, 0, 0.3f},
        {"中型怒气药",    RAGE_POTION,  45, 0, 0.25f},
        {"大型怒气药",    RAGE_POTION,  80, 0, 0.2f},
        {"超级怒气瓶",    RAGE_POTION, 120, 0, 0.18f},
        {"神级怒气瓶",    RAGE_POTION, 180, 0, 0.12f},
        {"无尽怒火药剂",  RAGE_POTION, 250, 0, 0.08f},

        // 升级材料
        {"技能升级碎片",  UPGRADE_MAT,   5, 0, 0.2f},
        {"升级核心",      UPGRADE_MAT,  10, 0, 0.18f},
        {"高级核心",      UPGRADE_MAT,  20, 0, 0.12f},
        {"传说核心",      UPGRADE_MAT,  30, 0, 0.1f},
        {"神级核心",      UPGRADE_MAT,  50, 0, 0.08f},
        {"创世核心",      UPGRADE_MAT,  80, 0, 0.05f}
    };
}

void showStatus(Player& player, vector<Role>& enemies) {
    clearScreen();
    cout << "======================= 战斗面板 =======================" << endl;
    cout << "【玩家】" << player.name
         << " HP: " << player.hp << "/" << player.maxHp
         << " 防御: " << player.def
         << " 闪避: " << player.dodge*100 << "%"
         << " 怒气: " << player.rage << "/" << player.maxRage
         << " 材料: " << player.matCount << endl;

    cout << "\n【敌人列表】" << endl;
    for (int i=0; i<enemies.size(); i++) {
        string alive = enemies[i].isAlive ? "[存活]" : "[已击败]";
        cout << i+1 << ". " << enemies[i].name
             << " HP:" << enemies[i].hp << "/" << enemies[i].maxHp
             << " 攻:" << enemies[i].atk << " 防:" << enemies[i].def
             << " " << alive << endl;
    }

    cout << "\n【道具】" << endl;
    if (player.inventory.empty()) cout << "暂无道具" << endl;
    else for (int i=0; i<player.inventory.size(); i++)
        cout << i+1 << ". " << player.inventory[i].name << " x" << player.inventory[i].count << endl;

    cout << "\n【技能】" << endl;
    for (int i=0; i<player.skills.size(); i++) {
        auto& s = player.skills[i];
        string skillTypeStr = "";
        if (s.skillType == AREA_TARGET) {
            skillTypeStr = " [范围攻击x" + to_string(s.areaTargets) + "]";
        } else if (s.skillType == HEALING) {
            skillTypeStr = " [治疗]";
        } else {
            skillTypeStr = " [单体]";
        }
        cout << i+1 << ". " << s.name << " Lv" << s.level
             << skillTypeStr
             << " (" << (s.cdLeft>0 ? "冷却中" : "可使用") << ")" << endl;
    }

    int up = player.skills.size()+1;
    int it = up + (player.inventory.empty() ? 0 : 1);
    cout << up << ".升级技能 " << (player.inventory.empty() ? "" : to_string(it)+".使用道具") << endl;
    cout << "=======================================================" << endl;
}

void updateBattleState(Player& p) {
    for (auto& s : p.skills) if (s.cdLeft>0) s.cdLeft--;
    if (p.rage>p.maxRage) p.rage = p.maxRage;
}

void doAttack(Role& a, Role& d, int dmg, float crit, bool skill=0) {
    if (!d.isAlive) { cout << d.name << "已被击败!\n"; return; }
    float r = (float)rand()/RAND_MAX;
    if (r <= d.dodge) { cout << d.name << "闪避!\n"; return; }
    int real = dmg - d.def; if (real<1) real=1;
    r = (float)rand()/RAND_MAX;
    if (r <= crit) { cout << "★暴击!★ "; real*=2; }
    d.hp -= real;
    if (d.hp <= 0) {
        d.hp=0; d.isAlive=0;
        cout << a.name << (skill?"技能攻击":"普通攻击") << "造成"<<real<<"伤害!"<<d.name<<"被击败!\n";
        if (a.name == "勇士") {
            float dr = (float)rand()/RAND_MAX;
            float tr=0; Item di={"无",NONE,0,0,0};
            for (auto& i : d.dropItems) {
                tr+=i.dropRate;
                if (dr<=tr && di.type==NONE) di=i;
            }
            if (di.type!=NONE) {
                cout << "🎉掉落"<<di.name<<"!\n";
                bool has=0;
                for (auto& ii : ((Player&)a).inventory)
                    if (ii.type==di.type && ii.name==di.name) { ii.count++; has=1; break; }
                if (!has) { di.count=1; ((Player&)a).inventory.push_back(di); }
                if (di.type==UPGRADE_MAT) ((Player&)a).matCount++;
            } else cout << d.name<<"没掉落道具\n";
        }
    } else cout << a.name<<(skill?"技能攻击":"普通攻击")<<"造成"<<real<<"伤害!"<<d.name<<"剩余HP:"<<d.hp<<"\n";
}

// 新增:范围攻击函数
void doAreaAttack(Role& a, vector<Role>& enemies, int dmg, float crit, int targetCount) {
    cout << "\n【范围攻击】" << a.name << "发动范围攻击,攻击" << targetCount << "个敌人!\n";

    // 收集存活的敌人
    vector<int> aliveEnemies;
    for (int i = 0; i < enemies.size(); i++) {
        if (enemies[i].isAlive) {
            aliveEnemies.push_back(i);
        }
    }

    if (aliveEnemies.empty()) {
        cout << "没有可攻击的敌人!\n";
        return;
    }

    // 确定实际攻击数量(不超过存活敌人数量)
    int actualTargets = min(targetCount, (int)aliveEnemies.size());

    // 随机选择目标(避免重复)
    vector<int> selectedTargets;
    while (selectedTargets.size() < actualTargets) {
        int idx = rand() % aliveEnemies.size();
        bool exists = false;
        for (int t : selectedTargets) {
            if (t == aliveEnemies[idx]) {
                exists = true;
                break;
            }
        }
        if (!exists) {
            selectedTargets.push_back(aliveEnemies[idx]);
        }
    }

    // 对选中的目标进行攻击
    for (int idx : selectedTargets) {
        Role& d = enemies[idx];
        float r = (float)rand()/RAND_MAX;
        if (r <= d.dodge) {
            cout << d.name << "闪避了范围攻击!\n";
            continue;
        }
        int real = dmg - d.def;
        if (real < 1) real = 1;

        // 暴击判定
        r = (float)rand()/RAND_MAX;
        if (r <= crit) {
            cout << "★暴击!★ ";
            real *= 2;
        }

        d.hp -= real;
        if (d.hp <= 0) {
            d.hp = 0;
            d.isAlive = 0;
            cout << a.name << "的范围攻击对" << d.name << "造成" << real << "伤害!" << d.name << "被击败!\n";

            // 掉落道具逻辑
            if (a.name == "勇士") {
                float dr = (float)rand()/RAND_MAX;
                float tr=0; Item di={"无",NONE,0,0,0};
                for (auto& i : d.dropItems) {
                    tr += i.dropRate;
                    if (dr <= tr && di.type == NONE) di = i;
                }
                if (di.type != NONE) {
                    cout << "🎉" << d.name << "掉落" << di.name << "!\n";
                    bool has = 0;
                    for (auto& ii : ((Player&)a).inventory) {
                        if (ii.type == di.type && ii.name == di.name) {
                            ii.count++;
                            has = 1;
                            break;
                        }
                    }
                    if (!has) {
                        di.count = 1;
                        ((Player&)a).inventory.push_back(di);
                    }
                    if (di.type == UPGRADE_MAT) ((Player&)a).matCount++;
                }
            }
        } else {
            cout << a.name << "的范围攻击对" << d.name << "造成" << real << "伤害!" << d.name << "剩余HP:" << d.hp << "\n";
        }
    }
}

bool useSkill(Player& p, Skill& s, vector<Role>& es, int idx = -1) {
    if (s.cdLeft > 0) {
        cout << s.name << "冷却中!剩" << s.cdLeft << "回合\n";
        return 0;
    }
    if (p.rage < s.rageCost) {
        cout << "怒气不足!\n";
        return 0;
    }

    p.rage -= s.rageCost;

    // 治疗技能
    if (s.skillType == HEALING) {
        int h = s.heal * (1 + (s.level - 1) * 0.5);
        p.hp += h;
        if (p.hp > p.maxHp) p.hp = p.maxHp;
        cout << p.name << "使用" << s.name << "恢复" << h << "HP!\n";
        s.cdLeft = s.cd;
        return 1;
    }

    // 范围攻击技能
    if (s.skillType == AREA_TARGET) {
        int sd = s.damage * (1 + (s.level - 1) * 0.4);
        doAreaAttack(p, es, sd, s.crit, s.areaTargets);
        s.cdLeft = s.cd;
        return 1;
    }

    // 单体攻击技能
    if (s.skillType == SINGLE_TARGET) {
        if (idx < 0 || idx >= es.size() || !es[idx].isAlive) {
            cout << "目标无效!\n";
            return 0;
        }
        int sd = s.damage * (1 + (s.level - 1) * 0.4);
        doAttack(p, es[idx], sd, s.crit, 1);
        s.cdLeft = s.cd;
        return 1;
    }

    return 0;
}

void useItem(Player& p) {
    if (p.inventory.empty()) { cout<<"无道具\n"; return; }
    int x; cout<<"选择道具:"; cin>>x; x--;
    if (x<0||x>=p.inventory.size()) { cout<<"无效\n"; return; }
    auto& i = p.inventory[x];
    if (i.count<=0) { cout<<"无数量\n"; return; }
    if (i.type==HP_POTION) { p.hp+=i.effectValue; if(p.hp>p.maxHp)p.hp=p.maxHp; cout<<"恢复HP!\n"; }
    else if (i.type==RAGE_POTION) { p.rage+=i.effectValue; if(p.rage>p.maxRage)p.rage=p.maxRage; cout<<"获得怒气!\n"; }
    else { cout<<"无法使用\n"; return; }
    i.count--; if (i.count<=0) p.inventory.erase(p.inventory.begin()+x);
}

void upgradeSkill(Player& p) {
    int x; cout<<"选择技能:"; cin>>x; x--;
    if (x<0||x>=p.skills.size()) { cout<<"无效\n"; return; }
    auto& s = p.skills[x];
    if (s.level>=s.maxLevel) { cout<<"已满级\n"; return; }
    int c = s.upgradeCost - p.matCount*5; if (c<10)c=10;
    if (p.rage<c) { cout<<"怒气不足\n"; return; }
    p.rage-=c; s.level++;
    cout<<"升级成功!"<<s.name<<" Lv"<<s.level<<"!\n";
}

void enemyAttack(Player& p, vector<Role>& es) {
    cout<<"\n【敌人反击】\n";
    for (auto& e : es) if (e.isAlive) { doAttack(e,p,e.atk,0.1f); break; }
    if (p.hp<=0) { p.hp=0; p.isAlive=0; cout<<p.name<<"被击败!\n"; }
    else { p.rage += RAGE_GAIN_PER_ATTACK/2; cout<<"受击获得怒气!当前:"<<p.rage<<"\n"; }
}

// ====================== 200 个敌人 · 道具掉落增强 ======================
void initGame(Player& p, vector<Role>& es) {
    auto items = initItemTemplates();

    p.name = "勇士";
    p.hp = 800;
    p.maxHp = 800;
    p.atk = 90;
    p.def = 45;
    p.dodge = 0.25f;
    p.isAlive = 1;
    p.rage = 150;
    p.maxRage = PLAYER_MAX_RAGE;
    p.matCount = 0;
    p.inventory.clear();

    // 更新技能列表,新增范围攻击技能"旋风斩"
    p.skills = {
        {"普通攻击",   0,   0, 0, 0, 0.25f, 1, 3,  0, 30, SINGLE_TARGET, 1},
        {"重拳",      90,   0, 2, 0, 0.35f, 1, 3, 20, 45, SINGLE_TARGET, 1},
        {"治疗术",     0, 100, 3, 0, 0.00f, 1, 3, 25, 60, HEALING, 1},
        {"奋力一击", 130,   0, 4, 0, 0.45f, 1, 3, 35, 70, SINGLE_TARGET, 1},
        {"旋风斩",    70,   0, 5, 0, 0.30f, 1, 3, 50, 80, AREA_TARGET, 5}  // 范围攻击:同时攻击5个敌人
    };

    es = {
        // 1–100
        {"哥布林小兵",60,60,12,4,0.05f,1,{items[0],items[6]}},
        {"哥布林弓箭手",50,50,16,3,0.10f,1,{items[6],items[12]}},
        {"哥布林战士",70,70,14,6,0.06f,1,{items[0],items[12]}},
        {"哥布林投矛手",45,45,18,2,0.08f,1,{items[6],items[0]}},
        {"哥布林狂战士",80,80,17,7,0.07f,1,{items[0],items[6],items[12]}},
        {"哥布林刺客",40,40,20,1,0.15f,1,{items[6],items[13]}},
        {"哥布林守卫",100,100,11,10,0.04f,1,{items[0],items[1]}},
        {"哥布林萨满",65,65,13,5,0.06f,1,{items[1],items[7]}},
        {"哥布林督军",130,130,23,9,0.09f,1,{items[1],items[7],items[13]}},
        {"哥布林首领",150,150,26,10,0.08f,1,{items[2],items[8],items[14]}},

        {"哥布林猎手",55,55,19,3,0.11f,1,{items[6],items[1]}},
        {"哥布林铁匠",90,90,15,12,0.03f,1,{items[0],items[13]}},
        {"哥布林巫医",70,70,10,4,0.07f,1,{items[1],items[8]}},
        {"哥布林掠夺者",85,85,21,6,0.08f,1,{items[7],items[13]}},
        {"哥布林狂徒",75,75,22,5,0.06f,1,{items[6],items[2]}},
        {"哥布林哨兵",50,50,14,4,0.13f,1,{items[0],items[12]}},
        {"哥布林屠夫",110,110,24,8,0.05f,1,{items[2],items[7]}},
        {"哥布林咒术师",60,60,12,3,0.09f,1,{items[8],items[14]}},
        {"哥布林战将",140,140,27,11,0.07f,1,{items[2],items[14]}},
        {"哥布林帝王",200,200,32,14,0.10f,1,{items[2],items[8],items[14]}},

        {"哥布林斥候",45,45,15,2,0.16f,1,{items[6],items[12]}},
        {"哥布林盾卫",120,120,16,15,0.03f,1,{items[0],items[1]}},
        {"哥布林炎术士",75,75,25,4,0.07f,1,{items[8],items[14]}},
        {"哥布林拳师",95,95,26,7,0.06f,1,{items[7],items[2]}},
        {"哥布林驯兽师",80,80,14,5,0.08f,1,{items[1],items[13]}},
        {"哥布林督军亲卫",160,160,29,12,0.08f,1,{items[2],items[14]}},
        {"哥布林暗刃",65,65,30,3,0.18f,1,{items[8],items[14]}},
        {"哥布林魔像守卫",220,220,20,18,0.02f,1,{items[2],items[14]}},
        {"哥布林大祭司",130,130,18,8,0.09f,1,{items[8],items[14]}},
        {"哥布林暗黑帝王",280,280,38,20,0.12f,1,{items[3],items[9],items[15]}},

        {"哥布林先锋",70,70,23,6,0.08f,1,{items[1],items[7]}},
        {"哥布林熔岩卫士",180,180,25,16,0.04f,1,{items[2],items[3]}},
        {"哥布林幽灵刺客",80,80,35,5,0.22f,1,{items[9],items[15]}},
        {"哥布林战争机器",300,300,22,25,0.01f,1,{items[3],items[15]}},
        {"哥布林火焰使者",120,120,33,10,0.08f,1,{items[8],items[3]}},
        {"哥布林寒冰勇士",170,170,28,13,0.09f,1,{items[2],items[9]}},
        {"哥布林皇家卫士",250,250,26,22,0.05f,1,{items[3],items[15]}},
        {"哥布林深渊法师",140,140,36,9,0.10f,1,{items[9],items[15]}},
        {"哥布林半神守卫",320,320,35,24,0.07f,1,{items[3],items[9],items[15]}},
        {"哥布林灭世魔君",400,400,45,28,0.15f,1,{items[3],items[9],items[15]}},

        {"哥布林毒牙刺客",90,90,38,6,0.20f,1,{items[9],items[15]}},
        {"哥布林钢铁壁垒",350,350,28,30,0.02f,1,{items[3],items[15]}},
        {"哥布林风暴术士",150,150,40,8,0.11f,1,{items[9],items[15]}},
        {"哥布林狂兽战士",210,210,42,15,0.06f,1,{items[3],items[9]}},
        {"哥布林虚空行者",110,110,44,7,0.24f,1,{items[9],items[15]}},
        {"哥布林炎狱领主",380,380,46,26,0.07f,1,{items[3],items[15]}},
        {"哥布林圣辉卫士",330,330,39,28,0.06f,1,{items[3],items[9],items[15]}},
        {"哥布林**厄巫师",190,190,48,12,0.12f,1,{items[9],items[15]}},
        {"哥布林远古守护者",420,420,43,32,0.05f,1,{items[3],items[15]}},
        {"哥布林**魔神",500,500,55,35,0.18f,1,{items[3],items[9],items[15]}},

        {"哥布林废墟守卫",100,100,25,8,0.09f,1,{items[1],items[13]}},
        {"哥布林暗影猎手",85,85,42,5,0.21f,1,{items[9],items[15]}},
        {"哥布林岩石傀儡",360,360,30,33,0.02f,1,{items[3],items[15]}},
        {"哥布林雷霆法师",160,160,45,9,0.10f,1,{items[9],items[15]}},
        {"哥布林狂怒猎手",220,220,44,16,0.07f,1,{items[3],items[9]}},
        {"哥布林幽冥行者",120,120,47,8,0.23f,1,{items[9],items[15]}},
        {"哥布林炼狱卫士",400,400,49,29,0.07f,1,{items[3],items[15]}},
        {"哥布林圣光守卫",350,350,42,30,0.06f,1,{items[3],items[9],items[15]}},
        {"哥布林毁灭巫师",210,210,50,13,0.11f,1,{items[9],items[15]}},
        {"哥布林太古守护者",450,450,48,35,0.05f,1,{items[3],items[15]}},

        {"哥布林荒野掠夺者",110,110,28,9,0.08f,1,{items[7],items[2]}},
        {"哥布林深渊刺客",95,95,48,7,0.22f,1,{items[9],items[15]}},
        {"哥布林黑曜石魔像",380,380,33,36,0.02f,1,{items[3],items[15]}},
        {"哥布林地狱火法师",180,180,50,10,0.10f,1,{items[9],items[15]}},
        {"哥布林战狂勇士",240,240,47,18,0.07f,1,{items[3],items[9]}},
        {"哥布林虚空猎手",130,130,50,9,0.22f,1,{items[9],items[15]}},
        {"哥布林火焰领主",420,420,52,31,0.07f,1,{items[3],items[15]}},
        {"哥布林神恩卫士",380,380,45,33,0.06f,1,{items[3],items[9],items[15]}},
        {"哥布林末日巫师",230,230,53,14,0.11f,1,{items[9],items[15]}},
        {"哥布林上古守护者",480,480,50,38,0.05f,1,{items[3],items[15]}},

        {"哥布林荒漠屠夫",120,120,30,10,0.08f,1,{items[2],items[8]}},
        {"哥布林幽冥刺客",100,100,50,8,0.21f,1,{items[9],items[15]}},
        {"哥布林深渊魔像",400,400,35,39,0.02f,1,{items[3],items[15]}},
        {"哥布林暗影法师",200,200,53,11,0.10f,1,{items[9],items[15]}},
        {"哥布林战神勇士",260,260,50,20,0.07f,1,{items[3],items[9]}},
        {"哥布林虚空刺客",140,140,52,10,0.21f,1,{items[9],items[15]}},
        {"哥布林熔岩领主",450,450,55,34,0.07f,1,{items[3],items[15]}},
        {"哥布林神圣卫士",400,400,48,36,0.06f,1,{items[3],items[9],items[15]}},
        {"哥布林**变巫师",250,250,55,15,0.11f,1,{items[9],items[15]}},
        {"哥布林终极守护者",500,500,53,40,0.05f,1,{items[3],items[15]}},

        {"哥布林邪能屠夫",130,130,32,11,0.08f,1,{items[2],items[3]}},
        {"哥布林灭影刺客",110,110,53,9,0.20f,1,{items[4],items[10]}},
        {"哥布林**魔像",430,430,38,42,0.02f,1,{items[4],items[16]}},
        {"哥布林邪能法师",220,220,55,12,0.10f,1,{items[4],items[10]}},
        {"哥布林狂战神",280,280,53,22,0.07f,1,{items[4],items[10]}},
        {"哥布林虚空魔刃",150,150,55,11,0.20f,1,{items[4],items[16]}},
        {"哥布林**领主",480,480,58,37,0.07f,1,{items[4],items[16]}},
        {"哥布林神谕卫士",430,430,50,39,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林**巫师",270,270,58,16,0.11f,1,{items[4],items[16]}},
        {"哥布林永恒守护者",530,530,55,43,0.05f,1,{items[4],items[16]}},

        {"哥布林灭世屠夫",150,150,35,12,0.08f,1,{items[4],items[10]}},
        {"哥布林深渊魔影",120,120,58,10,0.20f,1,{items[4],items[16]}},
        {"哥布林终焉魔像",460,460,40,45,0.02f,1,{items[4],items[16]}},
        {"哥布林终焉法师",240,240,58,13,0.10f,1,{items[4],items[16]}},
        {"哥布林不灭战狂",300,300,55,25,0.07f,1,{items[4],items[10],items[16]}},
        {"哥布林虚空魔神",180,180,60,12,0.20f,1,{items[4],items[16]}},
        {"哥布林终焉领主",500,500,60,40,0.07f,1,{items[4],items[16]}},
        {"哥布林创世卫士",460,460,53,42,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林**主宰",300,300,60,18,0.11f,1,{items[4],items[16]}},
        {"哥布林万魔之主",600,600,65,45,0.20f,1,{items[4],items[10],items[16]}},

        // 101–200
        {"哥布林噬魂者",130,130,55,10,0.20f,1,{items[4],items[10]}},
        {"哥布林碎甲者",320,320,45,40,0.03f,1,{items[4],items[16]}},
        {"哥布林星界法师",250,250,62,14,0.12f,1,{items[4],items[16]}},
        {"哥布林狂狮勇士",330,330,58,26,0.08f,1,{items[4],items[10]}},
        {"哥布林影遁行者",140,140,65,11,0.25f,1,{items[4],items[16]}},
        {"哥布林炼狱君王",550,550,68,42,0.08f,1,{items[4],items[16]}},
        {"哥布林神御守卫",480,480,55,44,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林星陨巫师",280,280,65,17,0.12f,1,{items[4],items[16]}},
        {"哥布林寰宇守护者",580,580,60,46,0.05f,1,{items[4],items[16]}},
        {"哥布林万界魔神",650,650,75,48,0.22f,1,{items[4],items[10],items[16]}},

        {"哥布林血斧勇士",160,160,40,13,0.09f,1,{items[3],items[9]}},
        {"哥布林幽影**",125,125,60,9,0.23f,1,{items[4],items[16]}},
        {"哥布林泰坦魔像",520,520,50,50,0.02f,1,{items[4],items[16]}},
        {"哥布林极光法师",260,260,68,15,0.11f,1,{items[4],items[16]}},
        {"哥布林战魂狂士",340,340,62,28,0.08f,1,{items[4],items[10]}},
        {"哥布林虚空行者·改",150,150,68,12,0.26f,1,{items[4],items[16]}},
        {"哥布林炎狱帝尊",580,580,72,44,0.08f,1,{items[4],items[16]}},
        {"哥布林圣辉帝卫",500,500,58,46,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林末日神巫",290,290,68,18,0.12f,1,{items[4],items[16]}},
        {"哥布林鸿蒙守护者",600,600,63,48,0.05f,1,{items[4],items[16]}},

        {"哥布林裂地者",170,170,42,14,0.09f,1,{items[3],items[9]}},
        {"哥布林绝影刺客",130,130,63,10,0.24f,1,{items[4],items[16]}},
        {"哥布林远古魔像",540,540,52,52,0.02f,1,{items[4],items[16]}},
        {"哥布林神辉法师",270,270,70,16,0.11f,1,{items[4],items[16]}},
        {"哥布林战神圣士",350,350,65,30,0.08f,1,{items[4],items[10]}},
        {"哥布林幽冥行者·改",160,160,70,13,0.26f,1,{items[4],items[16]}},
        {"哥布林**帝尊",600,600,75,46,0.08f,1,{items[4],items[16]}},
        {"哥布林创世神卫",520,520,60,48,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林**神巫",300,300,70,19,0.12f,1,{items[4],items[16]}},
        {"哥布林太初守护者",620,620,65,50,0.05f,1,{items[4],items[16]}},

        {"哥布林破法者",180,180,45,15,0.09f,1,{items[3],items[9]}},
        {"哥布林灭魂刺客",135,135,65,11,0.25f,1,{items[4],items[16]}},
        {"哥布林**魔像·改",560,560,55,55,0.02f,1,{items[4],items[16]}},
        {"哥布林邪能神法师",280,280,73,17,0.11f,1,{items[4],items[16]}},
        {"哥布林不灭战神",360,360,68,32,0.08f,1,{items[4],items[10]}},
        {"哥布林虚空魔刃·改",170,170,73,14,0.26f,1,{items[4],items[16]}},
        {"哥布林终焉帝尊",620,620,78,48,0.08f,1,{items[4],items[16]}},
        {"哥布林鸿蒙神卫",540,540,63,50,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林终焉神巫",310,310,73,20,0.12f,1,{items[4],items[16]}},
        {"哥布林元始守护者",640,640,68,52,0.05f,1,{items[4],items[16]}},

        {"哥布林天谴者",190,190,48,16,0.09f,1,{items[3],items[9]}},
        {"哥布林噬影刺客",140,140,68,12,0.25f,1,{items[4],items[16]}},
        {"哥布林终焉魔像·改",580,580,58,58,0.02f,1,{items[4],items[16]}},
        {"哥布林创世神法师",290,290,75,18,0.11f,1,{items[4],items[16]}},
        {"哥布林万界战狂",370,370,70,34,0.08f,1,{items[4],items[10]}},
        {"哥布林深渊魔影·改",180,180,75,15,0.26f,1,{items[4],items[16]}},
        {"哥布林元始帝尊",640,640,80,50,0.08f,1,{items[4],items[16]}},
        {"哥布林元始神卫",560,560,65,52,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林万界神巫",320,320,75,21,0.12f,1,{items[4],items[16]}},
        {"哥布林**守护者",660,660,70,55,0.05f,1,{items[4],items[16]}},

        {"哥布林焚天者",200,200,50,18,0.10f,1,{items[4],items[10]}},
        {"哥布林灭界刺客",145,145,70,13,0.25f,1,{items[4],items[16]}},
        {"哥布林元始魔像",600,600,60,60,0.02f,1,{items[4],items[16]}},
        {"哥布林万界神法师",300,300,78,19,0.11f,1,{items[4],items[16]}},
        {"哥布林**战狂",380,380,73,36,0.08f,1,{items[4],items[10]}},
        {"哥布林虚空魔神·改",190,190,78,16,0.26f,1,{items[4],items[16]}},
        {"哥布林鸿蒙帝尊",660,660,83,52,0.08f,1,{items[4],items[16]}},
        {"哥布林**神卫",580,580,68,55,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林鸿蒙神巫",330,330,78,22,0.12f,1,{items[4],items[16]}},
        {"哥布林万界守护者",680,680,73,58,0.05f,1,{items[4],items[16]}},

        {"哥布林裂空者",210,210,53,19,0.10f,1,{items[4],items[10]}},
        {"哥布林噬界刺客",150,150,73,14,0.25f,1,{items[4],items[16]}},
        {"哥布林鸿蒙魔像",620,620,63,63,0.02f,1,{items[4],items[16]}},
        {"哥布林鸿蒙神法师",310,310,80,20,0.11f,1,{items[4],items[16]}},
        {"哥布林元始战狂",390,390,75,38,0.08f,1,{items[4],items[10]}},
        {"哥布林**主宰·改",200,200,80,17,0.26f,1,{items[4],items[16]}},
        {"哥布林万界帝尊",680,680,85,55,0.08f,1,{items[4],items[16]}},
        {"哥布林万界神卫",600,600,70,58,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林元始神巫",340,340,80,23,0.12f,1,{items[4],items[16]}},
        {"哥布林终极守护者·改",700,700,75,60,0.05f,1,{items[4],items[16]}},

        {"哥布林断罪者",220,220,55,20,0.10f,1,{items[4],items[10]}},
        {"哥布林诛神刺客",155,155,75,15,0.25f,1,{items[4],items[16]}},
        {"哥布林万界魔像",640,640,65,65,0.02f,1,{items[4],items[16]}},
        {"哥布林元始神法师",320,320,83,21,0.11f,1,{items[4],items[16]}},
        {"哥布林鸿蒙战狂",400,400,78,40,0.08f,1,{items[4],items[10]}},
        {"哥布林万魔之主·改",210,210,83,18,0.26f,1,{items[4],items[16]}},
        {"哥布林终极帝尊",700,700,88,58,0.08f,1,{items[4],items[16]}},
        {"哥布林终极神卫",620,620,73,60,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林万界神巫·改",350,350,83,24,0.12f,1,{items[4],items[16]}},
        {"哥布林超终极守护者",720,720,78,63,0.05f,1,{items[4],items[16]}},

        {"哥布林裁决者",230,230,58,21,0.10f,1,{items[4],items[10]}},
        {"哥布林灭世刺客",160,160,78,16,0.25f,1,{items[4],items[16]}},
        {"哥布林终极魔像",660,660,68,68,0.02f,1,{items[4],items[16]}},
        {"哥布林超神法师",330,330,85,22,0.11f,1,{items[4],items[16]}},
        {"哥布林超神战狂",410,410,80,42,0.08f,1,{items[4],items[10]}},
        {"哥布林超神刺客",220,220,85,19,0.26f,1,{items[4],items[16]}},
        {"哥布林超神帝尊",720,720,90,60,0.08f,1,{items[4],items[16]}},
        {"哥布林超神神卫",640,640,75,63,0.06f,1,{items[4],items[10],items[16]}},
        {"哥布林超神神巫",360,360,85,25,0.12f,1,{items[4],items[16]}},
        {"哥布林创世守护者",740,740,80,65,0.05f,1,{items[4],items[16]}},

        {"哥布林神罚者",240,240,60,22,0.10f,1,{items[4],items[10]}},
        {"哥布林创世刺客",165,165,80,17,0.25f,1,{items[5],items[11]}},
        {"哥布林超神魔像",680,680,70,70,0.02f,1,{items[5],items[17]}},
        {"哥布林创世神法师",340,340,88,23,0.11f,1,{items[5],items[17]}},
        {"哥布林创世战狂",420,420,83,44,0.08f,1,{items[5],items[11]}},
        {"哥布林创世魔影",230,230,88,20,0.26f,1,{items[5],items[17]}},
        {"哥布林创世帝尊",740,740,93,63,0.08f,1,{items[5],items[17]}},
        {"哥布林鸿蒙终极卫士",660,660,78,65,0.06f,1,{items[5],items[11],items[17]}},
        {"哥布林创世神巫",370,370,88,26,0.12f,1,{items[5],items[17]}},
        {"哥布林万神之主",800,800,100,70,0.25f,1,{items[5],items[11],items[17]}}
    };
}

int main() {
#ifdef _WIN32
    SetConsoleOutputCP(CP_UTF8);
    SetConsoleCP(CP_UTF8);
#endif
    srand((unsigned)time(NULL));
    Player p;
    vector<Role> es;
    initGame(p, es);

    cout << "==== 勇士 VS 哥布林军团(200 只敌人 + 全新道具 + 范围攻击)====\n按回车键开始\n";
    cin.get();

    while (p.isAlive) {
        updateBattleState(p);
        showStatus(p, es);

        bool allDead = true;
        for (auto& e : es) {
            if (e.isAlive) {
                allDead = false;
                break;
            }
        }
        if (allDead) {
            cout << "\n★ 恭喜!你击败了全部 200 个敌人!真正无敌!★\n";
            break;
        }

        cout << "\n选择操作:";
        int c;
        cin >> c;

        int up = p.skills.size() + 1;
        int it = up + (p.inventory.empty() ? 0 : 1);
        while (c < 1 || c > (p.inventory.empty() ? up : it)) {
            cin.clear();
            cin.ignore(1000, '\n');
            cout << "输入错误,请重输:";
            cin >> c;
        }

        bool act = true;
        if (c <= p.skills.size()) {
            Skill& s = p.skills[c-1];
            if (c == 1) {
                // 普通攻击
                int t = -1;
                for (int i = 0; i < es.size(); ++i) {
                    if (es[i].isAlive) {
                        t = i;
                        break;
                    }
                }
                if (t != -1) {
                    int dmg = p.atk * (1 + (s.level-1)*0.3);
                    doAttack(p, es[t], dmg, s.crit);
                    p.rage += RAGE_GAIN_PER_ATTACK;
                }
            } else {
                // 技能使用
                if (s.skillType == AREA_TARGET) {
                    // 范围攻击不需要选择目标
                    act = useSkill(p, s, es);
                } else if (s.skillType == SINGLE_TARGET) {
                    // 单体攻击需要选择目标
                    cout << "选择目标敌人:";
                    int t;
                    cin >> t;
                    t--;
                    act = useSkill(p, s, es, t);
                } else {
                    // 治疗技能不需要选择目标
                    act = useSkill(p, s, es);
                }
                if (act) p.rage += 5;
            }
        } else if (c == up) {
            upgradeSkill(p);
            act = false;
        } else {
            useItem(p);
            act = false;
        }

        if (act && p.isAlive) {
            enemyAttack(p, es);
        }

        cout << "\n按回车继续...\n";
        cin.ignore();
        cin.get();
    }

    if (!p.isAlive) {
        cout << "\n★ 你被击败了 ★\n";
    }

    return 0;
}
 


0
已采纳
于行衍
于行衍
中级天翼
中级天翼

没法复制,要发都代码分享

0
我要回答