mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 15:16:33 -08:00
factor out result message display and clean up ordinal switch
This commit is contained in:
@@ -6,6 +6,9 @@ import java.util.Scanner;
|
|||||||
public class Splat {
|
public class Splat {
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
private final Scanner scanner = new Scanner(System.in);
|
private final Scanner scanner = new Scanner(System.in);
|
||||||
|
private final float[] Arr = new float[42];
|
||||||
|
private int K = 0;
|
||||||
|
private int K1 = 0;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
new Splat().run();
|
new Splat().run();
|
||||||
@@ -14,10 +17,7 @@ public class Splat {
|
|||||||
public void run() {
|
public void run() {
|
||||||
showIntroduction();
|
showIntroduction();
|
||||||
|
|
||||||
float[] Arr = new float[42];
|
|
||||||
Arrays.fill(Arr, 0.0f);
|
Arrays.fill(Arr, 0.0f);
|
||||||
int K = 0;
|
|
||||||
int K1 = 0;
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
||||||
InitialJumpConditions initial = buildInitialConditions();
|
InitialJumpConditions initial = buildInitialConditions();
|
||||||
@@ -33,16 +33,26 @@ public class Splat {
|
|||||||
System.out.println("HERE WE GO.\n");
|
System.out.println("HERE WE GO.\n");
|
||||||
System.out.println("TIME (SEC) DIST TO FALL (FT)");
|
System.out.println("TIME (SEC) DIST TO FALL (FT)");
|
||||||
System.out.println("========== =================");
|
System.out.println("========== =================");
|
||||||
|
|
||||||
|
JumpResult jump = executeJump(initial, freefallTime);
|
||||||
|
showJumpResults(initial, jump);
|
||||||
|
|
||||||
|
if(!playAgain()){
|
||||||
|
System.out.println("SSSSSSSSSS.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showJumpResults(InitialJumpConditions initial, JumpResult jump) {
|
||||||
final float V = initial.getTerminalVelocity();
|
final float V = initial.getTerminalVelocity();
|
||||||
final float A = initial.getAcceleration();
|
final float A = initial.getAcceleration();
|
||||||
JumpResult jump = executeJump(initial, freefallTime);
|
|
||||||
|
|
||||||
if (jump.isSplat()) {
|
if (jump.isSplat()) {
|
||||||
if (jump.hasReachedTerminalVelocity()) {
|
if (jump.hasReachedTerminalVelocity()) {
|
||||||
System.out.printf("%.2f SPLAT\n", (V / A) + ((initial.getAltitude() - (V * V / (2 * A))) / V));
|
System.out.printf("%.2f SPLAT\n", (V / A) + ((initial.getAltitude() - (V * V / (2 * A))) / V));
|
||||||
} else {
|
} else {
|
||||||
System.out.printf("%.2f SPLAT\n", Math.sqrt(2 * initial.getAltitude() / A));
|
System.out.printf("%.2f SPLAT\n", Math.sqrt(2 * initial.getAltitude() / A));
|
||||||
|
|
||||||
}
|
}
|
||||||
showRandomSplatMessage();
|
showRandomSplatMessage();
|
||||||
} else {
|
} else {
|
||||||
@@ -84,55 +94,39 @@ public class Splat {
|
|||||||
System.out.printf("JUMPS BEFORE YOURS AND YOU CAME IN NUMBER %d! GET WITH IT!\n", K - K1);
|
System.out.printf("JUMPS BEFORE YOURS AND YOU CAME IN NUMBER %d! GET WITH IT!\n", K - K1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.out.println("AMAZING!!! NOT BAD FOR YOUR ");
|
String[] nums = new String[]{ "1ST", "2ND", "3RD"};
|
||||||
switch (J) {
|
System.out.printf("AMAZING!!! NOT BAD FOR YOUR %s SUCCESSFUL JUMP!!!\n", nums[J]);
|
||||||
case 0:
|
|
||||||
System.out.print("1ST ");
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
System.out.print("2ND ");
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
System.out.print("3RD ");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
System.out.println("SUCCESSFUL JUMP!!!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!playAgain()){
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
private JumpResult executeJump(InitialJumpConditions initial, float chuteOpenTime) {
|
||||||
|
|
||||||
private JumpResult executeJump(InitialJumpConditions initial, float T) {
|
|
||||||
final float V = initial.getTerminalVelocity();
|
|
||||||
final float A = initial.getAcceleration();
|
|
||||||
|
|
||||||
JumpResult jump = new JumpResult(initial.getAltitude());
|
JumpResult jump = new JumpResult(initial.getAltitude());
|
||||||
for (float i = 0.0f; !jump.isSplat() && (i < T); i += T / 8) {
|
for (float time = 0.0f; !jump.isSplat() && (time < chuteOpenTime); time += chuteOpenTime / 8) {
|
||||||
if (i > initial.getTimeOfTerminalAccelerationReached()) {
|
if (!jump.hasReachedTerminalVelocity() && time > initial.getTimeOfTerminalAccelerationReached()) {
|
||||||
jump.setReachedTerminalVelocity();
|
jump.setReachedTerminalVelocity();
|
||||||
System.out.printf("TERMINAL VELOCITY REACHED AT T PLUS %f SECONDS.\n", initial.getTimeOfTerminalAccelerationReached());
|
System.out.printf("TERMINAL VELOCITY REACHED AT T PLUS %f SECONDS.\n", initial.getTimeOfTerminalAccelerationReached());
|
||||||
for (i = i; i < T; i += T / 8) {
|
}
|
||||||
jump.setDistance(initial.getAltitude() - ((V * V / (2 * A)) + (V * (i - (V / A)))));
|
float newDistance = computeDistance(initial, time, jump.hasReachedTerminalVelocity());
|
||||||
|
jump.setDistance(newDistance);
|
||||||
|
|
||||||
if (jump.isSplat()) {
|
if (jump.isSplat()) {
|
||||||
break;
|
return jump;
|
||||||
}
|
}
|
||||||
System.out.printf("%10.2f %f\n", i, jump.getDistance());
|
System.out.printf("%10.2f %f\n", time, jump.getDistance());
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
jump.setDistance( initial.getAltitude() - ((A / 2) * i * i));
|
|
||||||
if (jump.isSplat()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
System.out.printf("%10.2f %f\n", i, jump.getDistance());
|
|
||||||
}
|
}
|
||||||
return jump;
|
return jump;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private float computeDistance(InitialJumpConditions initial, float i, boolean hasReachedTerminalVelocity) {
|
||||||
|
final float V = initial.getTerminalVelocity();
|
||||||
|
final float A = initial.getAcceleration();
|
||||||
|
if(hasReachedTerminalVelocity) {
|
||||||
|
return initial.getAltitude() - ((V * V / (2 * A)) + (V * (i - (V / A))));
|
||||||
|
}
|
||||||
|
return initial.getAltitude() - ((A / 2) * i * i);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean playAgain() {
|
private boolean playAgain() {
|
||||||
if (askYesNo("DO YOU WANT TO PLAY AGAIN ")) {
|
if (askYesNo("DO YOU WANT TO PLAY AGAIN ")) {
|
||||||
return true;
|
return true;
|
||||||
@@ -140,7 +134,6 @@ public class Splat {
|
|||||||
if (askYesNo("PLEASE")) {
|
if (askYesNo("PLEASE")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
System.out.println("SSSSSSSSSS.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user