C++第十八课:选择结构-实例练习(下)--- 狼人杀

发布于:2025-08-15 ⋅ 阅读:(13) ⋅ 点赞:(0)

一. 简易狼人杀选人系统

 使用随机数给自己随机选择一个角色:平民1,平民2,平民3,狼人 
 请注意一局只能是:平民1,平民2,平民3,狼人

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main() {
    // 初始化随机数种子
    srand(time(0));
    
    // 生成1-4的随机数
    int roleNumber = rand() % 4 + 1;
    
    string role;
    
    // 根据随机数分配角色
    switch(roleNumber) {
        case 1:
            role = "平民1";
            break;
        case 2:
            role = "平民2";
            break;
        case 3:
            role = "平民3";
            break;
        case 4:
            role = "狼人";
            break;
    }
    
    // 输出结果
    cout << "你的角色是:" << role << endl;
    
    return 0;
}

二. 简易狼人身份系统

第一夜:选择杀人对象
第一日:使用随机数,swith淘汰对象(被淘汰则游戏失败结束)
第二夜:只剩下一个平民,直接杀死游戏胜利结束

角色:狼人(我),平民1,平民2,平民3

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main() {
    srand(time(0));
    
    cout << "我是狼人" << endl;
    cout << "第一夜:" << endl;
    cout << "请选择你的杀人对象:【平民1,平民2,平民3】:";
    string kill_1;
    cin >> kill_1;
    
    int ko_1;
    if(kill_1 == "平民1") {
        cout << "平民1死亡,黑夜结束,进入白天" << endl;
        // 从平民2、平民3和狼人中随机淘汰一个
        ko_1 = rand() % 3 + 2; // 生成2-4的随机数(2:平民2, 3:平民3, 4:狼人)
        switch(ko_1) {
            case 2: 
                cout << "平民2被淘汰" << endl;
                // 进入第二夜
                cout << "第二夜: 必须杀死平民3" << endl;
                cout << "平民3死亡,进入第二天" << endl;
                // 第二日只有你和被杀死的平民3,自动胜利
                cout << "你成功存活到最后!游戏胜利!" << endl;
                break;
            case 3: 
                cout << "平民3被淘汰" << endl;
                // 进入第二夜
                cout << "第二夜: 必须杀死平民2" << endl;
                cout << "平民2死亡,进入第二天" << endl;
                // 第二日只有你和被杀死的平民2,自动胜利
                cout << "你成功存活到最后!游戏胜利!" << endl;
                break;
            case 4: 
                cout << "我(狼人)被淘汰,游戏失败结束" << endl;
                break;
        }
    }
    else if(kill_1 == "平民2") {
        cout << "平民2死亡,黑夜结束,进入白天" << endl;
        // 从平民1、平民3和狼人中随机淘汰一个
        ko_1 = (rand() % 2 == 0) ? 1 : (rand() % 2 + 3); // 1:平民1, 3:平民3, 4:狼人
        switch(ko_1) {
            case 1: 
                cout << "平民1被淘汰" << endl;
                // 进入第二夜
                cout << "第二夜: 必须杀死平民3" << endl;
                cout << "平民3死亡,进入第二天" << endl;
                cout << "你成功存活到最后!游戏胜利!" << endl;
                break;
            case 3: 
                cout << "平民3被淘汰" << endl;
                // 进入第二夜
                cout << "第二夜: 必须杀死平民1" << endl;
                cout << "平民1死亡,进入第二天" << endl;
                cout << "你成功存活到最后!游戏胜利!" << endl;
                break;
            case 4: 
                cout << "我(狼人)被淘汰,游戏失败结束" << endl;
                break;
        }
    }
    else if(kill_1 == "平民3") {
        cout << "平民3死亡,黑夜结束,进入白天" << endl;
        // 从平民1、平民2和狼人中随机淘汰一个
        ko_1 = rand() % 3 + 1; // 生成1-3的随机数(1:平民1, 2:平民2, 4:狼人)
        if(ko_1 == 3) ko_1 = 4; // 把3转换为狼人
        switch(ko_1) {
            case 1: 
                cout << "平民1被淘汰" << endl;
                // 进入第二夜
                cout << "第二夜: 必须杀死平民2" << endl;
                cout << "平民2死亡,进入第二天" << endl;
                cout << "你成功存活到最后!游戏胜利!" << endl;
                break;
            case 2: 
                cout << "平民2被淘汰" << endl;
                // 进入第二夜
                cout << "第二夜: 必须杀死平民1" << endl;
                cout << "平民1死亡,进入第二天" << endl;
                cout << "你成功存活到最后!游戏胜利!" << endl;
                break;
            case 4: 
                cout << "我(狼人)被淘汰,游戏失败结束" << endl;
                break;
        }
    }
    else {
        cout << "输入错误" << endl;
    }
    
    return 0;
}

三. 简易平民身份系统

预备:使用随机数赋予 平民1-3其中一个为狼人

