狼人杀c++代码

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
#define cls system("cls")
#define sp Sleep
#define rd rand
#define ef else if
#define pe system("pause")
#define ct cout 
void pd(int s[],int n){
	if(s[n]==1)ct<<"杀手";ef(s[n]==2)ct<<"警察";
	ef(s[n]==3)ct<<"平民";ef(s[n]==4)ct<<"狙击手";
	ef(s[n]==5)ct<<"医生";
	puts("");
}
void brc1(){
	srand(time(0));
	int a,b=20,i,j=0,k,l=0,m[21],n=rd()%20+1,p=0,s[21]={0}
	,w,d,e,f=0,g=1,lr,tp[21]={0},yy[21]={0},y=2,c=0,kk;
	ct<<"你是"<<n<<"号\n正在分配身份\n";
	sp(1500);
	for(i=1;i<21;i++)m[i]=1;
	for(i=1;i<21;i++)do{
		a=rd()%5+1;
		if(a==1&&l<4)l++,s[i]=1;ef(a==2&&w<4)w++,s[i]=2;
		ef(a==4&&p<2)p++,s[i]=4;ef(a==3&&j<9)j++,s[i]=3;
		ef(a==5&&!c)c++,s[i]=5;
	}while(s[i]==0);
	ct<<"你的身份是";
	pd(s,n);
	ct<<"游戏将在3秒后开始\n";
	sp(3000);
	do{
		bool f1=0,f2=0;
		lr=0;
		ct<<"第"<<g<<"晚开始\n";
		for(i=1;i<21;i++){
			if(i==n&&m[n]==1){
				if(s[n]==1){
					for(k=1;k<21;k++)if(m[k]==1&&s[k]!=1)ct<<k<<' ';
					ct<<"\n你选择杀掉\n";
					cin>>a;
					kk=a;
					ct<<"\n杀手杀了"<<a<<"号";
					pd(s,a);
					b--;
				}ef(s[n]==2){
					for(k=1;k<21;k++)if(m[k]==1&&s[i]!=2)ct<<k<<' ';
					ct<<"\n你选择查验谁的身份\n";
					cin>>a;
					if(s[a]==1){
						ct<<a<<"号是杀手,请注意\n";
						sp(1000);
					}ef(s[a]==4){
						ct<<a<<"号是狙击手,请注意\n";
						sp(1000);	
					}else ct<<a<<"号是平民\n";
				}ef(s[n]==4){
					for(k=1;k<21;k++)if(m[k]==1&&s[i]!=4)ct<<k<<' ';
					ct<<"\n你选择杀掉\n";
					cin>>a;m[a]=0;
					ct<<"\n狙击手杀了"<<a<<"号";
					pd(s,a);
					b--;
				}
			}ef(s[i]==1&&m[i]==1&&s[n]!=1&&!f1){
				f1=1;
				do a=rd()%20+1;while(a==i||m[a]==0||s[a]==1);
				ct<<"杀手杀掉了"<<a<<"号";
				pd(s,a);
				kk=a;
				b--;
			}ef(s[i]==2&&m[i]==1&&s[n]!=2&&!f2){
				f2=1;
				if(f==0||m[f]==0){
					do a=rd()%20+1;while(a==i||m[a]==0);
					if(s[a]==1)yy[a]=1;ef(s[a]==3)yy[a]=3;
				}
			}ef(s[i]==1&&m[i]==1){
				do a=rd()%20+1;while(a==i||m[a]==0);
				ct<<"狙击手杀掉了"<<a<<"号";
				pd(s,a);
				m[a]=0;
				b--;
			}ef(s[i]==5){
				f=0;
				while(f==0){
					a=rand()%2+1;
					if(a==1&&y>0){
						y--;
						f=1; 
						int a;
						do a=rand()%15+1;while(a==i||m[a]==0);
						m[a]=0;
						cout<<"医生针死了"<<b<<"号"; 
						pd(s,a);
						b--;
					}ef(a==2&&g>1&&y>0){
						y--;
						f=1; 
						kk=0;
						b++;
						cout<<"医生救活了"<<kk<<"号\n";
						m[a]=1;
					}else break;		
				}
			}
		}
		if(s[n]==4){
			cout<<"\n你选择 1.杀 还是 2.救\n";
			f=0;
			while(f==0){
				cin>>a;
				if(a==1&&y){
					y--;
					f=1; 
					for(k=1;k<21;k++)if(m[k]==1&&k!=n)ct<<k<<' ';
					cin>>a;
					pd(s,a);
					m[a]=0;
					b--; 
				}ef(a==2&&y>0){
					y--;
					f=1; 
					kk=0;
					b++;
				}else cout<<"针剂不足\n"; 
			}
		}
		m[kk]=0;
		sp(1000);
		int p[21]={0};
		ct<<"第"<<g<<"晚结束\n\n";
		if(m[n]==0){
			ct<<"你已经>>死<<了";
			break;
		}
		ct<<"存活:\n ";
		for(i=1;i<21;i++)if(m[i]==1)ct<<i<<' ';
		ct<<"\n请投票....\n";
		for(i=1;i<21;i++){
			if(i==n&&m[n]==1){
				ct<<"你选择投几号\n";
				cin>>a;
				p[a]++;
				ct<<"\n"<<i<<"->"<<a<<'\n';
				if(s[a]==3)tp[a]=i;
			}ef(m[i]==1){				
				do a=rd()%20+1;while(m[a]==0||a==i);
				p[a]++;
				ct<<i<<"->"<<a<<'\n';
			}
		}
		pe;ct<<"投票情况:\n";
		for(i=1;i<21;i++)if(m[i]==1)ct<<i<<"号票数:"<<p[i]<<'\n';
		e=-100;
		for(i=1;i<21;i++)if(p[i]>e)d=i,e=p[i];
		m[d]=0;
		ct<<d<<"死了\nta的身份是";
		b--;
		pd(s,d);
		g++;
		if(s[n]!=1)for(i=1;i<21;i++)if(s[i]==1&&m[i]==1)lr=1;
		ef(s[n]==1&&b==2)lr=0;
		pe;
	}while(m[n]==1&&b>1&&lr);
	ct<<"\n\n\n游戏结束\n";	
	for(i=1;i<21;i++){
		ct<<i<<"号的身份是:";
		pd(s,i);
		if(m[i])cout<<"存活\n";else cout<<"死亡\n";
	}
}
int main(){
	cout<<"1.20人模式(医生,警察,狙击手,平民,杀手)\n";
	int a=getch();
	if(a=='1')brc1();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值