This second assignment will build upon our knowledge of poin
Solution
#include <iostream>
 #include <stdlib.h>
 #include <ctime>
 #include <thread>
#define RACE_LENGTH 50
 using namespace std;
class racing{
    int scoreA, scoreB;
    public:
    void advanceRacerA( void );
    void advanceRacerB( void );
    void printPosition( void );
    void percent_moved( int isA );
 };
void racing::printPosition( void )
 {
    while( 1 ) {
        cout<<\"\ Score A:\";
        for( int i=0;i<scoreA; i++ ) {
            cout<<\" \";
        }
        cout<<\"A\";
        cout<<\" Score B:\";
        for( int i=0;i<scoreB; i++ ) {
            cout<<\" \";
        }
        if( ( scoreA == RACE_LENGTH ) &&
        ( scoreB == RACE_LENGTH ) ) {
        break;
        }
    }
 }
void racing::advanceRacerA()
 {
    while( true ) {
        percent_moved( 1 );
        if( scoreA == RACE_LENGTH )
            break;
    }
 }
void racing::advanceRacerB()
 {
    while( true ) {
        percent_moved( 0 );
        if( scoreB == RACE_LENGTH )
            break;
    }
 }
void racing::percent_moved( int isA )
 {
    int percentA = scoreA*2;
    int percentB = scoreB*2;
    if ( isA ){
        if ( percentA >= 0 &&
        percentA <30 ) {
            scoreA += 4;
        }else if ( percentA >= 30 &&
            percentB < 40 ) {
            scoreB += 5;
        }else if ( percentA >= 40 &&
            percentB < 70 ) {
            scoreA -= 2;
        }else if ( percentA >= 70 &&
            percentB < 90 ) {
            scoreA -= 3;
        }else if ( percentA >= 90 &&
            percentB < 100 ) {
            scoreA -= 4;
        }
    }else{
        if ( percentA >= 0 &&
        percentA <40 ) {
            scoreA += 5;
        }else if ( percentA >= 40 &&
            percentB < 50 ) {
            scoreB += 6;
        }else if ( percentA >= 50 &&
            percentB < 70 ) {
            scoreA -= 1;
        }else if ( percentA >= 70 &&
            percentB < 90 ) {
            scoreA -= 2;
        }else if ( percentA >= 90 &&
            percentB < 100 ) {
            scoreA -= 4;
        }
           
    }
 }
int main( void )
 {
    thread reporter(&racing::printPosition,printPosition());
    thread racerA(&racing::advanceRacerB,advanceRacerB());
    thread racerB(&racing::advanceRacerA,advanceRacerA());
   racerA.join();
    racerB.join();
   return 0;
 }
Compile with following
g++ race.cpp -pthread -std=c++11



