网球计分系统

// 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值