第一夜:使用随机数淘汰 真平民对象 (我被淘汰则游戏失败结束)
第一日:选择投票对象 (淘汰狼人则成功且游戏结束) 
第二夜:使用随机数淘汰 真平民对象 (被淘汰则游戏失败结束)
第二日:选择投票对象 (淘汰狼人则成功且游戏结束:没有淘汰狼人则失败且游戏结束)

角色:平民1,平民2,平民3,平民4(我)【平民1-3其中一个狼人】

狼人可自刀:狼人存活到第二日,直接胜利

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
    srand(time(0));
    
    // 随机确定狼人身份(1-3中的一个)
    int wolf = rand() % 3 + 1;
    cout << "你的身份是:平民4" << endl;
    
    // 第一夜
    cout << "\n=== 第一夜 ===" << endl;
    int night1 = rand() % 4 + 1; // 随机淘汰1人(1-4)
    
    if (night1 == 4) {
        cout << "你被杀害!游戏失败!" << endl;
        return 0;
    } else {
        cout << "平民" << night1 << "被杀害" << endl;
        if (night1 == wolf) {
            cout << "狼人(平民" << wolf << ")被杀害,平民胜利!" << endl;
            return 0;  // 游戏立即结束
        }
    }
    
    // 第一日
    cout << "\n=== 第一日 ===" << endl;
    cout << "请投票选择怀疑对象(1-3): ";
    int vote1;
    cin >> vote1;
    
    if (vote1 == wolf) {
        cout << "投票正确!狼人(平民" << wolf << ")被淘汰,平民胜利!" << endl;
        return 0;
    } else {
        cout << "平民" << vote1 << "被投票淘汰" << endl;
    }
    
    // 第二夜 - 确保不重复杀害
    cout << "\n=== 第二夜 ===" << endl;
    int night2;
    night2 = rand() % 3 + 1; // 先尝试1-3
    if (night2 == night1 || night2 == vote1) {
        night2 = 4; // 如果冲突就选择4(玩家)
    }
    
    if (night2 == 4) {
        cout << "你被杀害!游戏失败!" << endl;
        return 0;
    } else {
        cout << "平民" << night2 << "被杀害" << endl;
        if (night2 == wolf) {
            cout << "狼人(平民" << wolf << ")被杀害,平民胜利!" << endl;
            return 0;
        }
    }
    
    // 第二日(狼人存活到第二日,直接胜利)
    cout << "\n=== 第二日 ===" << endl;
    cout << "狼人(平民" << wolf << ")存活到最后,狼人胜利!" << endl;
    
    return 0;
}

狼人不可自刀:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main() {
    srand(time(0));
    
    // 随机确定狼人身份(1-3中的一个)
    int wolf = rand() % 3 + 1;
    cout << "你的身份是:平民4" << endl;
    
    // 第一夜
    cout << "\n=== 第一夜 ===" << endl;
    int night1 = rand() % 3 + 1; // 先随机选择1-3
    
    // 确保狼人不会自刀
    if(night1 == wolf) {
        // 如果选到狼人,就改为选择其他平民
        if(wolf == 1) {
            night1 = (rand() % 2) + 2; // 选择2或3
        } else if(wolf == 2) {
            night1 = (rand() % 2) == 0 ? 1 : 3;
        } else { // wolf == 3
            night1 = (rand() % 2) + 1; // 选择1或2
        }
    }
    
    cout << "平民" << night1 << "被杀害" << endl;
    
    // 第一日
    cout << "\n=== 第一日 ===" << endl;
    cout << "请投票选择怀疑对象(1-3): ";
    int vote1;
    cin >> vote1;
    
    if(vote1 == wolf) {
        cout << "投票正确!狼人被淘汰!游戏胜利!" << endl;
        return 0;
    } else {
        cout << "平民" << vote1 << "被投票淘汰" << endl;
    }
    
    // 第二夜 - 不使用循环确保不重复杀害且狼人不自刀
    cout << "\n=== 第二夜 ===" << endl;
    int night2;
    
    // 确定剩余存活的平民
    if(night1 != 1 && vote1 != 1 && wolf != 1) {
        night2 = 1;
    } else if(night1 != 2 && vote1 != 2 && wolf != 2) {
        night2 = 2;
    } else {
        night2 = 3;
    }
    
    // 如果所有平民都死了,就只能杀玩家
    if((night1 == 1 || vote1 == 1 || wolf == 1) &&
       (night1 == 2 || vote1 == 2 || wolf == 2) &&
       (night1 == 3 || vote1 == 3 || wolf == 3)) {
        night2 = 4;
    }
    
    if(night2 == 4) {
        cout << "你被杀害!游戏失败!" << endl;
        return 0;
    } else {
        cout << "平民" << night2 << "被杀害" << endl;
    }
    
    // 第二日
    cout << "\n=== 第二日 ===" << endl;
    cout << "请投票选择怀疑对象(剩余存活的平民): ";
    int vote2;
    cin >> vote2;
    
    if(vote2 == wolf) {
        cout << "投票正确!狼人被淘汰!游戏胜利!" << endl;
    } else {
        cout << "投票错误!狼人存活!游戏失败!" << endl;
    }
    
    return 0;
}