1、一个趣味射箭比赛,有三种得分方式:一、射箭可以射靶子,分为1-10环。二、有十个气球。三、有个鬼脸面具。
2、上述三种得分方式如下:靶子射中以后,得分根据1-10环分别得分相应的分数(环数),如果射中气球,每个1分,总共有 十个;鬼脸面具射中一次为3分,再次射中不得分。
3、根据以上要求分析为游戏者类(Competitor)、面具类(Mask),气球类(Balloon),靶子类(Target),最后定义一个排名类(Rank)
游戏者类应包括姓名,编号,成绩等。
排名类包括定义三个游戏者类,能输出如下格式:
Rank No Name Scores
1 10 Jack 18
2 11 Rose 11
3 23 Robot 5
备注(各位老大指点一下,没学过c++,有点象c语言,呵呵)
- //"gamePku.h"
- #include <iomanip>
- using namespace std;
- class Borad//目标抽象基类
- {
- void virtual ShowMe() = 0;
- };
- class Mask:public Borad//面具类
- {
- static int mnum;
- public :
- Mask();
- ~Mask();
- void ShowMe();
- int getScores(){return mnum;};
- };
- class Balloon:public Borad//气球类
- {
- static int bnum;
- public:
- Balloon();
- ~Balloon();
- void ShowMe();
- int getScores(){return bnum;};
- };
- class Target:public Borad//靶子类
- {
- static int tnum;
- public:
- Target(int i=0);
- ~Target();
- void ShowMe();
- int getScores(){return tnum;};
- };
- class Competitor//参赛者类
- {
- int ID;
- int scores;
- char *name;
- Balloon *ball;
- Mask *mask;
- Target *tag;
- public:
- Competitor();
- char *getName(){return name;};
- int getScores(){return scores;};
- int getID(){return ID;};
- friend istream operator>>(istream is,Competitor &com);
- int Add();
- };
- class Rank//排名类
- {
- Competitor *com[3];
- public:
- Rank();
- showRank();
- };
- //"gamePku.cpp"
- #include "stdafx.h"
- #include "gamePku.h"
- int Mask::mnum = 0;
- Mask::Mask()
- {
- if(mnum==0)//判断是否已经得分了
- mnum+=3;
- }
- Mask::~Mask()
- {
- mnum = 0;
- }
- void Mask::ShowMe()
- {
- cout<<"本次得分:"<<mnum<<endl;
- }
- int Balloon::bnum = 0;
- Balloon::Balloon()
- {
- if(bnum<10)//判断气球数
- bnum++;
- }
- Balloon::~Balloon()
- {
- bnum=0;
- }
- void Balloon::ShowMe()
- {
- cout<<"本次得分:"<<bnum<<endl;
- }
- int Target::tnum = 0;
- Target::Target(int n)
- {
- switch(n)//输入的环数
- {
- case 1:
- tnum++;
- break;
- case 2:
- tnum+=2;
- break;
- case 3:
- tnum+=3;
- break;
- case 4:
- tnum+=4;
- break;
- case 5:
- tnum+=5;
- break;
- case 6:
- tnum+=6;
- break;
- case 7:
- tnum+=7;
- break;
- case 8:
- tnum+=8;
- break;
- case 9:
- tnum+=9;
- break;
- case 10:
- tnum+=10;
- break;
- default:
- break;
- }
- }
- Target::~Target()
- {
- tnum = 0;
- }
- void Target::ShowMe()
- {
- cout<<"本次得分:"<<tnum<<endl;
- }
- Competitor::Competitor()//参赛者类初始化
- {
- name = new char[20];
- ID = 0;
- strcpy(name,"");
- scores = 0;
- }
- int Competitor::Add ()//根据射中的目标计算得取得分数
- {
- int i(0),n(0);
- int ballNum(0);
- int maskNum(0);
- while(i!=-1)
- {
- cout<<"输入以下1-4选择:"<<endl;
- cout<<"1-输入靶子成绩:"<<endl;
- cout<<"2-射中气球:"<<endl;
- cout<<"3-射中面具:"<<endl;
- cout<<"4-退出:"<<endl;
- cin>>i;
- if(i==1)
- {
- cout<<"请输入射中的环数:";
- cin>>n;
- cout<<endl;
- tag = new Target(n);
- scores+= tag->getScores();//计入总成绩
- tag->ShowMe();//显示本次得分
- delete tag;
- }
- else if(i==2)
- {
- if(ballNum==10)
- {
- cout<<"所有气球已都被射破!"<<endl;//气球已经没了
- }
- else
- {
- ball = new Balloon();
- scores+=ball->getScores ();
- ball->ShowMe();
- ballNum++;//计数
- delete ball;
- }
- }
- else if(i==3)
- {
- if(maskNum==0)//判断有没设中一次以上
- {
- maskNum++;
- mask = new Mask();
- scores += mask->getScores();
- mask->ShowMe();
- delete mask;
- }
- else
- cout<<"面具已经被射中一次了,以后再次射中不能再计分!"<<endl;
- }
- else
- break;
- }
- return 0;
- }
- istream operator >>(istream is,Competitor &com)//重载输入函数
- {
- cout<<"输入参赛者编号:";
- cin>>com.ID;
- cout<<"输入参赛者姓名:";
- cin>>com.name;
- return is;
- }
- Rank::Rank()//排名类初始化
- {
- for(int i=0;i<3;i++)
- {
- com[i] = new Competitor();
- cin>>*com[i];//输入参赛者情况
- com[i]->Add();//增加得分项目
- }
- }
- Rank::showRank()
- {
- int tem,scores[3]={0,0,0},index[3]={0,0,0};
- for(int i=0;i<3;i++)
- scores[i] = com[i]->getScores();
- cout<<"排名情况如下:"<<endl;
- cout.setf(ios::left);
- cout<<setw(9)<<"Rank"<<setw(9)<<"No"<<setw(9)<<"Name"<<setw(9)<<"Scores"<<endl;//格式化
- for(i=0;i<3;i++)
- {
- tem = i;
- index[i] = tem;//默认次序
- for(int j=0;j<3;j++)
- {
- if(scores[tem]<scores[j])
- {
- tem = j;
- }
- }
- if(tem!=i)//成绩最大的序号
- {
- index[i] = tem;
- }
- scores[tem] = -1;//成绩最大的置标志
- cout.setf(ios::left);//左对齐
- cout<<setw(9)<<i+1;
- cout<<setw(9)<<com[index[i]]->getID(); //编号
- cout<<setw(9)<<com[index[i]]->getName(); //名字
- cout<<setw(9)<<com[index[i]]->getScores(); //成绩
- cout<<endl;
- }
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- Rank *rank = new Rank();
- rank->showRank();
- system("pause");
- return 0;
- }