求高手帮忙写保龄球规则的c++代码

2024-11-25 04:49:00
推荐回答(5个)
回答1:

/*
* 作者: 陈先文
*
* 说明:
* 楼主没有给定数据结构,我设计了一个,如果需要改动,我可以代劳,
* 结构说明如下:
*
* 用一个二维数组来保存分数,score[i][j]表示第i局第j次击球的个数
* i从0至9,j为0或1. 另外,追加一个score10_3,以保存第10局的第3次击
* 球,如果没有第三次击球,则置0即可
*
* 若楼主需要以1至10为下标的,我可以代为修改程序。
*/

//初始化
int score[10][2] = {0};

//保龄球记分
int calucateScore(int **score, int score10_3) {
....int result = 0;

....//前9次击球记分
....for(int i = 0; i < 9; ++i) {
........//第一击全倒
........if(score[i][0] == 10) {
............//下一局第一击也全倒
............if(score[i+1][0] == 10) {
................//若非第9局,则加20分和下两局的第一次击球得分
................//否则加上20分和第10局第二击的得分
................result += i < 8 ? (20 + score[i+2][0]) : (20 + score[9][1]);
............}
............//下一局第一击没有全倒, 加下一局的两次击球得分
............else {
................result += 10 + score[i+1][0] + score[i+1][1];
............}
........}
........//第二击全倒
........else if(score[i][0] + score[i][1] == 10) {
............//加上10分和下一局第一击得分
............result += 10 + score[i+1][0];
........}
........//其他
........else {
............result += score[i][1] + score[i][2];
........}
....}
....//第10次击球, 下标为9, 记分
....result += score[9][0] + score[9][1];
....//若第10局有第三次击球,则加上该分数。
....if(score[9][0] + score[9][1] == 10)
........result += score10_3;

....return result;
}

回答2:

  不知道用C语言可不可以啊!我刚做完。
  ---------------VC++6.0下调试通过。
  保龄球规则的c++代码
  规则如下:
  保龄球一场共10局,每一局最多打2球,至少打1球。
  每一局共有10个瓶子,击倒一个瓶子得1分。若第1局到第9局的第一个球击倒10个瓶子(全倒),
  则跳入下一局,不需要打第2个球。
  若第10局的第1个球击倒10个瓶子,或者第10局的2个球加起来击倒10个瓶子(补中),
  则第10局可以打第3个球。
  保龄球10局最少打11个球,最多打21个球。
  计分方式若该局中第1球击倒10个瓶子,则本局分数加计下两球的分数;
  若一局中第1球加第2球共击倒10个球则本局分数会加计下局第1球的分数;
  若一局2球没有击倒10个瓶子,该局只计击倒瓶子的分数。
  *///***********************************************************************************/
  #include
  using namespace std;

  struct pacegame//每局规则
  {
  int bt[3];
  signed short score;//总分
  };

  static pacegame Arr[10];

  void main()
  {
  cout<<"****************************************************************************"<  cout<<"* *"<  cout<<"* 欢迎您使用保龄球计分系统! *"<  cout<<"* *"<  cout<<"****************************************************************************"<  cout<<"* (请根据提示输入每局击瓶数) *"<  cout<<"****************************************************************************"<  for (int i=0; i<10; i++)
  {
  for (int j=0; j<3; j++)
  Arr[i].bt[j]=0;
  Arr[i].score=0;
  }
  char exit='\0';
  cout<<"正否开始新的一局?(任意键开始!Ctrl+Z退出!)"<  while ((exit=cin.get())!=EOF)
  {
  for (i=0; i<10; i++)
  {
  for (int j=0; j<2; j++)
  {
  cout<<"第"<  cin>>Arr[i].bt[j];
  Arr[i].bt[j]=Arr[i].bt[j]%11;
  if (1==j)
  {
  if ((Arr[i].bt[0]+Arr[i].bt[1])>10)
  Arr[i].bt[j]=10-Arr[i].bt[0];
  }
  if ((10==Arr[i].bt[j]||10<=(Arr[i].bt[0]+Arr[i].bt[1])))
  {
  if (9==i)
  {
  cout<<"最后一局全部击倒!追加一球!"<  cout<<"追加球击倒瓶数: "<  cin>>Arr[i].bt[2];
  Arr[i].bt[2]=Arr[i].bt[2]%11;
  break;
  }
  else
  {
  if (0==j) Arr[i].bt[2]=-2;
  if (1==j) Arr[i].bt[2]=-1;
  cout<<"恭喜你!全倒!进入下一局。"<  break;
  }
  }
  }
  }
  //统计分数:
  cout<<"*--------------------本局比赛结束!统计如下:--------------------------*"<  int sum=0;
  for (i=0; i<10; i++)
  {
  cout<<"第"<  switch (Arr[i].bt[2])
  {
  case -1:
  Arr[i].bt[2]=Arr[i+1].bt[0];
  break;
  case -2:
  Arr[i].bt[2]=Arr[i+1].bt[0]+Arr[i+1].bt[1];
  break;
  }
  Arr[i].score=Arr[i].bt[0]+Arr[i].bt[1]+Arr[i].bt[2];
  cout<<"第一球击倒: "<  Arr[i].bt[1]<<" | "<<"追加分: "<  " | "<<"共计: "<  sum+=Arr[i].score;
  cout<<"----------------------------------------------------------------"<  }
  cout<<"本场总得分: "<  ////////////////////////////////////////////////////////
  cout<<"正否开始新的一局?任意键开始!Ctrl+Z退出!"<  cin.get(exit);
  }
  cout<<"****************************************************************************"<  cout<<"* (感谢使用!再见!) *"<  cout<<"****************************************************************************"<  }

回答3:

既然用C++就搞个类呀。

回答4:

等会儿帮你做啊

已经有人做出来了,呵呵,可是所有东西都在主函数里面让人家怎么代码复用呢?这种风格写作业还可以,如果这个程序的算法要用,这代码没法用啊

回答5:

不会保龄球规则,虽然你说了,但我还是混淆,实在不好意思。