From eaf24739e3e8f0b8f4ff5b7e9d7c306a99620622 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Mon, 10 Jan 2022 10:05:28 -0500 Subject: [PATCH 01/11] Initial Commit, added instructions --- 75_Roulette/java/src/Roulette.java | 69 ++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 75_Roulette/java/src/Roulette.java diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java new file mode 100644 index 00000000..a07d2afd --- /dev/null +++ b/75_Roulette/java/src/Roulette.java @@ -0,0 +1,69 @@ +import java.io.PrintStream; + +public class Roulette { + + private PrintStream out; + + public static void main(String[] args) { + new Roulette(System.out).play(); + } + + public Roulette(PrintStream out) { + this.out = out; + } + + public void play() { + printInstructions(); + } + + + public void printInstructions() { + System.out.println(); + System.out.println( "THIS IS THE BETTING LAYOUT"); + System.out.println( " (*=RED)"); + System.out.println(); + System.out.println( " 1* 2 3*"); + System.out.println( " 4 5* 6 "); + System.out.println( " 7* 8 9*"); + System.out.println( "10 11 12*"); + System.out.println( "---------------"); + System.out.println( "13 14* 15 "); + System.out.println( "16* 17 18*"); + System.out.println( "19* 20 21*"); + System.out.println( "22 23* 24 "); + System.out.println( "---------------"); + System.out.println( "25* 26 27*"); + System.out.println( "28 29 30*"); + System.out.println( "31 32* 33 "); + System.out.println( "34* 35 36*"); + System.out.println( "---------------"); + System.out.println( " 00 0 "); + System.out.println(); + System.out.println( "TYPES OF BETS"); + System.out.println(); + System.out.println( "THE NUMBERS 1 TO 36 SIGNIFY A STRAIGHT BET"); + System.out.println( "ON THAT NUMBER."); + System.out.println( "THESE PAY OFF 35:1"); + System.out.println(); + System.out.println( "THE 2:1 BETS ARE:"); + System.out.println( " 37) 1-12 40) FIRST COLUMN"); + System.out.println( " 38) 13-24 41) SECOND COLUMN"); + System.out.println( " 39) 25-36 42) THIRD COLUMN"); + System.out.println(); + System.out.println( "THE EVEN MONEY BETS ARE:"); + System.out.println( " 43) 1-18 46) ODD"); + System.out.println( " 44) 19-36 47) RED"); + System.out.println( " 45) EVEN 48) BLACK"); + System.out.println(); + System.out.println( " 49)0 AND 50)00 PAY OFF 35:1"); + System.out.println( " NOTE: 0 AND 00 DO NOT COUNT UNDER ANY"); + System.out.println( " BETS EXCEPT THEIR OWN."); + System.out.println(); + System.out.println( "WHEN I ASK FOR EACH BET, TYPE THE NUMBER"); + System.out.println( "AND THE AMOUNT, SEPARATED BY A COMMA."); + System.out.println( "FOR EXAMPLE: TO BET $500 ON BLACK, TYPE 48,500"); + System.out.println( "WHEN I ASK FOR A BET."); + System.out.println(); + System.out.println( "THE MINIMUM BET IS $5, THE MAXIMUM IS $500."); + } +} From b97f4f5e3e404970124e78bb55674cee8e38d4a1 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Mon, 10 Jan 2022 10:44:49 -0500 Subject: [PATCH 02/11] Added querying of bets and randomized roll --- 75_Roulette/java/src/Roulette.java | 198 +++++++++++++++++++++-------- 1 file changed, 147 insertions(+), 51 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index a07d2afd..3522364d 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -1,69 +1,165 @@ +import java.io.InputStream; import java.io.PrintStream; +import java.util.*; public class Roulette { private PrintStream out; + private Scanner scanner; - public static void main(String[] args) { - new Roulette(System.out).play(); + private int houseBalance, playerBalance; + + private Random random; + + private static Set RED_NUMBERS; + + static { + RED_NUMBERS = Set.of(1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36); } - public Roulette(PrintStream out) { + public static void main(String[] args) { + new Roulette(System.out, System.in).play(); + } + + public Roulette(PrintStream out, InputStream in) { this.out = out; + this.scanner = new Scanner(in); + houseBalance = 100000; + playerBalance = 1000; + random = new Random(); } public void play() { - printInstructions(); + out.println(" ROULETTE"); + out.println(" CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); + out.println("WELCOME TO THE ROULETTE TABLE\n"); + out.println("DO YOU WANT INSTRUCTIONS"); + if(scanner.nextLine().toLowerCase().charAt(0) != 'n') { + printInstructions(); + } + + while(houseBalance > 0 && playerBalance > 0) { + + Bet[] bets = queryBets(); + + out.println("SPINNING...\n\n\n"); + int result = random.nextInt(1,39); + + /* + Equivalent to following line + if(RED_NUMBERS.contains(result)) { + out.println(result + " RED"); + } else { + out.println(result + " BLACK"); + } + */ + out.println(result + (RED_NUMBERS.contains(result) ? " RED\n" : " BLACK\n")); + + + } } + private Bet[] queryBets() { + int numBets = -1; + while(numBets < 1) { + out.println("HOW MANY BETS"); + try { + numBets = Integer.parseInt(scanner.nextLine()); + } catch(NumberFormatException exception) { + out.println("THAT IS NOT A NUMBER"); + } + } + + Bet[] bets = new Bet[numBets]; + + for(int i = 0; i < numBets; i++) { + try { + out.println("BET NUMBER " + (i + 1) + ":"); + String[] values = scanner.nextLine().split(","); + int betNumber = Integer.parseInt(values[0]); + int betValue = Integer.parseInt(values[1]); + + for(int j = 0; j < i; j++) { + if(bets[j].number == betNumber) { + out.println("YOU MADE THAT BET ONCE ALREADY,DUM-DUM"); + throw new Exception(); + } + } + + if(betNumber < 1 || betNumber > 50 || betValue < 5 || betValue > 500) { + out.println("INVALID VALUE, TRY AGAIN"); + i--; + continue; + } + + bets[i] = new Bet(betNumber,betValue); + + } catch(Exception exception) { + if(exception instanceof NumberFormatException) { + out.println("SYNTAX ERROR, TRY AGAIN"); + } + i--; + } + } + return bets; + } public void printInstructions() { - System.out.println(); - System.out.println( "THIS IS THE BETTING LAYOUT"); - System.out.println( " (*=RED)"); - System.out.println(); - System.out.println( " 1* 2 3*"); - System.out.println( " 4 5* 6 "); - System.out.println( " 7* 8 9*"); - System.out.println( "10 11 12*"); - System.out.println( "---------------"); - System.out.println( "13 14* 15 "); - System.out.println( "16* 17 18*"); - System.out.println( "19* 20 21*"); - System.out.println( "22 23* 24 "); - System.out.println( "---------------"); - System.out.println( "25* 26 27*"); - System.out.println( "28 29 30*"); - System.out.println( "31 32* 33 "); - System.out.println( "34* 35 36*"); - System.out.println( "---------------"); - System.out.println( " 00 0 "); - System.out.println(); - System.out.println( "TYPES OF BETS"); - System.out.println(); - System.out.println( "THE NUMBERS 1 TO 36 SIGNIFY A STRAIGHT BET"); - System.out.println( "ON THAT NUMBER."); - System.out.println( "THESE PAY OFF 35:1"); - System.out.println(); - System.out.println( "THE 2:1 BETS ARE:"); - System.out.println( " 37) 1-12 40) FIRST COLUMN"); - System.out.println( " 38) 13-24 41) SECOND COLUMN"); - System.out.println( " 39) 25-36 42) THIRD COLUMN"); - System.out.println(); - System.out.println( "THE EVEN MONEY BETS ARE:"); - System.out.println( " 43) 1-18 46) ODD"); - System.out.println( " 44) 19-36 47) RED"); - System.out.println( " 45) EVEN 48) BLACK"); - System.out.println(); - System.out.println( " 49)0 AND 50)00 PAY OFF 35:1"); - System.out.println( " NOTE: 0 AND 00 DO NOT COUNT UNDER ANY"); - System.out.println( " BETS EXCEPT THEIR OWN."); - System.out.println(); - System.out.println( "WHEN I ASK FOR EACH BET, TYPE THE NUMBER"); - System.out.println( "AND THE AMOUNT, SEPARATED BY A COMMA."); - System.out.println( "FOR EXAMPLE: TO BET $500 ON BLACK, TYPE 48,500"); - System.out.println( "WHEN I ASK FOR A BET."); - System.out.println(); - System.out.println( "THE MINIMUM BET IS $5, THE MAXIMUM IS $500."); + out.println(); + out.println( "THIS IS THE BETTING LAYOUT"); + out.println( " (*=RED)"); + out.println(); + out.println( " 1* 2 3*"); + out.println( " 4 5* 6 "); + out.println( " 7* 8 9*"); + out.println( "10 11 12*"); + out.println( "---------------"); + out.println( "13 14* 15 "); + out.println( "16* 17 18*"); + out.println( "19* 20 21*"); + out.println( "22 23* 24 "); + out.println( "---------------"); + out.println( "25* 26 27*"); + out.println( "28 29 30*"); + out.println( "31 32* 33 "); + out.println( "34* 35 36*"); + out.println( "---------------"); + out.println( " 00 0 "); + out.println(); + out.println( "TYPES OF BETS"); + out.println(); + out.println( "THE NUMBERS 1 TO 36 SIGNIFY A STRAIGHT BET"); + out.println( "ON THAT NUMBER."); + out.println( "THESE PAY OFF 35:1"); + out.println(); + out.println( "THE 2:1 BETS ARE:"); + out.println( " 37) 1-12 40) FIRST COLUMN"); + out.println( " 38) 13-24 41) SECOND COLUMN"); + out.println( " 39) 25-36 42) THIRD COLUMN"); + out.println(); + out.println( "THE EVEN MONEY BETS ARE:"); + out.println( " 43) 1-18 46) ODD"); + out.println( " 44) 19-36 47) RED"); + out.println( " 45) EVEN 48) BLACK"); + out.println(); + out.println( " 49)0 AND 50)00 PAY OFF 35:1"); + out.println( " NOTE: 0 AND 00 DO NOT COUNT UNDER ANY"); + out.println( " BETS EXCEPT THEIR OWN."); + out.println(); + out.println( "WHEN I ASK FOR EACH BET, TYPE THE NUMBER"); + out.println( "AND THE AMOUNT, SEPARATED BY A COMMA."); + out.println( "FOR EXAMPLE: TO BET $500 ON BLACK, TYPE 48,500"); + out.println( "WHEN I ASK FOR A BET."); + out.println(); + out.println( "THE MINIMUM BET IS $5, THE MAXIMUM IS $500."); + } + + public class Bet { + final int number, value; + + public Bet(int number, int value) { + this.number = number; + this.value = value; + } } } From c32798aa755eddc94a878faf09e8c72f9732dd45 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Mon, 10 Jan 2022 11:14:10 -0500 Subject: [PATCH 03/11] Added bet checking conditions --- 75_Roulette/java/src/Roulette.java | 45 ++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 3522364d..533afe4e 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -53,7 +53,11 @@ public class Roulette { out.println(result + " BLACK"); } */ - out.println(result + (RED_NUMBERS.contains(result) ? " RED\n" : " BLACK\n")); + switch(result) { + case 37 -> out.print("00"); + case 38 -> out.print("0"); + default -> out.println(result + (RED_NUMBERS.contains(result) ? " RED\n" : " BLACK\n")); + } } @@ -80,7 +84,7 @@ public class Roulette { int betValue = Integer.parseInt(values[1]); for(int j = 0; j < i; j++) { - if(bets[j].number == betNumber) { + if(bets[j].num == betNumber) { out.println("YOU MADE THAT BET ONCE ALREADY,DUM-DUM"); throw new Exception(); } @@ -104,6 +108,35 @@ public class Roulette { return bets; } + private void betResults(Bet[] bets, int num) { + for(int i = 0; i < bets.length; i++) { + Bet bet = bets[i]; + /* + Using a switch statement of ternary operators that check if a certain condition is met based on the bet value + Returns the coefficient that the bet amount should be multiplied by to get the resulting value + */ + int coefficient = switch(bet.num) { + case 37 -> (num <= 12) ? 2 : -1; + case 38 -> (num > 12 && num <= 24) ? 2 : -1; + case 39 -> (num > 24 && num < 37) ? 2 : -1; + case 40 -> (num < 37 && num % 3 == 1) ? 2 : -1; + case 41 -> (num < 37 && num % 3 == 2) ? 2 : -1; + case 42 -> (num < 37 && num % 3 == 0) ? 2 : -1; + case 43 -> (num <= 18) ? 1 : -1; + case 44 -> (num > 18 && num <= 36) ? 1 : -1; + case 45 -> (num % 2 == 0) ? 1 : -1; + case 46 -> (num % 2 == 1) ? 1 : -1; + case 47 -> RED_NUMBERS.contains(num) ? 1 : -1; + case 48 -> !RED_NUMBERS.contains(num) ? 1 : -1; + case 49 -> (num == 37) ? 35 : -1; + case 50 -> (num == 38) ? 35 : -1; + default -> (bet.num < 49 && bet.num == num) ? 35 : -1; + }; + + int betResult = bet.amount * coefficient; + } + } + public void printInstructions() { out.println(); out.println( "THIS IS THE BETTING LAYOUT"); @@ -155,11 +188,11 @@ public class Roulette { } public class Bet { - final int number, value; + final int num, amount; - public Bet(int number, int value) { - this.number = number; - this.value = value; + public Bet(int num, int amount) { + this.num = num; + this.amount = amount; } } } From a40c2fc5345b69bd4658e69d5657fc76e4836c42 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Mon, 10 Jan 2022 11:29:50 -0500 Subject: [PATCH 04/11] Added replay and ending I think... --- 75_Roulette/java/src/Roulette.java | 42 +++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 533afe4e..49d14275 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -1,5 +1,6 @@ import java.io.InputStream; import java.io.PrintStream; +import java.lang.management.PlatformLoggingMXBean; import java.util.*; public class Roulette { @@ -38,7 +39,7 @@ public class Roulette { printInstructions(); } - while(houseBalance > 0 && playerBalance > 0) { + do { Bet[] bets = queryBets(); @@ -53,13 +54,33 @@ public class Roulette { out.println(result + " BLACK"); } */ - switch(result) { - case 37 -> out.print("00"); - case 38 -> out.print("0"); - default -> out.println(result + (RED_NUMBERS.contains(result) ? " RED\n" : " BLACK\n")); - } + switch(result) { + case 37 -> out.print("00"); + case 38 -> out.print("0"); + default -> out.println(result + (RED_NUMBERS.contains(result) ? " RED\n" : " BLACK\n")); + } + betResults(bets,result); + out.println(); + out.println("TOTALS:"); + out.println("\tME: " + houseBalance); + out.println("\tYOU " + playerBalance); + + } while(playAgain()); + if(playerBalance <= 0) { + out.println("OOPS! YOU JUST SPENT YOUR LAST DOLLAR!"); + } else if(houseBalance <= 0) { + out.println("YOU BROKE THE HOUSE!"); + } + } + + private boolean playAgain() { + if(playerBalance > 0 && houseBalance > 0) { + out.println("PLAY AGAIN?"); + return scanner.nextLine().toLowerCase().charAt(0) == 'y'; + } else { + return false; } } @@ -134,6 +155,15 @@ public class Roulette { }; int betResult = bet.amount * coefficient; + + if(betResult < 0) { + out.println("YOU LOSE " + -betResult + " DOLLARS ON BET " + (i + 1)); + } else { + out.println("YOU WIN " + betResult + " DOLLARS ON BET " + (i + 1)); + } + + playerBalance += betResult; + houseBalance -= betResult; } } From 2dc63bb95a75326a78472a8698638c6e829ce258 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Mon, 10 Jan 2022 11:41:02 -0500 Subject: [PATCH 05/11] Still unsure about $$ Is the check for the difference? Is it only when the house cannot pay what it owes? --- 75_Roulette/java/src/Roulette.java | 47 ++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 49d14275..c6e46152 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -1,6 +1,7 @@ import java.io.InputStream; import java.io.PrintStream; import java.lang.management.PlatformLoggingMXBean; +import java.time.LocalDateTime; import java.util.*; public class Roulette { @@ -69,14 +70,54 @@ public class Roulette { } while(playAgain()); if(playerBalance <= 0) { - out.println("OOPS! YOU JUST SPENT YOUR LAST DOLLAR!"); + out.println("THANKS FOR YOUR MONEY\nI'LL USE IT TO BUY A SOLID GOLD ROULETTE WHEEL"); } else if(houseBalance <= 0) { - out.println("YOU BROKE THE HOUSE!"); + out.println("TO WHOM SHALL I MAKE THE CHECK"); + String name = scanner.nextLine(); + out.println(); + for(int i = 0; i < 72; i++) { + out.print("-"); + } + out.println(); + for(int i = 0; i < 50; i++) { + out.print(" "); + } + out.println("CHECK NO. " + random.nextInt(0,1000)); + out.println(); + for(int i = 0; i < 40; i++) { + out.print(" "); + } + out.println(LocalDateTime.now()); + out.println("\n"); + out.println("PAY TO THE ORDER OF----- " + name + "------$" + (playerBalance - 1000)); + out.println("\n"); + for(int i = 0; i < 10; i++) { + out.print(" "); + } + out.println("THE MEMORY BANK OF NEW YORK"); + for(int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("THE COMPUTER"); + for(int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("----------X-----"); + for(int i = 0; i < 72; i++) { + out.print("-"); + } + out.println("\n"); + out.println("COME BACK SOON"); } } private boolean playAgain() { - if(playerBalance > 0 && houseBalance > 0) { + if(playerBalance > 0) { + if(houseBalance <= 0) { + out.println("YOU BROKE THE HOUSE!"); + //using default values + playerBalance = 101000; + } out.println("PLAY AGAIN?"); return scanner.nextLine().toLowerCase().charAt(0) == 'y'; } else { From f7f10d52f35e89dc5db764ea571c4e3f57d830c0 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Mon, 10 Jan 2022 15:18:46 -0500 Subject: [PATCH 06/11] Formatted "Totals" output Slowly going through and making output true to the original BASIC code --- 75_Roulette/java/src/Roulette.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index c6e46152..84986db1 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -63,10 +63,9 @@ public class Roulette { betResults(bets,result); out.println(); - - out.println("TOTALS:"); - out.println("\tME: " + houseBalance); - out.println("\tYOU " + playerBalance); + + out.println("TOTALS:\tME\tYOU"); + out.println("\t\t" + houseBalance + "\t" + playerBalance); } while(playAgain()); if(playerBalance <= 0) { From 2885acd95195bcb167e0866d107cfd471de3d6e3 Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Tue, 11 Jan 2022 14:10:42 -0500 Subject: [PATCH 07/11] Match Formatting to Original Program --- 75_Roulette/java/src/Roulette.java | 174 +++++++++++++++-------------- 1 file changed, 91 insertions(+), 83 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 84986db1..3bb042a5 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -1,7 +1,7 @@ import java.io.InputStream; import java.io.PrintStream; -import java.lang.management.PlatformLoggingMXBean; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; public class Roulette { @@ -35,135 +35,143 @@ public class Roulette { out.println(" ROULETTE"); out.println(" CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); out.println("WELCOME TO THE ROULETTE TABLE\n"); - out.println("DO YOU WANT INSTRUCTIONS"); + out.print("DO YOU WANT INSTRUCTIONS? "); if(scanner.nextLine().toLowerCase().charAt(0) != 'n') { printInstructions(); } + do { Bet[] bets = queryBets(); - out.println("SPINNING...\n\n\n"); + out.print("SPINNING...\n\n"); int result = random.nextInt(1,39); /* Equivalent to following line - if(RED_NUMBERS.contains(result)) { + if(result == 37) { + out.println("00"); + } else if(result == 38) { + out.println("0"); + } else if(RED_NUMBERS.contains(result)) { out.println(result + " RED"); } else { out.println(result + " BLACK"); } */ - switch(result) { - case 37 -> out.print("00"); - case 38 -> out.print("0"); - default -> out.println(result + (RED_NUMBERS.contains(result) ? " RED\n" : " BLACK\n")); - } + out.println(switch(result) { + case 37 -> "00"; + case 38 -> "0"; + default -> result + (RED_NUMBERS.contains(result) ? " RED" : " BLACK"); + }); betResults(bets,result); out.println(); - out.println("TOTALS:\tME\tYOU"); - out.println("\t\t" + houseBalance + "\t" + playerBalance); + out.println("TOTALS:\tME\t\tYOU"); + out.format("\t\t%5d\t%d\n",houseBalance,playerBalance); } while(playAgain()); if(playerBalance <= 0) { out.println("THANKS FOR YOUR MONEY\nI'LL USE IT TO BUY A SOLID GOLD ROULETTE WHEEL"); - } else if(houseBalance <= 0) { - out.println("TO WHOM SHALL I MAKE THE CHECK"); - String name = scanner.nextLine(); - out.println(); - for(int i = 0; i < 72; i++) { - out.print("-"); - } - out.println(); - for(int i = 0; i < 50; i++) { - out.print(" "); - } - out.println("CHECK NO. " + random.nextInt(0,1000)); - out.println(); - for(int i = 0; i < 40; i++) { - out.print(" "); - } - out.println(LocalDateTime.now()); - out.println("\n"); - out.println("PAY TO THE ORDER OF----- " + name + "------$" + (playerBalance - 1000)); - out.println("\n"); - for(int i = 0; i < 10; i++) { - out.print(" "); - } - out.println("THE MEMORY BANK OF NEW YORK"); - for(int i = 0; i < 40; i++) { - out.print(" "); - } - out.println("THE COMPUTER"); - for(int i = 0; i < 40; i++) { - out.print(" "); - } - out.println("----------X-----"); - for(int i = 0; i < 72; i++) { - out.print("-"); - } - out.println("\n"); - out.println("COME BACK SOON"); + } else { + printCheck(); } + out.println("COME BACK SOON!"); + } + + private void printCheck() { + out.print("TO WHOM SHALL I MAKE THE CHECK? "); + String name = scanner.nextLine(); + + out.println(); + for(int i = 0; i < 72; i++) { + out.print("-"); + } + out.println(); + + for(int i = 0; i < 50; i++) { + out.print(" "); + } + out.println("CHECK NO. " + random.nextInt(0,100)); + + for(int i = 0; i< 40; i++) { + out.print(" "); + } + out.println(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE)); + out.println(); + + out.println("PAY TO THE ORDER OF -----" + name + "----- $" + (playerBalance)); + out.println(); + + for(int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("THE MEMORY BANK OF NEW YORK"); + + for(int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("THE COMPUTER"); + + for(int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("----------X-----"); + + for(int i = 0; i < 72; i++) { + out.print("-"); + } + out.println(); } private boolean playAgain() { - if(playerBalance > 0) { - if(houseBalance <= 0) { - out.println("YOU BROKE THE HOUSE!"); - //using default values - playerBalance = 101000; - } + + if(playerBalance <= 0) { + out.println("OOPS! YOU JUST SPENT YOUR LAST DOLLAR!"); + return false; + } else if(houseBalance <= 0) { + out.println("YOU BROKE THE HOUSE!"); + playerBalance = 10100; + houseBalance = 0; + return false; + } else { out.println("PLAY AGAIN?"); return scanner.nextLine().toLowerCase().charAt(0) == 'y'; - } else { - return false; } } private Bet[] queryBets() { int numBets = -1; while(numBets < 1) { - out.println("HOW MANY BETS"); + out.print("HOW MANY BETS? "); try { numBets = Integer.parseInt(scanner.nextLine()); - } catch(NumberFormatException exception) { - out.println("THAT IS NOT A NUMBER"); - } + } catch(NumberFormatException ignored) {} } Bet[] bets = new Bet[numBets]; for(int i = 0; i < numBets; i++) { - try { - out.println("BET NUMBER " + (i + 1) + ":"); - String[] values = scanner.nextLine().split(","); - int betNumber = Integer.parseInt(values[0]); - int betValue = Integer.parseInt(values[1]); + while(bets[i] == null) { + try { + out.print("NUMBER" + (i + 1) + "? "); + String[] values = scanner.nextLine().split(","); + int betNumber = Integer.parseInt(values[0]); + int betValue = Integer.parseInt(values[1]); - for(int j = 0; j < i; j++) { - if(bets[j].num == betNumber) { - out.println("YOU MADE THAT BET ONCE ALREADY,DUM-DUM"); - throw new Exception(); + for(int j = 0; j < i; j++) { + if(bets[j].num == betNumber) { + out.println("YOU MADE THAT BET ONCE ALREADY,DUM-DUM"); + betNumber = -1; //Since -1 is out of the range, this will throw it out at the end + } } - } - if(betNumber < 1 || betNumber > 50 || betValue < 5 || betValue > 500) { - out.println("INVALID VALUE, TRY AGAIN"); - i--; - continue; - } - - bets[i] = new Bet(betNumber,betValue); - - } catch(Exception exception) { - if(exception instanceof NumberFormatException) { - out.println("SYNTAX ERROR, TRY AGAIN"); - } - i--; + if(betNumber > 0 && betNumber <= 50 && betValue >= 5 && betValue <= 500) { + bets[i] = new Bet(betValue,betNumber); + } + } catch(Exception ignored) {} } } return bets; From f43e31fb83cdb7ca47e59ca3514da82bbf0ca25d Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Tue, 11 Jan 2022 14:15:37 -0500 Subject: [PATCH 08/11] Re-Formatted Code --- 75_Roulette/java/src/Roulette.java | 263 +++++++++++++++-------------- 1 file changed, 132 insertions(+), 131 deletions(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 3bb042a5..5fed5c65 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -2,26 +2,22 @@ import java.io.InputStream; import java.io.PrintStream; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.Random; +import java.util.Scanner; +import java.util.Set; public class Roulette { - private PrintStream out; - private Scanner scanner; - - private int houseBalance, playerBalance; - - private Random random; - private static Set RED_NUMBERS; static { RED_NUMBERS = Set.of(1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36); } - public static void main(String[] args) { - new Roulette(System.out, System.in).play(); - } + private PrintStream out; + private Scanner scanner; + private int houseBalance, playerBalance; + private Random random; public Roulette(PrintStream out, InputStream in) { this.out = out; @@ -31,22 +27,25 @@ public class Roulette { random = new Random(); } + public static void main(String[] args) { + new Roulette(System.out, System.in).play(); + } + public void play() { out.println(" ROULETTE"); out.println(" CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); out.println("WELCOME TO THE ROULETTE TABLE\n"); out.print("DO YOU WANT INSTRUCTIONS? "); - if(scanner.nextLine().toLowerCase().charAt(0) != 'n') { + if (scanner.nextLine().toLowerCase().charAt(0) != 'n') { printInstructions(); } - do { Bet[] bets = queryBets(); out.print("SPINNING...\n\n"); - int result = random.nextInt(1,39); + int result = random.nextInt(1, 39); /* Equivalent to following line @@ -60,20 +59,19 @@ public class Roulette { out.println(result + " BLACK"); } */ - out.println(switch(result) { + out.println(switch (result) { case 37 -> "00"; case 38 -> "0"; - default -> result + (RED_NUMBERS.contains(result) ? " RED" : " BLACK"); + default -> result + (RED_NUMBERS.contains(result) ? " RED" : " BLACK"); }); - betResults(bets,result); + betResults(bets, result); out.println(); - - out.println("TOTALS:\tME\t\tYOU"); - out.format("\t\t%5d\t%d\n",houseBalance,playerBalance); - } while(playAgain()); - if(playerBalance <= 0) { + out.println("TOTALS:\tME\t\tYOU"); + out.format("\t\t%5d\t%d\n", houseBalance, playerBalance); + } while (playAgain()); + if (playerBalance <= 0) { out.println("THANKS FOR YOUR MONEY\nI'LL USE IT TO BUY A SOLID GOLD ROULETTE WHEEL"); } else { printCheck(); @@ -81,110 +79,101 @@ public class Roulette { out.println("COME BACK SOON!"); } - private void printCheck() { - out.print("TO WHOM SHALL I MAKE THE CHECK? "); - String name = scanner.nextLine(); - + public void printInstructions() { out.println(); - for(int i = 0; i < 72; i++) { - out.print("-"); - } + out.println("THIS IS THE BETTING LAYOUT"); + out.println(" (*=RED)"); out.println(); - - for(int i = 0; i < 50; i++) { - out.print(" "); - } - out.println("CHECK NO. " + random.nextInt(0,100)); - - for(int i = 0; i< 40; i++) { - out.print(" "); - } - out.println(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE)); + out.println(" 1* 2 3*"); + out.println(" 4 5* 6 "); + out.println(" 7* 8 9*"); + out.println("10 11 12*"); + out.println("---------------"); + out.println("13 14* 15 "); + out.println("16* 17 18*"); + out.println("19* 20 21*"); + out.println("22 23* 24 "); + out.println("---------------"); + out.println("25* 26 27*"); + out.println("28 29 30*"); + out.println("31 32* 33 "); + out.println("34* 35 36*"); + out.println("---------------"); + out.println(" 00 0 "); out.println(); - - out.println("PAY TO THE ORDER OF -----" + name + "----- $" + (playerBalance)); + out.println("TYPES OF BETS"); out.println(); - - for(int i = 0; i < 40; i++) { - out.print(" "); - } - out.println("THE MEMORY BANK OF NEW YORK"); - - for(int i = 0; i < 40; i++) { - out.print(" "); - } - out.println("THE COMPUTER"); - - for(int i = 0; i < 40; i++) { - out.print(" "); - } - out.println("----------X-----"); - - for(int i = 0; i < 72; i++) { - out.print("-"); - } + out.println("THE NUMBERS 1 TO 36 SIGNIFY A STRAIGHT BET"); + out.println("ON THAT NUMBER."); + out.println("THESE PAY OFF 35:1"); out.println(); - } - - private boolean playAgain() { - - if(playerBalance <= 0) { - out.println("OOPS! YOU JUST SPENT YOUR LAST DOLLAR!"); - return false; - } else if(houseBalance <= 0) { - out.println("YOU BROKE THE HOUSE!"); - playerBalance = 10100; - houseBalance = 0; - return false; - } else { - out.println("PLAY AGAIN?"); - return scanner.nextLine().toLowerCase().charAt(0) == 'y'; - } + out.println("THE 2:1 BETS ARE:"); + out.println(" 37) 1-12 40) FIRST COLUMN"); + out.println(" 38) 13-24 41) SECOND COLUMN"); + out.println(" 39) 25-36 42) THIRD COLUMN"); + out.println(); + out.println("THE EVEN MONEY BETS ARE:"); + out.println(" 43) 1-18 46) ODD"); + out.println(" 44) 19-36 47) RED"); + out.println(" 45) EVEN 48) BLACK"); + out.println(); + out.println(" 49)0 AND 50)00 PAY OFF 35:1"); + out.println(" NOTE: 0 AND 00 DO NOT COUNT UNDER ANY"); + out.println(" BETS EXCEPT THEIR OWN."); + out.println(); + out.println("WHEN I ASK FOR EACH BET, TYPE THE NUMBER"); + out.println("AND THE AMOUNT, SEPARATED BY A COMMA."); + out.println("FOR EXAMPLE: TO BET $500 ON BLACK, TYPE 48,500"); + out.println("WHEN I ASK FOR A BET."); + out.println(); + out.println("THE MINIMUM BET IS $5, THE MAXIMUM IS $500."); } private Bet[] queryBets() { int numBets = -1; - while(numBets < 1) { + while (numBets < 1) { out.print("HOW MANY BETS? "); try { numBets = Integer.parseInt(scanner.nextLine()); - } catch(NumberFormatException ignored) {} + } catch (NumberFormatException ignored) { + } } Bet[] bets = new Bet[numBets]; - for(int i = 0; i < numBets; i++) { - while(bets[i] == null) { + for (int i = 0; i < numBets; i++) { + while (bets[i] == null) { try { out.print("NUMBER" + (i + 1) + "? "); String[] values = scanner.nextLine().split(","); int betNumber = Integer.parseInt(values[0]); int betValue = Integer.parseInt(values[1]); - for(int j = 0; j < i; j++) { - if(bets[j].num == betNumber) { + for (int j = 0; j < i; j++) { + if (bets[j].num == betNumber) { out.println("YOU MADE THAT BET ONCE ALREADY,DUM-DUM"); betNumber = -1; //Since -1 is out of the range, this will throw it out at the end } } - if(betNumber > 0 && betNumber <= 50 && betValue >= 5 && betValue <= 500) { - bets[i] = new Bet(betValue,betNumber); + if (betNumber > 0 && betNumber <= 50 && betValue >= 5 && betValue <= 500) { + bets[i] = new Bet(betValue, betNumber); } - } catch(Exception ignored) {} + } catch (Exception ignored) { + } } } return bets; } private void betResults(Bet[] bets, int num) { - for(int i = 0; i < bets.length; i++) { + for (int i = 0; i < bets.length; i++) { Bet bet = bets[i]; /* Using a switch statement of ternary operators that check if a certain condition is met based on the bet value Returns the coefficient that the bet amount should be multiplied by to get the resulting value */ - int coefficient = switch(bet.num) { + int coefficient = switch (bet.num) { case 37 -> (num <= 12) ? 2 : -1; case 38 -> (num > 12 && num <= 24) ? 2 : -1; case 39 -> (num > 24 && num < 37) ? 2 : -1; @@ -204,7 +193,7 @@ public class Roulette { int betResult = bet.amount * coefficient; - if(betResult < 0) { + if (betResult < 0) { out.println("YOU LOSE " + -betResult + " DOLLARS ON BET " + (i + 1)); } else { out.println("YOU WIN " + betResult + " DOLLARS ON BET " + (i + 1)); @@ -215,57 +204,69 @@ public class Roulette { } } - public void printInstructions() { + private boolean playAgain() { + + if (playerBalance <= 0) { + out.println("OOPS! YOU JUST SPENT YOUR LAST DOLLAR!"); + return false; + } else if (houseBalance <= 0) { + out.println("YOU BROKE THE HOUSE!"); + playerBalance = 10100; + houseBalance = 0; + return false; + } else { + out.println("PLAY AGAIN?"); + return scanner.nextLine().toLowerCase().charAt(0) == 'y'; + } + } + + private void printCheck() { + out.print("TO WHOM SHALL I MAKE THE CHECK? "); + String name = scanner.nextLine(); + out.println(); - out.println( "THIS IS THE BETTING LAYOUT"); - out.println( " (*=RED)"); + for (int i = 0; i < 72; i++) { + out.print("-"); + } out.println(); - out.println( " 1* 2 3*"); - out.println( " 4 5* 6 "); - out.println( " 7* 8 9*"); - out.println( "10 11 12*"); - out.println( "---------------"); - out.println( "13 14* 15 "); - out.println( "16* 17 18*"); - out.println( "19* 20 21*"); - out.println( "22 23* 24 "); - out.println( "---------------"); - out.println( "25* 26 27*"); - out.println( "28 29 30*"); - out.println( "31 32* 33 "); - out.println( "34* 35 36*"); - out.println( "---------------"); - out.println( " 00 0 "); + + for (int i = 0; i < 50; i++) { + out.print(" "); + } + out.println("CHECK NO. " + random.nextInt(0, 100)); + + for (int i = 0; i < 40; i++) { + out.print(" "); + } + out.println(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE)); out.println(); - out.println( "TYPES OF BETS"); + + out.println("PAY TO THE ORDER OF -----" + name + "----- $" + (playerBalance)); out.println(); - out.println( "THE NUMBERS 1 TO 36 SIGNIFY A STRAIGHT BET"); - out.println( "ON THAT NUMBER."); - out.println( "THESE PAY OFF 35:1"); + + for (int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("THE MEMORY BANK OF NEW YORK"); + + for (int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("THE COMPUTER"); + + for (int i = 0; i < 40; i++) { + out.print(" "); + } + out.println("----------X-----"); + + for (int i = 0; i < 72; i++) { + out.print("-"); + } out.println(); - out.println( "THE 2:1 BETS ARE:"); - out.println( " 37) 1-12 40) FIRST COLUMN"); - out.println( " 38) 13-24 41) SECOND COLUMN"); - out.println( " 39) 25-36 42) THIRD COLUMN"); - out.println(); - out.println( "THE EVEN MONEY BETS ARE:"); - out.println( " 43) 1-18 46) ODD"); - out.println( " 44) 19-36 47) RED"); - out.println( " 45) EVEN 48) BLACK"); - out.println(); - out.println( " 49)0 AND 50)00 PAY OFF 35:1"); - out.println( " NOTE: 0 AND 00 DO NOT COUNT UNDER ANY"); - out.println( " BETS EXCEPT THEIR OWN."); - out.println(); - out.println( "WHEN I ASK FOR EACH BET, TYPE THE NUMBER"); - out.println( "AND THE AMOUNT, SEPARATED BY A COMMA."); - out.println( "FOR EXAMPLE: TO BET $500 ON BLACK, TYPE 48,500"); - out.println( "WHEN I ASK FOR A BET."); - out.println(); - out.println( "THE MINIMUM BET IS $5, THE MAXIMUM IS $500."); } public class Bet { + final int num, amount; public Bet(int num, int amount) { From 5dff7851296a53d73d4d1e2e5f56604de7cc0d6a Mon Sep 17 00:00:00 2001 From: Thomas Kwashnak Date: Tue, 11 Jan 2022 15:56:31 -0500 Subject: [PATCH 09/11] Fixed numerical typo --- 75_Roulette/java/src/Roulette.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 5fed5c65..77ea2703 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -211,7 +211,7 @@ public class Roulette { return false; } else if (houseBalance <= 0) { out.println("YOU BROKE THE HOUSE!"); - playerBalance = 10100; + playerBalance = 101000; houseBalance = 0; return false; } else { From 1317d9ee16b15b4f1221955e15e3b7c71d8044f9 Mon Sep 17 00:00:00 2001 From: LittleTealeaf Date: Tue, 11 Jan 2022 16:04:44 -0500 Subject: [PATCH 10/11] Player balance is now deducted on bets --- 75_Roulette/java/src/Roulette.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 5fed5c65..56bcb1e5 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -157,7 +157,8 @@ public class Roulette { } if (betNumber > 0 && betNumber <= 50 && betValue >= 5 && betValue <= 500) { - bets[i] = new Bet(betValue, betNumber); + bets[i] = new Bet(betNumber,betValue); + playerBalance -= betValue; } } catch (Exception ignored) { } From 5c3a7e67fa2ad872eeeff3d094b31602785dec6d Mon Sep 17 00:00:00 2001 From: LittleTealeaf Date: Tue, 11 Jan 2022 16:05:16 -0500 Subject: [PATCH 11/11] Reverting previous commit --- 75_Roulette/java/src/Roulette.java | 1 - 1 file changed, 1 deletion(-) diff --git a/75_Roulette/java/src/Roulette.java b/75_Roulette/java/src/Roulette.java index 56bcb1e5..30c25091 100644 --- a/75_Roulette/java/src/Roulette.java +++ b/75_Roulette/java/src/Roulette.java @@ -158,7 +158,6 @@ public class Roulette { if (betNumber > 0 && betNumber <= 50 && betValue >= 5 && betValue <= 500) { bets[i] = new Bet(betNumber,betValue); - playerBalance -= betValue; } } catch (Exception ignored) { }