Objective 1 You are to take the given code which shows 1 car
Objective 1:
You are to take the given code which shows 1 car running a race. Your job will be to add 3 more cars with varying stats which should participate in the race just like the first car.
Create a class Card Car to handle the Car objects. Use arrays to handle multiple objects. The variable names and types maybe changed to suit your preferences so long as the cars perform the same way.
public class RaceTrack {
public static void main(String[] args) {
int RaceNumber = 1;
//car 1
String car1Name = \"Bob Barker Car\";
float car1HandlingS = 0.30f;
float car1HandlingC = 0.65f;
float car1HandlingU = 0.1f;
float car1RaceProgress = 0;
float car1CurrentSpeed = 0;
float car1TopSpeed = 0.95f;
float car1Acceleration = 0.11f;
int car1Wins = 0;
char car1Symbol = \'B\';
String Racetrack = \"----------U-C-S-------C---S---------C--U----\";
int raceLength = Racetrack.length();
boolean runningRace = true; //once someone wins we can stop this
while (runningRace) {
System.out.println(Racetrack);
//Car 1
String Progress = \"\";
for (int i=0;i<car1RaceProgress;i++)
Progress+= \" \";
System.out.println(Progress+car1Symbol);
//accelerate based on where you are on the track
//Racetrack[(int)car1RaceProgress)]
switch (Racetrack.charAt((int)car1RaceProgress)) {
case \'-\': //strait-away
if (car1CurrentSpeed < car1TopSpeed)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed > car1TopSpeed)
car1CurrentSpeed = car1TopSpeed;
break;
case \'S\': //Chicane
if (car1CurrentSpeed < car1TopSpeed*car1HandlingS)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed > car1TopSpeed*car1HandlingS)
car1CurrentSpeed = car1TopSpeed*car1HandlingS;
break;
case \'C\': //curve
if (car1CurrentSpeed < car1TopSpeed*car1HandlingC)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed > car1TopSpeed*car1HandlingC)
car1CurrentSpeed = car1TopSpeed*car1HandlingC;
break;
case \'U\': //Hairpin
if (car1CurrentSpeed < car1TopSpeed*car1HandlingU)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed < car1TopSpeed*car1HandlingU)
car1CurrentSpeed = car1TopSpeed*car1HandlingU;
break;
}
//increase progress
car1RaceProgress+=car1CurrentSpeed;
if (car1RaceProgress >= raceLength) {
System.out.println(car1Name+\" wins\");
car1Wins++;
runningRace=false;
}
}
}
}
String car2Name = \"Pat Sajak Car\";
car2HandlingS = 0.45f;
car2HandlingC = 0.85f;
car2HandlingU = 0.3f;
car2RaceProgress = 0;
car2CurrentSpeed = 0;
car2TopSpeed = 0.78f;
car2Acceleration = 0.08f;
car2Wins = 0;
car2Symbol = \'P\';
String car3Name = \"Alex Trebek Car\";
car3HandlingS = 0.25f;
car3HandlingC = 0.55f;
car3HandlingU = 0.1f;
car3RaceProgress = 0;
car3CurrentSpeed = 0;
car3TopSpeed = 0.95f;
car3Acceleration = 0.19f;
car3Wins = 0;
car3Symbol = \'A\';
String car4Name = \"Drew Carrie Car\";
Car4HandlingS = 0.15f;
Car4HandlingC = 0.25f;
Car4HandlingU = 0.05f;
Car4RaceProgress = 0;
Car4CurrentSpeed = 0;
Car4TopSpeed = 0.9999f;
Car4Acceleration = 0.21f;
Car4Wins = 0;
Car4Symbol = \'D\';
Objective 2:
Right now the race is only being run once. Adjust the code so that the race can be run 25 times to simulate an entire season. At the end of the season the car with the most wins should be output along with the race wins total.
Objective 3:
Each race of the season should be a different race. Randomly create racetracks prior to the start of each race. Do this by randomly appending the four characters to a string. You can skew the random numbers to give more strait-aways or turns depending on your preference (so long as there is a chance of everything appearing in a race).
Solution
public class RaceTrack {
public static void main(String[] args) {
int RaceNumber = 1;
//car 1
String car1Name = \"Bob Barker Car\";
float car1HandlingS = 0.30f;
float car1HandlingC = 0.65f;
float car1HandlingU = 0.1f;
float car1RaceProgress = 0;
float car1CurrentSpeed = 0;
float car1TopSpeed = 0.95f;
float car1Acceleration = 0.11f;
int car1Wins = 0;
char car1Symbol = \'B\';
String Racetrack = \"----------U-C-S-------C---S---------C--U----\";
int raceLength = Racetrack.length();
boolean runningRace = true; //once someone wins we can stop this
while (runningRace) {
System.out.println(Racetrack);
//Car 1
String Progress = \"\";
for (int i=0;i<car1RaceProgress;i++)
Progress+= \" \";
System.out.println(Progress+car1Symbol);
//accelerate based on where you are on the track
//Racetrack[(int)car1RaceProgress)]
switch (Racetrack.charAt((int)car1RaceProgress)) {
case \'-\': //strait-away
if (car1CurrentSpeed < car1TopSpeed)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed > car1TopSpeed)
car1CurrentSpeed = car1TopSpeed;
break;
case \'S\': //Chicane
if (car1CurrentSpeed < car1TopSpeed*car1HandlingS)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed > car1TopSpeed*car1HandlingS)
car1CurrentSpeed = car1TopSpeed*car1HandlingS;
break;
case \'C\': //curve
if (car1CurrentSpeed < car1TopSpeed*car1HandlingC)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed > car1TopSpeed*car1HandlingC)
car1CurrentSpeed = car1TopSpeed*car1HandlingC;
break;
case \'U\': //Hairpin
if (car1CurrentSpeed < car1TopSpeed*car1HandlingU)
car1CurrentSpeed += car1Acceleration;
else if (car1CurrentSpeed < car1TopSpeed*car1HandlingU)
car1CurrentSpeed = car1TopSpeed*car1HandlingU;
break;
}
//increase progress
car1RaceProgress+=car1CurrentSpeed;
if (car1RaceProgress >= raceLength) {
System.out.println(car1Name+\" wins\");
car1Wins++;
runningRace=false;
}
}
}
}


