-
个人简介
我的王者荣耀本命是 韩信,王者里搜 暃神之杨 如果你也是玩王者的就领我的礼物🎁吧! #include #include #include #include #include #include #include #include
// 皮肤结构体 struct Skin { std::string name; std::string description; int cost; bool owned;
Skin(std::string n, std::string desc, int c) : name(n), description(desc), cost(c), owned(false) {}};
// 机甲基类 class Mecha { public: std::string name; int health; int maxHealth; int attackDamage; int speed; int baseSpeed; std::vectorstd::string skills; std::vector skins; std::string currentSkin; int skinBonus;
Mecha(std::string n, int h, int ad, int sp) : name(n), health(h), maxHealth(h), attackDamage(ad), speed(sp), baseSpeed(sp), skinBonus(0) { skins.push_back(Skin("原版涂装", "标准的出厂涂装", 0)); currentSkin = "原版涂装"; skins[0].owned = true; } virtual ~Mecha() {} virtual void displayStatus() { std::cout << "[" << name << " - " << currentSkin << "] HP: " << health << "/" << maxHealth << " ATK: " << attackDamage << " SPD: " << speed; if (skinBonus > 0) { std::cout << " (+" << skinBonus << " 皮肤加成)"; } std::cout << std::endl; } virtual void useSkill(int skillIndex, Mecha& target) { if (skillIndex < 0 || skillIndex >= skills.size()) { std::cout << "无效的技能选择!" << std::endl; return; } std::cout << name << " 使用了技能 [" << skills[skillIndex] << "] 对 " << target.name << "!" << std::endl; target.takeDamage(attackDamage + skinBonus); } virtual void takeDamage(int damage) { int dodgeChance = std::min(30, speed / 3); if (rand() % 100 < dodgeChance) { std::cout << name << " 灵活地闪避了攻击!" << std::endl; return; } health -= damage; if (health < 0) health = 0; std::cout << name << " 受到了 " << damage << " 点伤害!" << std::endl; } bool isAlive() { return health > 0; } bool equipSkin(const std::string& skinName) { for (auto& skin : skins) { if (skin.name == skinName && skin.owned) { currentSkin = skinName; calculateSkinBonus(); return true; } } return false; } bool buySkin(const std::string& skinName, int& coins) { for (auto& skin : skins) { if (skin.name == skinName && !skin.owned) { if (coins >= skin.cost) { coins -= skin.cost; skin.owned = true; std::cout << "成功购买皮肤: " << skinName << "!" << std::endl; return true; } else { std::cout << "金币不足!需要 " << skin.cost << " 金币,你只有 " << coins << " 金币。" << std::endl; return false; } } } std::cout << "皮肤不存在或已拥有!" << std::endl; return false; } void displaySkins() { std::cout << "\n可用皮肤:" << std::endl; for (size_t i = 0; i < skins.size(); i++) { std::cout << i + 1 << ". " << skins[i].name; if (skins[i].name == currentSkin) { std::cout << " [已装备]"; } if (skins[i].owned) { std::cout << " [已拥有]"; } else { std::cout << " [价格: " << skins[i].cost << "金币]"; } std::cout << " - " << skins[i].description << std::endl; } }private: void calculateSkinBonus() { speed = baseSpeed; maxHealth = (maxHealth / (1 + skinBonus/10.0));
if (currentSkin.find("战斗") != std::string::npos) { skinBonus = 5; } else if (currentSkin.find("疾风") != std::string::npos) { skinBonus = 3; speed += 5; } else if (currentSkin.find("守护") != std::string::npos) { skinBonus = 4; maxHealth += 20; health = std::min(health + 20, maxHealth); } else if (currentSkin.find("炫彩") != std::string::npos) { skinBonus = 2; attackDamage += 2; speed += 2; maxHealth += 10; health = std::min(health + 10, maxHealth); } else { skinBonus = 0; } }};
class IronFist : public Mecha { public: IronFist() : Mecha("铁拳", 120, 18, 8) { skills = {"重拳打击", "钢铁冲击", "防御姿态", "紧急修复", "自爆攻击"}; addSkins(); }
private: void addSkins() { skins.push_back(Skin("战斗涂装", "增强攻击力的红色涂装", 500)); skins.push_back(Skin("荒野迷彩", "适合野外作战的迷彩涂装", 300)); skins.push_back(Skin("黄金战神", "闪亮的黄金限定版", 1000)); } };
class StormRider : public Mecha { public: StormRider() : Mecha("风暴骑士", 100, 22, 12) { skills = {"闪电链", "风暴之眼", "快速突进", "电磁护盾", "超载爆发"}; addSkins(); }
private: void addSkins() { skins.push_back(Skin("疾风涂装", "提升速度的蓝色涂装", 500)); skins.push_back(Skin("雷霆外观", "带有闪电纹路的特殊涂装", 400)); skins.push_back(Skin("深蓝魅影", "深海配色的稀有涂装", 800)); } };
class StoneGuardian : public Mecha { public: StoneGuardian() : Mecha("岩石守卫", 150, 15, 5) { skills = {"岩石投掷", "大地震击", "坚固防御", "自我修复", "地裂冲击"}; addSkins(); }
private: void addSkins() { skins.push_back(Skin("守护涂装", "增强防御的灰色涂装", 500)); skins.push_back(Skin("熔岩核心", "岩浆般炽热的外观", 600)); skins.push_back(Skin("钻石装甲", "闪耀的钻石防护层", 1200)); } };
class ShadowHunter : public Mecha { public: ShadowHunter() : Mecha("暗影狩猎者", 180, 25, 15) { skills = { "全图瞄准-死神之眼", "暗影突袭-近身格斗", "量子护盾", "相位穿梭", "EMP冲击", "修复纳米虫群", "影分身", "末日审判", "绝对零度", "超载模式" }; addSkins(); }
void useSkill(int skillIndex, Mecha& target) override { if (skillIndex < 0 || skillIndex >= skills.size()) { std::cout << "无效的技能选择!" << std::endl; return; } std::cout << ">>> 暗影狩猎者 发动了专属技能 [" << skills[skillIndex] << "] !" << std::endl; switch (skillIndex) { case 0: if (target.health < target.maxHealth * 0.5) { std::cout << "!!! 死神之眼锁定!" << target.name << " 被直接秒杀!!!" << std::endl; target.health = 0; } else { std::cout << "目标生命值高于50%,秒杀失败。造成普通伤害。" << std::endl; target.takeDamage(attackDamage + skinBonus); } break; case 1: std::cout << "暗影狩猎者发动致命一击!" << std::endl; target.takeDamage((attackDamage + skinBonus) * 2); break; case 2: std::cout << "生成一个强大的量子护盾,恢复50点生命值!" << std::endl; this->health += 50; if (this->health > this->maxHealth) this->health = this->maxHealth; break; case 9: std::cout << "暗影狩猎者进入超载模式,攻击力大幅提升!" << std::endl; this->attackDamage += 15; break; default: target.takeDamage(attackDamage + skinBonus); break; } }private: void addSkins() { skins.push_back(Skin("暗影至尊", "专属的暗影之王涂装", 0)); skins.push_back(Skin("血色复仇", "血红色的恐怖涂装", 1500)); skins.push_back(Skin("虚空行者", "来自虚空的神秘涂装", 2000)); skins.push_back(Skin("炫彩幻影", "彩虹般变幻的特殊涂装", 2500)); for (auto& skin : skins) { if (skin.name == "暗影至尊") { skin.owned = true; } } } };
class Player { public: std::string username; std::string password; Mecha* myMecha; int coins; bool isVIP;
Player(std::string u, std::string p, bool vip = false) : username(u), password(p), coins(1000), isVIP(vip) { if (isVIP) { myMecha = new ShadowHunter(); coins = 2000; } else { int choice = rand() % 3; switch (choice) { case 0: myMecha = new IronFist(); break; case 1: myMecha = new StormRider(); break; case 2: myMecha = new StoneGuardian(); break; } } } ~Player() { delete myMecha; } bool verifyPassword(const std::string& pwd) { return password == pwd; } void displayInfo() { std::cout << "\n=== 玩家信息 ===" << std::endl; std::cout << "用户名: " << username << std::endl; std::cout << "身份: " << (isVIP ? "VIP玩家" : "普通玩家") << std::endl; std::cout << "金币: " << coins << std::endl; myMecha->displayStatus(); }};
class AccountManager { private: std::map<std::string, Player*> players; std::string dataFile = "players.data";
void loadAccounts() { std::ifstream file(dataFile); if (!file.is_open()) return; std::string username, password; int isVIP; while (file >> username >> password >> isVIP) { players[username] = new Player(username, password, isVIP == 1); } file.close(); } void saveAccounts() { std::ofstream file(dataFile); for (const auto& pair : players) { file << pair.first << " " << pair.second->password << " " << (pair.second->isVIP ? 1 : 0) << std::endl; } file.close(); }public: AccountManager() { loadAccounts(); }
~AccountManager() { saveAccounts(); for (auto& pair : players) { delete pair.second; } } bool registerAccount(const std::string& username, const std::string& password) { if (players.find(username) != players.end()) { std::cout << "用户名已存在!" << std::endl; return false; } bool isVIP = (username == "杨紫升"); players[username] = new Player(username, password, isVIP); std::cout << "账户注册成功!"; if (isVIP) { std::cout << " 尊贵的VIP玩家,您的专属机甲 [暗影狩猎者] 已就绪!"; } else { std::cout << " 获得随机基础机甲和1000金币!"; } std::cout << std::endl; saveAccounts(); return true; } Player* login(const std::string& username, const std::string& password) { auto it = players.find(username); if (it != players.end() && it->second->verifyPassword(password)) { std::cout << "登录成功!欢迎回来," << username << "!" << std::endl; if (it->second->isVIP) { std::cout << "********** 暗影狩猎者,降临! **********" << std::endl; } return it->second; } else { std::cout << "用户名或密码错误!" << std::endl; return nullptr; } }};
class MechGame { private: AccountManager accManager; Player* currentPlayer;
public: MechGame() : currentPlayer(nullptr) { std::srand(std::time(0)); }
void start() { while (true) { if (!currentPlayer) { showMainMenu(); } else { showGameMenu(); } } } void showMainMenu() { std::cout << "\n===== 机甲战争 =====\n"; std::cout << "1. 注册\n"; std::cout << "2. 登录\n"; std::cout << "3. 退出\n"; std::cout << "请选择: "; int choice; std::cin >> choice; std::string username, password; switch (choice) { case 1: std::cout << "请输入用户名: "; std::cin >> username; std::cout << "请输入密码: "; std::cin >> password; accManager.registerAccount(username, password); break; case 2: std::cout << "请输入用户名: "; std::cin >> username; std::cout << "请输入密码: "; std::cin >> password; currentPlayer = accManager.login(username, password); break; case 3: std::cout << "再见!" << std::endl; exit(0); default: std::cout << "无效选择!" << std::endl; } } void showGameMenu() { std::cout << "\n===== 机甲格纳库 =====\n"; currentPlayer->displayInfo(); std::cout << "\n1. 开始1v1战斗\n"; std::cout << "2. 皮肤商店\n"; std::cout << "3. 装备皮肤\n"; std::cout << "4. 登出\n"; std::cout << "请选择: "; int choice; std::cin >> choice; switch (choice) { case 1: start1v1Battle(); break; case 2: showSkinShop(); break; case 3: equipSkin(); break; case 4: currentPlayer = nullptr; std::cout << "已登出。" << std::endl; break; default: std::cout << "无效选择!" << std::endl; } } void showSkinShop() { std::cout << "\n===== 皮肤商店 =====\n"; std::cout << "你的金币: " << currentPlayer->coins << std::endl; currentPlayer->myMecha->displaySkins(); std::cout << "\n输入要购买的皮肤编号 (0返回): "; int choice; std::cin >> choice; if (choice == 0) return; if (choice > 0 && choice <= static_cast<int>(currentPlayer->myMecha->skins.size())) { std::string skinName = currentPlayer->myMecha->skins[choice-1].name; if (!currentPlayer->myMecha->skins[choice-1].owned) { currentPlayer->myMecha->buySkin(skinName, currentPlayer->coins); } else { std::cout << "你已经拥有这个皮肤了!" << std::endl; } } else { std::cout << "无效选择!" << std::endl; } } void equipSkin() { std::cout << "\n===== 装备皮肤 =====\n"; currentPlayer->myMecha->displaySkins(); std::cout << "\n输入要装备的皮肤编号 (0返回): "; int choice; std::cin >> choice; if (choice == 0) return; if (choice > 0 && choice <= static_cast<int>(currentPlayer->myMecha->skins.size())) { std::string skinName = currentPlayer->myMecha->skins[choice-1].name; if (currentPlayer->myMecha->equipSkin(skinName)) { std::cout << "成功装备皮肤: " << skinName << "!" << std::endl; } else { std::cout << "装备皮肤失败!请先购买该皮肤。" << std::endl; } } else { std::cout << "无效选择!" << std::endl; } } void start1v1Battle() { std::cout << "\n----- 战斗开始! -----\n"; Mecha* enemy; int enemyType = rand() % 3; switch (enemyType) { case 0: enemy = new IronFist(); break; case 1: enemy = new StormRider(); break; case 2: enemy = new StoneGuardian(); break; } if (enemy->skins.size() > 1) { int skinIndex = rand() % (enemy->skins.size() - 1) + 1; enemy->equipSkin(enemy->skins[skinIndex].name); } Mecha* playerMecha = currentPlayer->myMecha; playerMecha->health = playerMecha->maxHealth; std::cout << "你的对手是: "; enemy->displayStatus(); while (playerMecha->isAlive() && enemy->isAlive()) { std::cout << "\n--- 你的回合 ---\n"; playerMecha->displayStatus(); enemy->displayStatus(); std::cout << "选择你的技能 (0-" << playerMecha->skills.size()-1 << "): "; int skillChoice; std::cin >> skillChoice; playerMecha->useSkill(skillChoice, *enemy); if (!enemy->isAlive()) { std::cout << "\n*** 你击败了 " << enemy->name << "!胜利! ***" << std::endl; int reward = 100 + enemy->skinBonus * 10; currentPlayer->coins += reward; std::cout << "获得 " << reward << " 金币!" << std::endl; break; } std::cout << "\n--- 敌方回合 ---\n"; int enemySkill = rand() % enemy->skills.size(); enemy->useSkill(enemySkill, *playerMecha); if (!playerMecha->isAlive()) { std::cout << "\n*** 你被 " << enemy->name << " 击败了... ***" << std::endl; break; } } delete enemy; std::cout << "----- 战斗结束 -----\n"; }};
int main() { MechGame game; game.start(); return 0; }
-
最近活动
This person is lazy and didn't join any contests or homework. -
最近编写的题解