小游戏——狼人杀
直接上代码,请在C++编辑器上使用:(代码很长,1568行,直接复制,已经不必看了,呵呵~)
//本篇文章是一个同学给我的,并非原创哦~
#include<bits/stdc++.h>
using namespace std;
struct IDname
{
int geshu;
string NAME;
};
IDname jue_se[100];
struct ID
{
int num;
bool life;
string name;
int know;
int how;
};
ID player[21];
int n,MY,kill1,kill2;
char a;
bool jieyao=1,duyao=1;
int lieren,shouwei=0;
void init1()
{
jue_se[1].NAME="村民 ";
jue_se[2].NAME="狼人 ";
jue_se[3].NAME="女巫 ";
jue_se[4].NAME="预言家 ";
jue_se[5].NAME="猎人 ";
jue_se[6].NAME="守卫 ";
}
void init2(int nn)
{
switch(nn)
{
case 6:
jue_se[1].geshu=3;
jue_se[2].geshu=2;
jue_se[3].geshu=1;
jue_se[4].geshu=0;
jue_se[5].geshu=0;
jue_se[6].geshu=0;
break;
case 7:
jue_se[1].geshu=3;
jue_se[2].geshu=2;
jue_se[3].geshu=1;
jue_se[4].geshu=1;
jue_se[5].geshu=0;
jue_se[6].geshu=0;
break;
case 8:
jue_se[1].geshu=3;
jue_se[2].geshu=3;
jue_se[3].geshu=1;
jue_se[4].geshu=1;
jue_se[5].geshu=0;
jue_se[6].geshu=0;
break;
case 9:
jue_se[1].geshu=3;
jue_se[2].geshu=3;
jue_se[3].geshu=1;
jue_se[4].geshu=1;
jue_se[5].geshu=1;
jue_se[6].geshu=0;
break;
case 10:
jue_se[1].geshu=4;
jue_se[2].geshu=3;
jue_se[3].geshu=1;
jue_se[4].geshu=1;
jue_se[5].geshu=1;
jue_se[6].geshu=0;
break;
case 11:
jue_se[1].geshu=4;
jue_se[2].geshu=4;
jue_se[3].geshu=1;
jue_se[4].geshu=1;
jue_se[5].geshu=1;
jue_se[6].geshu=0;
break;
case 12:
jue_se[1].geshu=4;
jue_se[2].geshu=4;
jue_se[3].geshu=1;
jue_se[4].geshu=1;
jue_se[5].geshu=1;
jue_se[6].geshu=1;
break;
default:
cout<<"输入错误,再见"<<endl;
exit(0);
break;
}
}
int van[10]={
7,4,6,43,35,1,2,8,20,19};
void init3(int nn)
{
srand(time(0));
Sleep(rand()%44);
int x=10000;
int t=rand();
srand(time(NULL));
int y=van[(rand()%100*van[rand()%10]+t)%10];
if(nn<=6)
x=abs(x*6/y)%3+1;
else if(nn<=8)
x=abs(x*7/y)%4+1;
else if(nn<=11)
x=abs(x*8/y)%5+1;
else if(nn<=14)
x=abs(x*9/y)%6+1;
do
{
if(nn<=6)
x=x%3+1;
else if(nn<=8)
x=x%4+1;
else if(nn<=11)
x=x%5+1;
else if(nn<=14)
x=x%6+1;
if(jue_se[x].geshu>0)
{
player[nn].name=jue_se[x].NAME;
if(player[nn].name=="猎人 ")
lieren=nn;
if(player[nn].name=="守卫 ")
shouwei=nn;
player[nn].life=1;
player[nn].num=nn;
player[nn].know=0;
jue_se[x].geshu--;
player[nn].how=0;
break;
}
}
while(jue_se[x].geshu==0);
}
void printhhh()
{
int cm=0;
int sz=0;
for(int i=1;i<=n;i++)
{
if(player[i].life==0)
continue;
else if(player[i].name=="村民 ")
cm++;
else if(player[i].name=="女巫 "||player[i].name=="预言家 "||player[i].name=="猎人 "||player[i].name=="守卫 ")
sz++;
}
if(sz==0||cm==0)
cout<<"狼人阵营胜利"<<endl;
else
cout<<"好人阵营胜利"<<endl;
for(int i=1;i<=n;i++)
{
cout<<left<<setw(3)<<player[i].num<<": "<<player[i].name<<" ";
if(player[i].life==0)
cout<<"死亡"<<"\t";
else
cout<<"存活"<<"\t";
if(player[i].how==0)
cout<<"最终存活 "<<endl;
else if(player[i].how==1)
cout<<"最终被狼人杀死"<<endl;
else if(player[i].how==2)
cout<<"最终被投票投死"<<endl;
else if(player[i].how==3)
cout<<"最终被女巫毒死"<<endl;
else if(player[i].how==4)
cout<<"最终被猎人射杀"<<endl;
}
system("pause");
system("pause");
system("pause");
}
void print(int day,int ti)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY);
else
SetConsoleTextAttribute(handle,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<"\t\t\t\t第"<<day<<"天 ";
if(ti==0)
cout<<"白天"<<endl;
else
cout<<"夜晚"<<endl;
cout<<"我的位置:"<<MY<<"号"<<endl;
for(int i=1;i<=6;i++)
{
cout<<player[i].num<<"号位 ";
}
cout<<endl;
for(int i=1;i<=6;i++)
{
if(player[i].life==1)
{
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY | FOREGROUND_GREEN);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout<<"存活 ";
}
else
{
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY | FOREGROUND_RED);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
cout<<"已死亡 ";
}
}
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY);
else
SetConsoleTextAttribute(handle,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<endl;
for(int i=1;i<=6;i++)
{
if(player[i].know==0)
cout<<"未知 ";
else if(player[i].know==1)
{
if(player[i].name=="狼人 ")
cout<<"狼人 ";
else
cout<<"好人 ";
}
else if(player[i].know==2)
cout<<player[i].name<<" ";
}
cout<<endl<<endl;
for(int i=7;i<=n;i++)
{
if(i<10)
cout<<player[i].num<<"号位 ";
else
cout<<player[i].num<<"号位 ";
}
cout<<endl;
for(int i=7;i<=n;i++)
{
if(player[i].life==1)
{
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY | FOREGROUND_GREEN);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout<<"存活 ";
}
else
{
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY | FOREGROUND_RED);
else
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
cout<<"已死亡 ";
}
}
if(ti==0)
SetConsoleTextAttribute(handle,BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_INTENSITY);
else
SetConsoleTextAttribute(handle,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
cout<<endl;
for(int i=7;i<=n;i++)
{
if(player[i].know==0)
cout<<"未知 ";
else if(player[i].know==1)
{
if(player[i].name=="狼人 ")
cout<<"狼人 ";
else
cout<<"好人 ";
}
else if(player[i].know==2)
cout<<player[i].name<<" ";
}
cout<<endl<<endl;
}
int shou=