• 个人简介

    你妈周一能不能放过这一次......

    #include #include #include #include #include #include #include

    using namespace std;

    // 卡牌角色结构体 struct Card { string name; int health; int attack; int defense;

    // 构造函数
    Card(string n, int h, int a, int d) : name(n), health(h), attack(a), defense(d) {}
    

    };

    // 游戏类 class CardGame { private: vector cardLibrary; // 卡牌库 Card playerCard; Card computerCard; bool playerTurnFirst;

    public: CardGame() : playerCard("", 0, 0, 0), computerCard("", 0, 0, 0), playerTurnFirst(true) {

        // 初始化随机数种子
        srand(time(0));
        
        // 初始化卡牌库
        initializeCardLibrary();
        
        // 随机选择玩家和电脑的卡牌
        selectRandomCards();
        
        // 随机决定谁先手
        playerTurnFirst = (rand() % 2 == 0);
    }
    
    // 初始化卡牌库
    void initializeCardLibrary() {
        cardLibrary.push_back(Card("勇士", 100, 30, 20));
        cardLibrary.push_back(Card("法师", 80, 25, 15));
        cardLibrary.push_back(Card("骑士", 120, 20, 30));
        cardLibrary.push_back(Card("兽人", 90, 35, 15));
        cardLibrary.push_back(Card("亡灵", 70, 40, 10));
        cardLibrary.push_back(Card("巨人", 150, 15, 25));
        cardLibrary.push_back(Card("精灵", 85, 28, 18));
        cardLibrary.push_back(Card("刺客", 75, 45, 12));
        cardLibrary.push_back(Card("牧师", 95, 22, 25));
        cardLibrary.push_back(Card("龙族", 130, 35, 30));
    }
    
    // 随机选择卡牌
    void selectRandomCards() {
        // 确保玩家和电脑的卡牌不同
        int playerIndex = rand() % cardLibrary.size();
        int computerIndex;
        
        do {
            computerIndex = rand() % cardLibrary.size();
        } while (computerIndex == playerIndex);
        
        playerCard = cardLibrary[playerIndex];
        computerCard = cardLibrary[computerIndex];
    }
    
    // 显示卡牌状态
    void displayCardStatus(const Card& card, bool isPlayer) {
        string owner = isPlayer ? "玩家" : "电脑";
        cout << owner << "卡牌: " << card.name 
             << " [生命:" << card.health 
             << ", 攻击:" << card.attack 
             << ", 防御:" << card.defense << "]" << endl;
    }
    
    // 显示双方卡牌状态
    void displayBothCards() {
        cout << "\n======= 当前状态 =======" << endl;
        displayCardStatus(playerCard, true);
        displayCardStatus(computerCard, false);
        cout << "========================" << endl;
    }
    
    // 攻击技能
    void attackSkill(Card& attacker, Card& defender) {
        int damage = attacker.attack - defender.defense;
        if (damage < 0) damage = 0; // 确保伤害不为负数
        
        defender.health -= damage;
        cout << attacker.name << " 对 " << defender.name << " 造成了 " << damage << " 点伤害!" << endl;
    }
    
    // 防御增加技能
    void defenseBoostSkill(Card& card) {
        int boost = 10 + rand() % 11; // 增加10-20点防御
        card.defense += boost;
        cout << card.name << " 的防御增加了 " << boost << " 点!" << endl;
    }
    
    // 攻击增加技能
    void attackBoostSkill(Card& card) {
        int boost = 10 + rand() % 11; // 增加10-20点攻击
        card.attack += boost;
        cout << card.name << " 的攻击增加了 " << boost << " 点!" << endl;
    }
    
    // 释放魔法技能
    void magicSkill(Card& attacker, Card& defender) {
        int damage = 25 + rand() % 26; // 造成25-50点固定伤害
        defender.health -= damage;
        cout << attacker.name << " 对 " << defender.name << " 释放魔法,造成了 " << damage << " 点伤害!" << endl;
    }
    
    // 玩家回合
    void playerTurn() {
        cout << "\n=== 你的回合 ===" << endl;
        
        // 选择技能
        cout << "选择技能: 1.攻击 2.防御增加 3.攻击增加 4.释放魔法: ";
        int skill;
        cin >> skill;
        
        // 清除输入缓冲区
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        
        // 执行技能
        switch (skill) {
            case 1:
                attackSkill(playerCard, computerCard);
                break;
            case 2:
                defenseBoostSkill(playerCard);
                break;
            case 3:
                attackBoostSkill(playerCard);
                break;
            case 4:
                magicSkill(playerCard, computerCard);
                break;
            default:
                cout << "无效技能选择! 本次回合跳过。" << endl;
                break;
        }
    }
    
    // 电脑回合
    void computerTurn() {
        cout << "\n=== 电脑回合 ===" << endl;
        
        // 简单AI: 根据情况选择技能
        int skill;
        
        // 如果电脑血量低,倾向于增加防御或攻击
        if (computerCard.health < 50) {
            if (computerCard.defense < playerCard.attack) {
                skill = 2; // 增加防御
            } else {
                skill = (rand() % 2 == 0) ? 1 : 4; // 攻击或魔法
            }
        } 
        // 如果玩家血量低,倾向于直接攻击
        else if (playerCard.health < 40) {
            skill = (rand() % 2 == 0) ? 1 : 4; // 攻击或魔法
        }
        // 其他情况随机选择
        else {
            skill = 1 + rand() % 4;
        }
        
        // 执行技能
        switch (skill) {
            case 1:
                attackSkill(computerCard, playerCard);
                break;
            case 2:
                defenseBoostSkill(computerCard);
                break;
            case 3:
                attackBoostSkill(computerCard);
                break;
            case 4:
                magicSkill(computerCard, playerCard);
                break;
        }
    }
    
    // 检查游戏是否结束
    bool isGameOver() {
        return playerCard.health <= 0 || computerCard.health <= 0;
    }
    
    // 显示游戏结果
    void displayResult() {
        cout << "\n======= 游戏结束 =======" << endl;
        
        if (playerCard.health <= 0 && computerCard.health <= 0) {
            cout << "平局! 双方同归于尽!" << endl;
        } else if (playerCard.health <= 0) {
            cout << "你输了! " << computerCard.name << "获得了胜利!" << endl;
        } else {
            cout << "你赢了! " << playerCard.name << "获得了胜利!" << endl;
        }
        
        cout << "==========================" << endl;
    }
    
    // 运行游戏
    void run() {
        cout << "欢迎来到卡牌对战游戏!" << endl;
        cout << "系统已随机为你和电脑分配了卡牌" << endl;
        
        displayBothCards();
        
        if (playerTurnFirst) {
            cout << "你先手!" << endl;
        } else {
            cout << "电脑先手!" << endl;
        }
        
        // 游戏主循环
        while (!isGameOver()) {
            if (playerTurnFirst) {
                playerTurn();
                if (isGameOver()) break;
                computerTurn();
            } else {
                computerTurn();
                if (isGameOver()) break;
                playerTurn();
            }
            
            displayBothCards();
        }
        
        displayResult();
    }
    

    };

    // 主函数 int main() { CardGame game; game.run();

    return 0;
    

    }

  • 最近活动