Files
basic-computer-games/76_Russian_Roulette/java/src/RussianRoulette.java
Martin Thoma e64fb6795c MAINT: Apply pre-commit
Remove byte-order-marker pre-commit check as there would be
many adjustments necessary
2022-03-05 09:29:23 +01:00

144 lines
4.5 KiB
Java

import java.util.Arrays;
import java.util.Scanner;
/**
* Game of Russian Roulette Paper
* <p>
* Based on the Basic game of Russian Roulette here
* https://github.com/coding-horror/basic-computer-games/blob/main/76%20Russian%20Roulette/russianroulette.bas
* <p>
* 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();
}
}