随机说话闪电赛季代码


```cpp
#include<windows.h>
using namespace std;
mt19937 ran(time(0));
/*辅助变量区:
没事别动*/
int flag=0,flag2=0,fangsiz,dongsiz,mingsiz,xingsiz,fucisiz,flagsd,flaggr,lstming,flagfc,flagfs,flagpi,dengdai=500,dadeng=700,liansiz;
int chouhen[100000],nai[100000],gan[100000],lei[100000],si[100000],now[100000],pai[100000];
/*词库区:
1. 要添加词直接在数组中补充
2. 特殊的,如果名词和形容词中都有“我们”,则名词库中的“我们”应放在第一个*/
string fang[]={"女厕所","童话","传说","原神","机房","卧室","厕所","餐桌","丁子博","破中学","阿里巴巴","天安门","热带雨林","考场"};//地点
string dong[]={"穿上","闯入","斗败","开动","斗败","杀死","进入","变成","盯着","歌颂","奴役"};//动词
string ming[]={"我们","蓝精灵","格格巫","老太婆","比基尼","王一乐","丁子博","肖子卓","键盘","丁一宸","奶龙","张培楠","傻鸟","跳跳哥"};//名词
string yuan[100000];
string xing[]={"我们","招笑","可爱的","没母的","美味的","狗日的","匮乏的","爆炸的","稀有的","甘甜的","匆忙的","努力的","唐氏"};//形容词
string fuci[]={"自由自在地","善良勇敢地","齐心合力","活蹦乱跳地","来回摇摆地","狼心狗肺地","反复不停地","大快人心地","一不小心","开着小米苏7","忍不住","用力"};//副词
/*随机抽词函数区:
核心部分!*/
string sdi(){
	return fang[ran()%fangsiz];
}
string sdo(){
	return dong[ran()%dongsiz];
}
string smi(){
	if(flagpi==1){
		int x=ran()%(mingsiz);
		while(ming[x]=="尸体"){
			x=ran()%(mingsiz);
		}
		lstming=x;
		lei[now[x]]++;
		return ming[x];
	}
	if(flagfs==1){
		flagfs=0;
		for(int i=0;i<mingsiz;i++){
			if(ming[i]=="尸体"){
				string t=""; 
				int x=ran()%(mingsiz);
				while(ming[x]=="尸体"){
					x=ran()%(mingsiz);
				}
				ming[i]=yuan[i];
				if(now[i]!=i){
					t=ming[i]+"找回密码!";
					now[i]=i;
				}
				nai[now[x]]++;
				return t+ming[i]+"被"+ming[x]+"复活了!";
			} 
		}
		return "看来这是个平安夜";
	}
	if(flagfc==1){
		for(int i=0;i<mingsiz;i++){
			if(chouhen[now[i]]){
				int x=chouhen[now[i]];
				if(ming[x]!=yuan[x]){
					return "怨念找不到宿主";
				}
				string t=ming[x];
				si[x]++;
				lei[now[i]]++;
				ming[x]="尸体";
				chouhen[now[i]]=0;
				chouhen[x]=0;
				return yuan[i]+"的怨念杀死了"+t; 
			}
		}
		return "仇恨的火未能掀起是非"; 
	}
	if(flaggr==1){
		int x=ran()%mingsiz;
		if(ming[x]=="尸体"){
			return "感染未能进一步扩散";
		}
		for(int i=0;i<mingsiz;i++){
			if(ming[i]=="尸体"){
				ming[i]=ming[now[x]];
				now[i]=now[x];
				gan[now[x]]++;
				chouhen[i]=0;
				return ming[now[x]]+"感染了"+yuan[i]+"的尸体"; 
			}
		}
		return ming[x]+"发动感染,但没有载体!";
	}
	if(flagsd){
		int x=ran()%mingsiz;
		string t=ming[x];
		while(ming[x]=="尸体"){
			x=ran()%mingsiz;
			t=ming[x];
		}
		chouhen[x]=lstming;
		si[x]++;
		ming[x]="尸体";
		return t;		
	}
	if(!flag2){
		int x=ran()%mingsiz;
		while(ming[x]=="尸体"){
			x=ran()%mingsiz;
		}
		return ming[x];
	}
	else{
		int x=1+ran()%(mingsiz-1);
		flag2=0;
		while(ming[x]=="尸体"){
			x=1+ran()%(mingsiz-1);
		}
		return ming[1+ran()%(mingsiz-1)];
	}
}
string sxi(){
	flag2=0;
	int t=ran()%xingsiz;
	if(t==0) flag2=1;
	return xing[t];
}
string sfu(){
	return fuci[ran()%fucisiz];
}
void szh(int no){
	if(!(ran()%no)){
		cout<<sxi();
		Sleep(dengdai);
	}
	cout<<smi();
	Sleep(dengdai);
}
void swe(int no){
	flag=1;
	if(!(ran()%no)){
		cout<<"像"<<smi()<<"似的";
		Sleep(dengdai);
		if(!(ran()%2)){
			flag=0;
			return;
		}
	}
	if(!(ran()%no)){
		cout<<"进入"<<sdi()<<"中";
		Sleep(dengdai);
		if(!(ran()%2)){
			flag=0;
			return;
		}
	}
	if(!(ran()%no)){
		cout<<sfu();
		Sleep(dengdai);
	}
	cout<<sdo();
	Sleep(dengdai);
}
void sbi(int no){
	if(!(ran()%no)){
		cout<<sxi();
		Sleep(dengdai);
	}
	cout<<smi();
	Sleep(dengdai);
}
/*从句区:
和词库区一样,但要注意一一对应哦!*/
string lian1[]={"可惜"          ,"在"    ,"只要"    ,"只有"  ,"因为"  ,"在"}; 
string lian2[]={",不然Ta就不会","时,Ta",",Ta就会","Ta才能","所以Ta","后,不久Ta就"}; 
void cka(int op){
	cout<<lian1[op];
}
void cji(int op){
	cout<<lian2[op];
}
int fen(int x){
	return nai[x]*40+gan[x]*50+lei[x]*30-si[x]*50;
}
bool cmp(int x,int y){
	return fen(x)>fen(y);
}
int main(){
/*解除freopen的注释会让代码直接输出文件,保存到哪里输出到哪里*/
//	freopen("蓝精灵知波.txt","w",stdout); 
	fangsiz=sizeof(fang)/8,dongsiz=sizeof(dong)/8,mingsiz=sizeof(ming)/8,xingsiz=sizeof(xing)/8,fucisiz=sizeof(fuci)/8,liansiz=sizeof(lian1)/8;
	for(int i=0;i<mingsiz;i++) yuan[i]=ming[i],now[i]=i;
/*参数区:
1. 目前只有从句频率是在控制台中输入的,其他参数需要在这里改源码
2. shandian:触发闪电概率,ganran:触发感染概率,fuchou:死后怨念复仇概率,fusu:复活概率
3. 当变量的数值为 x 时,一回合触发对应事件的概率为 1/x */
	cout<<"请输入从句频率,输入越大,频率越低:";
	int shandian=4,ganran=4,fuchou=5,fusu=6;
	int cong;
	cin>>cong;
	int T=10000;//最多运行回合,防卡死
	while(T--){
/*若不需要随机PVP功能,就把这条注释到下一条注释的代码全注释掉。*/
        freopen("记分板.txt","w",stdout);//这里的代码会在你的电脑上生成记分板,保存到哪里输出到哪里
		for(int i=0;i<mingsiz;i++){
			pai[i]=i;
			cout<<yuan[i]<<"奶了"<<nai[i]<<"个人,感染了"<<gan[i]<<"个人,劈死了"<<lei[i]<<"个人死了"<<si[i]<<"次\n"; 
		}
		sort(pai,pai+mingsiz,cmp);
		for(int i=0;i<mingsiz;i++){
			cout<<"#"<<i+1<<" "<<yuan[pai[i]]<<"得分:"<<fen(pai[i])<<'\n';
		}
		freopen("CON","w",stdout);
		if(!(ran()%fusu)){
			flagfs=1;
			cout<<smi()<<endl;
			flagfs=0;
			Sleep(dadeng);
			continue;
		}
		if(!(ran()%ganran)){
			flaggr=1;
			cout<<smi()<<endl;
			flaggr=0;
			Sleep(dadeng);
			continue;
		}
		if(!(ran()%shandian)){
			flagpi=1;
			cout<<smi();
			flagpi=0;
			flagsd=1;
			cout<<"用闪电在"<<sdi()<<"劈死了"<<smi()<<'\n';
			flagsd=0;
			Sleep(dadeng);
			continue;
		}
		if(!(ran()%fuchou)){
			flagfc=1;
			cout<<smi()<<'\n';
			flagfc=0;
			Sleep(dadeng);
			continue;
		}
/*对注释到这里就可以了*/
		if(!(ran()%cong)){
			int r=ran()%liansiz;
			cka(r);
			szh(5);swe(5);
			if(flag)sbi(5);
			cji(r);
			swe(2);
			if(flag)sbi(3);
			cout<<endl;
			continue;
		}
		szh(2);swe(2);
		if(flag)sbi(3);
		cout<<endl;
	}
	return 0;
}
posted @ 2025-11-23 07:18  LEWISAK  阅读(5)  评论(0)    收藏  举报