C++网球比赛程序解决思路
C++网球比赛程序
//Tennisball.h
#ifndef TENNISBALL_H
#define TENNISBALL_H
class Tennisball
{
public:
int tempScore;//用于临时存储比赛得分,以防当比赛如5:3时,此时应制比分为0,进行下一轮,
//而当输入的信息下一个为‘S’时,此时应显示之前的结果(5:3),则调用变量tempScore
Tennisball(int scoreValue = 0,int gameValue = 0,int plateValue = 0)
:score(scoreValue),game(gameValue),plate(plateValue),tempScore(0)
{
}
inline int returnScore() const//返回比分score
{
return score;
}
inline int returnGame() const//返回当前对象本局所赢局数
{
return game;
}
inline int returnPlate() const//返回当前对象赢的盘数
{
return plate;
}
friend bool judge(Tennisball &A,Tennisball &B,int temp);
//对输入的信息,做出相应处理,第一个参数代表要加分的选手
private:
int score;//存储分数
int game;//存储局数
int plate;//存储盘数
};
void show(Tennisball &temp1, Tennisball &temp2);
int print(Tennisball &A, Tennisball &B);//显示当前比赛信息
#endif
//Tennisball.cpp
#include <iostream>
#include <ctime>
#include "Tennisball.h"
using namespace std;
static int sumgame = 0;//存储比赛的总局数
static int gameAB[2][5] = {0};//存储每盘比赛的对局数,gameAB[0]代表选手A,gameAB[1]代表选手B
bool judge(Tennisball &temp1,Tennisball &temp2,int temp)
//第一个参数代表要加分的选手,temp为0,代表选手A,temp为1,代表选手B
{
temp1.tempScore = ++temp1.score;
temp2.tempScore = temp2.score;
if (temp1.score>=4 && abs(temp1.score-temp2.score)>1)
{
sumgame++;
temp1.score = temp2.score = 0;
temp1.game = ++gameAB[temp][temp1.plate+temp2.plate];
if (temp1.game>=6 && abs(temp1.game-temp2.game)>1)
{
temp1.game = temp2.game = 0;
temp1.plate++;
if (3==temp1.plate)//当当前选手以赢得3盘时,返回false,比赛结束
{
return false;
}
}
}
else if (temp1.score==4 && temp2.score==4)//当比分是4:4时,重置比分为3:3
{
temp1.tempScore = temp2.tempScore = temp1.score = temp2.score = 3;
}
return true;
}
void show(Tennisball &temp1, Tennisball &temp2)//显示当前发球人的基本信息,第一个参数temp1表示发球人
{
char *scoreFlag[5] = {"LOVE","15","30","40","A"};
cout << "game:"
<< temp1.returnGame()
<< '-'
<< temp2.returnGame()
<< endl;
cout << "score:"
<< scoreFlag[temp1.tempScore]
<< '-'
<< scoreFlag[temp2.tempScore]
<< endl;
}
int print(Tennisball &A, Tennisball &B)//显示当前发球人的基本信息或比赛结束结果
{
cout << endl;
if (3==A.returnPlate())//显示比赛结果
{
cout << "Team A wins";
}
else if (3==B.returnPlate())
{
cout << "Team B wins";
}
if (3==A.returnPlate()||3==B.returnPlate())
{
for (int i = 0; i < 5; i++)
{
cout << gameAB[0][i]
<< '-'
<< gameAB[1][i];
}
return 0;
}
if (1==sumgame%2)//当局数为奇数时为A选手发球
{
cout << "Team A to serve:"
<< endl;
show(A,B);
}
else //当局数为偶数时为B选手发球
{
cout << "Team B to serve:"
<< endl;
show(B,A);
}
return 1;
}
//main.cpp
#include <iostream>
#include "Tennisball.h"
int main(void)
{
bool flag = true;//如果flag为false表示比赛结束
Tennisball A, B; //A,B选手
char stringTennis[100];//存储输入的信息
std::cout << "please input the information the Tennis math:";
std::cin >> stringTennis;
for (int i =0; stringTennis[i]!='\0'; i++)//对于输入的信息,进行逐个检查,并给出相应的处理
{
switch (stringTennis[i])
{
case 'A':
flag = judge(A,B,0);//调用函数judge(),使得A加一分,B进行相应处理
//Tennisball.h
#ifndef TENNISBALL_H
#define TENNISBALL_H
class Tennisball
{
public:
int tempScore;//用于临时存储比赛得分,以防当比赛如5:3时,此时应制比分为0,进行下一轮,
//而当输入的信息下一个为‘S’时,此时应显示之前的结果(5:3),则调用变量tempScore
Tennisball(int scoreValue = 0,int gameValue = 0,int plateValue = 0)
:score(scoreValue),game(gameValue),plate(plateValue),tempScore(0)
{
}
inline int returnScore() const//返回比分score
{
return score;
}
inline int returnGame() const//返回当前对象本局所赢局数
{
return game;
}
inline int returnPlate() const//返回当前对象赢的盘数
{
return plate;
}
friend bool judge(Tennisball &A,Tennisball &B,int temp);
//对输入的信息,做出相应处理,第一个参数代表要加分的选手
private:
int score;//存储分数
int game;//存储局数
int plate;//存储盘数
};
void show(Tennisball &temp1, Tennisball &temp2);
int print(Tennisball &A, Tennisball &B);//显示当前比赛信息
#endif
//Tennisball.cpp
#include <iostream>
#include <ctime>
#include "Tennisball.h"
using namespace std;
static int sumgame = 0;//存储比赛的总局数
static int gameAB[2][5] = {0};//存储每盘比赛的对局数,gameAB[0]代表选手A,gameAB[1]代表选手B
bool judge(Tennisball &temp1,Tennisball &temp2,int temp)
//第一个参数代表要加分的选手,temp为0,代表选手A,temp为1,代表选手B
{
temp1.tempScore = ++temp1.score;
temp2.tempScore = temp2.score;
if (temp1.score>=4 && abs(temp1.score-temp2.score)>1)
{
sumgame++;
temp1.score = temp2.score = 0;
temp1.game = ++gameAB[temp][temp1.plate+temp2.plate];
if (temp1.game>=6 && abs(temp1.game-temp2.game)>1)
{
temp1.game = temp2.game = 0;
temp1.plate++;
if (3==temp1.plate)//当当前选手以赢得3盘时,返回false,比赛结束
{
return false;
}
}
}
else if (temp1.score==4 && temp2.score==4)//当比分是4:4时,重置比分为3:3
{
temp1.tempScore = temp2.tempScore = temp1.score = temp2.score = 3;
}
return true;
}
void show(Tennisball &temp1, Tennisball &temp2)//显示当前发球人的基本信息,第一个参数temp1表示发球人
{
char *scoreFlag[5] = {"LOVE","15","30","40","A"};
cout << "game:"
<< temp1.returnGame()
<< '-'
<< temp2.returnGame()
<< endl;
cout << "score:"
<< scoreFlag[temp1.tempScore]
<< '-'
<< scoreFlag[temp2.tempScore]
<< endl;
}
int print(Tennisball &A, Tennisball &B)//显示当前发球人的基本信息或比赛结束结果
{
cout << endl;
if (3==A.returnPlate())//显示比赛结果
{
cout << "Team A wins";
}
else if (3==B.returnPlate())
{
cout << "Team B wins";
}
if (3==A.returnPlate()||3==B.returnPlate())
{
for (int i = 0; i < 5; i++)
{
cout << gameAB[0][i]
<< '-'
<< gameAB[1][i];
}
return 0;
}
if (1==sumgame%2)//当局数为奇数时为A选手发球
{
cout << "Team A to serve:"
<< endl;
show(A,B);
}
else //当局数为偶数时为B选手发球
{
cout << "Team B to serve:"
<< endl;
show(B,A);
}
return 1;
}
//main.cpp
#include <iostream>
#include "Tennisball.h"
int main(void)
{
bool flag = true;//如果flag为false表示比赛结束
Tennisball A, B; //A,B选手
char stringTennis[100];//存储输入的信息
std::cout << "please input the information the Tennis math:";
std::cin >> stringTennis;
for (int i =0; stringTennis[i]!='\0'; i++)//对于输入的信息,进行逐个检查,并给出相应的处理
{
switch (stringTennis[i])
{
case 'A':
flag = judge(A,B,0);//调用函数judge(),使得A加一分,B进行相应处理