? ? ? ? ? ? ? ?
#include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace std;
const int daytime=0,night=1; int day=0, during_time=daytime, player_number, my_number;
HWND hwnd=GetForegroundWindow();//窗口定义
/*设置颜色*/ const int blue=0,yello=1,red=2,green=3,purple=4,white=5;//颜色常量? void color(int c){ ? ? switch(c) ? ? { ? ? ? ? case red:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);break; ? ? ? ? case green:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);break; ? ? ? ? case yello:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);break; ? ? ? ? case blue:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);break; ? ? ? ? case white:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);break; ? ? ? ? case purple:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_BLUE);break; ? ? } }
/*控制光标在控制台的位置 */ void gotoxy(int x,int y) { ? ? COORD position; ? ? position.X=x; ? ? position.Y=y; ? ? SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position); }
/*初始化窗口*/ void init_Show_Window(){ ? ? system("mode con lines=60 cols=188");//全屏? ? ? ShowWindow(hwnd,SW_MAXIMIZE);//窗口最大化? ? ? DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND); ? ? DrawMenuBar(GetConsoleWindow());//删除×字符? }
/*玩家类*/ const int nvwu=0,cunmin=1,yuyanjia=2,langren=3,lieren=4,shouwei=5,good=6,die=1,life=2; class player{ public: ? ? int type; ? ? int die_or_life; ? ? int how(){ ? ? ? ? return die_or_life; ? ? } ? ? int is_light;//是否已经公布? ? ? int killer; }; player players[1000];
/*转换白天模式*/? void change_daytime(){ ? ? during_time=daytime; ? ? day++; }
/*转换黑夜模式*/ void change_night(){ ? ? during_time=night; }
int nnvwu=0,ncunmin=0,nyuyanjia=0,nlangren=0,nlieren=0,nshouwei=0; int idxnvwu,idxshouwei,idxyuyanjia; /*初始化人数*/ void init_players(){ ? ? int idx_l1=800,idx_l2=800,idx_l3=800; ? ? my_number=rand()%player_number; ? ? for(int i=0;i<player_number;i++){
? ? ? ? players[i].die_or_life=life; ? ? ? ? int t; ? ? ? ? while(true){ ? ? ? ? ? ? t=rand()%(player_number==10||player_number==11 ? 6:player_number==12 ? 7:5); ? ? ? ? ? ? if(t==0){ ? ? ? ? ? ? ? ? if(nnvwu>=1) ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? nnvwu++; ? ? ? ? ? ? ? ? ? ? idxnvwu=i; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? if(t==3){ ? ? ? ? ? ? ? ? if(nlangren>=3) ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if(idx_l1==800) idx_l1=i; ? ? ? ? ? ? ? ? ? ? else if(idx_l2==800) idx_l2=i; ? ? ? ? ? ? ? ? ? ? else idx_l3=i; ? ? ? ? ? ? ? ? ? ? nlangren++; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? if(t==2){ ? ? ? ? ? ? ? ? if(nyuyanjia>=1) ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? idxyuyanjia=i; ? ? ? ? ? ? ? ? ? ? nyuyanjia++; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? if(t==1||t==4){ ? ? ? ? ? ? ? ? if(ncunmin>=(player_number-(player_number==12 ? 6:5))) ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ncunmin++; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? if(t==5){ ? ? ? ? ? ? ? ? if(nlieren>=1) ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? nlieren++; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? if(t==6){ ? ? ? ? ? ? ? ? if(nshouwei>=1) ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? nshouwei++; ? ? ? ? ? ? ? ? ? ? idxshouwei=i; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? players[i].type = (t==4 ? 1:t==5 ? 4:t==6 ? 5:t); ? ? ? ? players[i].killer=214; ? ? ? ? players[i].is_light=0; ? ? } ? ? players[my_number].is_light = 1; ? ? if(players[my_number].type==langren){ ? ? ? ? players[idx_l1].is_light = 1; ? ? ? ? players[idx_l2].is_light = 1; ? ? ?? ? ? ? ? players[idx_l3].is_light = 1; ? ? ?? ? ? } }
/*在屏幕上打印东西*/ void print(){ ? ? gotoxy(0,0); ? ? cout<<"作者:洛谷393864"; ? ? gotoxy(90,0); ? ? if(during_time==night) ? ? ? ? color(red); ? ? else ? ? ? ? color(blue); ? ? printf("第%d天 | ",day); ? ? if(during_time==night) cout<<"黑夜"; ? ? else cout<<"白天";
? ? gotoxy(0,3); ? ? color(blue); ? ? cout<<" 我的号位:"<<my_number+1; ? ? for(int i=0;i<player_number;i++){ ? ? ? ? gotoxy(i*8+1,4); ? ? ? ? color(blue); ? ? ? ? cout<<i+1<<"号位";? ? ? ? ? gotoxy(i*8+1,5); ? ? ? ? if(players[i].how()==die){ ? ? ? ? ? ? color(red); ? ? ? ? ? ? cout<<"死 亡"; ? ? ? ? }else{ ? ? ? ? ? ? color(green); ? ? ? ? ? ? cout<<"存 活"; ? ? ? ? } ? ? ? ? gotoxy(i*8+1,6); ? ? ? ? color(blue); ? ? ? ? if(players[i].is_light){ ? ? ? ? ? ? if(players[i].is_light==1){ ? ? ? ? ? ? ? ? switch(players[i].type){ ? ? ? ? ? ? ? ? ? ? case nvwu: cout<<"女 巫";break; ? ? ? ? ? ? ? ? ? ? case yuyanjia: cout<<"\b预言家";break; ? ? ? ? ? ? ? ? ? ? case cunmin: cout<<"村 民";break; ? ? ? ? ? ? ? ? ? ? case langren:cout<<"狼 人"; break; ? ? ? ? ? ? ? ? ? ? case lieren:cout<<"猎 人"; break;? ? ? ? ? ? ? ? ? ? ? case shouwei:cout<<"守 卫"; break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ?? ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? cout<<"好人"; ? ? ? ? ? ? }
? ? ? ? }else{ ? ? ? ? ? ? cout<<"未知"; ? ? ? ? } ? ? }
}?
/*判断是否结束,没结束返回0 ?好人胜利返回1 ?狼人胜利返回2 ? 平局返回3*/ int is_end(){ ? ? int die_bad=0; ? ? int die_people=0; ? ? int die_god=0; ? ? for(int i=0;i<player_number;i++){ ? ? ? ? if((players[i].type == nvwu || players[i].type == yuyanjia)&&players[i].die_or_life==die) ? ? ? ? ? ? die_god++; ? ? ? ? if(players[i].type == langren && players[i].die_or_life==die) ? ? ? ? ? ? die_bad++; ? ? ? ? if(players[i].type == ncunmin && players[i].die_or_life==die) ? ? ? ? ? ? die_people++; ? ? } ? ? if((die_bad==die_people || die_bad==die_god)&&(die_bad>=nlangren)) ? ? ? ? return 3; ? ? if(die_bad>=nlangren) ? ? ? ? return 1; ? ? if(die_people>=ncunmin||die_god>=(player_number>=10 ? 3:2)) ? ? ? ? return 2; ? ? return 0; } /*b是否在Arr中*/ bool is_include(int arr[],int b,int l){ ? ? for(int i=0;i<l;i++){ ? ? ? ? if(arr[i]==b) ? ? ? ? ?return true; ? ? } ? ? return false; }
/*主函数*/ int main(){ ? ? srand(time(NULL)); ? ? init_Show_Window(); ? ? color(green); ? ? cout<<"欢迎来到狼人杀游戏\t\t\t为了更好的游戏体验,请右键点击上方↑↑,点击\"属性\",点击\"字体\"栏目,将字体修改为宋体或新宋体,将字号改为20\n作者:洛谷393864\n请勿私自转载,违者依法追究法律责任 ?注:10 11 12人局开设猎人 ?12人局开设守卫\n______________________\n"; ? ? cout<<"请输入玩家人数(8-12人):"; ? ? cin>>player_number; ? ? while(player_number<8||player_number>12) ? ? ? ? { cout<<"请重新输入!\n"; cin>>player_number; } ? ? system("cls"); ? ? cout<<"初始化身份中,请稍等."; ? ? for(int i=0;i<6;i++){ ? ? ? ? for(int j=0;j<12;j++){ ? ? ? ? ? ? cout<<"."; ? ? ? ? ? ? Sleep(50); ? ? ? ? } ? ? ?? ? ? ? ? cout<<"\b\b\b\b\b\b\b\b\b\b\b\b ? ? ? ? ? ?\b\b\b\b\b\b\b\b\b\b\b\b"; ? ? } ? ? system("cls");
? ? init_players(); ? ? cout<<"我的号位:"<<my_number+1<<endl ? ? ? ? <<"我的身份:"; ? ? switch(players[my_number].type){ ? ? ? ? case nvwu: cout<<"女巫\n";break; ? ? ? ? case yuyanjia: cout<<"预言家\n";break; ? ? ? ? case cunmin: cout<<"村民\n";break; ? ? ? ? case langren:cout<<"狼人\n";break; ? ? ? ? ? ? case lieren:cout<<"猎人\n"; break; ? ? ? ? ? ? case shouwei:cout<<"守卫\n";break; ? ? } ? ? change_daytime(); ? ? system("pause"); ? ? system("cls"); ? ? cout<<"游戏加载中.";int ppppp=rand()%3+2; ? ? for(int i=0;i<ppppp;i++){ ? ? ? ? for(int j=0;j<6;j++){ ? ? ? ? ? ? cout<<"."; ? ? ? ? ? ? Sleep(rand()%100+150); ? ? ? ? } ? ? ?? ? ? ? ? cout<<"\b\b\b\b\b\b ? ? ?\b\b\b\b\b\b"; ? ? } ?? ? ? print();
? ? while(!is_end()){ ? ? ? ? change_night(); ? ? ? ? system("cls"); ? ? ? ? print(); ? ? ? ? ? ? int langrensha=-1,nvwudu=-1,nvwujiu=-1,shouweishou=-1; ? ? ? ? gotoxy(0,7); ? ? ? ? cout<<"________________________"; ? ? ? ? gotoxy(0,8); ? ? ? ? color(white); ? ? ? ? cout<<"天黑~请闭眼~~~\n"; ? ? ? ? Sleep(1500);? ? ? ? ? if(player_number==12){ ? ? ? ? ? ? /*守卫部分*/ ? ? ? ? ? ? color(blue); ? ? ? ? ? ? cout<<"守卫~请睁眼~~\n"; ? ? ? ? ? ? Sleep(1500); ? ? ? ? ? ? cout<<"你要守护的是?\n"; ? ? ? ? ? ? if(players[my_number].type==shouwei&&players[my_number].die_or_life == life){ ? ? ? ? ? ? ? ? cin>>shouweishou; ? ? ? ? ? ? ? ? while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){ ? ? ? ? ? ? ? ? ? ? cout<<"请重新输入!\n"; ? ? ? ? ? ? ? ? ? ? cin>>shouweishou; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? cout<<"你今晚要守护的是"<<shouweishou<<"号\n"; ? ? ? ? ? ? ? ? Sleep(1500);? ? ? ? ? ? ? ? ? shouweishou--; ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? if(players[idxshouwei].die_or_life == life){ ? ? ? ? ? ? ? ? ? ? shouweishou=rand()%10; ? ? ? ? ? ? ? ? ? ? while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){ ? ? ? ? ? ? ? ? ? ? ? ? shouweishou=rand()%10; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ?? ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? cout<<"守卫请闭眼"<<endl<<endl; ? ? ? ? ? ? Sleep(2000); ? ? ? ? }?
? ? ? ? /*狼人部分*/ ? ? ? ? color(red); ? ? ? ? cout<<"狼人~请睁眼~~~\n"; ? ? ? ? Sleep(1500); ? ? ? ? cout<<"你们今晚要杀~谁~~??\n"; ? ? ? ? if(players[my_number].type==langren&&players[my_number].die_or_life == life){ ? ? ? ? ? ? cin>>langrensha; ? ? ? ? ? ? while(!(langrensha>=1&&langrensha<=player_number&&players[langrensha-1].die_or_life==life)){ ? ? ? ? ? ? ? ? cout<<"请重新输入!\n"; ? ? ? ? ? ? ? ? cin>>langrensha; ? ? ? ? ? ? } ? ? ? ? ? ? cout<<"你们今晚要杀的是"<<langrensha--<<"号\n"; ? ? ? ? ? ? Sleep(3500); ? ? ? ? }else{ ? ? ? ? ? ? while(langrensha==-1 || players[langrensha].die_or_life == die){ ? ? ? ? ? ? ? ? langrensha=rand()%player_number; ? ? ? ? ? ? } ? ? ? ? ? ? Sleep(3000); ? ? ? ? } ? ? ? ? cout<<"狼人请~闭眼~~\n\n"; ? ? ? ? Sleep(3500); ? ? ? ? /*女巫部分*/? ? ? ? ? color(purple); ? ? ? ? cout<<"女巫~~请睁眼~~\n"; ? ? ? ? if(players[my_number].type==nvwu&&players[my_number].die_or_life == life){ ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? cout<<"今晚"<<langrensha+1<<"号死了,你想用解药吗?(1想 / 2不想)\n"; ? ? ? ? ? ? int is_nvwujie=0; ? ? ? ? ? ? cin>>is_nvwujie; ? ? ? ? ? ? while(is_nvwujie!=1&&is_nvwujie!=2){ ? ? ? ? ? ? ? ? cout<<"请重新输入\n"; ? ? ? ? ? ? ? ? cin>>is_nvwujie; ? ? ? ? ? ? }? ? ? ? ? ? ? if(is_nvwujie==1) { ? ? ? ? ? ? ? ? Sleep(1000); ? ? ? ? ? ? ? ? cout<<"已经解救"<<langrensha+1<<"号\n"; ? ? ? ? ? ? ? ? nvwujiu=langrensha; ? ? ? ? ? ? } ? ? ? ? ? ? Sleep(1500); ? ? ? ? ? ? cout<<"你想用毒药吗?(1想 / 2不想)\n"; ? ? ? ? ? ? Sleep(1500); ? ? ? ? ? ? int is_nvwudu=0; ? ? ? ? ? ? cin>>is_nvwudu; ? ? ? ? ? ? while(is_nvwudu!=1&&is_nvwudu!=2){ ? ? ? ? ? ? ? ? cout<<"请重新输入\n"; ? ? ? ? ? ? ? ? cin>>is_nvwudu; ? ? ? ? ? ? } ? ? ?? ? ? ? ? ? ? if(is_nvwudu==1){ ? ? ? ? ? ? ? ? Sleep(1500); ? ? ? ? ? ? ? ? cout<<"你想毒谁?\n";? ? ? ? ? ? ? ? ? cin>>nvwudu; ? ? ? ? ? ? ? ? while(!(nvwudu>=1&&nvwudu<=player_number&&players[nvwudu].die_or_life==life)){ ? ? ? ? ? ? ? ? ? ? cout<<"请重新输入\n"; ? ? ? ? ? ? ? ? ? ? cin>>nvwudu;? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? nvwudu--; ? ? ? ? ? ? ? ? Sleep(1500); ? ? ? ? ? ? ? ? cout<<"已经毒死了"<<nvwudu+1<<"号\n"; ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ?? ? ? ? ? }else{ ? ? ? ? ? ? if(players[idxnvwu].die_or_life == life){ ? ? ? ? ? ? ? ? int is_jiu=rand()%8; ? ? ? ? ? ? ? ? if(is_jiu==0){ ? ? ? ? ? ? ? ? ? ? nvwujiu=langrensha; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? int is_du=rand()%4; ? ? ? ? ? ? ? ? if(is_du==0){ ? ? ? ? ? ? ? ? ? ? int num=rand()%player_number; ? ? ? ? ? ? ? ? ? ? nvwudu=num; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ?? ? ? ? ? ? ? }
? ? ? ? }? ? ? ? ? Sleep(3000); ? ? ? ? cout<<"女巫~请闭眼~~\n\n"; ? ? ? ? /*预言家部分*/ ? ? ? ? Sleep(1500); ? ? ? ? color(green); ? ? ? ? cout<<"预言家~请睁眼~~\n"; ? ? ? ? Sleep(2000); ? ? ? ? if(players[my_number].type==yuyanjia&&players[my_number].die_or_life == life){ ? ? ? ? ? ? cout<<"请问你想查验谁的身份\n"; ? ? ? ? ? ? int p; ? ? ? ? ? ? cin>>p; ? ? ? ? ? ? while(!(p>=1&&p<=player_number)){ ? ? ? ? ? ? ? ? cout<<"请重新输入!\n"; ? ? ? ? ? ? ? ? cin>>p; ? ? ? ? ? ? } ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? cout<<p<<"号的身份是——"; ? ? ? ? ? ? Sleep(1000); ? ? ? ? ? ? if(players[p-1].type == langren){ ? ? ? ? ? ? ? ? cout<<"狼人\n"; ? ? ? ? ? ? ? ? players[p-1].is_light = 1; ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? cout<<"好人\n"; ? ? ? ? ? ? ? ? players[p-1].is_light = 2; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? cout<<"预言家~~请闭眼~~\n"; ? ? ? ? Sleep(2000); ? ? ? ? change_daytime();? ? ? ? ? system("cls"); ? ? ? ? print();? ? ? ? ? gotoxy(0,7); ? ? ? ? cout<<"________________________\n"; ? ? ? ? Sleep(3000); ? ? ? ? color(white); ? ? ? ? cout<<"天亮了\n"; ? ? ? ? Sleep(2000); ? ? ? ? gotoxy(0,9); ? ? ? ? cout<<"昨晚"; ? ? ? ? bool is_die_lieren=false; ? ? ? ? int idx_lieren=-1; ? ? ? ? if(langrensha==nvwujiu||langrensha==shouweishou){ ? ? ? ? ? ? if(nvwudu!=-1){ ? ? ? ? ? ? ? ? cout<<nvwudu+1<<"号"<<"死了\n"; ? ? ? ? ? ? ? ? players[nvwudu].killer = nvwu; ? ? ? ? ? ? ? ? players[nvwudu].die_or_life = die; ? ? ? ? ? ? ? ? if(players[nvwudu].type == lieren){ ? ? ? ? ? ? ? ? ? ? is_die_lieren=true; ? ? ? ? ? ? ? ? ? ? idx_lieren=nvwudu; ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? ? ? cout<<"是平安夜\n"; ? ? ? ? }else{ ? ? ? ? ? ? cout<<langrensha+1<<"号"; ? ? ? ? ? ? if(nvwudu!=langrensha&&nvwudu!=-1){ ? ? ? ? ? ? ? ? if(shouweishou==nvwudu)? ? ? ? ? ? ? ? ? ? ? goto PPP1; ? ? ? ? ? ? ? ? cout<<"和"<<nvwudu+1<<"号"; ? ? ? ? ? ? ? ? players[nvwudu].die_or_life = die; ? ? ? ? ? ? ? ? players[nvwudu].killer = nvwu; ? ? ? ? ? ? ? ? if(players[nvwudu].type == lieren){ ? ? ? ? ? ? ? ? ? ? is_die_lieren=true; ? ? ? ? ? ? ? ? ? ? idx_lieren=nvwudu; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }? ? ? ? ? ? ? PPP1: ? ? ? ? ? ? ? ? cout<<"死了\n"; ? ? ? ? ? ? players[langrensha].die_or_life = die; ? ? ? ? ? ? players[langrensha].killer = langren; ? ? ? ? ? ? if(players[langrensha].type == lieren){ ? ? ? ? ? ? ? ? is_die_lieren=true; ? ? ? ? ? ? ? ? idx_lieren=langrensha; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? Sleep(2000); ? ? ? ? int lierendai=-1; ? ? ? ? if(is_die_lieren){ ? ? ? ? ? ? cout<<idx_lieren+1<<"号是猎人\n";
? ? ? ? ? ? players[idx_lieren].is_light = 1; ? ? ? ? ? ? Sleep(1000); ? ? ? ? ? ? if(idx_lieren==my_number){ ? ? ? ? ? ? ? ? cout<<"你想带走几号?\n"; ? ? ? ? ? ? ? ? cin>>lierendai; ? ? ? ? ? ? ? ? while(!(lierendai>=1&&lierendai<=player_number&&players[lierendai].die_or_life==life)){ ? ? ? ? ? ? ? ? ? ? cout<<"请重新输入!\n"; ? ? ? ? ? ? ? ? ? ? cin>>lierendai; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? lierendai--; ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? lierendai=rand()%player_number; ? ? ? ? ? ? ? ? while(players[lierendai].die_or_life == die){ ? ? ? ? ? ? ? ? ? ? lierendai=rand()%player_number; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? cout<<"猎人选择带走"<<lierendai+1<<"号\n"; ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? players[lierendai].die_or_life = die; ? ? ? ? } ? ? ? ? system("cls"); ? ? ? ? print();
? ? ? ? int tong[100]={0},cannot[100]={0}; memset(cannot,-1,sizeof(cannot)); ? ? ? ? gotoxy(0,7); ? ? ? ? color(blue); ? ? ? ? cout<<"________________________\n"; ? ? ? ? color(white); ? ? ? ? cout<<"下面进入投票环节\n"; ? ? ? ? Sleep(2000); ? ? ? ? TOUPIAO: ? ? ? ? for(int i=0;i<player_number;i++){ ? ? ? ? ? ? if(players[i].die_or_life == life&&!is_include(cannot,i,player_number)){ ? ? ? ? ? ? ? ? if(i==my_number){ ? ? ? ? ? ? ? ? ? ? cout<<"你要投几号?\n"; ? ? ? ? ? ? ? ? ? ? int n; ? ? ? ? ? ? ? ? ? ? cin>>n; ? ? ? ? ? ? ? ? ? ? while(!(n>=1&&n<=player_number&&!is_include(cannot,n-1,player_number))){ ? ? ? ? ? ? ? ? ? ? ? ? cout<<"请重新输入!\n"; ? ? ? ? ? ? ? ? ? ? ? ? cin>>n; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? ? ? ? ? cout<<setw(2)<<my_number+1<<"号投了"<<setw(2)<<n<<"号\n"; ? ? ? ? ? ? ? ? ? ? tong[n-1]++; ? ? ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? ? ? int t=-1; ? ? ? ? ? ? ? ? ? ? while(t==-1 || players[t].die_or_life == die || t==i){ ? ? ? ? ? ? ? ? ? ? ? ? t=rand()%player_number; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? cout<<setw(2)<<i+1<<"号"<<"投了"<<setw(2)<<t+1<<"号\n"; ? ? ? ? ? ? ? ? ? ? tong[t]++; ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? Sleep(rand()%1000+1000); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? int idx_max=-1,maxn=-1; ? ? ? ? for(int i=0;i<player_number;i++) ? ? ? ? ? ? if(maxn<tong[i]) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? maxn=tong[i]; ? ? ? ? ? ? ? ? idx_max=i; ? ? ? ? ? ? } ? ? ? ? cout<<idx_max+1<<"号有"<<maxn<<"张票,出局\n"; ? ? ? ? Sleep(4000); ? ? ? ? players[idx_max].die_or_life = die; ? ? ? ? players[idx_max].killer = good; ? ? ? ? lierendai=-1; ? ? ? ? if(players[idx_max].type==lieren){ ? ? ? ? ? ? cout<<idx_max+1<<"号是猎人\n"; ? ? ? ? ? ? players[idx_max].is_light = 1; ? ? ? ? ? ? Sleep(1000); ? ? ? ? ? ? if(idx_max==my_number){ ? ? ? ? ? ? ? ? cout<<"你想带走几号?\n"; ? ? ? ? ? ? ? ? cin>>lierendai; ? ? ? ? ? ? ? ? while(!(lierendai>=1&&lierendai<=player_number)){ ? ? ? ? ? ? ? ? ? ? cout<<"请重新输入!\n"; ? ? ? ? ? ? ? ? ? ? cin>>lierendai; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? lierendai--; ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? ? lierendai=rand()%player_number; ? ? ? ? ? ? ? ? while(players[lierendai].die_or_life == die){ ? ? ? ? ? ? ? ? ? ? lierendai=rand()%player_number; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? cout<<"猎人选择带走"<<lierendai+1<<"号\n"; ? ? ? ? ? ? Sleep(2000); ? ? ? ? ? ? players[lierendai].killer = lieren; ? ? ? ? ? ? players[lierendai].die_or_life = die; ? ? ? ? } ? ? ? ? system("cls"); ? ? ? ? print();?
? ? }
? ? system("cls"); ? ? switch(is_end()){ ? ? ? ? case 1:cout<<"好人胜利\n\n"; break; ? ? ? ? case 2:cout<<"狼人胜利\n\n"; break; ? ? ? ? case 3:cout<<"本局平局\n\n"; break; ? ? } ? ? for(int i=0;i<player_number;i++){ ? ? ? ? cout<<i+1<<"号位:\t"; ? ? ? ? switch(players[i].type){ ? ? ? ? ? ? case nvwu: cout<<"女巫\t";break; ? ? ? ? ? ? case yuyanjia: cout<<"预言家\t";break; ? ? ? ? ? ? case cunmin: cout<<"村民\t";break; ? ? ? ? ? ? case langren:cout<<"狼人\t";break; ? ? ? ? ? ? case lieren:cout<<"猎人\t"; break; ? ? ? ? ? ? ? ? case shouwei:cout<<"守卫\t";break; ? ? ? ? ? ? }? ? ? ? ? cout<<"最终"; ? ? ? ? switch(players[i].killer){ ? ? ? ? ? ? case nvwu:cout<<"被女巫毒死\n"; break; ? ? ? ? ? ? case langren:cout<<"被狼人杀死\n"; break; ? ? ? ? ? ? case good:cout<<"被投票出局\n"; break; ? ? ? ? ? ? case lieren:cout<<"被猎人带走\n";break; ? ? ? ? ? ? default :cout<<"存活\n"; ? ? ? ? } ? ? ? ? cout<<endl; ? ? } ? ? system("pause"); ? ? return 0; }
|