随机说话乒乓球赛季代码

#include<bits/stdc++.h>
#include<windows.h>
#define int long long
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1 : 0)
using namespace std;
mt19937 ran(time(0));
/*辅助变量区:
没事别动*/
int flag=0,flag2=0,tuiflag,juanflag,xueflag,flagfs,zkflag,jiyuflag;
int fangsiz,dongsiz,mingsiz,xingsiz,fucisiz,liansiz;
int dengdai=100,dadeng=200,shijiandeng=400;
int yudengdai=0,yudadeng=0,yushijiandeng=300;
int manji=7;
/*词库区:
1. 要添加词直接在数组中补充
2. 特殊的,如果名词和形容词中都有“我们”,则名词库中的“我们”应放在第一个*/
string fang[]={"女厕所","童话","传说","原神","机房","卧室","厕所","餐桌","丁子博","破中学","阿里巴巴","天安门","热带雨林","考场"};//地点
string dong[]={"穿上","闯入","斗败","开动","斗败","杀死","进入","变成","盯着","歌颂","奴役"};//动词
string ming[]={"我们","蓝精灵","格格巫","老太婆","比基尼","王一乐","丁子博","肖子卓","键盘","丁一宸","奶龙","张培楠","傻鸟","跳跳哥","张轩程","李君泽"};//名词
string xing[]={"我们","招笑","可爱的","没母的","美味的","狗日的","匮乏的","爆炸的","稀有的","甘甜的","匆忙的","努力的","唐氏"};//形容词
string fuci[]={"自由自在地","善良勇敢地","齐心合力","活蹦乱跳地","来回摇摆地","狼心狗肺地","反复不停地","大快人心地","一不小心","开着小米苏7","忍不住","用力"};//副词
string yuan[100000];
int tdengdai=dengdai,tdadeng=dadeng,tshijiandeng=shijiandeng;
void panduan();
/*随机抽词函数区:
核心部分!*/
string sdi(){
	return fang[ran()%fangsiz];
}
string sdo(){
	return dong[ran()%dongsiz];
}
string sxi(){
	flag2=0;
	int t=ran()%xingsiz;
	if(t==0) flag2=1;
	return xing[t];
}
string sfu(){
	return fuci[ran()%fucisiz];
}
string smi();
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 smi(){
	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)];
	}
}
int nengli[100][100][2],qiuji[100],bufa[100],ying[100];
string zhaoshi[10]=  {"攻球","搓球","拉球"},zf[10]={"正手","反手"};
string fazhaoshi[10]={"平击","下旋"};
int cuowu[10]={1,0,1},xuanz[10]={0,1,-1},yi[10]={1,0};
int xuanze(int x,int xuan){
	return ran()%3;
}
int paodao(int x){
	return (ran()%10<=bufa[x]);
}
bool zuoyou(int x,int zfs){
	return ((ran()%3==0)+yi[zfs])%2;
}
bool shi(int x,int zhao,int zfs){
	return (ran()%manji>nengli[x][zhao][zfs]);
}
bool yiqiu(int x,int y,int flag){//1x0y,1正0反 
	int xwei=ran()%2,ywei=ran()%2,xuan=0,wei;
	int zfs=ran()%2,fa=ran()%2;
	cout<<ming[x]+"发了"+zf[zfs]+zhaoshi[fa]<<'\n';
	xuan+=xuanz[fa];
	wei=zuoyou(x,zfs);
	int now=x,nxt=y,nowei=xwei,nxtwei=ywei;
	Sleep(shijiandeng);
	while(1){
		swap(now,nxt);
		swap(nowei,nxtwei);
		int zhao=xuanze(now,xuan),zfs=ran()%2;
		cout<<ming[now]+"决定用"+zf[zfs]+zhaoshi[zhao]+"接球!\n";
		if(nowei!=wei){
			if(!paodao(x)){
				cout<<ming[now]+"没跑到球的位置!";
				return (now!=x);
			}
			nowei=wei;
		}
		if(shi(now,zhao,zfs)){
			cout<<ming[now]+"接球失误!";
			return (now!=x);
		}
		wei=zuoyou(now,zfs);
		if(xuan==1){
			if(zhao==0){
				cout<<"球下网了!";
				return (now!=x); 
			}
			xuan=xuanz[zhao];
		}
		if(xuan==0){
			xuan=xuanz[zhao];
		}
		if(xuan==-1){
			if(zhao==1){
				cout<<"球飞高了!\n";
				Sleep(shijiandeng);
				cout<<ming[nxt]+"决定用扣球接球!\n";
				Sleep(shijiandeng);
				if(!flag&&ran()%5==0){
					int t=ran()%2;
					if(t){
						cout<<"强烈的扣球打伤了"+ming[now]+"的惯用手!";
						for(int i=0;i<3;i++){
							nengli[now][i][0]=max(0ll,min(2ll,nengli[now][i][0]-2));
							nengli[now][i][1]=max(0ll,min(2ll,nengli[now][i][1]-2));
						}
					}
					else{
						cout<<"强烈的扣球打伤了"+ming[now]+"的腿!"; 
						bufa[now]/=2;
					}
				}
				if(ran()%3){
					cout<<"扣球成功!";
					return (now!=x);
				}
				else{
					cout<<"可惜扣飞了。。。";
					return (now==x);
				}
			}
		}
		Sleep(shijiandeng);
	}
}
string zhengsai(int x=-1,int y=-1){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
	cout<<"速度已重置!\n";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
	dengdai=tdengdai;
	dadeng=tdadeng;
	shijiandeng=tshijiandeng;
	Sleep(1000);
	int flagg=1;
	if(x==-1){
		flagg=0;
		x=ran()%mingsiz;
		while(ming[x]=="尸体"){
			x=ran()%mingsiz;
		}
	}
	if(y==-1){
		y=ran()%mingsiz;
		while(ming[y]=="尸体"||x==y){
			y=ran()%mingsiz;
		}
	}
	cout<<ming[x]+"在"+sdi()+"向"+ming[y]+"发起挑战(正赛11球5球3胜)!\n";
	int xdafen=0,ydafen=0,danow=y,danxt=x,dawho=0;
	for(int i=1;i<=5;i++){
		if(xdafen==3||ydafen==3){
			break;
		}
		swap(danow,danxt);
		dawho^=1;
		cout<<"--------------------第"<<i<<"局--------------------\n";
		panduan(); 
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
		cout<<"目前大比分:"<<ming[x]<<":"<<ming[y]<<' '<<xdafen<<":"<<ydafen<<"\n\n";
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		panduan();
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		int xfen=0,yfen=0,flag=0,sheng=2,now=danow,nxt=danxt,who=dawho;
		while(max(xfen,yfen)<11||abs(xfen-yfen)<=1){
			if(sheng==0){
				who^=1;
				swap(now,nxt);
				if(flag) sheng=1;
				else sheng=2;
			}
			if(flag==0&&(xfen==10&&yfen==10)){
				cout<<"陷入加赛!!!!!!\n";
				Sleep(shijiandeng);
				Sleep(shijiandeng);
				Sleep(shijiandeng);
				Sleep(shijiandeng);
				Sleep(shijiandeng);
				flag=1;
			}
			if(yiqiu(now,nxt,flagg)){
				if(who) xfen++;
				else yfen++;
			}
			else{
				if(who) yfen++;
				else xfen++;
			}
			cout<<'\n';
			cout<<"\n目前比分:"<<ming[x]<<":"<<ming[y]<<' '<<xfen<<":"<<yfen<<'\n';
			sheng--;
			Sleep(shijiandeng);
			Sleep(shijiandeng);
			Sleep(shijiandeng);
			panduan(); 
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
		}
		cout<<xfen<<":"<<yfen<<"结束!\n\n\n";
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		Sleep(shijiandeng);
		if(xfen>yfen){
			xdafen++;
		}
		else{
			ydafen++;
		}
	} 
	if(xdafen==3){
		ying[x]+=5;
		cout<<"\n"+ming[x]+"大获全胜!";
	}
	else{
		ying[y]+=5;
		cout<<"\n"+ming[x]+"惨败而归……";
	}
	cout<<"最终大比分:"<<xdafen<<":"<<ydafen<<'\n';
	Sleep(shijiandeng);
	Sleep(shijiandeng);
	Sleep(shijiandeng);
	Sleep(shijiandeng);
	Sleep(shijiandeng);
	Sleep(shijiandeng);
	Sleep(shijiandeng);
	return "";
}
void panduan(){
	if(KEY_DOWN('F')){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
		cout<<"请输入想要对决的两位成员:";
		int x=-114,y=-114;
		string mingx,mingy;
		cin>>mingx>>mingy;
		for(int i=0;i<mingsiz;i++){
			if(ming[i]==mingx){
				x=i;
			}
			if(ming[i]==mingy){
				y=i;
			}
		}
		if(x==-114&&y==-114){
			cout<<"输入不合法!\n";
		}
		else{
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
			zhengsai(x,y);
		}
	} 
	if(KEY_DOWN('W')){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
		cout<<"启动超载!\n";
		dengdai=0;
		dadeng=0;
		shijiandeng=0;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		Sleep(1000);
	}
	if(KEY_DOWN('R')){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
		cout<<"暂停...\n";
		string sb="";cin>>sb;
		cout<<"继续运行!\n";
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
	}
	if(KEY_DOWN('T')){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
		cin>>dengdai>>dadeng>>shijiandeng;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		Sleep(1000);
	}
	if(KEY_DOWN('E')){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
		cout<<"速度已重置!\n";
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		dengdai=tdengdai;
		dadeng=tdadeng;
		shijiandeng=tshijiandeng;
		Sleep(1000);
	}
	if(KEY_DOWN('Q')){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
		cout<<"已启用预设速度!\n";
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		dengdai=yudengdai;
		dadeng=yudadeng;
		shijiandeng=yushijiandeng;
		Sleep(1000);
	}
}
string yesai(){
	int x=ran()%mingsiz;
	while(ming[x]=="尸体"){
		x=ran()%mingsiz;
	}
	int y=ran()%mingsiz;
	while(ming[y]=="尸体"||x==y){
		y=ran()%mingsiz;
	}
	cout<<ming[x]+"在"+sdi()+"向"+ming[y]+"发起挑战!\n";
	Sleep(shijiandeng);
	if(yiqiu(x,y,0)){
		ying[x]++;
		cout<<"\n"+ming[x]+"大获全胜!";
	}
	else{
		ying[y]++;
		cout<<"\n"+ming[x]+"惨败而归……";
	}
	return "";
}
string lianxi(){
	int x=ran()%mingsiz;
	while(ming[x]=="尸体"){
		x=ran()%mingsiz;
	}
	int t=ran()%3,t1=ran()%2,lidu=ran()%3+1;
	nengli[x][t][t1]+=lidu;
	cout<<ming[x]+"在"+sdi()+"偷偷练习"+zf[t1]+zhaoshi[t]<<lidu<<"小时";
	return "!";
}
string paobu(){
	int x=ran()%mingsiz;
	while(ming[x]=="尸体"){
		x=ran()%mingsiz;
	}
	int lidu=ran()%3+1;
	bufa[x]+=lidu;
	cout<<ming[x]+"在"+sdi()+"跑圈"<<lidu<<"小时";
	return "!";
}
string xiuxi(){
	int x=ran()%mingsiz;
	while(ming[x]=="尸体"){
		x=ran()%mingsiz;
	}
	cout<<ming[x]+"因为长期休息开始遗忘技能了!";
	bufa[x]/=2;
	if(ran()%3==0){
		bufa[x]=0;
	}
	for(int i=0;i<3;i++){
		if(ran()%3==0){
			nengli[x][i][0]=0;
			nengli[x][i][1]=0;
		}
		nengli[x][i][0]/=2;
		nengli[x][i][1]/=2;
	}
	return "";
}
/*从句区:
和词库区一样,但要注意一一对应哦!*/
string lian1[]={"可惜"          ,"在"    ,"只要"    ,"只有"  ,"因为"  ,"在"}; 
string lian2[]={",不然Ta就不会","时,Ta",",Ta就会","Ta才能","所以Ta","后,不久Ta就"}; 
void cka(int op){
	cout<<lian1[op];
}
void cji(int op){
	cout<<lian2[op];
}
signed main(){
/*解除freopen的注释会让代码直接输出文件,保存到哪里输出到哪里*/
 
//	freopen("蓝精灵知波.txt","w",stdout); 
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
	fangsiz=sizeof(fang)/8,dongsiz=sizeof(dong)/8,mingsiz=sizeof(ming)/8,xingsiz=sizeof(xing)/8,fucisiz=sizeof(fuci)/8,liansiz=sizeof(lian1)/8;
	cout<<"快捷键:\n Q:使用预设速度\n W:炒鸡加速\n E:重置为最初速度。\n R:暂停(随便打个什么字母后enter继续)\n T:输入速度。\n" ;
	for(int i=0;i<mingsiz;i++) yuan[i]=ming[i];
/*参数区:
1. 目前只有从句频率是在控制台中输入的,其他参数需要在这里改源码
2. 当变量的数值为 x 时,一回合触发对应事件的概率为 1/x */
	cout<<"请输入从句频率,输入越大,频率越低:";
	int cong,lian=3,sai=10,pao=3,dasai=300,xiu=50;
	cin>>cong;
	long long T=1e18;//最多运行回合,防卡死
	while(T--){
		panduan();
		freopen("记分板.txt","w",stdout);//这里的代码会在你的电脑上生成记分板,保存到哪里输出到哪里
//		freopen("蓝精灵知波.txt","w",stdout); 
		for(int i=0;i<mingsiz;i++){
			bufa[i]=min(bufa[i],10ll);
			for(int j=0;j<3;j++){
				nengli[i][j][0]=min(manji,nengli[i][j][0]);
				nengli[i][j][1]=min(manji,nengli[i][j][1]);
			}
			cout<<ming[i]<<":\n";
			cout<<"   赢了"<<ying[i]<<"局\n";
			cout<<"   步伐灵活度:"<<bufa[i]<<"/10\n";
			cout<<"   反手:\n"<<"     攻:"<<nengli[i][0][0]<<"  搓:"<<nengli[i][1][0]<<"  拉:"<<nengli[i][2][0]<<'\n';
			cout<<"   正手:\n"<<"     攻:"<<nengli[i][0][1]<<"  搓:"<<nengli[i][1][1]<<"  拉:"<<nengli[i][2][1]<<'\n';
		}
		freopen("CON","w",stdout);
		if(!(ran()%lian)){
			cout<<lianxi()<<'\n';
			Sleep(shijiandeng);
		}
		panduan();
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		if(!(ran()%xiu)){
			cout<<xiuxi()<<'\n';
			Sleep(shijiandeng);
			Sleep(shijiandeng);
			Sleep(shijiandeng);
			Sleep(shijiandeng);
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		panduan();
		if(!(ran()%pao)){
			cout<<paobu()<<'\n';
			Sleep(shijiandeng);
		}
		panduan();
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
		if(!(ran()%sai)){
			cout<<yesai()<<'\n';
			Sleep(shijiandeng);
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
		if(!(ran()%dasai)){
			cout<<zhengsai()<<'\n';
			Sleep(shijiandeng);
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
		panduan();
		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);
			Sleep(dadeng);
			cout<<'\n';
		}
		panduan();
//		szh(2);swe(2);
//		if(flag)sbi(3);
//		cout<<'\n';
//		Sleep(dadeng);
	}
	return 0;
}
/*
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |	FOREGROUND_GREEN | FOREGROUND_BLUE);
*/
posted @ 2025-11-23 07:13  LEWISAK  阅读(3)  评论(0)    收藏  举报