• 个人简介

    我的王者荣耀本命是 韩信,王者里搜 暃神之杨 如果你也是玩王者的就领我的礼物🎁吧! #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.
  • 最近编写的题解