点球大战(BUG已修复)

#include<bits/stdc++.h> 
#include<conio.h>
using namespace std;
int som=0,wom=0,lom=0;
int dqdz(){
	srand(time(0));
	char m,mp;
	int db=0,df=0,j;
	int s=5;
	int mz=0,ml=0,mr=0;
	som++;
	for(int i=1;i<=s;i++)
	{
		if(db+s-i<df)
		{
		cout<<"机器人获胜!";
		lom++;
		return 0;
		}
		else if(df+s-i<db)
		{
			cout<<"玩家获胜!";
			wom++;
			return 0;
		}
	cout<<"输入L向左罚,输入R向右罚,输入M向中间罚"<<endl;
	cin>>m;
	if(m!='L'&&m!='R'&&m!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		continue;
	}
	int jp=rand()%3+1;
	if(jp==1)
	{
		cout<<"机器人扑向了左边"<<endl; 
		if(m=='L')
		{
			int ss=rand()%5;
			if(ss!=1)
			cout<<"很遗憾,您的点球被扑出"<<endl;
			else
			{
				cout<<"您罚进了点球!"<<endl;
			db++; 
			}
			
		}
		else {
			cout<<"您罚进了点球!"<<endl;
			db++; 
			
		}
	} 
	else if(jp==2)
	{
		cout<<"机器人扑向了中间"<<endl; 
		if(m=='M')
		{
			int ss=rand()%5;
			if(ss!=1)
			cout<<"很遗憾,您的点球被扑出"<<endl;
			else
			{
				cout<<"您罚进了点球!"<<endl;
			db++; 
			}
			
		}
		else {
			cout<<"您罚进了点球!"<<endl;
			db++; 
			
		}
	} 
	else if(jp==3)
	{
		cout<<"机器人扑向了右边"<<endl; 
		if(m=='R')
		{
			int ss=rand()%5;
			if(ss!=1)
			cout<<"很遗憾,您的点球被扑出"<<endl;
			else
			{
				cout<<"您罚进了点球!"<<endl;
			db++; 
			}
			
		}
		else {
			cout<<"您罚进了点球!"<<endl;
			db++; 
			
		}
	} 
	//JIQISFHMX
	j=rand()%3+1;
	cout<<"您要往哪边扑?(输入L向左扑,输入R向右扑,输入M站着不动)"<<endl;
	cin>>mp;
	if(j==1)
	{
		cout<<"机器人选择往左罚"<<endl;
		if(mp=='L')
		{
			int sss=rand()%5;
			if(sss!=1)
			{
				cout<<"恭喜您扑出点球!"<<endl;
			}
			else {
				cout<<"机器人罚进了点球!"<<endl;
				df++; 
			}
		} 
		else {
			cout<<"机器人罚进了点球!"<<endl; 
			df++;
		}
	} 
	if(j==2)
	{
		cout<<"机器人选择往中间罚"<<endl;
		if(mp=='M')
		{
			int sss=rand()%5;
			if(sss!=1)
			{
				cout<<"恭喜您扑出点球!"<<endl;
			}
			else {
				cout<<"机器人罚进了点球!"<<endl;
				df++; 
			}
		} 
		else {
			cout<<"机器人罚进了点球!"<<endl; 
			df++;
		}
	} 
	if(j==3)
	{
		cout<<"机器人选择往右罚"<<endl;
		if(mp=='R')
		{
			int sss=rand()%5;
			if(sss!=1)
			{
				cout<<"恭喜您扑出点球!"<<endl;
			}
			else {
				cout<<"机器人罚进了点球!"<<endl;
				df++; 
			}
		} 
		else {
			cout<<"机器人罚进了点球!"<<endl; 
			df++;
		}
	} 
    cout<<"当前总比分:您"<<db<<":"<<df<<"机器人"<<endl;
}
while(db==df)
{
	cout<<"输入L向左罚,输入R向右罚,输入M向中间罚"<<endl;
	cin>>m;
	if(m!='L'&&m!='R'&&m!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		continue;
	}
	int jp=rand()%3+1;
	if(jp==1)
	{
		cout<<"机器人扑向了左边"<<endl; 
		if(m=='L')
		{
			int ss=rand()%5;
			if(ss!=1)
			cout<<"很遗憾,您的点球被扑出"<<endl;
			else
			{
				cout<<"您罚进了点球!"<<endl;
			db++; 
			}
			
		}
		else {
			cout<<"您罚进了点球!"<<endl;
			db++; 
			
		}
	} 
	else if(jp==2)
	{
		cout<<"机器人扑向了中间"<<endl; 
		if(m=='M')
		{
			int ss=rand()%5;
			if(ss!=1)
			cout<<"很遗憾,您的点球被扑出"<<endl;
			else
			{
				cout<<"您罚进了点球!"<<endl;
			db++; 
			}
			
		}
		else {
			cout<<"您罚进了点球!"<<endl;
			db++; 
			
		}
	} 
	else if(jp==3)
	{
		cout<<"机器人扑向了右边"<<endl; 
		if(m=='R')
		{
			int ss=rand()%5;
			if(ss!=1)
			cout<<"很遗憾,您的点球被扑出"<<endl;
			else
			{
				cout<<"您罚进了点球!"<<endl;
			db++; 
			}
			
		}
		else {
			cout<<"您罚进了点球!"<<endl;
			db++; 
			
		}
	} 
	j=rand()%3+1;
	cout<<"您要往哪边扑?(输入L向左扑,输入R向右扑,输入M站着不动)"<<endl;
	cin>>mp;
	if(j==1)
	{
		cout<<"机器人选择往左罚"<<endl;
		if(mp=='L')
		{
			int sss=rand()%5;
			if(sss!=1)
			{
				cout<<"恭喜您扑出点球!"<<endl;
			}
			else {
				cout<<"机器人罚进了点球!"<<endl;
				df++; 
			}
		} 
		else {
			cout<<"机器人罚进了点球!"<<endl; 
			df++;
		}
	} 
	if(j==2)
	{
		cout<<"机器人选择往中间罚"<<endl;
		if(mp=='M')
		{
			int sss=rand()%5;
			if(sss!=1)
			{
				cout<<"恭喜您扑出点球!"<<endl;
			}
			else {
				cout<<"机器人罚进了点球!"<<endl;
				df++; 
			}
		} 
		else {
			cout<<"机器人罚进了点球!"<<endl; 
			df++;
		}
	} 
	if(j==3)
	{
		cout<<"机器人选择往右罚"<<endl;
		if(mp=='R')
		{
			int sss=rand()%5;
			if(sss!=1)
			{
				cout<<"恭喜您扑出点球!"<<endl;
			}
			else {
				cout<<"机器人罚进了点球!"<<endl;
				df++; 
			}
		} 
		else {
			cout<<"机器人罚进了点球!"<<endl; 
			df++;
		}
	} 
    cout<<"当前总比分:您"<<db<<":"<<df<<"机器人"<<endl;
}
if(db>df)
{
	cout<<"玩家获胜!";
	wom++;
}

else {
	cout<<"电脑获胜!";
	lom++;
}
return 0;
}
int dqdzsr()
{
	char a,b;
	int db=0,df=0;
	int s=5;
	cout<<"请双方玩家准备(输入L为左,M即为中间,R为右边,扑救时同理),"; 
	for(int i=1;i<=s;i++)
	{
		int shhdb=db;
		if(db+s-i<df)
		{
		cout<<"player 2 is winner!";
		return 0;
		}
		if(df+s-i<db)
		{
		cout<<"player 1 is winner!";
		return 0;
		}
	cout<<"玩家1行动(您要往哪边射):"<<endl;
	a=getch();
	if(a!='L'&&a!='R'&&a!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		continue;
	}
	cout<<"玩家2,您想往哪边扑"<<endl;
    b=getch();
    	if(b!='L'&&b!='R'&&b!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		continue;
	}
    if(a=='L')
    cout<<"玩家1选择向左罚"<<endl; 
    else if(a=='M')
    cout<<"玩家1选择向中间罚"<<endl; 
    else if(a=='R')
    cout<<"玩家1选择向右罚"<<endl; 
    if(b=='R')
    cout<<"玩家2选择向右扑"<<endl;
    else if(b=='M')
    cout<<"玩家2选择向中间扑"<<endl;
    else if(b=='L')
    cout<<"玩家2选择向左扑"<<endl; 
	if(a==b)
	{
		cout<<"很遗憾,玩家1的点球被玩家2神勇扑出"<<endl;
	} 
	else
	{
		cout<<"恭喜玩家1罚进点球!"<<endl;
		db++; 
	}
	cout<<"玩家2行动(您要往哪边射):"<<endl;
	b=getch();
		if(b!='L'&&b!='R'&&b!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		db=shhdb;
		s++;
		continue;
	}
	cout<<"玩家1,您想往哪边扑"<<endl;
    a=getch();
    	if(a!='L'&&a!='R'&&a!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		db=shhdb;
		continue;
	}
    if(b=='L')
    cout<<"玩家2选择向左罚"<<endl; 
    else if(b=='M')
    cout<<"玩家2选择向中间罚"<<endl; 
    else if(b=='R')
    cout<<"玩家2选择向右罚"<<endl; 
    if(a=='R')
    cout<<"玩家1选择向右扑"<<endl;
    else if(a=='M')
    cout<<"玩家1选择向中间扑"<<endl;
    else if(a=='L')
    cout<<"玩家1选择向左扑"<<endl; 
	if(a==b)
	{
		cout<<"很遗憾,玩家2的点球被玩家1神勇扑出"<<endl;
	} 
	else
	{
		cout<<"恭喜玩家2罚进点球!"<<endl;
		df++; 
	}
	cout<<"当前比分:玩家1  "<<db<<":"<<df<<"玩家2"<<endl; 
}
while(db==df)
{
	int shhdb=db;
	cout<<"玩家1行动(您要往哪边射):"<<endl;
	a=getch();
		if(a!='L'&&a!='R'&&a!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		continue;
	}
	cout<<"玩家2,您想往哪边扑"<<endl;
    b=getch();
    	if(b!='L'&&b!='R'&&b!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		continue;
	}
    if(a=='L')
    cout<<"玩家1选择向左罚"<<endl; 
    else if(a=='M')
    cout<<"玩家1选择向中间罚"<<endl; 
    else if(a=='R')
    cout<<"玩家1选择向右罚"<<endl; 
    if(b=='R')
    cout<<"玩家2选择向右扑"<<endl;
    else if(b=='M')
    cout<<"玩家2选择向中间扑"<<endl;
    else if(b=='L')
    cout<<"玩家2选择向左扑"<<endl; 
	if(a==b)
	{
		cout<<"很遗憾,玩家1的点球被玩家2神勇扑出"<<endl;
	} 
	else
	{
		cout<<"恭喜玩家1罚进点球!"<<endl;
		db++; 
	}
	cout<<"玩家2行动(您要往哪边射):"<<endl;
	b=getch();
		if(b!='L'&&b!='R'&&b!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		db=shhdb;
		continue;
	}
	cout<<"玩家1,您想往哪边扑"<<endl;
    a=getch();
    	if(a!='L'&&a!='R'&&a!='M')
	{
		cout<<"操作不合法,请重来一次"<<endl;
		s++;
		db=shhdb;
		continue;
	}
    if(b=='L')
    cout<<"玩家2选择向左罚"<<endl; 
    else if(b=='M')
    cout<<"玩家2选择向中间罚"<<endl; 
    else if(b=='R')
    cout<<"玩家2选择向右罚"<<endl; 
    if(a=='R')
    cout<<"玩家1选择向右扑"<<endl;
    else if(a=='M')
    cout<<"玩家1选择向中间扑"<<endl;
    else if(a=='L')
    cout<<"玩家1选择向左扑"<<endl; 
	if(a==b)
	{
		cout<<"很遗憾,玩家2的点球被玩家1神勇扑出"<<endl;
	} 
	else
	{
		cout<<"恭喜玩家2罚进点球!"<<endl;
		df++; 
	}
	cout<<"当前比分:玩家1  "<<db<<":"<<df<<"玩家2"<<endl; 
}
if(db>df)
cout<<"player 1 is winner!"<<endl;
else cout<<"player 2 is winner!"<<endl;
return 0; 
}
int main()
{
	char jx; 
	int mod;
	cout<<"欢迎使用点球大战模拟器,祝您玩的开心"<<endl;
	int x=1; 
	cout<<"操作指南:PVP模式中为防止您的好兄弟偷窥,您只需输入您想输入的字母(不要多余操作),然后把电脑交给好兄弟"<<endl; 
	while(x==1)
	{
		cout<<"请选择模式(1为PVC,2为PVP(不计入场次,看不见输入属于正常,放心输入))"<<endl;
		cin>>mod;
		if(mod==1)
		{
		dqdz();
	}
	else if(mod==2)
	{
		dqdzsr();
		cout<<"您还要继续游玩吗?(Y为继续,输入为其他立刻退出)";
		cin>>jx;
		cout<<endl;
		if(jx=='Y')
		x=1;
		else
		{
			x=0;
			cout<<"欢迎您下次游玩,再见!"<<endl; 
		}
		
		continue;
	}
	else 
	{
		cout<<"操作不合法!"<<endl;
		continue;
	}
		cout<<"本局游戏结束,您当前的胜率是:"<<fixed<<setprecision(2)<<(float)wom/(float)som*100<<"%,"<<"您一共玩了"<<som<<"局,获胜"<<wom<<"场,失败"<<lom<<"场"<<endl; 
		cout<<"您还要继续游玩吗?(Y为继续,输入为其他立刻退出)";
		cin>>jx;
		cout<<endl;
		if(jx=='Y')
		x=1;
		else
		{
			x=0;
			cout<<"欢迎您下次游玩,再见!"<<endl; 
		}
		
	} 
	system("pause");
return 0;	 
}

