package Vehicles; public class Sport extends Vehicle { private int topSpeed; public enum GearNumbers { R, N, GEAR_1, GEAR_2, GEAR_3, GEAR_4, GEAR_5, GEAR_6 } private GearNumbers gear; public Sport(String make, String model, int year, int topSpeed) { super(make, model, year); this.topSpeed = topSpeed; this.typeOfEngine = getManualEngineType(); this.doors = 2; this.gear = this.setGear(0); } private GearNumbers setGear(int gear) { switch (gear) { case -1: return GearNumbers.R; case 0: return GearNumbers.N; case 1: return GearNumbers.GEAR_1; case 2: return GearNumbers.GEAR_2; case 3: return GearNumbers.GEAR_3; case 4: return GearNumbers.GEAR_4; case 5: return GearNumbers.GEAR_5; case 6: return GearNumbers.GEAR_6; default: return GearNumbers.N; } } public double getTopSpeed() { if (this.gear == GearNumbers.N || this.gear == GearNumbers.R) { return 0; } switch (this.gear) { case GEAR_1: return topSpeed * 0.2; case GEAR_2: return topSpeed * 0.35; case GEAR_3: return topSpeed * 0.5; case GEAR_4: return topSpeed * 0.65; case GEAR_5: return topSpeed * 0.8; case GEAR_6: return topSpeed; default: return 0; } } @Override public String forward() { if (this.gear == GearNumbers.N) { this.changeGearUp(); } else if (this.gear == GearNumbers.R) { this.gear = this.setGear(1); } return "The sport vehicle is zooming forward at high speed!"; } @Override public String reverse() { if (this.gear != GearNumbers.R) { this.gear = this.setGear(-1); } return "The sport vehicle is reversing quickly!"; } @Override public String stop() { if (this.gear != GearNumbers.N) { this.setGearToNeutral(); } return "The sport vehicle screeches to a halt!"; } public String drift() { if (this.gear == GearNumbers.N || this.gear == GearNumbers.R) { return "Cannot drift while in Neutral or Reverse gear!"; } return "The sport vehicle is drifting around the corner!"; } public String nitroBoost() { if (this.gear == GearNumbers.N || this.gear == GearNumbers.R) { return "Cannot activate nitro boost while in Neutral or Reverse gear!"; } if (this.gear != GearNumbers.GEAR_6) { this.gear = this.setGear(6); } return "The sport vehicle activates nitro boost for extra speed!"; } public void changeGearUp() { switch (this.gear) { case R: this.gear = this.setGear(0); break; case N: this.gear = this.setGear(1); break; case GEAR_1: this.gear = this.setGear(2); break; case GEAR_2: this.gear = this.setGear(3); break; case GEAR_3: this.gear = this.setGear(4); break; case GEAR_4: this.gear = this.setGear(5); break; case GEAR_5: this.gear = this.setGear(6); break; } } public GearNumbers getGear() { return this.gear; } public void changeGearDown() { switch (this.gear) { case GEAR_6: this.gear = this.setGear(5); break; case GEAR_5: this.gear = this.setGear(4); break; case GEAR_4: this.gear = this.setGear(3); break; case GEAR_3: this.gear = this.setGear(2); break; case GEAR_2: this.gear = this.setGear(1); break; case GEAR_1: this.gear = this.setGear(1); break; case N: this.gear = this.setGear(-1); break; } } public void setGearToNeutral() { this.gear = GearNumbers.N; } }