From 6cf5b3948a10ebdcddc6c8bb2088baef1946b69b Mon Sep 17 00:00:00 2001 From: Darren Cardenas <53984972+darrencardenas@users.noreply.github.com> Date: Tue, 27 Apr 2021 20:01:34 -0400 Subject: [PATCH] Ported Bowling to Java. --- 14 Bowling/java/Bowling.java | 282 +++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 14 Bowling/java/Bowling.java diff --git a/14 Bowling/java/Bowling.java b/14 Bowling/java/Bowling.java new file mode 100644 index 00000000..e443246a --- /dev/null +++ b/14 Bowling/java/Bowling.java @@ -0,0 +1,282 @@ +import java.util.Scanner; +import java.lang.Math; + +/** + * Game of Bowling + *
+ * Based on the BASIC game of Bowling here + * https://github.com/coding-horror/basic-computer-games/blob/main/14%20Bowling/bowling.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 Bowling { + + private final Scanner scan; // For user input + + public Bowling() { + + scan = new Scanner(System.in); + + } // End of constructor Bowling + + public void play() { + + showIntro(); + startGame(); + + } // End of method play + + private static void showIntro() { + + System.out.println(" ".repeat(33) + "BOWL"); + System.out.println(" ".repeat(14) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); + System.out.println("\n\n"); + + } // End of method showIntro + + private void startGame() { + + int ball = 0; + int bell = 0; + int frame = 0; + int ii = 0; // Loop iterator + int jj = 0; // Loop iterator + int kk = 0; // Loop iterator + int numPlayers = 0; + int pinsDownBefore = 0; + int pinsDownNow = 0; + int player = 0; + int randVal = 0; + int result = 0; + + int[] pins = new int[16]; + + int[][] scores = new int[101][7]; + + String userResponse = ""; + + System.out.println("WELCOME TO THE ALLEY"); + System.out.println("BRING YOUR FRIENDS"); + System.out.println("OKAY LET'S FIRST GET ACQUAINTED"); + System.out.println(""); + System.out.println("THE INSTRUCTIONS (Y/N)"); + System.out.print("? "); + + userResponse = scan.nextLine(); + + if (userResponse.toUpperCase().equals("Y")) { + printRules(); + } + + System.out.print("FIRST OF ALL...HOW MANY ARE PLAYING? "); + numPlayers = Integer.parseInt(scan.nextLine()); + + System.out.println(""); + System.out.println("VERY GOOD..."); + + // Begin outer while loop + while (true) { + + for (ii = 1; ii <= 100; ii++) { + for (jj = 1; jj <= 6; jj++) { + scores[ii][jj] = 0; + } + } + + frame = 1; + + // Begin frame while loop + while (frame < 11) { + + // Begin loop through all players + for (player = 1; player <= numPlayers; player++) { + + pinsDownBefore = 0; + ball = 1; + result = 0; + + for (ii = 1; ii <= 15; ii++) { + pins[ii] = 0; + } + + while (true) { + + // Ball generator using mod '15' system + + System.out.println("TYPE ROLL TO GET THE BALL GOING."); + System.out.print("? "); + scan.nextLine(); + + kk = 0; + pinsDownNow = 0; + + for (ii = 1; ii <= 20; ii++) { + + randVal = (int)(Math.random() * 100) + 1; + + for (jj = 1; jj <= 10; jj++) { + + if (randVal < 15 * jj) { + break; + } + } + pins[15 * jj - randVal] = 1; + } + + // Pin diagram + + System.out.println("PLAYER: " + player + " FRAME: " + frame + " BALL: " + ball); + + for (ii = 0; ii <= 3; ii++) { + + System.out.println(""); + + System.out.print(" ".repeat(ii)); + + for (jj = 1; jj <= 4 - ii; jj++) { + + kk++; + + if (pins[kk] == 1) { + + System.out.print("O "); + + } else { + + System.out.print("+ "); + } + } + } + + System.out.println(""); + + // Roll analysis + + for (ii = 1; ii <= 10; ii++) { + pinsDownNow += pins[ii]; + } + + if (pinsDownNow - pinsDownBefore == 0) { + System.out.println("GUTTER!!"); + } + + if (ball == 1 && pinsDownNow == 10) { + System.out.println("STRIKE!!!!!"); + + // Ring bell + for (bell = 1; bell <= 4; bell++) { + System.out.print("\007"); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + result = 3; + } + + if (ball == 2 && pinsDownNow == 10) { + System.out.println("SPARE!!!!"); + result = 2; + } + + if (ball == 2 && pinsDownNow < 10) { + System.out.println("ERROR!!!"); + result = 1; + } + + if (ball == 1 && pinsDownNow < 10) { + System.out.println("ROLL YOUR 2ND BALL"); + } + + // Storage of the scores + + System.out.println(""); + + scores[frame * player][ball] = pinsDownNow; + + if (ball != 2) { + ball = 2; + pinsDownBefore = pinsDownNow; + + if (result != 3) { + scores[frame * player][ball] = pinsDownNow - pinsDownBefore; + if (result == 0) { + continue; + } + } else { + scores[frame * player][ball] = pinsDownNow; + } + + } + break; + } + + scores[frame * player][3] = result; + + } // End loop through all players + + frame++; + + } // End frame while loop + + System.out.println("FRAMES"); + + System.out.print(" "); + for (ii = 1; ii <= 10; ii++) { + System.out.print(ii + " "); + } + + System.out.println(""); + + for (player = 1; player <= numPlayers; player++) { + for (ii = 1; ii <= 3; ii++) { + System.out.print(" "); + for (jj = 1; jj <= 10; jj++) { + System.out.print (scores[jj * player][ii] + " "); + } + System.out.println(""); + } + System.out.println(""); + } + + System.out.println("DO YOU WANT ANOTHER GAME"); + System.out.print("? "); + + userResponse = scan.nextLine(); + + if (!String.valueOf(userResponse.toUpperCase().charAt(0)).equals("Y")) { + break; + } + + } // End outer while loop + + } // End of method startGame + + public void printBoard(int[] board) { + + } // End of method printBoard + + public static void printRules() { + + System.out.println("THE GAME OF BOWLING TAKES MIND AND SKILL.DURING THE GAME"); + System.out.println("THE COMPUTER WILL KEEP SCORE.YOU MAY COMPETE WITH"); + System.out.println("OTHER PLAYERS[UP TO FOUR].YOU WILL BE PLAYING TEN FRAMES"); + System.out.println("ON THE PIN DIAGRAM 'O' MEANS THE PIN IS DOWN...'+' MEANS THE"); + System.out.println("PIN IS STANDING.AFTER THE GAME THE COMPUTER WILL SHOW YOUR"); + System.out.println("SCORES ."); + + } // End of method printRules + + public static void main(String[] args) { + + Bowling game = new Bowling(); + game.play(); + + } // End of method main + +} // End of class Bowling