diff --git a/68 Orbit/java/Orbit.java b/68 Orbit/java/Orbit.java new file mode 100644 index 00000000..4f4d9d01 --- /dev/null +++ b/68 Orbit/java/Orbit.java @@ -0,0 +1,193 @@ +import java.lang.Integer; +import java.lang.Math; +import java.util.Scanner; + +/** + * Game of Orbit + *
+ * Based on the BASIC game of Orbit here + * https://github.com/coding-horror/basic-computer-games/blob/main/68%20Orbit/orbit.bas + *
+ * Note: The idea was to create a version of the 1970's BASIC game in Java, without introducing + * new features - no additional text, error checking, etc has been added. + * + * Converted from BASIC to Java by Darren Cardenas. + */ + +public class Orbit { + + private final Scanner scan; // For user input + + public Orbit() { + + scan = new Scanner(System.in); + + } // End of constructor Orbit + + public void play() { + + showIntro(); + startGame(); + + } // End of method play + + private static void showIntro() { + + System.out.println(" ".repeat(32) + "ORBIT"); + System.out.println(" ".repeat(14) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); + System.out.println("\n\n"); + + System.out.println("SOMEWHERE ABOVE YOUR PLANET IS A ROMULAN SHIP."); + System.out.println(""); + System.out.println("THE SHIP IS IN A CONSTANT POLAR ORBIT. ITS"); + System.out.println("DISTANCE FROM THE CENTER OF YOUR PLANET IS FROM"); + System.out.println("10,000 TO 30,000 MILES AND AT ITS PRESENT VELOCITY CAN"); + System.out.println("CIRCLE YOUR PLANET ONCE EVERY 12 TO 36 HOURS."); + System.out.println(""); + System.out.println("UNFORTUNATELY, THEY ARE USING A CLOAKING DEVICE SO"); + System.out.println("YOU ARE UNABLE TO SEE THEM, BUT WITH A SPECIAL"); + System.out.println("INSTRUMENT YOU CAN TELL HOW NEAR THEIR SHIP YOUR"); + System.out.println("PHOTON BOMB EXPLODED. YOU HAVE SEVEN HOURS UNTIL THEY"); + System.out.println("HAVE BUILT UP SUFFICIENT POWER IN ORDER TO ESCAPE"); + System.out.println("YOUR PLANET'S GRAVITY."); + System.out.println(""); + System.out.println("YOUR PLANET HAS ENOUGH POWER TO FIRE ONE BOMB AN HOUR."); + System.out.println(""); + System.out.println("AT THE BEGINNING OF EACH HOUR YOU WILL BE ASKED TO GIVE AN"); + System.out.println("ANGLE (BETWEEN 0 AND 360) AND A DISTANCE IN UNITS OF"); + System.out.println("100 MILES (BETWEEN 100 AND 300), AFTER WHICH YOUR BOMB'S"); + System.out.println("DISTANCE FROM THE ENEMY SHIP WILL BE GIVEN."); + System.out.println(""); + System.out.println("AN EXPLOSION WITHIN 5,000 MILES OF THE ROMULAN SHIP"); + System.out.println("WILL DESTROY IT."); + System.out.println(""); + System.out.println("BELOW IS A DIAGRAM TO HELP YOU VISUALIZE YOUR PLIGHT."); + System.out.println(""); + System.out.println(""); + System.out.println(" 90"); + System.out.println(" 0000000000000"); + System.out.println(" 0000000000000000000"); + System.out.println(" 000000 000000"); + System.out.println(" 00000 00000"); + System.out.println(" 00000 XXXXXXXXXXX 00000"); + System.out.println(" 00000 XXXXXXXXXXXXX 00000"); + System.out.println(" 0000 XXXXXXXXXXXXXXX 0000"); + System.out.println(" 0000 XXXXXXXXXXXXXXXXX 0000"); + System.out.println(" 0000 XXXXXXXXXXXXXXXXXXX 0000"); + System.out.println("180<== 00000 XXXXXXXXXXXXXXXXXXX 00000 ==>0"); + System.out.println(" 0000 XXXXXXXXXXXXXXXXXXX 0000"); + System.out.println(" 0000 XXXXXXXXXXXXXXXXX 0000"); + System.out.println(" 0000 XXXXXXXXXXXXXXX 0000"); + System.out.println(" 00000 XXXXXXXXXXXXX 00000"); + System.out.println(" 00000 XXXXXXXXXXX 00000"); + System.out.println(" 00000 00000"); + System.out.println(" 000000 000000"); + System.out.println(" 0000000000000000000"); + System.out.println(" 0000000000000"); + System.out.println(" 270"); + System.out.println(""); + System.out.println("X - YOUR PLANET"); + System.out.println("O - THE ORBIT OF THE ROMULAN SHIP"); + System.out.println(""); + System.out.println("ON THE ABOVE DIAGRAM, THE ROMULAN SHIP IS CIRCLING"); + System.out.println("COUNTERCLOCKWISE AROUND YOUR PLANET. DON'T FORGET THAT"); + System.out.println("WITHOUT SUFFICIENT POWER THE ROMULAN SHIP'S ALTITUDE"); + System.out.println("AND ORBITAL RATE WILL REMAIN CONSTANT."); + System.out.println(""); + System.out.println("GOOD LUCK. THE FEDERATION IS COUNTING ON YOU."); + + } // End of method showIntro + + private void startGame() { + + double bombDistance = 0; + int bombAltitude = 0; + int bombAngle = 0; + int deltaAngle = 0; + int hour = 0; + int shipAltitude = 0; + int shipAngle = 0; + int shipRate = 0; + String userResponse = ""; + + // Begin outer while loop + while (true) { + + shipAngle = (int) Math.floor(360 * Math.random()); + shipAltitude = (int) Math.floor(200 * Math.random() + 200); + shipRate = (int) Math.floor(20 * Math.random() + 10); + + hour = 0; + + // Begin time limit loop + while (hour < 7) { + + System.out.println(""); + System.out.println(""); + System.out.println("THIS IS HOUR " + (hour + 1) + ", AT WHAT ANGLE DO YOU WISH TO SEND"); + System.out.print("YOUR PHOTON BOMB? "); + bombAngle = Integer.parseInt(scan.nextLine()); + + System.out.print("HOW FAR OUT DO YOU WISH TO DETONATE IT? "); + bombAltitude = Integer.parseInt(scan.nextLine()); + + System.out.println(""); + System.out.println(""); + + // Update ship position + shipAngle += shipRate; + + // Handle full revolutions + if (shipAngle >= 360) { + shipAngle -= 360; + } + + deltaAngle = Math.abs(shipAngle - bombAngle); + + // Keep angle in upper quadrants + if (deltaAngle >= 180) { + deltaAngle = 360 - deltaAngle; + } + + bombDistance = Math.sqrt(shipAltitude * shipAltitude + bombAltitude * bombAltitude - 2 * shipAltitude + * bombAltitude * Math.cos(deltaAngle * Math.PI / 180)); + + System.out.format("YOUR PHOTON BOMB EXPLODED " + "%.5f" + "*10^2 MILES FROM THE\n", bombDistance); + System.out.println("ROMULAN SHIP."); + + // Win condition + if (bombDistance <= 50) { + System.out.println("YOU HAVE SUCCESFULLY COMPLETED YOUR MISSION."); + break; + } + + hour++; + + } // End time limit loop + + // Lose condition + if (hour == 7) { + System.out.println("YOU HAVE ALLOWED THE ROMULANS TO ESCAPE."); + } + + System.out.println("ANOTHER ROMULAN SHIP HAS GONE INTO ORBIT."); + System.out.print("DO YOU WISH TO TRY TO DESTROY IT? "); + userResponse = scan.nextLine(); + + if (!userResponse.toUpperCase().equals("YES")) { + System.out.println("GOOD BYE."); + break; + } + + } // End outer while loop + + } // End of method startGame + + public static void main(String[] args) { + + Orbit game = new Orbit(); + game.play(); + + } // End of method main + +} // End of class Orbit