// Chapter 5 of C++ How to Program
// tortoiseandhare.cpp
#include <iostream>
using std::cout;
using std::endl;
#include <cstdlib>
#include <ctime>
#include <iomanip>
using std::setw;
const int RACE_END = 70;
/* Write prototype for moveTortoise here */
void moveTortoise(int &);
/* Write prototype for moveHare here */
void moveHare(int &);
/* Write prototype for printCurrentPositions here */
void printCurrentPositions(int &,int &);
int main()
{
int tortoise = 1, hare = 1, timer = 0;
srand( time( 0 ) );
cout<<"A program to show the match between the tortoise and the hare!"<<endl<<endl;
cout << "ON YOUR MARK, GET SET\nBANG !!!!"
<<endl
<< "\nAND THEY’RE OFF !!!!\n\n";
while ( tortoise != RACE_END && hare != RACE_END ) {
/* Write call for moveTortoise here */
moveTortoise(tortoise);
/* Write call for moveHare here */
moveHare(hare);
/* Write call for printCurrentPositions here */
printCurrentPositions(tortoise,hare);
++timer;
}
if ( tortoise >= hare )
cout << "\nTORTOISE WINS!!! YAY!!!\n";
else
cout << "Hare wins. Yuch.\n";
cout << "TIME ELAPSED = " << timer << " seconds" << endl;
return 0;
}
/* Write function definition for moveTortoise here */
void moveTortoise(int & turtlePtr)
{
int x = 1 + rand() % 10;
if ( x >= 1 && x <= 5 ) // fast plod
turtlePtr += 3;
else if ( x == 6 || x == 7 ) // slip
turtlePtr -= 6;
else // slow plod`
++( turtlePtr );
if ( turtlePtr < 1 )
turtlePtr = 1;
else if ( turtlePtr > RACE_END )
turtlePtr = RACE_END;
}
/* Write function definition for moveHare here */
void moveHare(int &rabbitPtr)
{
int y = 1 + rand() % 10;
/* Write statements that move rabbit */
if( y>= 1 &&y<=2)
rabbitPtr=rabbitPtr;
else if(y>=3&&y<=4)
rabbitPtr+=9;
else if(y==5)
rabbitPtr-=12;
else if(y>=6&&y<=8)
rabbitPtr+=1;
else
rabbitPtr-=2;
if(rabbitPtr<1)
rabbitPtr=1;
else if(rabbitPtr> RACE_END)
rabbitPtr= RACE_END;
/* Write statements that test if rabbit is before
the starting point or has finished the race */
}
/* Write function definition for printCurrentPositions here */
void printCurrentPositions(int &bunnyPtr,int &snapperPtr)
{
if ( bunnyPtr == snapperPtr )
cout << setw( bunnyPtr ) << "OUCH!!!";
else if ( bunnyPtr < snapperPtr )
cout << setw( bunnyPtr ) << "H"
<< setw( snapperPtr - bunnyPtr ) << "T";
else
cout << setw( snapperPtr ) << "T"
<< setw( bunnyPtr - snapperPtr ) << "H";
cout << "\n";
}
评论