// tennis.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
/*函数声明*/
int fju(string ball);
void score(char ch);
int fpan();
void winner(int A, int B);
void display();
static int mark[2] = {0};//分别统计AB的得分数
static int ju[2] = {0};//统计AB的局数
static int pan[2] = {0};//统计AB的盘数
int Apan[5] = {0};//存放完成一局A的分数
int Bpan[5] = {0};//存放完成一局B的分数
int fju(string ball) //判定局数的函数
{
static int server = 0;
for (int begin = 0; begin != ball.length(); ++begin)
{
switch (ball[begin])
{
case 'A':
server++;
score('A');
break;
case 'B':
server++;
score('B');
break;
case 'S':
if (1 == server % 2)
{
cout << "Team A to serve:" << endl;
}
if (0 == server % 2)
{
cout << "Team B to serve:" << endl;
}
else
{
}
display();
break;
default:
break;
}
}
return 0;
}
void score(char ch)
{
if ('A' == ch)
{
mark[0]++;
}
if ('B' == ch)
{
mark[1]++;
}
// if (mark[0] == 4 && mark[1] == 4)//打到4平的时候就都减一个,为了显示
// {
// mark[0]--;
// mark[1]--;
// }
// if (mark[0] == 5 || mark[1] == 5)//如果有一个出现5,说明已经赢了,减1是为了输出显示
// {
// mark[0]--;
// mark[1]--;
// }
if (4 <= mark[0] && mark[0] - mark[1] >= 2)//A先胜一局
{
ju[0]++;
fpan();
mark[0] = 0;
mark[1] = 0;
}
if (4 <= mark[1] && mark[1] - mark[0] >= 2)//B先胜一局
{
ju[1]++;
fpan();
mark[0] = 0;
mark[1] = 0;
}
}
//void Ascore() // A得分
//{
// mark[0]++;
// if (mark[0] == 4 && mark[1] == 4)//打到4平的时候就都减一个,为了显示
// {
// mark[0]--;
// mark[1]--;
// }
// if (mark[0] == 5 || mark[1] == 5)//如果有一个出现5,说明已经赢了,减1是为了输出显示
// {
// mark[0]--;
// mark[1]--;
// }
// if (4 <= mark[0] && mark[0] - mark[1] >= 2)//A先胜一局
// {
// ju[0]++;
// fpan();
// mark[0] = 0;
// mark[1] = 0;
// }
//}
//
//void Bscore()// B得分
//{
// mark[1]++;
// if (mark[0] == 4 && mark[1] == 4)//打到4平的时候就都减一个,为了显示
// {
// mark[0]--;
// mark[1]--;
// }
// if (mark[0] == 5 || mark[1] == 5)//如果有一个出现5,说明已经赢了,减1是为了输出显示
// {
// mark[0]--;
// mark[1]--;
// }
// if (4 <= mark[1] && mark[1] - mark[0] >= 2)//B先胜一局
// {
// ju[1]++;
// fpan();
// mark[0] = 0;
// mark[1] = 0;
// }
//}
int fpan()//判断AB赢的盘数的情况
{
static int A= 0, B = 0;
if ((ju[0] == 6 && ju[0] - ju[1] >= 2) ||
(ju[0] >= 5 && ju[1] >= 5 &&
(ju[0] - ju[1] == 2))) //如果A的局数等于6并且比B多两局就胜一盘,
//如果到5平了,打到直到A多胜B两局
{
pan[0]++;
Apan[A++] = ju[0];
Bpan[B++] = ju[1];
winner(A, B);
ju[0] = 0;
ju[1] = 0;
}
else if ((ju[1] == 6 && ju[1] - ju[0] >= 2)||
(ju[0] >= 5 && ju[1] >= 5 &&
(ju[1] - ju[0] == 2)))//如果B的局数等于6并且比A多两局就胜一盘,
//如果到5平了,打到直到B多胜A两局
{
pan[1] ++;
Apan[A++] = ju[0];
Bpan[B++] = ju[1];
winner(A,B);
ju[0] = 0;
ju[1] = 0;
}
return 0;
}
void display() //显示比分情况
{
char *markflag[5] = {"LOVE", "15", "30", "40", "A"};//分数标记
if (mark[0] == 4 && mark[1] == 4)//打到4平的时候就都减一个,为了显示
{
mark[0]--;
mark[1]--;
}
if (mark[0] == 5 || mark[1] == 5)//如果有一个出现5,说明已经赢了,减1是为了输出显示
{
mark[0]--;
mark[1]--;
}
cout << "盘数:" << pan[0] << "-" << pan[1] << endl;
cout << "局数:" << ju[0] << "-" << ju[1]<< endl;
cout << "当前比分:" << markflag[mark[0]] << "-" << markflag[mark[1]] << endl;
}
void winner(int A,int B) //是否完成比赛以及比赛结果的每局比分
{
if (pan[0] == 3)
{
cout << "Team A wins:";
for (int n = 0; n < A; ++n)
{
cout << Apan[n] << "-" << Bpan[n] << " ";
}
exit(0);
}
if (pan[1] == 3)
{
cout << "Team B wins:";
for (int n = 0; n < B; ++n)
{
cout << Apan[n] << "-" << Bpan[n] << " ";
}
exit(0) ;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
string ballstr;
cout << "请输入比赛情况(ctr+z)终止:"<< endl;
while (getline(cin, ballstr)) //输入直到比赛结束
{
fju(ballstr);
cout << "请输入比赛情况(ctr+z)终止:"<< endl;
}
return 0;
}