c++小游戏
  • 板块灌水区
  • 楼主Dxuhaoyang
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/9/23 22:02
  • 上次更新2024/10/3 14:30:51
查看原帖
c++小游戏
1082488
Dxuhaoyang楼主2024/9/23 22:02

求各位蒟蒻大佬们改进 不喜勿喷~~

#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;
}
2024/9/23 22:02
加载中...