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
Hi Friend, I have cread CardCar class and I have migrated the one car racing code to new code.
I did not simulate 3 car racing due to lack of time.
I have also created an array of 4 car.
######### CarCard.java ##############
public class CardCar {
// instance variables
String carName;
float carHandlingS;
float carHandlingC;
float carHandlingU;
float carRaceProgress;
float carCurrentSpeed;
float carTopSpeed;
float carAcceleration;
int carWins;
char carSymbol;
public CardCar(String carName, float carHandlingS, float carHandlingC, float carHandlingU, float carRaceProgress,
float carCurrentSpeed, float carTopSpeed, float carAcceleration, int carWins, char carSymbol) {
super();
this.carName = carName;
this.carHandlingS = carHandlingS;
this.carHandlingC = carHandlingC;
this.carHandlingU = carHandlingU;
this.carRaceProgress = carRaceProgress;
this.carCurrentSpeed = carCurrentSpeed;
this.carTopSpeed = carTopSpeed;
this.carAcceleration = carAcceleration;
this.carWins = carWins;
this.carSymbol = carSymbol;
}
public String getCarName() {
return carName;
}
public float getCarHandlingS() {
return carHandlingS;
}
public float getCarHandlingC() {
return carHandlingC;
}
public float getCarHandlingU() {
return carHandlingU;
}
public float getCarRaceProgress() {
return carRaceProgress;
}
public float getCarCurrentSpeed() {
return carCurrentSpeed;
}
public float getCarTopSpeed() {
return carTopSpeed;
}
public float getCarAcceleration() {
return carAcceleration;
}
public int getCarWins() {
return carWins;
}
public char getCarSymbol() {
return carSymbol;
}
public void setCarName(String carName) {
this.carName = carName;
}
public void setCarHandlingS(float carHandlingS) {
this.carHandlingS = carHandlingS;
}
public void setCarHandlingC(float carHandlingC) {
this.carHandlingC = carHandlingC;
}
public void setCarHandlingU(float carHandlingU) {
this.carHandlingU = carHandlingU;
}
public void setCarRaceProgress(float carRaceProgress) {
this.carRaceProgress = carRaceProgress;
}
public void setCarCurrentSpeed(float carCurrentSpeed) {
this.carCurrentSpeed = carCurrentSpeed;
}
public void setCarTopSpeed(float carTopSpeed) {
this.carTopSpeed = carTopSpeed;
}
public void setCarAcceleration(float carAcceleration) {
this.carAcceleration = carAcceleration;
}
public void setCarWins(int carWins) {
this.carWins = carWins;
}
public void setCarSymbol(char carSymbol) {
this.carSymbol = carSymbol;
}
}
########### RaceTrack.java ###########
public class RaceTrack {
public static void main(String[] args) {
int RaceNumber = 1;
CardCar car1 = new CardCar(\"Bob Barker Car\", 0.30f, 0.65f,
0.1f, 0, 0, 0.95f,
0.11f, 0, \'B\');
CardCar car2 = new CardCar(\"Pat Sajak Car\", 0.45f, 0.85f, 0.3f,
0, 0, 0.78f, 0.08f, 0, \'P\');
CardCar car3 = new CardCar(\"Alex Trebek Car\", 0.25f, 0.55f, 0.1f, 0,
0, 0.95f, 0.19f, 0, \'A\');
CardCar car4 = new CardCar(\"Drew Carrie Car\", 0.15f, 0.25f, 0.05f, 0,
0, 0.9999f, 0.21f, 0, \'D\');
// creating an array of CardCar
CardCar cardCarArr[] = {car1, car2, car3, car4};
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<car1.getCarRaceProgress();i++)
Progress+= \" \";
System.out.println(Progress+car1.getCarSymbol());
//accelerate based on where you are on the track
//Racetrack[(int)car1RaceProgress)]
switch (Racetrack.charAt((int)car1.getCarRaceProgress())) {
case \'-\': //strait-away
if (car1.getCarCurrentSpeed() < car1.getCarTopSpeed())
car1.setCarCurrentSpeed(car1.getCarCurrentSpeed()+car1.getCarAcceleration());
else if (car1.getCarCurrentSpeed() > car1.getCarTopSpeed())
car1.setCarCurrentSpeed(car1.getCarTopSpeed());
break;
case \'S\': //Chicane
if (car1.getCarCurrentSpeed() < car1.getCarTopSpeed()*car1.getCarHandlingS())
car1.setCarCurrentSpeed(car1.getCarCurrentSpeed()+car1.getCarAcceleration());
else if (car1.getCarCurrentSpeed() > car1.getCarTopSpeed()*car1.getCarHandlingS())
car1.setCarCurrentSpeed(car1.getCarTopSpeed()*car1.getCarHandlingS());
break;
case \'C\': //curve
if (car1.getCarCurrentSpeed() < car1.getCarTopSpeed()*car1.getCarHandlingC())
car1.setCarCurrentSpeed(car1.getCarCurrentSpeed()+car1.getCarAcceleration());
else if (car1.getCarCurrentSpeed() > car1.getCarTopSpeed()*car1.getCarHandlingC())
car1.setCarCurrentSpeed(car1.getCarTopSpeed()*car1.getCarHandlingC());
break;
case \'U\': //Hairpin
if (car1.getCarCurrentSpeed() < car1.getCarTopSpeed()*car1.getCarHandlingU())
car1.setCarCurrentSpeed(car1.getCarCurrentSpeed()+car1.getCarAcceleration());
else if (car1.getCarCurrentSpeed() > car1.getCarTopSpeed()*car1.getCarHandlingU())
car1.setCarCurrentSpeed(car1.getCarTopSpeed()*car1.getCarHandlingU());
break;
}
//increase progress
car1.setCarRaceProgress(car1.getCarRaceProgress() + car1.getCarCurrentSpeed());
if (car1.getCarRaceProgress() >= raceLength) {
System.out.println(car1.getCarName()+\" wins\");
car1.setCarWins(car1.getCarWins() + 1);
runningRace=false;
}
}
}
}








