我写了一个狼人杀程序(我们学校信息作业),可是有点bug(能过编译),求调
代码:
#include<iostream>
#include<bits/stdc++.h>
#include<windows.h>
#include<cstdlib>
#include<ctime>
#include<cstring>
#include<cstdio>
using namespace std;
//bugs:投票后不会处决
struct orange{ //玩家状态
bool life; //0为活,1为死
bool beidao; //0为没被刀
bool beishouwei; //0为没被守
}player[10];
int shenfen[10]={0,1,1,2,3,4,4}; //1平,2守,3预,4狼
int main()
{
srand(time(0));
Sleep(1000);
cout<<"欢迎使用狼人杀"<<endl;
cout<<"游戏人数:6人 身份:2平民1预言1守卫2狼人"<<endl;
cout<<"具体玩法和角色技能就懒得写了"<<endl;
system("pause");
system("cls");
//随机身份
srand(time(0));
random_shuffle(shenfen+1, shenfen+7);
//领身份
for(int i=1;i<=6;i++){
cout<<"请第"<<i<<"号玩家来到屏幕前领取身份,其他玩家请闭眼"<<endl;
Sleep(1000);
cout<<i<<"号玩家,你的身份是:";
if(shenfen[i]==1)cout<<"平民"<<endl;
if(shenfen[i]==2)cout<<"守卫"<<endl;
if(shenfen[i]==3)cout<<"预言家"<<endl;
if(shenfen[i]==4)cout<<"狼人"<<endl;
system("pause");
system("cls");
}
int nowcm=2,nowsz=2,nowlr=2;
int tim=1,dao,shou,chayan;
int renshu=6;
while((nowcm!=0)&&(nowsz!=0)&&(nowlr!=0))
{
cout<<"第"<<tim<<"天晚上"<<endl;
cout<<"睁眼顺序:狼人-守卫-预言家"<<endl;
cout<<"狼人5秒后睁眼"<<endl;
cout<<"守卫请自己倒数30秒后睁眼"<<endl;
cout<<"预言家请自己倒数45秒后睁眼"<<endl;
cout<<"所有玩家请在1分钟后睁眼"<<endl;
system("pause");
system("cls");
Sleep(2000);
//晚上
system("color 0f"); //屏幕变黑
//狼人讨论,5-20
for(int t=15;t>=1;t--){
Sleep(1000);
cout<<"狼人剩余讨论时间:"<<t<<endl;
}
cout<<"刀谁?(请输入编号)"<<endl;
cin>>dao;
if(dao>=1&&dao<=6&&player[dao].life==0)player[dao].beidao=true;
system("pause");
system("cls");
//守卫思考 25-35
for(int t=10;t>=1;t--){
Sleep(1000);
cout<<"守卫剩余思考时间:"<<t<<endl;
}
cout<<"守谁?(请输入编号)"<<endl;
cin>>shou;
if(shou>=1&&shou<=6&&player[shou].life==0)player[shou].beishouwei=true;
system("pause");
system("cls");
//预言家思考 45-55
for(int t=10;t>=1;t--){
Sleep(1000);
cout<<"预言家剩余思考时间:"<<t<<endl;
}
cout<<"查验谁的身份?(请输入编号)"<<endl;
cin>>chayan;
if(chayan>=1&&chayan<=6&&player[chayan].life==0){
cout<<chayan<<"号玩家的身份为:";
if(shenfen[chayan]==4)cout<<"狼人";
if(shenfen[chayan]==2&&shenfen[chayan]==3)cout<<"神职";
if(shenfen[chayan]==1)cout<<"平民";
system("pause");
system("cls");
}
//被刀
for(int k=1;k<=6;k++){
if(player[dao].beidao=true&&player[dao].life==0){
if(player[shou].beishouwei==false){
player[k].life=1;
renshu--;
if(shenfen[k]==1)nowcm--;
if(shenfen[k]==2&&shenfen[k]==3)nowsz--;
if(shenfen[k]==4)nowlr--;
}
}
}
//白天
tim++;
cout<<"第"<<tim<<"天白天"<<endl;
//已死
cout<<"已死玩家名单:";
for(int i=1;i<=6;i++){
if(player[i].life==1)cout<<i<<"号"<<" ";
}
cout<<endl;
system("color F0"); //屏幕变白
//讨论
string liaotian;
int renshu;
bool zibao=false;
int lunshu=12;
for(int j=1;j<=6&&lunshu!=0;j++){
lunshu--;
if(player[j].life==0){
cout<<"请"<<j<<"号玩家来电脑前与别人交流(如果你是想自爆的狼人,请输入Boom以自爆)"<<endl;
if(player[j].life=0){
cin>>liaotian;
if(liaotian=="Boom"){
player[j].life=1;
cout<<j<<"号是狼人,他自爆了,讨论及放逐环节跳过"<<endl;
renshu--;
system("pause");
system("cls");
}
}
}
}
//投票(未完)
int piao[10]={0};
int fir,sec;
int toupiao,piaomax=-100;
for(int j=1;j<=6;j++){
if(player[j].life==0){
cout<<"请"<<j<<"号玩家来电脑前投票(输入0弃票)"<<endl;
cin>>toupiao;
if(toupiao>=1&&toupiao<=6&&player[toupiao].life==0){
piao[toupiao]++; //票数++
if(piao[toupiao]>piaomax){
sec=fir; //原来最大编号变第二
fir=toupiao; //现在最大编号更新
piaomax=max(piaomax,piao[toupiao]);
}
if(piao[toupiao]==piaomax){
sec=toupiao; //一样就更新第二大编号
}
}
}
}
//处决(未完
if(fir!=sec){
cout<<fir<<"号玩家被驱逐了,他的身份是";
player[fir].life=1; //去世
system("pause");
system("cls");
}
else continue; //平票直接进黑夜
}
if(nowcm==0||nowsz==0)cout<<"狼人胜利!";
else if(nowlr==0)cout<<"好人胜利!";
system("pause");
return 0;
}