【问题描述】在足球比赛中,有不少赛事,例如世界杯淘汰赛和欧洲冠军联赛淘汰赛中,当比赛双方经过正规比赛和加时赛之后仍然不分胜负时,需要进行点球大战来决定谁能够获得最终的胜利。点球大战的规则非常简单,两方轮流派出球员罚点球,每方各罚5个。当5轮点球结束以后如果仍然不分胜负,则进入一轮定胜负的阶段。两方各派一名球员罚点球,直到有一方罚进而另一方没有进为止。 在北美职业冰球联赛中,也有点球大战。与足球的规则不同的是,它只先罚3轮点球,随后就进入一轮定胜负的阶段,而其他的规则完全一样。 在本题中,输入将给出每次点球是否罚进,而你的任务则是输出一个“比分板”。 【输入形式】输入包含多组数据。每组数据的第一行包含一个整数N(1<=N<=18),表示双方总共罚了多少个点球,N=0表示输入结束。随后有N行,每行是一个如下形式的字符串: XXXX good:表示这个点球罚进 或者XXXX no good:表示这个点球没有罚进 其中XXXX表示球员名字(全部由字母和空格组成,保证不会出现歧义) 每一行保证不超过100个字符。 XXXX和good以及XXXX和no、no和good之间保证有且只有1个空格。 good、no good都是小写。本题是大小写相关的。 数据不保证点球大战一定结束,也不保证在结束以后立即结束这组数据(即:不用判断点球大战是否结束,只用把罚进的点球往比分上加即可)。 【输出形式】对每组数据,输出一个比分板。一个点球如果罚进,则在对应的地方标上’O’,如果没有进则标上’X’。先罚球的队伍的信息在上面,后罚的在下面。最右边标上两队的比分。具体格式参考样例输出。注意如果一轮点球只罚了一个,则后面那个点球对应的地方写上’-’。 【样例输入】 6 Riise good Ballack good Gerrard no good Lampard no good Fernando Torres good Malouda good 9 Christiano Ronaldo no good Messi no good Giggs good Abidal no good Carrick good Ronaldinho good Rooney good Henry no good Tevez good 0 【样例输出】 1 2 3 Score O X O 2 O X O 2 1 2 3 4 5 Score X O O O O 4 X X O X - 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值