• 个人简介

    #include <iostream> #include <string> #include <vector> #include <cstdlib> #include <ctime> #include <iomanip> #include <windows.h> #include <sstream> #include <map> #include <algorithm> #include <set> #include <limits>

    using namespace std;

    // 整数转字符串 string intToString(long long num) { stringstream ss; ss << num; return ss.str(); }

    // 格式化大数字(加逗号) string formatNumber(long long num) { string str = intToString(num); string result = ""; int count = 0; for (int i = str.length() - 1; i >= 0; i--) { result = str[i] + result; count++; if (count % 3 == 0 && i > 0) { result = "," + result; } } return result; }

    // 格式化未知血量 string formatHealth(long long health, bool isUnknown = false) { if (isUnknown) { return "NAN"; } return formatNumber(health); }

    // 去除字符串两端的空格 string trim(const string& str) { size_t first = str.find_first_not_of(" \t\n\r"); if (first == string::npos) return ""; size_t last = str.find_last_not_of(" \t\n\r"); return str.substr(first, last - first + 1); }

    // 坐标类 class Position { public: int x, y, z; Position() : x(0), y(0), z(0) {} Position(int cx, int cy, int cz) : x(cx), y(cy), z(cz) {}

    string toString() const {
        return "(" + intToString(x) + "," + intToString(y) + "," + intToString(z) + ")";
    }
    
    static Position fromString(const string& str) {
        string s = trim(str);
        if (s.front() == '(') s = s.substr(1);
        if (s.back() == ')') s = s.substr(0, s.length() - 1);
        
        stringstream ss(s);
        string token;
        vector<int> nums;
        
        while (getline(ss, token, ',')) {
            nums.push_back(atoi(token.c_str()));
        }
        
        if (nums.size() >= 3) {
            return Position(nums[0], nums[1], nums[2]);
        }
        return Position(0, 0, 0);
    }
    
    bool operator<(const Position& other) const {
        if (x != other.x) return x < other.x;
        if (y != other.y) return y < other.y;
        return z < other.z;
    }
    
    bool operator==(const Position& other) const {
        return x == other.x && y == other.y && z == other.z;
    }
    

    };

    // 混沌末影巨人的形态类 class ChaosForm { public: string skill1; string skill2; string skill3;

    ChaosForm(string s1, string s2, string s3) : skill1(s1), skill2(s2), skill3(s3) {}
    

    };

    // 泰坦类 class Titan { public: string name; string rank; long long health; long long maxHealth; long long totalHealth; // 总血量(用于多形态) int attackType; // 0:固定伤害, 1:自身百分比, 2:对面百分比, 3:对面最大生命值百分比, 4:真实伤害(超威蓝猫), 5:秒杀(星辉哈吉迷) long long attackValue; // 伤害值或百分比 long long maxDamage; // 最大伤害限制 int maxAttacks; // 最多攻击次数 string skill1; string skill2; string skill3; int form; // 当前形态 int maxForm; // 最大形态 int killCount; bool isVirtual; int virtualTurns; // 虚化剩余回合数(最多2回合) bool isDead; // 是否已死亡

    // 超威蓝猫/闪电哈基米/掣电哈基米/光明之神/金辉死神专用
    bool isImmuneToControl;    // 免疫控制技能
    long long damagePerHit;    // 每次攻击伤害上限
    
    // 升级版执行之龙/凋零斯拉/完全体凋灵斯拉专用
    bool isUnknownHealth;      // 血量显示为NAN
    
    // 混沌末影巨人专用
    vector<ChaosForm> chaosForms;
    
    Titan() : name(""), rank(""), health(0), maxHealth(0), totalHealth(0), attackType(0), attackValue(0), 
              maxDamage(0), maxAttacks(1), skill1(""), skill2(""), skill3(""), 
              form(1), maxForm(1), killCount(0), isVirtual(false), virtualTurns(0), isDead(false),
              isImmuneToControl(false), damagePerHit(0), isUnknownHealth(false) {}
    
    // 普通泰坦构造函数
    Titan(string n, string r, long long h, int atType, long long atVal, long long maxDmg, int maxAt, 
          string s1, string s2, string s3, int mf) 
        : name(n), rank(r), health(h), maxHealth(h), totalHealth(h), attackType(atType), attackValue(atVal), 
          maxDamage(maxDmg), maxAttacks(maxAt), skill1(s1), skill2(s2), skill3(s3), 
          form(1), maxForm(mf), killCount(0), isVirtual(false), virtualTurns(0), isDead(false),
          isImmuneToControl(false), damagePerHit(0), isUnknownHealth(false) {}
    
    // 超威蓝猫专用构造函数
    static Titan createSuperBlueCat() {
        Titan t;
        t.name = "超威蓝猫";
        t.rank = "神级";
        t.health = 750;
        t.maxHealth = 750;
        t.totalHealth = 750;
        t.attackType = 4;
        t.attackValue = 500000;
        t.maxDamage = 500000;
        t.maxAttacks = 1;
        t.skill1 = "限伤5 - 每次最多受到5点伤害";
        t.skill2 = "免疫控制 - 免疫任何虚化、眩晕、混乱等控制技能";
        t.skill3 = "真实伤害 - 造成50万真实伤害,无视防御";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = true;
        t.damagePerHit = 5;
        t.isUnknownHealth = false;
        return t;
    }
    
    // 闪电哈基米专用构造函数
    static Titan createLightningHajimi() {
        Titan t;
        t.name = "闪电哈基米";
        t.rank = "神级";
        t.health = 5000000;
        t.maxHealth = 5000000;
        t.totalHealth = 5000000;
        t.attackType = 4;
        t.attackValue = 800000;
        t.maxDamage = 800000;
        t.maxAttacks = 3;
        t.skill1 = "闪电链 - 60%概率造成连锁伤害,攻击额外一个敌人";
        t.skill2 = "雷神之锤 - 40%概率造成2.5倍伤害并麻痹敌人一回合";
        t.skill3 = "万雷天牢 - 30%概率召唤雷电,对全体敌人造成100万伤害";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = false;
        t.damagePerHit = 0;
        t.isUnknownHealth = false;
        return t;
    }
    
    // 掣电哈基米专用构造函数
    static Titan createThunderHajimi() {
        Titan t;
        t.name = "掣电哈基米";
        t.rank = "神级";
        t.health = 8000000;
        t.maxHealth = 8000000;
        t.totalHealth = 8000000;
        t.attackType = 4;
        t.attackValue = 1200000;
        t.maxDamage = 1200000;
        t.maxAttacks = 2;
        t.skill1 = "闪电风暴 - 70%概率造成范围伤害,攻击所有敌人";
        t.skill2 = "雷霆万钧 - 50%概率造成3倍伤害并眩晕敌人两回合";
        t.skill3 = "天罚 - 40%概率召唤天雷,造成500万真实伤害";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = false;
        t.damagePerHit = 0;
        t.isUnknownHealth = false;
        return t;
    }
    
    // 星辉哈吉迷专用构造函数
    static Titan createStarHajimi() {
        Titan t;
        t.name = "星辉哈吉迷";
        t.rank = "神级";
        t.health = 1;
        t.maxHealth = 1;
        t.totalHealth = 1;
        t.attackType = 5;
        t.attackValue = 0;
        t.maxDamage = 0;
        t.maxAttacks = 0;
        t.skill1 = "出场秒杀 - 登场时消灭场上所有泰坦";
        t.skill2 = "不可被攻击 - 无法成为攻击目标";
        t.skill3 = "终极献祭 - 完成使命后自身消失";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = true;
        t.damagePerHit = 0;
        t.isUnknownHealth = false;
        return t;
    }
    
    // 升级版执行之龙专用构造函数
    static Titan createUpgradedExecutorDragon() {
        Titan t;
        t.name = "升级版执行之龙";
        t.rank = "神级";
        t.health = 100000000;
        t.maxHealth = 100000000;
        t.totalHealth = 100000000;
        t.attackType = 2;
        t.attackValue = 15;
        t.maxDamage = 0;
        t.maxAttacks = 3;
        t.skill1 = "混沌领域 - 50%概率造成3倍伤害";
        t.skill2 = "时空扭曲 - 40%概率使敌人无法行动一回合";
        t.skill3 = "宇宙裁决 - 30%概率秒杀20%以下敌人";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = false;
        t.damagePerHit = 0;
        t.isUnknownHealth = true;
        return t;
    }
    
    // 升级版凋零斯拉专用构造函数
    static Titan createUpgradedWitherZilla() {
        Titan t;
        t.name = "升级版凋零斯拉";
        t.rank = "神级";
        t.health = 100000000;
        t.maxHealth = 100000000;
        t.totalHealth = 100000000;
        t.attackType = 2;
        t.attackValue = 12;
        t.maxDamage = 0;
        t.maxAttacks = 4;
        t.skill1 = "凋零领域 - 60%概率造成持续伤害(每回合8%)";
        t.skill2 = "死亡烙印 - 50%概率标记敌人,下回合伤害翻倍";
        t.skill3 = "虚空吞噬 - 40%概率秒杀25%以下敌人";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = false;
        t.damagePerHit = 0;
        t.isUnknownHealth = true;
        return t;
    }
    
    // 完全体凋灵斯拉专用构造函数
    static Titan createPerfectWitherZilla() {
        Titan t;
        t.name = "完全体凋灵斯拉";
        t.rank = "超神级";
        t.health = numeric_limits<long long>::max();
        t.maxHealth = numeric_limits<long long>::max();
        t.totalHealth = numeric_limits<long long>::max();
        t.attackType = 2;
        t.attackValue = 25;
        t.maxDamage = 0;
        t.maxAttacks = 5;
        t.skill1 = "终极凋零 - 80%概率造成5倍伤害并永久降低敌人50%攻击";
        t.skill2 = "虚空湮灭 - 70%概率秒杀50%以下敌人";
        t.skill3 = "神之裁决 - 60%概率造成1000万真实伤害";
        t.form = 1;
        t.maxForm = 1;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = true;
        t.damagePerHit = 0;
        t.isUnknownHealth = true;
        return t;
    }
    
    // 混沌末影巨人专用构造函数
    static Titan createChaosEnderGiant() {
        Titan t;
        t.name = "混沌末影巨人";
        t.rank = "神级";
        t.health = 7000000;
        t.maxHealth = 7000000;
        t.totalHealth = 21000000;
        t.attackType = 0;
        t.attackValue = 100000;
        t.maxDamage = 200000;
        t.maxAttacks = 1;
        t.form = 1;
        t.maxForm = 3;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = false;
        t.damagePerHit = 0;
        t.isUnknownHealth = false;
        
        t.chaosForms.push_back(ChaosForm(
            "混沌护盾 - 30%概率格挡50%伤害",
            "混沌之力 - 35%概率造成1.5倍伤害",
            "混沌反噬 - 25%概率反弹30%伤害"
        ));
        t.chaosForms.push_back(ChaosForm(
            "混沌爆发 - 40%概率造成双倍伤害",
            "混沌吞噬 - 30%概率吸血40%",
            "混沌恐惧 - 25%概率降低敌人50%攻击"
        ));
        t.chaosForms.push_back(ChaosForm(
            "末日降临 - 50%概率造成三倍伤害",
            "混沌主宰 - 35%概率秒杀20%以下敌人",
            "混沌领域 - 30%概率眩晕敌人一回合"
        ));
        
        t.updateChaosSkills();
        
        return t;
    }
    
    // 光明之神专用构造函数
    static Titan createLightGod() {
        Titan t;
        t.name = "光明之神";
        t.rank = "神级";
        t.health = 4500000;
        t.maxHealth = 4500000;
        t.totalHealth = 4500000;
        t.attackType = 4;
        t.attackValue = 350000;
        t.maxDamage = 350000;
        t.maxAttacks = 5;
        t.skill1 = "圣光普照 - 60%概率进入无敌状态(2回合),免疫所有伤害";
        t.skill2 = "神圣裁决 - 70%概率造成2倍伤害,并驱散敌人所有增益效果";
        t.skill3 = "光明审判 - 80%概率造成3倍伤害,并回复自身30%血量";
        t.form = 1;
        t.maxForm = 3;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = true;
        t.damagePerHit = 0;
        t.isUnknownHealth = false;
        return t;
    }
    
    // 金辉死神专用构造函数
    static Titan createGoldenDeath() {
        Titan t;
        t.name = "金辉死神";
        t.rank = "神级";
        t.health = 4200000;
        t.maxHealth = 4200000;
        t.totalHealth = 4200000;
        t.attackType = 4;
        t.attackValue = 320000;
        t.maxDamage = 320000;
        t.maxAttacks = 5;
        t.skill1 = "黄金领域 - 55%概率进入虚化状态(2回合),并获得30%伤害减免";
        t.skill2 = "死神镰刀 - 65%概率造成2.5倍伤害,并附加破甲效果";
        t.skill3 = "永恒金辉 - 75%概率造成3.5倍伤害,并吸取敌人20%血量";
        t.form = 1;
        t.maxForm = 3;
        t.killCount = 0;
        t.isVirtual = false;
        t.virtualTurns = 0;
        t.isDead = false;
        t.isImmuneToControl = false;
        t.damagePerHit = 0;
        t.isUnknownHealth = false;
        return t;
    }
    
    void updateChaosSkills() {
        if (name == "混沌末影巨人" && form <= chaosForms.size()) {
            skill1 = chaosForms[form-1].skill1;
            skill2 = chaosForms[form-1].skill2;
            skill3 = chaosForms[form-1].skill3;
        }
    }
    
    void evolve() {
        if ((name == "星辉死神" || name == "赤焰冥神" || name == "光明之神" || name == "金辉死神") && form < maxForm) {
            form++;
            
            cout << "\n";
            cout << "**************************************************\n";
            cout << "*                                                *\n";
            cout << "*        ?? " << name << " 进化到形态 " << form << "! ??        *\n";
            cout << "*                                                *\n";
            cout << "**************************************************\n";
            
            if (form == 2) {
                if (name == "星辉死神") {
                    skill2 = "死神领域 - 70%概率虚化2回合,虚化时攻击有30%概率连击";
                } else if (name == "赤焰冥神") {
                    skill2 = "炼狱领域 - 70%概率虚化2回合,虚化时攻击有30%概率连击";
                } else if (name == "光明之神") {
                    skill2 = "神圣裁决 - 70%概率造成2倍伤害,并驱散敌人所有增益效果";
                } else if (name == "金辉死神") {
                    skill2 = "死神镰刀 - 65%概率造成2.5倍伤害,并附加破甲效果";
                }
                cout << "* 解锁技能2:" << skill2 << "\n";
            }
            if (form == 3) {
                if (name == "星辉死神") {
                    skill3 = "永恒虚化 - 90%概率虚化2回合,虚化状态下也能攻击且伤害+50%";
                } else if (name == "赤焰冥神") {
                    skill3 = "永恒冥火 - 90%概率虚化2回合,虚化状态下也能攻击且伤害+50%";
                } else if (name == "光明之神") {
                    skill3 = "光明审判 - 80%概率造成3倍伤害,并回复自身30%血量";
                } else if (name == "金辉死神") {
                    skill3 = "永恒金辉 - 75%概率造成3.5倍伤害,并吸取敌人20%血量";
                }
                cout << "* 解锁技能3:" << skill3 << "\n";
            }
            
            cout << "**************************************************\n";
        }
    }
    
    void starWillEvolve() {
        if (name == "星河意志" && form < maxForm) {
            form++;
            
            cout << "\n";
            cout << "**************************************************\n";
            cout << "*                                                *\n";
            cout << "*        ? " << name << " 进化到形态 " << form << "! ?        *\n";
            cout << "*                                                *\n";
            cout << "**************************************************\n";
            
            if (form == 2) {
                skill2 = "星河风暴 - 30%概率造成双倍伤害并降低对方防御";
                cout << "* 解锁技能2:" << skill2 << "\n";
            }
            
            cout << "**************************************************\n";
        }
    }
    
    void chaosEvolve() {
        if (name == "混沌末影巨人" && form < maxForm) {
            form++;
            health = maxHealth;
            updateChaosSkills();
            
            cout << "\n";
            cout << "**************************************************\n";
            cout << "*                                                *\n";
            cout << "*     ?? 混沌末影巨人 进入形态 " << form << "! ??      *\n";
            cout << "*                                                *\n";
            cout << "**************************************************\n";
            cout << "* 解锁新技能:                                    *\n";
            cout << "* " << skill1 << "\n";
            cout << "* " << skill2 << "\n";
            cout << "* " << skill3 << "\n";
            cout << "**************************************************\n";
        }
    }
    
    void showInfo() const {
        cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
        cout << "+ " << name;
        if (maxForm > 1) {
            if (name == "混沌末影巨人") {
                cout << " [形态 " << form << "/" << maxForm << " 总血 " << formatNumber(totalHealth) << "]";
            } else {
                cout << " [形态 " << form << "/" << maxForm << "]";
            }
        }
        cout << "\n";
        cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
        cout << "+ 阶层: " << rank << "\n";
        cout << "+ 血量: " << formatHealth(health, isUnknownHealth) << "/" << formatHealth(maxHealth, isUnknownHealth);
        if (name == "混沌末影巨人") {
            cout << " (形态血量)";
        }
        cout << "\n";
        
        cout << "+ 攻击: ";
        if (attackType == 0) {
            cout << "固定 " << formatNumber(attackValue) << " 点";
        } else if (attackType == 1) {
            cout << "自身血量 " << attackValue << "%";
        } else if (attackType == 2) {
            cout << "对面血量 " << attackValue << "%";
        } else if (attackType == 3) {
            cout << "对面最大血量 " << attackValue << "% (固定百分比)";
        } else if (attackType == 4) {
            cout << "真实伤害 " << formatNumber(attackValue) << " 点";
        } else if (attackType == 5) {
            cout << "秒杀效果";
        }
        if (maxDamage > 0) cout << " (上限 " << formatNumber(maxDamage) << ")";
        cout << "\n";
        
        cout << "+ 最多攻击: " << maxAttacks << " 次/回合\n";
        cout << "+ 技能1: " << skill1 << "\n";
        cout << "+ 技能2: " << skill2 << "\n";
        cout << "+ 技能3: " << skill3 << "\n";
        if (isImmuneToControl) cout << "+ 特性: 免疫控制技能\n";
        if (damagePerHit > 0) cout << "+ 特性: 每次最多受到 " << damagePerHit << " 点伤害\n";
        if (isVirtual) cout << "+ 状态: 虚化中(剩余" << virtualTurns << "回合)\n";
        if (killCount > 0) cout << "+ 击杀: " << killCount << "\n";
        cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
    }
    
    void showSimple() const {
        cout << name;
        if (maxForm > 1) {
            if (name == "混沌末影巨人") {
                cout << "形" << form;
            } else {
                cout << "形" << form;
            }
        }
        cout << " [" << formatHealth(health, isUnknownHealth) << "]";
        if (isVirtual) cout << "?";
        if (isImmuneToControl) cout << "???";
    }
    
    long long calculateDamage(const Titan& defender) {
        long long damage = 0;
        
        if (attackType == 0) {
            damage = attackValue;
        } else if (attackType == 1) {
            damage = health * attackValue / 100;
        } else if (attackType == 2) {
            damage = defender.maxHealth * attackValue / 100;
        } else if (attackType == 3) {
            damage = defender.maxHealth / attackValue;
        } else if (attackType == 4) {
            damage = attackValue;
        } else if (attackType == 5) {
            damage = defender.health;
        }
        
        if (maxDamage > 0 && damage > maxDamage) {
            damage = maxDamage;
        }
        
        return damage;
    }
    
    long long calculateReceivedDamage(long long incomingDamage) {
        if (damagePerHit > 0 && incomingDamage > damagePerHit) {
            return damagePerHit;
        }
        return incomingDamage;
    }
    

    };

    // 玩家类 class Player { public: string name; vector<Titan> titans; vector<Position> positions; int wins; int losses;

    Player() : name(""), wins(0), losses(0) {}
    
    Player(string n) : name(n), wins(0), losses(0) {}
    
    void addTitan(Titan t, Position pos) {
        titans.push_back(t);
        positions.push_back(pos);
    }
    
    bool hasTitans() const {
        return titans.size() > 0;
    }
    
    Titan* getTitanByPos(const Position& pos) {
        for (size_t i = 0; i < positions.size(); i++) {
            if (positions[i] == pos) {
                return &titans[i];
            }
        }
        return NULL;
    }
    
    void removeTitanByPos(const Position& pos) {
        for (size_t i = 0; i < positions.size(); i++) {
            if (positions[i] == pos) {
                titans.erase(titans.begin() + i);
                positions.erase(positions.begin() + i);
                return;
            }
        }
    }
    
    int count() const {
        return titans.size();
    }
    
    void showTitans() const {
        if (titans.empty()) {
            cout << "   没有泰坦了\n";
            return;
        }
        for (size_t i = 0; i < titans.size(); i++) {
            cout << "   " << titans[i].name;
            if (titans[i].maxForm > 1) {
                if (titans[i].name == "混沌末影巨人") {
                    cout << " [形态" << titans[i].form << "/3]";
                } else {
                    cout << " [形态" << titans[i].form << "]";
                }
            }
            cout << " " << positions[i].toString();
            if (titans[i].isVirtual) cout << " ?虚化";
            if (titans[i].isImmuneToControl) cout << " ???免疫";
            cout << "\n";
        }
    }
    
    bool hasPosition(const Position& pos) const {
        for (size_t i = 0; i < positions.size(); i++) {
            if (positions[i] == pos) return true;
        }
        return false;
    }
    
    void clear() {
        titans.clear();
        positions.clear();
        wins = 0;
        losses = 0;
    }
    

    };

    // 队伍类 class Team { public: vector<Titan> members; vector<Position> positions;

    void addMember(Titan t, Position pos) {
        members.push_back(t);
        positions.push_back(pos);
    }
    
    void removeMember(int index) {
        members.erase(members.begin() + index);
        positions.erase(positions.begin() + index);
    }
    
    bool hasAliveMembers() {
        for (size_t i = 0; i < members.size(); i++) {
            if (members[i].health > 0 && !members[i].isDead) {
                return true;
            }
        }
        return false;
    }
    
    int getAliveCount() {
        int count = 0;
        for (size_t i = 0; i < members.size(); i++) {
            if (members[i].health > 0 && !members[i].isDead) {
                count++;
            }
        }
        return count;
    }
    
    void showTeam() {
        for (size_t i = 0; i < members.size(); i++) {
            if (members[i].health > 0 && !members[i].isDead) {
                cout << "   " << members[i].name;
                if (members[i].maxForm > 1) {
                    if (members[i].name == "混沌末影巨人") {
                        cout << " [形态" << members[i].form << "/3]";
                    } else {
                        cout << " [形态" << members[i].form << "]";
                    }
                }
                cout << " " << positions[i].toString();
                cout << " [血量:" << formatHealth(members[i].health, members[i].isUnknownHealth) << "]";
                if (members[i].isVirtual) cout << " ?虚化";
                if (members[i].isImmuneToControl) cout << " ???免疫";
                cout << "\n";
            }
        }
    }
    

    };

    // 游戏类 class Game { private: Player* p1; Player* p2; vector<Titan> allTitanTemplates;

    void cls() {
        system("cls");
    }
    
    void wait(int seconds = 3) {
        Sleep(seconds * 1000);
    }
    
    void waitForEnter() {
        cout << "\n按回车键继续...";
        cin.ignore();
        cin.get();
    }
    
    void initAllTitans() {
        allTitanTemplates.clear();
        
        // 1. 星辉死神 (3形态)
        for (int i = 0; i < 2; i++) {
            Titan t("星辉死神", "神级", 4000000, 0, 300000, 0, 5,
                   "虚化 - 50%概率进入虚化状态(2回合)",
                   "死神领域 - 70%概率虚化2回合,虚化时攻击有30%概率连击",
                   "永恒虚化 - 90%概率虚化2回合,虚化状态下也能攻击且伤害+50%", 3);
            allTitanTemplates.push_back(t);
        }
        
        // 2. 终极艾德曼合金战神 - 史诗增强版
        for (int i = 0; i < 2; i++) {
            Titan t("终极艾德曼合金战神", "神级", 50000000, 3, 5, 0, 3,
                   "艾德曼合金领域 - 100%概率格挡80%伤害,并反弹100%伤害",
                   "战神裁决 - 80%概率造成5倍伤害,无视任何防御和虚化",
                   "宇宙战神降临 - 60%概率秒杀50%以下敌人,并回复100%血量", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 3. 混沌末影巨人 (3形态)
        for (int i = 0; i < 2; i++) {
            allTitanTemplates.push_back(Titan::createChaosEnderGiant());
        }
        
        // 4. 终极基岩粉碎者
        for (int i = 0; i < 2; i++) {
            Titan t("终极基岩粉碎者", "神级", 6000000, 0, 250000, 250000, 2,
                   "粉碎打击 - 35%概率造成1.5倍伤害",
                   "地动山摇 - 30%概率眩晕对方一回合",
                   "基岩护盾 - 40%概率格挡40%伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 5. 星河意志 (2形态)
        for (int i = 0; i < 2; i++) {
            Titan t("星河意志", "神级", 3000000, 2, 3, 200000, 5,
                   "星河护体 - 35%概率回复10%血量",
                   "星河风暴 - 30%概率造成双倍伤害并降低对方防御",
                   "星河陨落 - 25%概率造成三倍伤害并眩晕", 2);
            allTitanTemplates.push_back(t);
        }
        
        // 6. 虚空圣神
        for (int i = 0; i < 2; i++) {
            Titan t("虚空圣神", "神级", 8000000, 2, 8, 300000, 3,
                   "虚空汲取 - 30%概率吸收伤害回复血量",
                   "虚空裂隙 - 25%概率造成2.5倍伤害",
                   "虚空主宰 - 20%概率秒杀30%以下敌人", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 7. 终极生命窃魂者
        for (int i = 0; i < 2; i++) {
            Titan t("终极生命窃魂者", "神级", 6000000, 0, 100000, 200000, 2,
                   "生命窃取 - 吸血40%造成的伤害",
                   "灵魂收割 - 30%概率造成1.8倍伤害并额外吸血",
                   "死亡契约 - 25%概率秒杀20%以下血量的敌人", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 8. 神·凋灵骷髅泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("神·凋灵骷髅泰坦", "神级", 9000000, 0, 150000, 250000, 3,
                   "凋灵领域 - 35%概率造成持续伤害",
                   "死亡标记 - 30%概率标记敌人,下回合伤害翻倍",
                   "骷髅军团 - 25%概率召唤凋灵骷髅助战", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 9. 神·骷髅泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("神·骷髅泰坦", "神级", 8500000, 0, 120000, 250000, 3,
                   "骨盾 - 40%概率格挡50%伤害",
                   "骨矛 - 35%概率造成穿刺伤害",
                   "亡灵重生 - 20%概率复活并回复30%血量", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 10. 宇宙大帝 (不增强)
        for (int i = 0; i < 2; i++) {
            Titan t("宇宙大帝", "神级", 20000000, 3, 10, 0, 1,
                   "空间护盾 - 40%概率格挡60%伤害",
                   "时空反甲 - 30%概率反弹50%伤害",
                   "宇宙降临 - 20%概率造成三倍伤害并破甲", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 11. 赤焰冥神
        for (int i = 0; i < 2; i++) {
            Titan t("赤焰冥神", "神级", 4000000, 0, 300000, 0, 5,
                   "冥火虚化 - 50%概率进入虚化状态(2回合)",
                   "炼狱领域 - 70%概率虚化2回合,虚化时攻击有30%概率连击",
                   "永恒冥火 - 90%概率虚化2回合,虚化状态下也能攻击且伤害+50%", 3);
            allTitanTemplates.push_back(t);
        }
        
        // 12. 超威蓝猫
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createSuperBlueCat());
        }
        
        // 13. 星辉哈吉迷
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createStarHajimi());
        }
        
        // 14. 升级版执行之龙
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createUpgradedExecutorDragon());
        }
        
        // 15. 升级版凋零斯拉
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createUpgradedWitherZilla());
        }
        
        // 16. 玩家泰坦之神
        for (int i = 0; i < 1; i++) {
            Titan t("玩家泰坦之神", "神级", 6666666, 0, 500000, 3000000, 1,
                   "死神之挥 - 最多造成50万伤害",
                   "死神镰刀 - 最多造成100万伤害",
                   "末世降临 - 最多造成300万伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 17. 闪电哈基米
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createLightningHajimi());
        }
        
        // 18. 掣电哈基米
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createThunderHajimi());
        }
        
        // 19. 完全体凋灵斯拉
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createPerfectWitherZilla());
        }
        
        // 20. 光明之神
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createLightGod());
        }
        
        // 21. 金辉死神
        for (int i = 0; i < 1; i++) {
            allTitanTemplates.push_back(Titan::createGoldenDeath());
        }
        
        // 22. 终极末晶傀儡泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("终极末晶傀儡泰坦", "准神级", 5000000, 0, 80000, 200000, 2,
                   "末影瞬移 - 30%概率闪避攻击",
                   "末影珍珠 - 25%概率造成额外伤害",
                   "末影领域 - 20%概率混乱敌人", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 23. 终极煌炎傀儡泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("终极煌炎傀儡泰坦", "准神级", 5500000, 1, 8, 200000, 2,
                   "炎盾 - 35%概率格挡并灼烧敌人",
                   "炎爆 - 30%概率造成范围伤害",
                   "浴火重生 - 25%概率在受到致命伤时回复30%血量", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 24. 鬼星惊雷
        for (int i = 0; i < 2; i++) {
            Titan t("鬼星惊雷", "半神级", 4000000, 2, 5, 150000, 3,
                   "雷电护体 - 35%概率麻痹敌人",
                   "雷霆一击 - 30%概率造成1.8倍伤害",
                   "天罚 - 20%概率造成三倍伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 25. 终极魔傀儡泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("终极魔傀儡泰坦", "半神级", 4500000, 0, 90000, 200000, 2,
                   "魔能护盾 - 35%概率吸收伤害",
                   "魔能爆发 - 30%概率造成2倍伤害",
                   "魔能诅咒 - 25%概率降低敌人50%攻击", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 26. 凋灵骷髅泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("凋灵骷髅泰坦", "大型", 2500000, 0, 100000, 200000, 2,
                   "凋零之触 - 35%概率造成额外凋零伤害",
                   "骷髅召唤 - 30%概率召唤骷髅",
                   "亡灵意志 - 25%概率免疫致命伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 27. 恶魂泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("恶魂泰坦", "大型", 2000000, 0, 100000, 200000, 3,
                   "火焰喷射 - 40%概率造成灼烧",
                   "爆炸火球 - 35%概率造成范围伤害",
                   "恶魂之泪 - 30%概率回复血量", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 28. 终极铁傀儡泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("终极铁傀儡泰坦", "大型", 3000000, 0, 100000, 200000, 2,
                   "铁壁防御 - 45%概率格挡60%伤害",
                   "铁拳重击 - 35%概率造成1.8倍伤害",
                   "钢铁意志 - 30%概率免疫控制效果", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 29. 末影巨人
        for (int i = 0; i < 2; i++) {
            Titan t("末影巨人", "大型", 2800000, 0, 100000, 200000, 2,
                   "瞬移闪避 - 35%概率闪避攻击",
                   "末影珍珠 - 30%概率造成额外伤害",
                   "终界之力 - 25%概率造成2倍伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 30. 僵尸泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("僵尸泰坦", "普通", 1800000, 0, 80000, 150000, 2,
                   "感染 - 35%概率感染敌人每回合掉血",
                   "尸群召唤 - 30%概率召唤僵尸",
                   "亡灵复苏 - 25%概率复活一次", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 31. 骷髅泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("骷髅泰坦", "普通", 1600000, 0, 80000, 150000, 3,
                   "箭雨 - 40%概率造成多段伤害",
                   "精准打击 - 35%概率暴击",
                   "骨墙 - 30%概率格挡伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 32. 苦力怕泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("苦力怕泰坦", "普通", 1500000, 0, 90000, 150000, 1,
                   "自爆 - 40%概率造成2倍伤害但自身受伤",
                   "爆炸抗性 - 35%概率减伤",
                   "连锁爆炸 - 30%概率造成范围伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 33. 僵尸猪人泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("僵尸猪人泰坦", "普通", 1700000, 0, 85000, 150000, 2,
                   "黄金护体 - 35%概率格挡",
                   "猪人军团 - 30%概率召唤猪人",
                   "怒火 - 25%概率狂暴提升伤害", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 34. 烈焰人泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("烈焰人泰坦", "普通", 1300000, 0, 80000, 150000, 3,
                   "火焰弹 - 40%概率造成灼烧",
                   "火焰护盾 - 35%概率反伤",
                   "炎之精华 - 30%概率回复", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 35. 骷髅半泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("骷髅半泰坦", "小型", 800000, 0, 60000, 120000, 2,
                   "精准射击 - 35%概率暴击",
                   "骨箭 - 30%概率穿透",
                   "闪避 - 25%概率闪避", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 36. 洞穴蜘蛛泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("洞穴蜘蛛泰坦", "小型", 700000, 0, 55000, 120000, 2,
                   "毒液 - 40%概率中毒",
                   "蛛网 - 35%概率束缚",
                   "隐匿 - 30%概率闪避", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 37. 蜘蛛泰坦
        for (int i = 0; i < 2; i++) {
            Titan t("蜘蛛泰坦", "小型", 750000, 0, 60000, 120000, 2,
                   "跳跃攻击 - 35%概率造成1.5倍",
                   "蛛网束缚 - 30%概率控制",
                   "蜘蛛召唤 - 25%概率召唤蜘蛛", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 38. 星辉骷髅
        for (int i = 0; i < 2; i++) {
            Titan t("星辉骷髅", "特殊", 500000, 0, 50000, 100000, 2,
                   "星光之力 - 30%概率回复",
                   "星辉护盾 - 25%概率格挡",
                   "星辰陨落 - 20%概率造成2倍", 1);
            allTitanTemplates.push_back(t);
        }
        
        // 随机打乱
        for (size_t i = 0; i < allTitanTemplates.size(); i++) {
            int j = rand() % allTitanTemplates.size();
            if (i != j) {
                swap(allTitanTemplates[i], allTitanTemplates[j]);
            }
        }
    }
    
    void drawCards(Player* player, int drawCount) {
        cout << "\n========== " << player->name << " 的抽卡回合 ==========\n";
        
        for (int i = 0; i < drawCount; i++) {
            cout << "\n第 " << (i+1) << " 次抽卡(共" << drawCount << "次)\n";
            cout << "----------------------------------------\n";
            
            vector<int> indices;
            bool hasGodTitan = false;
            
            // 确保至少有一个神级泰坦
            while (indices.size() < 3) {
                int idx = rand() % allTitanTemplates.size();
                bool exists = false;
                for (size_t j = 0; j < indices.size(); j++) {
                    if (indices[j] == idx) {
                        exists = true;
                        break;
                    }
                }
                if (!exists) {
                    indices.push_back(idx);
                    if (allTitanTemplates[idx].rank == "神级" || allTitanTemplates[idx].rank == "超神级") {
                        hasGodTitan = true;
                    }
                }
            }
            
            // 如果没有神级泰坦,替换一个为神级
            if (!hasGodTitan) {
                int godIndex = -1;
                for (int tries = 0; tries < 100; tries++) {
                    int idx = rand() % allTitanTemplates.size();
                    if (allTitanTemplates[idx].rank == "神级" || allTitanTemplates[idx].rank == "超神级") {
                        bool alreadyIn = false;
                        for (size_t j = 0; j < indices.size(); j++) {
                            if (indices[j] == idx) {
                                alreadyIn = true;
                                break;
                            }
                        }
                        if (!alreadyIn) {
                            godIndex = idx;
                            break;
                        }
                    }
                }
                if (godIndex != -1) {
                    int replacePos = rand() % 3;
                    indices[replacePos] = godIndex;
                }
            }
            
            // 显示三个选项(只显示编号,不显示内容)
            cout << "请选择你要的泰坦(输入1-3):\n\n";
            cout << "  1. ??? (未知泰坦)\n";
            cout << "  2. ??? (未知泰坦)\n";
            cout << "  3. ??? (未知泰坦)\n\n";
            
            int choice;
            do {
                cout << "你的选择 (1-3): ";
                cin >> choice;
                if (choice < 1 || choice > 3) {
                    cout << "无效选择,请重新输入!\n";
                }
            } while (choice < 1 || choice > 3);
            
            Titan selected = allTitanTemplates[indices[choice-1]];
            selected.health = selected.maxHealth;
            selected.form = 1;
            selected.killCount = 0;
            selected.isVirtual = false;
            selected.virtualTurns = 0;
            selected.isDead = false;
            
            int x = rand() % 201 - 100;
            int y = rand() % 101;
            int z = rand() % 201 - 100;
            Position pos(x, y, z);
            
            player->addTitan(selected, pos);
            
            cout << "\n? 你获得了 " << selected.name << "!\n";
            cout << "阶层: " << selected.rank << "\n";
            cout << "坐标: " << pos.toString() << "\n";
            
            wait(2);
        }
    }
    
    // 随机刷新一个神级泰坦帮助任意一方
    void spawnRandomGodTitan() {
        vector<int> godIndices;
        for (size_t i = 0; i < allTitanTemplates.size(); i++) {
            if (allTitanTemplates[i].rank == "神级" || allTitanTemplates[i].rank == "超神级") {
                godIndices.push_back(i);
            }
        }
        
        if (godIndices.empty()) return;
        
        int idx = godIndices[rand() % godIndices.size()];
        Titan selected = allTitanTemplates[idx];
        selected.health = selected.maxHealth;
        selected.form = 1;
        selected.killCount = 0;
        selected.isVirtual = false;
        selected.virtualTurns = 0;
        selected.isDead = false;
        
        int targetPlayer = rand() % 2;
        Player* target = (targetPlayer == 0) ? p1 : p2;
        
        int x = rand() % 201 - 100;
        int y = rand() % 101;
        int z = rand() % 201 - 100;
        Position pos(x, y, z);
        
        target->addTitan(selected, pos);
        
        cout << "\n? 神迹降临! " << selected.name << " 加入了 " << target->name << " 的队伍!\n";
        cout << "坐标: " << pos.toString() << "\n";
        wait(2);
    }
    
    pair<long long, string> executeAttack(Titan& attacker, Titan& defender, int attackNum, Team& enemyTeam) {
        string msg = "";
        
        if (defender.isImmuneToControl) {
            if (attacker.skill2.find("眩晕") != string::npos || 
                attacker.skill2.find("控制") != string::npos ||
                attacker.skill3.find("眩晕") != string::npos ||
                attacker.skill3.find("控制") != string::npos) {
                return make_pair(0, "??? " + defender.name + " 免疫控制技能!");
            }
        }
        
        long long damage = attacker.calculateDamage(defender);
        int r = rand() % 100;
        
        if (defender.name == "超威蓝猫") {
            damage = defender.calculateReceivedDamage(damage);
        }
        
        // 完全体凋灵斯拉技能
        if (attacker.name == "完全体凋灵斯拉") {
            if (r < 80 && attackNum == 0) {
                damage = damage * 5;
                defender.attackValue = defender.attackValue * 0.5;
                msg = "技能1触发:终极凋零 - 5倍伤害并永久降低敌人50%攻击!";
            }
            else if (r < 70 && attackNum == 1) {
                if (defender.health < defender.maxHealth * 0.5) {
                    defender.health = 0;
                    msg = "技能2触发:虚空湮灭 - 秒杀50%以下敌人!";
                }
            }
            else if (r < 60 && attackNum == 2) {
                damage = 10000000;
                msg = "技能3触发:神之裁决 - 造成1000万真实伤害!";
            }
        }
        // 闪电哈基米技能
        else if (attacker.name == "闪电哈基米") {
            if (r < 60 && attackNum == 0) {
                msg = "技能1触发:闪电链 - 造成连锁伤害!";
                for (size_t i = 0; i < enemyTeam.members.size(); i++) {
                    if (enemyTeam.members[i].health > 0 && !enemyTeam.members[i].isDead && 
                        enemyTeam.members[i].name != defender.name) {
                        enemyTeam.members[i].health -= damage / 2;
                        cout << "? 连锁伤害攻击 " << enemyTeam.members[i].name << " 造成 " << damage/2 << " 伤害\n";
                        break;
                    }
                }
            }
            else if (r < 40 && attackNum == 1) {
                damage = damage * 25 / 10;
                msg = "技能2触发:雷神之锤 - 2.5倍伤害并麻痹敌人!";
            }
            else if (r < 30 && attackNum == 2) {
                msg = "技能3触发:万雷天牢 - 对全体敌人造成100万伤害!";
                for (size_t i = 0; i < enemyTeam.members.size(); i++) {
                    if (enemyTeam.members[i].health > 0 && !enemyTeam.members[i].isDead) {
                        enemyTeam.members[i].health -= 1000000;
                    }
                }
            }
        }
        // 掣电哈基米技能
        else if (attacker.name == "掣电哈基米") {
            if (r < 70 && attackNum == 0) {
                msg = "技能1触发:闪电风暴 - 攻击所有敌人!";
                for (size_t i = 0; i < enemyTeam.members.size(); i++) {
                    if (enemyTeam.members[i].health > 0 && !enemyTeam.members[i].isDead) {
                        enemyTeam.members[i].health -= damage;
                    }
                }
            }
            else if (r < 50 && attackNum == 1) {
                damage = damage * 3;
                msg = "技能2触发:雷霆万钧 - 3倍伤害并眩晕两回合!";
            }
            else if (r < 40 && attackNum == 2) {
                damage = 5000000;
                msg = "技能3触发:天罚 - 造成500万真实伤害!";
            }
        }
        // 史诗增强版终极艾德曼合金战神技能
        else if (attacker.name == "终极艾德曼合金战神") {
            if (attackNum == 0) {
                msg = "技能1触发:艾德曼合金领域 - 格挡80%伤害,并反弹100%伤害!";
            }
            else if (attackNum == 1) {
                if (r < 80) {
                    damage = damage * 5;
                    msg = "技能2触发:战神裁决 - 5倍伤害,无视防御和虚化!";
                    defender.isVirtual = false;
                }
            }
            else if (attackNum == 2) {
                if (r < 60) {
                    if (defender.health < defender.maxHealth * 0.5) {
                        defender.health = 0;
                        attacker.health = attacker.maxHealth;
                        msg = "技能3触发:宇宙战神降临 - 秒杀50%以下敌人,并回复100%血量!";
                    }
                }
            }
        }
        // 光明之神技能
        else if (attacker.name == "光明之神") {
            if (attackNum == 0) {
                if (r < 60) {
                    attacker.isVirtual = true;
                    attacker.virtualTurns = 2;
                    msg = "技能1触发:圣光普照 - 进入无敌状态2回合!";
                }
            }
            else if (attackNum == 1) {
                if (r < 70) {
                    damage = damage * 2;
                    msg = "技能2触发:神圣裁决 - 2倍伤害,驱散敌人增益!";
                }
            }
            else if (attackNum == 2) {
                if (r < 80) {
                    damage = damage * 3;
                    attacker.health += attacker.maxHealth * 0.3;
                    if (attacker.health > attacker.maxHealth) attacker.health = attacker.maxHealth;
                    msg = "技能3触发:光明审判 - 3倍伤害,回复30%血量!";
                }
            }
        }
        // 金辉死神技能
        else if (attacker.name == "金辉死神") {
            if (attackNum == 0) {
                if (r < 55) {
                    attacker.isVirtual = true;
                    attacker.virtualTurns = 2;
                    msg = "技能1触发:黄金领域 - 虚化2回合,获得30%伤害减免!";
                }
            }
            else if (attackNum == 1) {
                if (r < 65) {
                    damage = damage * 25 / 10;
                    msg = "技能2触发:死神镰刀 - 2.5倍伤害,附加破甲效果!";
                }
            }
            else if (attackNum == 2) {
                if (r < 75) {
                    damage = damage * 35 / 10;
                    long long steal = damage * 20 / 100;
                    attacker.health += steal;
                    if (attacker.health > attacker.maxHealth) attacker.health = attacker.maxHealth;
                    msg = "技能3触发:永恒金辉 - 3.5倍伤害,吸取20%血量!";
                }
            }
        }
        // 星辉死神/赤焰冥神技能
        else if (attacker.name == "星辉死神" || attacker.name == "赤焰冥神") {
            if (r < 35) {
                if (attacker.skill1.find("虚化") != string::npos) {
                    attacker.isVirtual = true;
                    attacker.virtualTurns = 2;
                    msg = "技能1触发:" + attacker.skill1;
                }
            }
            else if (r < 65) {
                if (attacker.skill2.find("双倍") != string::npos) {
                    damage = damage * 2;
                    msg = "技能2触发:" + attacker.skill2;
                }
            }
            else if (r < 85) {
                if (attacker.skill3.find("三倍") != string::npos) {
                    damage = damage * 3;
                    msg = "技能3触发:" + attacker.skill3;
                }
            }
        }
        // 玩家泰坦之神技能
        else if (attacker.name == "玩家泰坦之神") {
            if (r < 35) {
                damage = min(damage * 15 / 10, 500000LL);
                msg = "技能1触发:死神之挥 - 造成50万伤害";
            }
            else if (r < 65) {
                damage = min(damage * 18 / 10, 1000000LL);
                msg = "技能2触发:死神镰刀 - 造成100万伤害";
            }
            else if (r < 85) {
                damage = min(damage * 25 / 10, 3000000LL);
                msg = "技能3触发:末世降临 - 造成300万伤害";
            }
        }
        
        return make_pair(damage, msg);
    }
    
    // 竞技场模式战斗函数
    bool arenaBattle(Team& playerTeam, Team& computerTeam) {
        cout << "\n?? 战斗开始!\n";
        wait(2);
        
        int turn = 0;
        while (playerTeam.hasAliveMembers() && computerTeam.hasAliveMembers()) {
            turn++;
            cout << "\n--- 第 " << turn << " 回合 ---\n";
            
            // 显示虚化状态
            for (size_t i = 0; i < playerTeam.members.size(); i++) {
                if (playerTeam.members[i].health > 0 && !playerTeam.members[i].isDead && playerTeam.members[i].isVirtual) {
                    cout << "? 你的 " << playerTeam.members[i].name << " 处于虚化状态(剩余" << playerTeam.members[i].virtualTurns << "回合)\n";
                }
            }
            for (size_t i = 0; i < computerTeam.members.size(); i++) {
                if (computerTeam.members[i].health > 0 && !computerTeam.members[i].isDead && computerTeam.members[i].isVirtual) {
                    cout << "? 电脑的 " << computerTeam.members[i].name << " 处于虚化状态(剩余" << computerTeam.members[i].virtualTurns << "回合)\n";
                }
            }
            
            // 玩家攻击
            cout << "\n【你的回合】\n";
            for (size_t i = 0; i < playerTeam.members.size(); i++) {
                if (playerTeam.members[i].health <= 0 || playerTeam.members[i].isDead) continue;
                
                vector<int> targets;
                for (size_t j = 0; j < computerTeam.members.size(); j++) {
                    if (computerTeam.members[j].health > 0 && !computerTeam.members[j].isDead) {
                        targets.push_back(j);
                    }
                }
                
                if (targets.empty()) break;
                
                int targetIndex = targets[rand() % targets.size()];
                
                bool canAttack = !computerTeam.members[targetIndex].isVirtual || 
                                 playerTeam.members[i].name == "星辉死神" || 
                                 playerTeam.members[i].name == "赤焰冥神" ||
                                 playerTeam.members[i].name == "完全体凋灵斯拉" ||
                                 playerTeam.members[i].name == "终极艾德曼合金战神" ||
                                 playerTeam.members[i].name == "光明之神" ||
                                 playerTeam.members[i].name == "金辉死神";
                
                if (canAttack) {
                    int attacks = playerTeam.members[i].maxAttacks;
                    
                    for (int a = 0; a < attacks; a++) {
                        if (computerTeam.members[targetIndex].health <= 0) break;
                        
                        pair<long long, string> result = executeAttack(playerTeam.members[i], computerTeam.members[targetIndex], a, computerTeam);
                        long long damage = result.first;
                        string skillMsg = result.second;
                        
                        if (skillMsg != "") {
                            cout << "? 你的 " << playerTeam.members[i].name << " " << skillMsg << "\n";
                            wait(1);
                        }
                        
                        computerTeam.members[targetIndex].health -= damage;
                        cout << "?? 你对 " << computerTeam.members[targetIndex].name << " 造成 " << formatNumber(damage) << " 伤害\n";
                        
                        string healthStr = (computerTeam.members[targetIndex].name == "完全体凋灵斯拉") ? "NAN" : 
                                           formatNumber(max(0LL, computerTeam.members[targetIndex].health));
                        cout << "?? " << computerTeam.members[targetIndex].name << " 剩余血量: " << healthStr << "\n";
                        
                        if (computerTeam.members[targetIndex].health <= 0 && 
                            computerTeam.members[targetIndex].name != "完全体凋灵斯拉") {
                            cout << "?? " << computerTeam.members[targetIndex].name << " 倒下了!\n";
                            break;
                        }
                    }
                } else {
                    cout << "? " << computerTeam.members[targetIndex].name << " 处于虚化状态,无法被攻击!\n";
                }
            }
            
            if (!computerTeam.hasAliveMembers()) return true;
            
            // 电脑攻击
            cout << "\n【电脑回合】\n";
            for (size_t i = 0; i < computerTeam.members.size(); i++) {
                if (computerTeam.members[i].health <= 0 || computerTeam.members[i].isDead) continue;
                
                vector<int> targets;
                for (size_t j = 0; j < playerTeam.members.size(); j++) {
                    if (playerTeam.members[j].health > 0 && !playerTeam.members[j].isDead) {
                        targets.push_back(j);
                    }
                }
                
                if (targets.empty()) break;
                
                int targetIndex = targets[rand() % targets.size()];
                
                bool canAttack = !playerTeam.members[targetIndex].isVirtual || 
                                 computerTeam.members[i].name == "星辉死神" || 
                                 computerTeam.members[i].name == "赤焰冥神" ||
                                 computerTeam.members[i].name == "完全体凋灵斯拉" ||
                                 computerTeam.members[i].name == "终极艾德曼合金战神" ||
                                 computerTeam.members[i].name == "光明之神" ||
                                 computerTeam.members[i].name == "金辉死神";
                
                if (canAttack) {
                    int attacks = computerTeam.members[i].maxAttacks;
                    
                    for (int a = 0; a < attacks; a++) {
                        if (playerTeam.members[targetIndex].health <= 0) break;
                        
                        pair<long long, string> result = executeAttack(computerTeam.members[i], playerTeam.members[targetIndex], a, playerTeam);
                        long long damage = result.first;
                        string skillMsg = result.second;
                        
                        if (skillMsg != "") {
                            cout << "? 电脑的 " << computerTeam.members[i].name << " " << skillMsg << "\n";
                            wait(1);
                        }
                        
                        playerTeam.members[targetIndex].health -= damage;
                        cout << "?? 电脑的 " << computerTeam.members[i].name << " 对你造成 " << formatNumber(damage) << " 伤害\n";
                        
                        string healthStr = (playerTeam.members[targetIndex].name == "完全体凋灵斯拉") ? "NAN" : 
                                           formatNumber(max(0LL, playerTeam.members[targetIndex].health));
                        cout << "?? 你的 " << playerTeam.members[targetIndex].name << " 剩余血量: " << healthStr << "\n";
                        
                        if (playerTeam.members[targetIndex].health <= 0 && 
                            playerTeam.members[targetIndex].name != "完全体凋灵斯拉") {
                            cout << "?? 你的 " << playerTeam.members[targetIndex].name << " 倒下了!\n";
                            break;
                        }
                    }
                } else {
                    cout << "? 你的 " << playerTeam.members[targetIndex].name << " 处于虚化状态,无法被攻击!\n";
                }
            }
            
            // 回合结束处理虚化
            for (size_t i = 0; i < playerTeam.members.size(); i++) {
                if (playerTeam.members[i].isVirtual) {
                    playerTeam.members[i].virtualTurns--;
                    if (playerTeam.members[i].virtualTurns <= 0) {
                        playerTeam.members[i].isVirtual = false;
                        playerTeam.members[i].virtualTurns = 0;
                        cout << "? 你的 " << playerTeam.members[i].name << " 的虚化状态结束了\n";
                    }
                }
            }
            for (size_t i = 0; i < computerTeam.members.size(); i++) {
                if (computerTeam.members[i].isVirtual) {
                    computerTeam.members[i].virtualTurns--;
                    if (computerTeam.members[i].virtualTurns <= 0) {
                        computerTeam.members[i].isVirtual = false;
                        computerTeam.members[i].virtualTurns = 0;
                        cout << "? 电脑的 " << computerTeam.members[i].name << " 的虚化状态结束了\n";
                    }
                }
            }
            
            wait(2);
        }
        
        return playerTeam.hasAliveMembers();
    }
    
    // 生存模式战斗函数 - 完善技能显示
    bool survivalBattle(Team& playerTeam, Team& enemyTeam) {
        cout << "\n?? 战斗开始!\n";
        wait(2);
        
        int turn = 0;
        while (playerTeam.hasAliveMembers() && enemyTeam.hasAliveMembers()) {
            turn++;
            cout << "\n--- 第 " << turn << " 回合 ---\n";
            
            if (playerTeam.members.empty() || enemyTeam.members.empty()) break;
            
            int playerIndex = -1;
            for (size_t i = 0; i < playerTeam.members.size(); i++) {
                if (playerTeam.members[i].health > 0 && !playerTeam.members[i].isDead) {
                    playerIndex = i;
                    break;
                }
            }
            
            int enemyIndex = -1;
            for (size_t i = 0; i < enemyTeam.members.size(); i++) {
                if (enemyTeam.members[i].health > 0 && !enemyTeam.members[i].isDead) {
                    enemyIndex = i;
                    break;
                }
            }
            
            if (playerIndex == -1 || enemyIndex == -1) break;
            
            Titan& player = playerTeam.members[playerIndex];
            Titan& enemy = enemyTeam.members[enemyIndex];
            
            // 显示虚化状态
            if (player.isVirtual) {
                cout << "? 你的 " << player.name << " 处于虚化状态(剩余" << player.virtualTurns << "回合)\n";
            }
            if (enemy.isVirtual) {
                cout << "? 敌人 " << enemy.name << " 处于虚化状态(剩余" << enemy.virtualTurns << "回合)\n";
            }
            
            // 玩家攻击
            cout << "\n【你的回合】\n";
            int attacks = player.maxAttacks;
            for (int a = 0; a < attacks; a++) {
                if (enemy.health <= 0) break;
                
                bool canAttack = !enemy.isVirtual || 
                                 player.name == "星辉死神" || 
                                 player.name == "赤焰冥神" || 
                                 player.name == "完全体凋灵斯拉" || 
                                 player.name == "终极艾德曼合金战神" ||
                                 player.name == "光明之神" ||
                                 player.name == "金辉死神";
                
                if (canAttack) {
                    pair<long long, string> result = executeAttack(player, enemy, a, enemyTeam);
                    long long damage = result.first;
                    string skillMsg = result.second;
                    
                    if (skillMsg != "") {
                        cout << "? 你的 " << player.name << " " << skillMsg << "\n";
                        wait(1);
                    }
                    
                    enemy.health -= damage;
                    cout << "?? 你对敌人造成 " << formatNumber(damage) << " 伤害\n";
                    cout << "?? 敌人剩余血量: " << formatHealth(max(0LL, enemy.health), enemy.isUnknownHealth) << "\n";
                    
                    if (enemy.health <= 0) {
                        cout << "?? 敌人倒下了!\n";
                        break;
                    }
                } else {
                    cout << "? 敌人处于虚化状态,无法被攻击!\n";
                    break;
                }
            }
            
            if (!enemyTeam.hasAliveMembers()) return true;
            
            // 敌人攻击
            cout << "\n【敌人回合】\n";
            attacks = enemy.maxAttacks;
            for (int a = 0; a < attacks; a++) {
                if (player.health <= 0) break;
                
                bool canAttack = !player.isVirtual || 
                                 enemy.name == "星辉死神" || 
                                 enemy.name == "赤焰冥神" || 
                                 enemy.name == "完全体凋灵斯拉" || 
                                 enemy.name == "终极艾德曼合金战神" ||
                                 enemy.name == "光明之神" ||
                                 enemy.name == "金辉死神";
                
                if (canAttack) {
                    pair<long long, string> result = executeAttack(enemy, player, a, playerTeam);
                    long long damage = result.first;
                    string skillMsg = result.second;
                    
                    if (skillMsg != "") {
                        cout << "? 敌人 " << enemy.name << " " << skillMsg << "\n";
                        wait(1);
                    }
                    
                    player.health -= damage;
                    cout << "?? 敌人对你造成 " << formatNumber(damage) << " 伤害\n";
                    cout << "?? 你的剩余血量: " << formatHealth(max(0LL, player.health), player.isUnknownHealth) << "\n";
                    
                    if (player.health <= 0) {
                        cout << "?? 你的泰坦倒下了!\n";
                        break;
                    }
                } else {
                    cout << "? 你的泰坦处于虚化状态,无法被攻击!\n";
                    break;
                }
            }
            
            // 回合结束处理虚化
            if (player.isVirtual) {
                player.virtualTurns--;
                if (player.virtualTurns <= 0) {
                    player.isVirtual = false;
                    player.virtualTurns = 0;
                    cout << "? 你的 " << player.name << " 的虚化状态结束了\n";
                }
            }
            if (enemy.isVirtual) {
                enemy.virtualTurns--;
                if (enemy.virtualTurns <= 0) {
                    enemy.isVirtual = false;
                    enemy.virtualTurns = 0;
                    cout << "? 敌人 " << enemy.name << " 的虚化状态结束了\n";
                }
            }
            
            wait(2);
        }
        
        return playerTeam.hasAliveMembers();
    }
    
    void arenaMode() {
        cls();
        cout << "==========================================\n";
        cout << " 竞技场模式\n";
        cout << "==========================================\n\n";
        
        cout << "竞技场规则:\n";
        cout << "1. 玩家和电脑进行对战\n";
        cout << "2. 电脑每回合随机派出泰坦\n";
        cout << "3. 连胜可获得额外奖励\n";
        cout << "4. 失败则游戏结束\n";
        cout << "5. 每局游戏会随机刷新一个神级泰坦帮助任意一方!\n";
        cout << "6. 所有泰坦技能都会在战斗中显示!\n\n";
        
        p1 = new Player("玩家");
        p2 = new Player("电脑");
        
        cout << "请抽取你的初始泰坦(5次三选一)\n";
        drawCards(p1, 5);
        
        cout << "\n电脑正在抽取泰坦...\n";
        for (int i = 0; i < 5; i++) {
            int idx = rand() % allTitanTemplates.size();
            Titan t = allTitanTemplates[idx];
            t.health = t.maxHealth;
            t.form = 1;
            t.killCount = 0;
            t.isVirtual = false;
            t.virtualTurns = 0;
            t.isDead = false;
            
            int x = rand() % 201 - 100;
            int y = rand() % 101;
            int z = rand() % 201 - 100;
            Position pos(x, y, z);
            
            p2->addTitan(t, pos);
        }
        cout << "电脑抽取完成!\n";
        
        spawnRandomGodTitan();
        
        wait(2);
        
        int winStreak = 0;
        int round = 1;
        
        while (p1->hasTitans() && p2->hasTitans()) {
            cls();
            cout << "==========================================\n";
            cout << " 竞技场 - 第 " << round << " 轮\n";
            cout << "==========================================\n";
            cout << "连胜次数: " << winStreak << "\n\n";
            
            cout << "你的泰坦:\n";
            p1->showTitans();
            cout << "\n电脑泰坦:\n";
            p2->showTitans();
            cout << "\n";
            
            Team playerTeam;
            cout << "请选择你的出战泰坦(输入坐标,输入 'done' 结束):\n";
            
            string input;
            while (true) {
                cout << "坐标: ";
                cin >> input;
                if (input == "done" || input == "DONE") break;
                
                Position pos = Position::fromString(input);
                Titan* t = p1->getTitanByPos(pos);
                if (t == NULL) {
                    cout << "? 无效坐标!\n";
                } else {
                    playerTeam.addMember(*t, pos);
                    p1->removeTitanByPos(pos);
                    cout << "? " << t->name << " 已加入队伍\n";
                }
            }
            
            if (playerTeam.members.empty()) {
                cout << "? 你没有选择任何泰坦,电脑获胜!\n";
                break;
            }
            
            Team computerTeam;
            vector<int> indices;
            for (int i = 0; i < p2->count() && i < 3; i++) {
                indices.push_back(i);
            }
            
            for (size_t i = 0; i < indices.size(); i++) {
                computerTeam.addMember(p2->titans[indices[i]], p2->positions[indices[i]]);
            }
            
            for (int i = indices.size() - 1; i >= 0; i--) {
                p2->removeTitanByPos(p2->positions[indices[i]]);
            }
            
            bool playerWin = arenaBattle(playerTeam, computerTeam);
            
            if (playerWin) {
                winStreak++;
                cout << "\n?? 你获胜了!连胜次数: " << winStreak << "\n";
                
                if (winStreak % 3 == 0) {
                    cout << "?? 获得额外抽卡机会!\n";
                    drawCards(p1, 1);
                }
            } else {
                cout << "\n?? 你失败了...\n";
                break;
            }
            
            for (size_t i = 0; i < playerTeam.members.size(); i++) {
                if (playerTeam.members[i].health > 0 && !playerTeam.members[i].isDead) {
                    p1->addTitan(playerTeam.members[i], playerTeam.positions[i]);
                }
            }
            
            round++;
            waitForEnter();
        }
        
        cout << "\n游戏结束!你的最终连胜记录: " << winStreak << "\n";
        waitForEnter();
    }
    
    void survivalMode() {
        cls();
        cout << "==========================================\n";
        cout << " 生存模式\n";
        cout << "==========================================\n\n";
        
        cout << "生存模式规则:\n";
        cout << "1. 你只有1个泰坦,对抗无限波次的敌人\n";
        cout << "2. 每击败一个敌人,恢复20%血量\n";
        cout << "3. 每3波可获得一次抽卡机会(替换现有泰坦)\n";
        cout << "4. 每局游戏会随机刷新一个神级泰坦帮助任意一方!\n";
        cout << "5. 所有泰坦技能都会在战斗中显示!\n";
        cout << "6. 看你能坚持多少波!\n\n";
        
        p1 = new Player("玩家");
        p2 = new Player("电脑");
        
        cout << "请抽取你的初始泰坦(三选一)\n";
        drawCards(p1, 1);
        
        spawnRandomGodTitan();
        
        int wave = 1;
        int score = 0;
        
        while (p1->hasTitans() && p2->hasTitans()) {
            cls();
            cout << "==========================================\n";
            cout << " 生存模式 - 第 " << wave << " 波\n";
            cout << "==========================================\n";
            cout << "得分: " << score << "\n\n";
            
            Titan playerTitan = p1->titans[0];
            Position playerPos = p1->positions[0];
            p1->removeTitanByPos(playerPos);
            
            cout << "你的泰坦: ";
            playerTitan.showSimple();
            cout << "\n\n";
            
            int enemyIdx = rand() % allTitanTemplates.size();
            Titan enemy = allTitanTemplates[enemyIdx];
            enemy.health = enemy.maxHealth * (1 + wave * 0.1);
            enemy.maxHealth = enemy.health;
            
            cout << "敌人: ";
            enemy.showSimple();
            cout << "\n\n";
            
            wait(2);
            
            Team playerTeam, enemyTeam;
            playerTeam.addMember(playerTitan, playerPos);
            enemyTeam.addMember(enemy, Position(0,0,0));
            
            bool playerWin = survivalBattle(playerTeam, enemyTeam);
            
            if (playerWin) {
                score += 100 * wave;
                cout << "\n?? 你击败了第 " << wave << " 波敌人!\n";
                
                playerTeam.members[0].health += playerTeam.members[0].maxHealth * 0.2;
                if (playerTeam.members[0].health > playerTeam.members[0].maxHealth) {
                    playerTeam.members[0].health = playerTeam.members[0].maxHealth;
                }
                
                p1->addTitan(playerTeam.members[0], playerPos);
                
                if (wave % 3 == 0) {
                    cout << "?? 获得抽卡机会!可以替换现有泰坦\n";
                    cout << "是否抽卡?(1:是 0:否): ";
                    int choice;
                    cin >> choice;
                    if (choice == 1) {
                        p1->removeTitanByPos(playerPos);
                        drawCards(p1, 1);
                    }
                }
                
                wave++;
            } else {
                cout << "\n?? 你的泰坦倒下了...\n";
                cout << "最终波次: " << wave << "  最终得分: " << score << "\n";
                break;
            }
            
            waitForEnter();
        }
        
        waitForEnter();
    }
    

    public: Game() { srand(time(NULL)); p1 = NULL; p2 = NULL; initAllTitans(); }

    void newGame() {
        cls();
        cout << "==========================================\n";
        cout << " 泰坦大乱斗 - 经典模式\n";
        cout << "==========================================\n\n";
        
        p1 = new Player("选手A");
        p2 = new Player("选手B");
        
        cout << "抽卡规则:每人抽5次,每次从3个随机泰坦中选择1个\n";
        cout << "每三个选项中至少有一个神级泰坦!\n";
        cout << "每局游戏会随机刷新一个神级泰坦帮助任意一方!\n\n";
        
        wait(3);
        
        drawCards(p1, 5);
        drawCards(p2, 5);
        
        spawnRandomGodTitan();
        
        cls();
        cout << "==========================================\n";
        cout << " 抽卡结束\n";
        cout << "==========================================\n\n";
        
        cout << "选手A获得的泰坦:\n";
        p1->showTitans();
        cout << "\n选手B获得的泰坦:\n";
        p2->showTitans();
        
        waitForEnter();
    }
    
    void fight() {
        cls();
        cout << "==========================================\n";
        cout << " 泰坦大乱斗 - 战斗开始!\n";
        cout << "==========================================\n\n";
        
        cout << "选手A的泰坦数量: " << p1->count() << "\n";
        cout << "选手B的泰坦数量: " << p2->count() << "\n\n";
        
        wait(3);
        
        int round = 1;
        int teamAScore = 0;
        int teamBScore = 0;
        
        while (p1->hasTitans() && p2->hasTitans()) {
            cls();
            cout << "==========================================\n";
            cout << " 第 " << round << " 轮对战\n";
            cout << "==========================================\n\n";
            
            Team teamA, teamB;
            
            cout << p1->name << " 剩余泰坦:\n";
            p1->showTitans();
            cout << "\n你可以派多个泰坦一起上,输入坐标直到输入 'done' 结束\n";
            
            string input;
            while (true) {
                cout << "请输入出战泰坦的坐标 (或输入 'done' 结束): ";
                cin >> input;
                
                if (input == "done" || input == "DONE") {
                    break;
                }
                
                Position pos = Position::fromString(input);
                Titan* t = p1->getTitanByPos(pos);
                
                if (t == NULL) {
                    cout << "? 你没有这个坐标的泰坦,请重新输入!\n";
                } else {
                    teamA.addMember(*t, pos);
                    p1->removeTitanByPos(pos);
                    cout << "? " << t->name << " 已加入队伍!\n";
                }
            }
            
            if (teamA.members.empty()) {
                cout << "? 你没有选择任何泰坦,本回合跳过!\n";
                wait(2);
                continue;
            }
            
            cls();
            cout << "==========================================\n";
            cout << " 第 " << round << " 轮 - " << p2->name << " 选择出战泰坦\n";
            cout << "==========================================\n\n";
            
            cout << p2->name << " 剩余泰坦:\n";
            p2->showTitans();
            cout << "\n你可以派多个泰坦一起上,输入坐标直到输入 'done' 结束\n";
            
            while (true) {
                cout << "请输入出战泰坦的坐标 (或输入 'done' 结束): ";
                cin >> input;
                
                if (input == "done" || input == "DONE") {
                    break;
                }
                
                Position pos = Position::fromString(input);
                Titan* t = p2->getTitanByPos(pos);
                
                if (t == NULL) {
                    cout << "? 你没有这个坐标的泰坦,请重新输入!\n";
                } else {
                    teamB.addMember(*t, pos);
                    p2->removeTitanByPos(pos);
                    cout << "? " << t->name << " 已加入队伍!\n";
                }
            }
            
            if (teamB.members.empty()) {
                cout << "? 你没有选择任何泰坦,本回合跳过!\n";
                for (size_t i = 0; i < teamA.members.size(); i++) {
                    p1->addTitan(teamA.members[i], teamA.positions[i]);
                }
                wait(2);
                continue;
            }
            
            bool starHajimiActivated = false;
            
            for (size_t i = 0; i < teamA.members.size(); i++) {
                if (teamA.members[i].name == "星辉哈吉迷" && teamA.members[i].health > 0) {
                    cout << "\n? " << p1->name << " 的星辉哈吉迷登场!\n";
                    cout << "?? 发动技能:终极献祭 - 消灭场上所有泰坦!\n";
                    
                    teamA.members.clear();
                    teamB.members.clear();
                    
                    starHajimiActivated = true;
                    break;
                }
            }
            
            if (!starHajimiActivated) {
                for (size_t i = 0; i < teamB.members.size(); i++) {
                    if (teamB.members[i].name == "星辉哈吉迷" && teamB.members[i].health > 0) {
                        cout << "\n? " << p2->name << " 的星辉哈吉迷登场!\n";
                        cout << "?? 发动技能:终极献祭 - 消灭场上所有泰坦!\n";
                        
                        teamA.members.clear();
                        teamB.members.clear();
                        
                        starHajimiActivated = true;
                        break;
                    }
                }
            }
            
            if (starHajimiActivated) {
                cout << "\n? 星辉哈吉迷完成使命,化作星光消散...\n";
                wait(3);
                round++;
                continue;
            }
            
            cout << "\n" << p1->name << " 的队伍:\n";
            teamA.showTeam();
            cout << "\n" << p2->name << " 的队伍:\n";
            teamB.showTeam();
            cout << "\n";
            
            cout << "战斗即将开始...\n";
            wait(3);
            
            cout << "\n?? 开战! ??\n";
            wait(2);
            
            int turn = 0;
            while (teamA.hasAliveMembers() && teamB.hasAliveMembers()) {
                turn++;
                cout << "\n--- 第 " << turn << " 回合 ---\n";
                
                for (size_t i = 0; i < teamA.members.size(); i++) {
                    if (teamA.members[i].health > 0 && !teamA.members[i].isDead && teamA.members[i].isVirtual) {
                        cout << "? " << p1->name << " 的 " << teamA.members[i].name << " 处于虚化状态(剩余" << teamA.members[i].virtualTurns << "回合)\n";
                    }
                }
                for (size_t i = 0; i < teamB.members.size(); i++) {
                    if (teamB.members[i].health > 0 && !teamB.members[i].isDead && teamB.members[i].isVirtual) {
                        cout << "? " << p2->name << " 的 " << teamB.members[i].name << " 处于虚化状态(剩余" << teamB.members[i].virtualTurns << "回合)\n";
                    }
                }
                
                wait(2);
                
                for (size_t i = 0; i < teamA.members.size(); i++) {
                    if (teamA.members[i].health <= 0 || teamA.members[i].isDead) continue;
                    
                    vector<int> targets;
                    for (size_t j = 0; j < teamB.members.size(); j++) {
                        if (teamB.members[j].health > 0 && !teamB.members[j].isDead) {
                            targets.push_back(j);
                        }
                    }
                    
                    if (targets.empty()) break;
                    
                    int targetIndex = targets[rand() % targets.size()];
                    
                    bool canAttack = !teamB.members[targetIndex].isVirtual || 
                                     teamA.members[i].name == "星辉死神" || 
                                     teamA.members[i].name == "赤焰冥神" ||
                                     teamA.members[i].name == "完全体凋灵斯拉" ||
                                     teamA.members[i].name == "终极艾德曼合金战神" ||
                                     teamA.members[i].name == "光明之神" ||
                                     teamA.members[i].name == "金辉死神";
                    
                    if (canAttack) {
                        int attacks = teamA.members[i].maxAttacks;
                        
                        for (int a = 0; a < attacks; a++) {
                            if (teamB.members[targetIndex].health <= 0) break;
                            
                            pair<long long, string> result = executeAttack(teamA.members[i], teamB.members[targetIndex], a, teamB);
                            long long damage = result.first;
                            string skillMsg = result.second;
                            
                            if (skillMsg != "") {
                                cout << "? " << p1->name << " 的 " << teamA.members[i].name << " " << skillMsg << "\n";
                                wait(1);
                            }
                            
                            teamB.members[targetIndex].health -= damage;
                            cout << "?? " << p1->name << " 的 " << teamA.members[i].name << " 攻击 " << p2->name << " 的 " << teamB.members[targetIndex].name 
                                 << " 造成 " << formatNumber(damage) << " 伤害\n";
                            
                            string healthStr = (teamB.members[targetIndex].name == "完全体凋灵斯拉") ? "NAN" : 
                                               formatNumber(max(0LL, teamB.members[targetIndex].health));
                            cout << "?? " << p2->name << " 的 " << teamB.members[targetIndex].name << " 剩余血量: " << healthStr << "\n";
                            wait(2);
                            
                            if (teamB.members[targetIndex].health <= 0 && 
                                teamB.members[targetIndex].name != "完全体凋灵斯拉") {
                                cout << "\n?? " << p2->name << " 的 " << teamB.members[targetIndex].name << " 倒下了!\n";
                                teamA.members[i].killCount++;
                                teamBScore++;
                                
                                if (teamB.members[targetIndex].name == "混沌末影巨人" && 
                                    teamB.members[targetIndex].form < teamB.members[targetIndex].maxForm) {
                                    teamB.members[targetIndex].chaosEvolve();
                                }
                                break;
                            }
                        }
                    } else {
                        cout << "? " << p2->name << " 的 " << teamB.members[targetIndex].name << " 处于虚化状态,无法被攻击!\n";
                    }
                }
                
                if (!teamB.hasAliveMembers()) break;
                
                for (size_t i = 0; i < teamB.members.size(); i++) {
                    if (teamB.members[i].health <= 0 || teamB.members[i].isDead) continue;
                    
                    vector<int> targets;
                    for (size_t j = 0; j < teamA.members.size(); j++) {
                        if (teamA.members[j].health > 0 && !teamA.members[j].isDead) {
                            targets.push_back(j);
                        }
                    }
                    
                    if (targets.empty()) break;
                    
                    int targetIndex = targets[rand() % targets.size()];
                    
                    bool canAttack = !teamA.members[targetIndex].isVirtual || 
                                     teamB.members[i].name == "星辉死神" || 
                                     teamB.members[i].name == "赤焰冥神" ||
                                     teamB.members[i].name == "完全体凋灵斯拉" ||
                                     teamB.members[i].name == "终极艾德曼合金战神" ||
                                     teamB.members[i].name == "光明之神" ||
                                     teamB.members[i].name == "金辉死神";
                    
                    if (canAttack) {
                        int attacks = teamB.members[i].maxAttacks;
                        
                        for (int a = 0; a < attacks; a++) {
                            if (teamA.members[targetIndex].health <= 0) break;
                            
                            pair<long long, string> result = executeAttack(teamB.members[i], teamA.members[targetIndex], a, teamA);
                            long long damage = result.first;
                            string skillMsg = result.second;
                            
                            if (skillMsg != "") {
                                cout << "? " << p2->name << " 的 " << teamB.members[i].name << " " << skillMsg << "\n";
                                wait(1);
                            }
                            
                            teamA.members[targetIndex].health -= damage;
                            cout << "?? " << p2->name << " 的 " << teamB.members[i].name << " 攻击 " << p1->name << " 的 " << teamA.members[targetIndex].name 
                                 << " 造成 " << formatNumber(damage) << " 伤害\n";
                            
                            string healthStr = (teamA.members[targetIndex].name == "完全体凋灵斯拉") ? "NAN" : 
                                               formatNumber(max(0LL, teamA.members[targetIndex].health));
                            cout << "?? " << p1->name << " 的 " << teamA.members[targetIndex].name << " 剩余血量: " << healthStr << "\n";
                            wait(2);
                            
                            if (teamA.members[targetIndex].health <= 0 && 
                                teamA.members[targetIndex].name != "完全体凋灵斯拉") {
                                cout << "\n?? " << p1->name << " 的 " << teamA.members[targetIndex].name << " 倒下了!\n";
                                teamB.members[i].killCount++;
                                teamAScore++;
                                
                                if (teamA.members[targetIndex].name == "混沌末影巨人" && 
                                    teamA.members[targetIndex].form < teamA.members[targetIndex].maxForm) {
                                    teamA.members[targetIndex].chaosEvolve();
                                }
                                break;
                            }
                        }
                    } else {
                        cout << "? " << p1->name << " 的 " << teamA.members[targetIndex].name << " 处于虚化状态,无法被攻击!\n";
                    }
                }
                
                for (size_t i = 0; i < teamA.members.size(); i++) {
                    if (teamA.members[i].isVirtual) {
                        teamA.members[i].virtualTurns--;
                        if (teamA.members[i].virtualTurns <= 0) {
                            teamA.members[i].isVirtual = false;
                            teamA.members[i].virtualTurns = 0;
                            cout << "? " << p1->name << " 的 " << teamA.members[i].name << " 的虚化状态结束了\n";
                        }
                    }
                }
                for (size_t i = 0; i < teamB.members.size(); i++) {
                    if (teamB.members[i].isVirtual) {
                        teamB.members[i].virtualTurns--;
                        if (teamB.members[i].virtualTurns <= 0) {
                            teamB.members[i].isVirtual = false;
                            teamB.members[i].virtualTurns = 0;
                            cout << "? " << p2->name << " 的 " << teamB.members[i].name << " 的虚化状态结束了\n";
                        }
                    }
                }
            }
            
            cout << "\n?? 本回合战斗结束!\n";
            
            for (size_t i = 0; i < teamA.members.size(); i++) {
                if (teamA.members[i].health > 0 && !teamA.members[i].isDead) {
                    long long healAmount = teamA.members[i].maxHealth * 20 / 100;
                    teamA.members[i].health += healAmount;
                    if (teamA.members[i].health > teamA.members[i].maxHealth) {
                        teamA.members[i].health = teamA.members[i].maxHealth;
                    }
                    p1->addTitan(teamA.members[i], teamA.positions[i]);
                    cout << "?? " << p1->name << " 的 " << teamA.members[i].name << " 恢复 " << formatNumber(healAmount) << " 血量\n";
                }
            }
            
            for (size_t i = 0; i < teamB.members.size(); i++) {
                if (teamB.members[i].health > 0 && !teamB.members[i].isDead) {
                    long long healAmount = teamB.members[i].maxHealth * 20 / 100;
                    teamB.members[i].health += healAmount;
                    if (teamB.members[i].health > teamB.members[i].maxHealth) {
                        teamB.members[i].health = teamB.members[i].maxHealth;
                    }
                    p2->addTitan(teamB.members[i], teamB.positions[i]);
                    cout << "?? " << p2->name << " 的 " << teamB.members[i].name << " 恢复 " << formatNumber(healAmount) << " 血量\n";
                }
            }
            
            cout << "\n当前比分: " << p1->name << " " << teamAScore << " - " << teamBScore << " " << p2->name << "\n";
            cout << p1->name << " 剩余泰坦: " << p1->count() << "\n";
            cout << p2->name << " 剩余泰坦: " << p2->count() << "\n";
            
            round++;
            
            if (p1->hasTitans() && p2->hasTitans()) {
                cout << "\n是否继续下一轮?(1: 是, 0: 否): ";
                int choice;
                cin >> choice;
                if (choice != 1) {
                    break;
                }
            }
        }
        
        cls();
        cout << "==========================================\n";
        cout << " 游戏结束\n";
        cout << "==========================================\n\n";
        
        if (!p1->hasTitans() && !p2->hasTitans()) {
            cout << "?? 平局!双方泰坦全部阵亡!\n";
        } else if (!p1->hasTitans()) {
            cout << "?? " << p2->name << " 获胜!\n";
        } else {
            cout << "?? " << p1->name << " 获胜!\n";
        }
        
        waitForEnter();
    }
    
    void showAllTitans() {
        cls();
        cout << "==========================================\n";
        cout << " 泰坦图鉴\n";
        cout << "==========================================\n\n";
        
        vector<string> shown;
        vector<Titan> all;
        
        all.push_back(Titan("星辉死神", "神级", 4000000, 0, 300000, 0, 5, "虚化", "死神领域", "永恒虚化", 3));
        
        Titan adamantium = Titan("终极艾德曼合金战神", "神级", 50000000, 3, 5, 0, 3,
                               "艾德曼合金领域 - 100%概率格挡80%伤害,并反弹100%伤害",
                               "战神裁决 - 80%概率造成5倍伤害,无视任何防御和虚化",
                               "宇宙战神降临 - 60%概率秒杀50%以下敌人,并回复100%血量", 1);
        all.push_back(adamantium);
        
        Titan chaos1 = Titan::createChaosEnderGiant();
        chaos1.name = "混沌末影巨人";
        all.push_back(chaos1);
        
        all.push_back(Titan("终极基岩粉碎者", "神级", 6000000, 0, 250000, 250000, 2, "粉碎打击", "地动山摇", "基岩护盾", 1));
        all.push_back(Titan("星河意志", "神级", 3000000, 2, 3, 200000, 5, "星河护体", "星河风暴", "星河陨落", 2));
        all.push_back(Titan("虚空圣神", "神级", 8000000, 2, 8, 300000, 3, "虚空汲取", "虚空裂隙", "虚空主宰", 1));
        all.push_back(Titan("终极生命窃魂者", "神级", 6000000, 0, 100000, 200000, 2, "生命窃取", "灵魂收割", "死亡契约", 1));
        all.push_back(Titan("神·凋灵骷髅泰坦", "神级", 9000000, 0, 150000, 250000, 3, "凋灵领域", "死亡标记", "骷髅军团", 1));
        all.push_back(Titan("神·骷髅泰坦", "神级", 8500000, 0, 120000, 250000, 3, "骨盾", "骨矛", "亡灵重生", 1));
        all.push_back(Titan("宇宙大帝", "神级", 20000000, 3, 10, 0, 1, "空间护盾", "时空反甲", "宇宙降临", 1));
        all.push_back(Titan("赤焰冥神", "神级", 4000000, 0, 300000, 0, 5, "冥火虚化", "炼狱领域", "永恒冥火", 3));
        all.push_back(Titan::createSuperBlueCat());
        all.push_back(Titan::createStarHajimi());
        all.push_back(Titan::createUpgradedExecutorDragon());
        all.push_back(Titan::createUpgradedWitherZilla());
        all.push_back(Titan("玩家泰坦之神", "神级", 6666666, 0, 500000, 3000000, 1, "死神之挥", "死神镰刀", "末世降临", 1));
        all.push_back(Titan::createLightningHajimi());
        all.push_back(Titan::createThunderHajimi());
        all.push_back(Titan::createPerfectWitherZilla());
        all.push_back(Titan::createLightGod());
        all.push_back(Titan::createGoldenDeath());
        
        for (size_t i = 0; i < all.size(); i++) {
            all[i].showInfo();
            cout << "\n";
        }
        
        waitForEnter();
    }
    
    void menu() {
        int choice;
        
        do {
            cls();
            cout << "\n";
            cout << "==========================================\n";
            cout << " 泰坦大乱斗 - 主菜单\n";
            cout << "==========================================\n";
            cout << "\n";
            cout << "1. 经典模式(双人对战)\n";
            cout << "2. 竞技场模式(对战电脑)\n";
            cout << "3. 生存模式(无限波次)\n";
            cout << "4. 查看泰坦图鉴\n";
            cout << "5. 退出\n";
            cout << "\n请选择: ";
            cin >> choice;
            
            if (choice == 1) {
                newGame();
                fight();
            }
            else if (choice == 2) {
                arenaMode();
            }
            else if (choice == 3) {
                survivalMode();
            }
            else if (choice == 4) {
                showAllTitans();
            }
            
        } while (choice != 5);
        
        cout << "\n感谢游玩!\n";
    }
    
    ~Game() {
        if (p1) delete p1;
        if (p2) delete p2;
    }
    

    };

    int main() { Game game; game.menu(); return 0; }

  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

    This person is lazy and didn't write any solutions.

题目标签

2021
2
CSP-J
2
cspj 2021
1
聪明人游戏
1
算法笔记
1