diff --git a/76 Russian Roulette/java/src/RussianRoulette.java b/76 Russian Roulette/java/src/RussianRoulette.java new file mode 100644 index 00000000..1bbf37bc --- /dev/null +++ b/76 Russian Roulette/java/src/RussianRoulette.java @@ -0,0 +1,143 @@ +import java.util.Arrays; +import java.util.Scanner; + +/** + * Game of Russian Roulette Paper + *
+ * Based on the Basic game of Russian Roulette here + * https://github.com/coding-horror/basic-computer-games/blob/main/76%20Russian%20Roulette/russianroulette.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. + */ + +public class RussianRoulette { + + public static final int BULLETS_IN_CHAMBER = 10; + public static final double CHANCE_OF_GETTING_SHOT = .833333d; + + // Used for keyboard input + private final Scanner kbScanner; + + private enum GAME_STATE { + INIT, + GAME_START, + FIRE_BULLET, + NEXT_VICTIM + } + + // Current game state + private GAME_STATE gameState; + + int bulletsShot; + + public RussianRoulette() { + kbScanner = new Scanner(System.in); + gameState = GAME_STATE.INIT; + } + + /** + * Main game loop + */ + public void play() { + + do { + switch (gameState) { + + case INIT: + intro(); + gameState = GAME_STATE.GAME_START; + + break; + + case GAME_START: + bulletsShot = 0; + System.out.println(); + System.out.println("HERE IS A REVOLVER."); + System.out.println("TYPE '1' TO SPIN CHAMBER AND PULL TRIGGER."); + System.out.println("TYPE '2' TO GIVE UP."); + gameState = GAME_STATE.FIRE_BULLET; + break; + + case FIRE_BULLET: + + int choice = displayTextAndGetNumber("GO "); + + // Anything but selecting give up = have a shot + if (choice != 2) { + bulletsShot++; + if (Math.random() > CHANCE_OF_GETTING_SHOT) { + System.out.println(" BANG!!!!! YOU'RE DEAD!"); + System.out.println("CONDOLENCES WILL BE SENT TO YOUR RELATIVES."); + gameState = GAME_STATE.NEXT_VICTIM; + } else if (bulletsShot > BULLETS_IN_CHAMBER) { + System.out.println("YOU WIN!!!!!"); + System.out.println("LET SOMEONE ELSE BLOW HIS BRAINS OUT."); + gameState = GAME_STATE.GAME_START; + } else { + // Phew player survived this round + System.out.println("- CLICK -"); + } + } else { + // Player gave up + System.out.println(" CHICKEN!!!!!"); + gameState = GAME_STATE.NEXT_VICTIM; + + } + break; + + case NEXT_VICTIM: + System.out.println("...NEXT VICTIM..."); + gameState = GAME_STATE.GAME_START; + } + // Infinite loop - based on original basic version + } while (true); + } + + private void intro() { + System.out.println(addSpaces(28) + "RUSSIAN ROULETTE"); + System.out.println(addSpaces(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); + System.out.println(); + System.out.println("THIS IS A GAME OF >>>>>>>>>>RUSSIAN ROULETTE."); + } + + /* + * Print a message on the screen, then accept input from Keyboard. + * Converts input to an Integer + * + * @param text message to be displayed on screen. + * @return what was typed by the player. + */ + private int displayTextAndGetNumber(String text) { + return Integer.parseInt(displayTextAndGetInput(text)); + } + + /* + * Print a message on the screen, then accept input from Keyboard. + * + * @param text message to be displayed on screen. + * @return what was typed by the player. + */ + private String displayTextAndGetInput(String text) { + System.out.print(text); + return kbScanner.nextLine(); + } + + /** + * Return a string of x spaces + * + * @param spaces number of spaces required + * @return String with number of spaces + */ + private String addSpaces(int spaces) { + char[] spacesTemp = new char[spaces]; + Arrays.fill(spacesTemp, ' '); + return new String(spacesTemp); + } + + public static void main(String[] args) { + + RussianRoulette russianRoulette = new RussianRoulette(); + russianRoulette.play(); + } +} \ No newline at end of file