求各位蒟蒻大佬们改进
不喜勿喷~~
#include<bits/stdc++.h> //版本:1.5.8
#include<windows.h> //作者QQ名:海底的鱼
using namespace std;
bool bs_10=false;
bool bs_6=false;
int n,s;
int kill=0;
int _pai;
string ss[13]={"","存活","存活","存活","存活","存活","存活","存活","存活","存活","存活","存活","存活"};
string zs[13]={"","狼人","守卫","狼人","狼人","女巫","猎人","狼人","预言家","村民","猎人","村民","守卫"};
void l6(){
for(int i=1;i<=5 and (n<1 or n>12);i++){
system("cls");//清空
printf("别闹了!好好选:");
cin>>n;
}
return;
}
void zjm(){
printf("我是%d号位\n",n);
printf("1号位 2号位 3号位 4号位 5号位 6号位\n");
for(int i=1;i<=6;i++){
cout<<ss[i];
if(ss[i]=="已死亡"){
cout<<" ";
}
else{
cout<<" ";
}
}
cout<<endl<<endl;
printf("7号位 8号位 9号位 10号位 11号位 12号位\n");
for(int i=7;i<=9;i++){
cout<<ss[i];
if(ss[i]=="已死亡"){
cout<<" ";
}
else{
cout<<" ";
}
}
for(int i=10;i<=12;i++){
cout<<ss[i];
if(ss[i]=="已死亡"){
cout<<" ";
}
else{
cout<<" ";
}
}
cout<<endl<<endl;
return;
}
void sf(int s){
cout<<zs[n];
if(zs[n]=="狼人"){
ss[1]="狼人";
ss[3]="狼人";
ss[4]="狼人";
ss[7]="狼人";
}
Sleep(2050);
return;
}
int h;
char c;
void hy(){
kill=0;
system("cls");//清空
zjm();
printf("守卫请睁眼~~~\n");
Sleep(1500);
printf("请问你要守护谁?\n");
Sleep(1500);
if(zs[n]=="守卫" and ss[n]!="已死亡"){
printf("->");
cin>>h;
}
else{
printf("……\n");
}
Sleep(1500);
printf("守卫请闭眼~~~\n");
Sleep(1500);
system("cls");//清空
zjm();
printf("狼人请睁眼~~~\n");
Sleep(1500);
printf("请问你要刀(杀)谁?\n");
Sleep(1500);
if(zs[n]=="狼人" and ss[n]!="已死亡"){
printf("->");
cin>>h;
if(h==6){
bs_6=true;
}
if(h==10){
bs_10=true;
}
ss[h]="已死亡";
kill++;
}
else{
printf("……\n");
}
Sleep(1500);
printf("狼人请闭眼~~~\n");
Sleep(1500);
system("cls");//清空
zjm();
printf("女巫请睁眼~~~\n");
Sleep(1500);
printf("请问你要使用?\n");
Sleep(1500);
srand(static_cast<unsigned int>(time(0))); // 初始化随机数种子
int random_number = rand() % 12 + 1; // 生成一个1到12之间的随机数
while(ss[random_number]=="已死亡" or random_number==0 or random_number==5 or (ss[5]=="已死亡" and zs[n]=="狼人") or (bs_6==true and random_number==10) or (bs_10==true and random_number==6)){
random_number = rand() % 12 + 1; //避免出现各种 bug
}
kill++;
ss[random_number]="已死亡";
if(random_number==6){
bs_6=true;
}
if(random_number==10){
bs_10=true;
}
if(zs[n]=="女巫" and ss[n]!="已死亡"){
printf("A. 解药 B.毒药");
cout<<endl;
cin>>c;
if(c=='A'){
Sleep(1500);
printf("昨晚%d号位被刀(杀)了,",random_number);
Sleep(1500);
printf("请问你要解救谁?\n ");
cin>>h;
}
else{
Sleep(1500);
printf("请问你要谁毒谁? ");
cin>>h;
ss[h]="已死亡";
}
}
else{
printf("……\n");
}
Sleep(1500);
printf("女巫请闭眼~~~\n");
Sleep(1500);
system("cls");//清空
zjm();
printf("预言家请睁眼~~~\n");
Sleep(1500);
printf("请问你要预言谁的身份?\n");
Sleep(1500);
if(zs[n]=="预言家" and ss[n]!="已死亡"){
cin>>h;
cout<<zs[h];
if(ss[h]!="已死亡"){
ss[h]=zs[h];
}
}
else{
printf("……\n");
}
Sleep(1500);
printf("预言家请闭眼~~~\n");
if(h==random_number and zs[n]=="守卫"){
ss[random_number]="存活";
kill--;
}
Sleep(1500);
system("cls");//清空
zjm();
printf("天亮了\n");
Sleep(1500);
printf("昨晚……");
Sleep(750);
if(kill==0){
printf("是平安夜~~~");
}
Sleep(1750);
system("cls");//清空
zjm();
printf("\n\n");
return;
}
int sl;
int lr;
inline void aa(){
sl=0;
lr=0;
for(int i=1;i<=12;i++){
if(ss[i]!="已死亡"){
sl++;
}
if(ss[i]!="已死亡" and zs[i]=="狼人"){
lr++;
}
}
}
int f=1;
int v[1005]={0};
bool vn=false;
inline void cd(){
system("cls");//清空
system("color 0D");//bug小彩蛋 <应该不会有人触发吧>
printf("-----------------------恭喜你触发了隐藏关卡-----------------------\n");
printf("1+1=");
int sb;
cin>>sb;
if(sb!=2){
printf("你的智商是250,绝对很皮[偷笑]\n");
Sleep(250);
printf("我再问你一遍:");
Sleep(500);
system("cls");//清空
printf("1+1=");//皮一下很开心
cin>>sb;
if(sb!=2){
cout<<"你,你\n";
printf("不管你了,但作者很想知道你是如何触发的???");
}
else{
printf("作者很想知道你是如何触发的???");
}
}
else{
printf("作者很想知道你是如何触发的???");
}
return;
}
bool bd(int sa,int sb){
if(sa==1 or sa==3 or sa==4 or sa==7){
if(sb==1 or sb==3 or sb==4 or sb==7){
return true;
}
}
else if(sa==2 or sa==12){
if(sb==2 or sb==12){
return true;
}
}
else if(sa==6 or sa==10){
if(sb==6 or sb==10){
return true;
}
}
return false;
}
void tp(){
memset(v,0,sizeof(v));
if((ss[10]=="已死亡" and bs_10==true)or (ss[6]=="已死亡" and bs_6==true)){
if(ss[10]=="已死亡"){
bs_10=false;
}
else if(ss[6]=="已死亡"){
bs_6=false;
}
printf("猎人发动技能,开枪带走了");
if(ss[1]!="已死亡"){
cout<<"1号狼人";
ss[1]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
else if(ss[3]!="已死亡"){
cout<<"3号狼人";
ss[3]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
else if(ss[4]!="已死亡"){
cout<<"4号狼人";
ss[4]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
else if(ss[7]!="已死亡"){
cout<<"7号狼人";
ss[7]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
aa();
if(lr==0){
Sleep(1200);
system("cls");//清空
if(zs[n]!="狼人"){
system("color 0A");
printf("\n\n\n\n---------------------------------好人胜利!-----------------------------------\n\n\n\n");
}
else{
system("color 0C");
printf("\n\n\n\n---------------------------------狼人失败 /_\ -----------------------------------\n\n\n\n");
}
vn=true;
return;
}
}
for(int i=1;i<=12;i++){
srand(static_cast<unsigned int>(time(0))); // 初始化随机数种子
int random_number1 = rand() % 12 + 1; // 生成一个1到12之间的随机数
int j;
if(ss[i]!="已死亡"){
while(ss[(random_number1)]=="已死亡" or random_number1==i or bd(i,random_number1)){
random_number1 = rand() % 12 + 1;
}
if(i!=n){
printf("%d号位把票投给了",i);
if(random_number1=='0'){
cout<<"10号位"<<endl;
v[10]++;
f++;
}
else{
cout<<random_number1<<"号位"<<endl;
v[random_number1]++;
f++;
}
}
else if(i==n){
printf("请问你要把票投给谁?\n");
cin>>j;
printf("%d号位把票投给了%d号位\n",i,j);
v[j]++;
}
Sleep(1500);
}
}
int maxn=0,maxn1=0;
int vi;
for(int i=1;i<=12;i++){
if(v[i]>maxn){
maxn=v[i];
vi=i;
maxn1=0;
}
else if(v[i]==maxn){
maxn1=v[i];
}
}
if((ss[10]=="已死亡" and bs_10==true) or (ss[6]=="已死亡" and bs_6==true)){
if(ss[10]=="已死亡"){
bs_10=false;
}
else if(ss[6]=="已死亡"){
bs_6=false;
}
printf("猎人发动技能,开枪带走了");
if(ss[1]!="已死亡"){
cout<<"1号狼人";
ss[1]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
else if(ss[3]!="已死亡"){
cout<<"3号狼人";
ss[3]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
else if(ss[4]!="已死亡"){
cout<<"4号狼人";
ss[4]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
else if(ss[7]!="已死亡"){
cout<<"7号狼人";
ss[7]= "已死亡";
Sleep(2500);
system("cls");//清空
zjm();
}
aa();
if(lr==0){
Sleep(1200);
system("cls");//清空
if(zs[n]!="狼人"){
system("color 0A");
printf("\n\n\n\n---------------------------------好人胜利!-----------------------------------\n\n\n\n");
}
else{
system("color 0C");
printf("\n\n\n\n---------------------------------狼人失败 /_\ -----------------------------------\n\n\n\n");
}
vn=true;
return;
}
}
if(maxn!=maxn1){
system("cls");//清空
printf("投票结束,%d号位被投票出局",vi);
ss[vi]="已死亡";
Sleep(2250);
system("cls");//清空
Sleep(500);
zjm();
}
else{
printf("本轮平票,游戏继续\n");
Sleep(1750);
system("cls");//清空
zjm();
}
return;
}
int main(){
printf("欢迎来到-狼人杀24版-(12人机版)\n");
printf("由<@你亲爱的小许>研发,免费开放\n");
printf("-------------------------------\n");
printf("请选择你的位置(1~12号位):");
cin>>n;
l6();
if(n<1 or n>12){
printf("你个老6,我真的是服了你了!!!【忍无可忍】\n");
printf("请充值再玩哦~~~");
return 0;
}
system("cls");//清空
printf("自编规则:你不能在大余10人时死亡(猎人除外)\n");
printf("在没有让你输入时,请不要输入按键【非常重要!!!】");
Sleep(3500);
system("cls");//清空
ss[n]=zs[n];
zjm();
printf("\n天黑了……\n");
printf("你的身份是——");
sf(s);
do{
hy();
printf("开始投票->\n");
Sleep(1500);
tp();
if(vn==true){
return 0;
}
Sleep(5000);
aa();
if(lr==0){
system("cls");//清空
if(zs[n]!="狼人"){
system("color 0A");
printf("\n\n\n\n---------------------------------好人胜利!-----------------------------------\n\n\n\n");
}
else{
system("color 0C");
printf("\n\n\n\n--------------------------------- 狼人失败 -----------------------------------\n\n\n\n");
}
Sleep(2000);
return 0;
}
if(lr>=sl){
system("cls");//清空
if(zs[n]=="狼人"){
system("color 0A");
printf("\n\n\n\n---------------------------------狼人胜利!-----------------------------------\n\n\n\n");
}
else{
system("color 0C");
printf("\n\n\n\n--------------------------------- 好人失败 -----------------------------------\n\n\n\n");
}
Sleep(2000);
return 0;
}
if(ss[n]=="已死亡" and sl>=10 and zs[n]!="猎人"){
system("cls");//清空
for(int i=1;i<=10;i++){
system("cls");
for(int j=1;j<i;j++){
cout<<endl;
}
cout<<" ";
printf("你不能在大余10人时死亡");
Sleep(500);
}
system("color 0C");
system("cls");
printf("\n\n\n\n-------------------------------游戏结束-------------------------------\n\n\n\n");
Sleep(250);
return 0;
}
}while(sl>2);
cd();//应该不可能会被触发吧
return 0;
}