-
个人简介
#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