c++狼人杀代码,小熊猫c++2.25.1版本可运行(未完善)

、、、cpp

#include<bits/stdc++.h>


#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
using namespace std;
int str[1000];
int player[100];
int pbv[100]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
std::vector<int> generate_unique_randoms(int max_num) {
    std::vector<int> result;
    std::unordered_set<int> uniqueSet;
    
    std::random_device rd;
    std::mt19937 gen(rd()); // 使用Mersenne Twister引擎
    std::uniform_int_distribution<> dis(1, max_num); // 随机数范围在1到max_num之间
    
    while (uniqueSet.size() < max_num) {
        int random_number = dis(gen);
        if (uniqueSet.find(random_number) == uniqueSet.end()) {
            uniqueSet.insert(random_number);
            result.push_back(random_number);
        }
    }
    
    return result;
}
int main() {
    int im=1;
    int wolf=1;
    cout<<"游戏人数至少3人哦"<<endl;
    cout<<"请输入游戏人数:";
    
    int num;
    int p;
    cin>>num;
    p=num;
    while(num<3){
        cout<<"游戏人数至少3人哦"<<endl;//TODO
        cout<<"请输入游戏人数:";
        cin>>num;
    }
    
    std::vector<int> random_numbers = generate_unique_randoms(num);
    // 打印生成的不同随机数
    
    for (const auto &number : random_numbers) {
        player[im]=number;
        im++;
        //std::cout << number << " ";
    }
    
    int qwedcmjivndg;
    for(int i=1;i<im;i++){
        
        //cout<<player[i]<<endl;
        cout<<"输入一个数查看"<<i<<"号玩家的身份";//TODO
        cin>>qwedcmjivndg;
        if(player[i]==1){
            cout<<"你的身份是:狼人"<<endl;
            
        }
        else if(player[i]==2){
            cout<<"你的身份是:猎人"<<endl;
            
        }
        else if(player[i]==3){
            cout<<"你的身份是:预言家"<<endl;
            
        }
        else if(player[i]==4)
        {
            cout<<"你的身份是:女巫"<<endl;
            
        }
        else if(player[i]==5)
        {
            cout<<"你的身份是:平民"<<endl;
            
        }
        cout<<"输入一个数隐藏";
        cin>>qwedcmjivndg;
        system("cls");
    }
    //分配角色
    /*
    int ncl;
    cout<<"狼人请睁眼:请打出你要杀的玩家的编号:";
    cin>>ncl;
    while(ncl>num){
        cout<<"不存在此玩家,请重新输入:";
        cin>>ncl;
    }
    for(int i=0;i<=50;i++){
        cout<<endl;//TODO
    }
    pbv[ncl]=0;
    cout<<"猎人请睁眼:请打出你要射杀的玩家的编号:";
    cin>>ncl;
    for(int i=0;i<=50;i++){
        cout<<endl;//TODO
    }
    while(ncl>num){
        cout<<"不存在此玩家,请重新输入:";
        cin>>ncl;
    }
    for(int i=0;i<=50;i++){
        cout<<endl;//TODO
    }
    pbv[ncl]=0;
    cout<<"预言家请睁眼:请打出你要预言身份的玩家的编号:";
    cin>>ncl;
    while(ncl>num){
        cout<<"不存在此玩家,请重新输入:";
        cin>>ncl;
    }
    if(player[ncl]==1){
        cout<<"bad";
    }
    else
    {
        cout<<"good";
    }
    cout<<"输入一个数隐藏";
    cin>>qwedcmjivndg;
    
    for(int i=0;i<=50;i++){
        cout<<endl;//TODO
    }
    //释放技能环节
    cout<<"天亮了"<<endl;
    cout<<"今晚";
    for(int i=1;i<=num;i++){
        if(pbv[i]==0)
        {
            cout<<i<<",";
            */
            /*
            if(i==1){
                cout<<"狼人";
                
            }
            else if(i==2){
                cout<<"猎人";
                
            }
            else if(i==3){
                cout<<"预言家";
                
            }
            else if(i==4)
            {
                cout<<"女巫";
                
            }
            else if(i==5)
            {
                cout<<"平民";
                
            }
            */
            /*
        }
        
    }
    */
    /*
    cout<<"号玩家被淘汰了"<<endl;
    cout<<"他们的身份是:";
    for(int i=1;i<=num;i++){
        if(pbv[i]==0)
        {
            if(i==1){
                cout<<"狼人";
                
            }
            else if(i==2){
                cout<<"猎人";
                
            }
            else if(i==3){
                cout<<"预言家";
                
            }
            else if(i==4)
            {
                cout<<"女巫";
                
            }
            else if(i==5)
            {
                cout<<"平民";
                
            }
            cout<<",";
        }
    }
    //宣告结果环节
    cout<<endl;
    int sl[1000]={};
    for(int i=1;i<=num;i++){
        cout<<"请"<<i<<"号玩家投票(投玩家序号)";
        cin>>str[i];
        while(str[i]>num){
            cout<<"不存在此玩家";
            cin>>str[i];
        }
        sl[str[i]]++;
    }
    int Min;
    switch (num) {
    case 3:
        Min=max(max(sl[1],sl[2]),sl[3]);
        //TODO
        break;
    case 4:
        Min=max(max(sl[1],sl[2]),max(sl[3],sl[4]));
        //TODO
        break;
    case 5:
        Min=max(max(sl[1],sl[2]),max(max(sl[3],sl[4]),sl[5]));
        //TODO
        break;
    default:
        //TODO
        break;
    }
    int t;
    for(int i=1;i<=num;i++){
        if(sl[i]==Min){
            t=i;
            break;
        }
    }
    cout<<t<<"号玩家淘汰"<<endl;
    cout<<"他的身份是:";
    if(Min==1){
        cout<<"狼人";
        wolf=0;
        p--;
    }
    else if(Min==2){
        cout<<"猎人";
        p--;
    }
    else if(Min==3){
        cout<<"预言家";
        p--;
    }
    else if(Min==4)
    {
        cout<<"女巫";
        p--;
    }
    else if(Min==5)
    {
        cout<<"平民";
        p--;
    }
    cout<<endl<<"剩余玩家人数"<<num<<endl;
    for(int i=1;i<=100;i++){
        sl[i]=0;
    }
    Min=0;
    */
    //
    while (p>2||wolf!=0)
    {
        system("cls");
        int ncl;
        cout<<"狼人请睁眼:请打出你要杀的玩家的编号:";
        cin>>ncl;
        while(ncl>p){
            cout<<"不存在此玩家,请重新输入:";
            cin>>ncl;
        }
        system("cls");
        pbv[ncl]=0;
        cout<<"猎人请睁眼:请打出你要射杀的玩家的编号:";
        cin>>ncl;
        system("cls");
        while(ncl>p){
            cout<<"不存在此玩家,请重新输入:";
            cin>>ncl;
        }
        system("cls");
        pbv[ncl]=0;
        cout<<"预言家请睁眼:请打出你要预言身份的玩家的编号:";
        cin>>ncl;
        while(ncl>p){
            cout<<"不存在此玩家,请重新输入:";
            cin>>ncl;
        }
        if(player[ncl]==1){
            cout<<"bad";
        }
        else
        {
            cout<<"good";
        }
        cout<<"输入一个数隐藏";
        cin>>qwedcmjivndg;
        system("cls");
        //释放技能环节
        cout<<"天亮了"<<endl;
        cout<<"今晚";
        for(int i=1;i<=p;i++){
            if(pbv[i]==0)
            {
                cout<<";"<<i<<",";
                
                if(i==1){
                cout<<"狼人";
                
                }
                else if(i==2){
                cout<<"猎人";
                
                }
                else if(i==3){
                cout<<"预言家";
                
                }
                else if(i==4)
            {
                cout<<"女巫";
                
                }
                else if(i==5)
            {
                cout<<"平民";
                
                }
                
            }
            
        }
        cout<<"号玩家被淘汰了"<<endl;
        /*
        cout<<"他们的身份是:";
        for(int i=1;i<=num;i++){
            if(pbv[i]==0)
            {
                if(i==1){
                    cout<<"狼人";
                    
                }
                else if(i==2){
                    cout<<"猎人";
                    
                }
                else if(i==3){
                    cout<<"预言家";
                    
                }
                else if(i==4)
                {
                    cout<<"女巫";
                    
                }
                else if(i==5)
                {
                    cout<<"平民";
                    
                }
                cout<<",";
            }
        }
        */
        //宣告结果环节
        cout<<endl;
        int sl[1000]={};
        for(int i=1;i<=p;i++){
            cout<<"请"<<i<<"号玩家投票(投玩家序号)";
            cin>>str[i];
            while(str[i]>p){
                cout<<"不存在此玩家";
                cin>>str[i];
            }
            sl[str[i]]++;
        }
        int Min;
        switch (p) {
        case 3:
            Min=max(max(sl[1],sl[2]),sl[3]);
            //TODO
            break;
        case 4:
            Min=max(max(sl[1],sl[2]),max(sl[3],sl[4]));
            //TODO
            break;
        case 5:
            Min=max(max(sl[1],sl[2]),max(max(sl[3],sl[4]),sl[5]));
            //TODO
            break;
        default:
            //TODO
            break;
        }
        int t;
        for(int i=1;i<=p;i++){
            if(sl[i]==Min){
                t=i;
                break;
            }
        }
        int t_t;
        for(int i=1;i<=p;i++){
            if(player[i]==t){
                t_t=i;
            }
        }
        cout<<t_t<<"号玩家淘汰"<<endl;
        cout<<"他的身份是:";
        if(Min==1){
            cout<<"狼人";
            wolf=0;
            p--;
        }
        else if(Min==2){
            cout<<"猎人";
            p--;
        }
        else if(Min==3){
            cout<<"预言家";
            p--;
        }
        else if(Min==4)
        {
            cout<<"女巫";
            p--;
        }
        else if(Min==5)
        {
            cout<<"平民";
            p--;
        }
        cout<<endl<<"剩余玩家人数"<<num<<endl;
    }
    if(wolf==0)
    {
        cout<<"平民胜利!";
    }
    else if(p<=2)
    {
        cout<<"狼胜利!";
    }
    return 0;
}

、、、

如有问题,评论区见

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值