C++进阶小程序(龟兔赛跑)

/*
 (模拟龟兔赛跑)本练习中要模拟龟兔赛跑的寓言故事。用随机数产生器建立模拟龟兔赛跑的程序。
 对手从70个方格的第1格开始起跑,每格表示跑道上的一个可能位置,终点线在第70格处。
 第一个到达终点的选手奖励一个新鲜萝卜和莴苣。兔子要在山坡上睡一觉,因此可能失去冠军。
    有一个每秒钟滴答一次的钟,程序应按下列规则调整动物的位置:

            动物                运动类型           时间百分比            实际运动
    乌龟(tortoise)   Fast plod(快走)             50%                  向右3格
                                       Slip(跌跤)            20%                  向左6格
                              Slow plod(慢走)            30%                  向右1格
    兎子(Hare)              Sleep(睡觉)            20%                  不动
                                 Big hop(大跳)           20%                  向右9格
                                 Big slip(大跌)           10%                  向左12格
                              Small hop(小跳)          30%                  向右1格
                              Small slip(小跌)           20%                  向左2格
 

用变量跟踪动物的位置(即位置号1到70)。每个动物从位置1开始,如果动物跌到第1格以外,则移回第1格。
    产生随机整数1≤i≤10),以得到上表中的百分比。对于乌龟,1≤i≤5时快走,6≤i≤7时跌跤,8≤i≤10时慢走,兔子也用相似的方法。
    起跑时,打印:
    BANG  !!!!!
    AND THEY' RE OFF  !!!!!
    时钟每次滴答一下(即每个重复循环),打印第70格位置的一条线,显示乌龟的位置T和兔子的位置H。
 如果两者占用一格,则乌龟会咬兔子,程序从该位置开始打印 OUCH!!!。除T、H和OUCH!!!以外的其他打印位置都是空的。
    打印每一行之后,测试某个动物是否超过了第70格,如果是,则打印获胜者,停止模拟。
 如果乌龟赢,则打印TORTOISE WINS!!!YAY!!!。如果兔子赢,则打印Hare wins.Yush。
 如果两个动物同时赢,则可以同情弱者,让乌龟赢,或者打印It's a tie。如果两者都没有赢,则再次循环,模拟下一个时钟滴答。
 准备运行程序时,让一组拉拉队看比赛,你会发现观众有多么投入。
*/

#include<iostream>
#include <iomanip>
#include<string>
#include<time.h>
using namespace std;

int Rand();//产生随机数
int tPosition(int,int&);//计算乌龟所跑路程
int hPosition(int,int&);//计算兔子所跑路程
int main()
{
 int a=0, tPos=1, hPos=1;//存放循环次数、乌龟和兔子当前所跑路程
 string b="----------------------------------------------------------------------";

 cout<<" BANG  !!!!!"<<endl;
 cout<<" AND THEY' RE OFF  !!!!!"<<endl;//比赛开始
 while(true)
 {
  int Num=Rand();//获得随机数
  int Tpos=tPosition(Num,tPos);//获得乌龟当前路程
  int Hpos=hPosition(Num,hPos);//获得兔子当前路程
  a++;
  cout<<"This is the "<<a<<"th seconds:"<<endl;//计时
  cout<<setw(70)<<b<<endl;//跑道
  if(Tpos==Hpos)
  {
   cout<<setw(Tpos)<<"OUCH!!!"<<endl;//兔子和乌龟所跑路程相等,乌龟咬兔子
  }
  else
  {
   cout<<setw(Tpos)<<"T"<<endl;//显示乌龟当前位置
      cout<<setw(Hpos)<<"H"<<endl;//显示兔子当前位置
  }
  cout<<setw(70)<<b<<endl;//跑道
  if(Tpos==70)
  {
   cout<<"TORTOISE WINS!!!YAY!!!"<<endl;//乌龟获胜
   break;
  } 
  else if(Hpos==70)
  {
   cout<<"Hare wins.Yush!!!"<<endl;//兔子获胜
   break;
  }
  else if(Tpos==70&&Hpos==70)
  {
   cout<<"It's a tie!!!"<<endl;//平局
   break;
  }
 }
 cin>>a;//暂停屏幕,查看结果
 return 0;
}

int Rand()
{
 int num;
 srand(time(0));//一时间作为随机种子
 num=1+rand()%10;//得到1-10的随机数
 return num;
}

int tPosition(int Rand,int &Pos)
{
 if(1<=Rand&&Rand<=5)//乌龟百分之五十的时间快走
 {
  Pos+=3;
  if(Pos>=70)
   Pos=70;
 }
 else if(6<=Rand&&Rand<=7)//乌龟百分之二十的时间跌跤
 {
  Pos-=6;
  if(Pos<=0)
   Pos=1;
 }
 else//乌龟百分之三十的时间慢走
 {
  Pos++;
  if(Pos>=70)
   Pos=70;
 }
 return Pos;
}

int hPosition(int Rand,int &Pos)
{
 if(1<=Rand&&Rand<=2)//兔子百分之二十的时间睡觉
 {
  Pos=Pos;
 }
 else if(3<=Rand&&Rand<=4)//兔子百分之二十的时间大跳
 {
  Pos+=9;
  if(Pos>=70)
   Pos=70;
 }
 else if(Rand==5)//兔子百分之十的时间大跌
 {
  Pos-=12;
  if(Pos<=0)
   Pos=1;
 }
 else if(6<=Rand&&Rand<=8)//兔子百分之三十的时间小跳
 {
  Pos++;
  if(Pos>=70)
   Pos=70;
 }
 else//兔子百分之二十的时间小跌
 {
  Pos-=2;
  if(Pos<=0)
   Pos=1;
 }
 return Pos;
}

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值