From c9892581ce77da8731eaf1d44873dd44d0af6b69 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Mon, 15 Mar 2021 11:24:11 -0400 Subject: [PATCH 01/72] git test --- src/test/java/io/zipcoder/casino/CasinoTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/io/zipcoder/casino/CasinoTest.java b/src/test/java/io/zipcoder/casino/CasinoTest.java index e92865236..627be16f2 100644 --- a/src/test/java/io/zipcoder/casino/CasinoTest.java +++ b/src/test/java/io/zipcoder/casino/CasinoTest.java @@ -2,4 +2,7 @@ public class CasinoTest { + + // git push test + } From b33deed367c828f40931c71282886304dc8e09b1 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Mon, 15 Mar 2021 19:58:05 -0400 Subject: [PATCH 02/72] UML Diagram --- src/Casino Structure.png | Bin 0 -> 290691 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Casino Structure.png diff --git a/src/Casino Structure.png b/src/Casino Structure.png new file mode 100644 index 0000000000000000000000000000000000000000..0c645660ecb0e6e95f2ef3f7244e95445a04ca4d GIT binary patch literal 290691 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≥gih9Sfwqy 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

pu1_wolL0 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

nl)M) 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%0A{ULWpH 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 I_VD@t0m3MQg8%>k literal 0 HcmV?d00001 From f4f013c30958dba0ebd42b429b019c52c0b4eac1 Mon Sep 17 00:00:00 2001 From: hazel Date: Tue, 16 Mar 2021 10:22:36 -0400 Subject: [PATCH 03/72] oops --- .../java/io/zipcoder/casino/CrapsDisplay.java | 64 +++++++++++++++++++ src/main/java/io/zipcoder/casino/Display.java | 23 +++++++ 2 files changed, 87 insertions(+) create mode 100644 src/main/java/io/zipcoder/casino/CrapsDisplay.java create mode 100644 src/main/java/io/zipcoder/casino/Display.java diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java new file mode 100644 index 000000000..97d53cf0f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -0,0 +1,64 @@ +package io.zipcoder.casino; + +public class CrapsDisplay extends Display { + + public void rulesMenu(){ + + } + + public void optionsMenu(){ + + } + + public void shooterScores(){ + + } + + public void shooterSevenedOut(){ + + } + + public void push(){ + + } + + public void oneRolLBetLoss(){ + + } + + public void oneRollBetWin(){ + + } + + public void natural(){ + + } + + public void craps(){ + + } + + public void shooterRolled(){ + + } + + public void setTypeOfBet(){ + + } + + public void comeOutRoll(){ + + } +} + + + + + + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java new file mode 100644 index 000000000..0aac3b740 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -0,0 +1,23 @@ +package io.zipcoder.casino; + +public class Display { + + String currentDisplay; + + public Display(){ + this.currentDisplay = ""; + } + + public void setCurrentDisplay(String currentDisplay){ + this.currentDisplay = currentDisplay; + } + + public void printCurrentDisplay(){ + System.out.println(currentDisplay); + } + + public void currentDisplaySP(String currentDisplay){ + this.setCurrentDisplay(currentDisplay); + this.printCurrentDisplay(); + } +} From ddfd733231e1575e88bb33bfc37d75854cdfed22 Mon Sep 17 00:00:00 2001 From: hazel Date: Tue, 16 Mar 2021 10:42:27 -0400 Subject: [PATCH 04/72] Filled out much of CrapsDisplay --- .../java/io/zipcoder/casino/CrapsDisplay.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 97d53cf0f..0ccb3c9d8 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -2,7 +2,11 @@ public class CrapsDisplay extends Display { - public void rulesMenu(){ + public void rulesMenu1(){ + currentDisplaySP("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout.\nType rules2 for more technical rules."); + } + + public void rulesMenu2(){ } @@ -11,43 +15,43 @@ public void optionsMenu(){ } public void shooterScores(){ - + currentDisplaySP("The shooter rolled got the point!"); } public void shooterSevenedOut(){ - + currentDisplaySP("The shooter sevened out..."); } public void push(){ - + currentDisplaySP("Your bet is a push."); } public void oneRolLBetLoss(){ - + currentDisplaySP("Your one-roll proposition failed..."); } public void oneRollBetWin(){ - + currentDisplaySP("You won your one-roll proposition!"); } public void natural(){ - + currentDisplaySP("It's a natural!"); } public void craps(){ - + currentDisplaySP("It's craps!"); } public void shooterRolled(){ - + currentDisplaySP("The shooter rolled a " + 5); } public void setTypeOfBet(){ - + currentDisplaySP("What kind of bet do you want to make?"); } public void comeOutRoll(){ - + currentDisplaySP("Here's the come out roll..."); } } From 013ae20f00272d4813f626025c1a0e3bcafc3d92 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Tue, 16 Mar 2021 10:43:32 -0400 Subject: [PATCH 05/72] UML Diagram --- src/Casino Structure.png | Bin 290691 -> 154368 bytes src/Casino Structure.puml | 199 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100644 src/Casino Structure.puml diff --git a/src/Casino Structure.png b/src/Casino Structure.png index 0c645660ecb0e6e95f2ef3f7244e95445a04ca4d..413f2b63fef1bf6168a336cc14b88f27eef4722b 100644 GIT binary patch literal 154368 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≥gih9Sfwqy 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

pu1_wolL0 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

nl)M) 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%0A{ULWpH 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 I_VD@t0m3MQg8%>k diff --git a/src/Casino Structure.puml b/src/Casino Structure.puml new file mode 100644 index 000000000..cbe321f24 --- /dev/null +++ b/src/Casino Structure.puml @@ -0,0 +1,199 @@ +@startuml +'https://plantuml.com/class-diagram + +Game <|-- GamblingGame +Game <|-- CardGame +GamblingPlayer <|-- Player +GamblingGame <|-- Blackjack +GamblingGame <|-- DiceGame + +DiceGame <|-- Beetle +DiceGame <|-- Craps +CardGame <|-- Blackjack +CardGame <|-- GoFish + + +Display <|-- BeetleDisplay +Display <|-- CrapsDisplay +Display <|-- BlackjackDisplay +Display <|-- GoFishDisplay + + +'INTERFACE +interface Game { +Random +Boolean gameState +checkForWinner() +setPlayer() +} + +interface GamblingGame { +acceptBetFrom() +calculateReward() +calculateLoss() +} + +interface GamblingPlayer { +placeBet() +} + + +'ABSTRACT CLASS +abstract class CardGame{ +Stack decksOfCards +ArrayList playersHand +ArrayList dealersHand +shuffleCards() +dealCards(Int numberOfCards) +skipDeal() + +} + +abstract class DiceGame { +rollDice(numberOfDice) +} + + +'CLASS +class Main{ + +} + +class CasinoEngine { +runCasino() +} + +class Player { +String name +Double accountBalance +getName() +getAccountBalance() +setAccountBalance() +} + +class GoFish { +HashMap +HashMap +exchangeCard() +getNumberOfPairs() +setNumberOfPairs() +} + +class GoFishDisplay { +chooseAPlayerToAsk() +chooseACardtoAskFor() +playerHasCard() +goFish() +pairMade() + +} + +class Blackjack { +HashMap +gotBlackJack(int betPlaced) +standOrHit() +} + +class BlackjackDisplay { +dealersFirstCard() +bustMessage(String whoBusted) +dealersTotal() +dealerStands() +dealerHits() +chooseStandOrHit() +} + +class Craps { +Boolean isNatural() +Boolean isCraps() +Boolean isPoint() +analyzeComeOutRoll() +analyzeFollowingRolls() +'comeBet() +'dontComeBet() +'passBet() +'dontPassBet() +'fieldBet() +'bigSixOrEightBet() +getTypeOfBet() +} + +class CrapsDisplay { +rulesMenu() +optionsMenu() +shooterScores() +shooterSevenedOut() +push() +oneRollBetLoss() +onRollBetWin() +natural() +craps() +shooterRolled() +setTypeOfBet() +comeOutRoll() + +} + +class Beetle { +createNextImage() +} + +class BeetleDisplay { +drawBugHead() +drawBugBody() +drawBugLeg1() +drawBugLeg2() +drawBugLeg3() +drawBugLeg4() +playerBugComplete() +opponentBugComplete() +repeatRoll() +bodyPartValue() +} + +class PlayerWarehouse { +playerGroup +getPlayer() +} + +class Console { +Scanner input +PrintStream output +print() +println() +getStringInput() +getDoubleInput() +getLongInput() +getIntegerInput() +} + +class Display { +String currentDisplay + +errorMessage() + +'casino messages +welcomeMessage() +gamesMenu() +lowFundsWarning() +zeroFundsWarning() + +'game messages +rollResult() +dealResult() +youWin() +youLose() +doYouWantToBet() + +'new user messages +userId() +requestUserId() +initialDeposit() + +'returning user messages +welcomeBack() + +} + + +@enduml \ No newline at end of file From 0c2e48202fb10f33e6cd5185f5f23123db633c29 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Tue, 16 Mar 2021 12:59:40 -0400 Subject: [PATCH 06/72] Beetle added. Beetle Display started --- src/main/java/io/zipcoder/casino/Beetle.java | 4 ++ .../io/zipcoder/casino/BeetleDisplay.java | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/main/java/io/zipcoder/casino/Beetle.java create mode 100644 src/main/java/io/zipcoder/casino/BeetleDisplay.java diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java new file mode 100644 index 000000000..bfa7935d0 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino; + +public class Beetle { +} diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java new file mode 100644 index 000000000..7aa15b725 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -0,0 +1,40 @@ +package io.zipcoder.casino; + +public class BeetleDisplay extends Display{ + + public void rules() { + String rules = "Draw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die correspond to a part of the beetle." + + "\n If you roll a number, you get to draw that part\nIf you roll the same number again, you do not get to add to your beetle." + + "\nBetween each roll you will add to your wager.\n The first person to draw a beetle keeps the purse."; + } + + public void drawingMade() { + + } + + public void drewLeg() { + + } + + public void drewBody() { + + } + + public void drewHead() { + + } + + public void yourBugIsComplete() { + + } + + public void opponentsBugisComplete() { + + } + + public void repeatedRollResult() { + + } + + +} From 6d39c09d48f9bdaec670e8bdf22e7f42ad8d1360 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Tue, 16 Mar 2021 13:16:51 -0400 Subject: [PATCH 07/72] BeetleDisplay progress. GoFishDisplay added --- .../io/zipcoder/casino/BeetleDisplay.java | 25 ++++++++----------- .../io/zipcoder/casino/GoFishDisplay.java | 6 +++++ 2 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/GoFishDisplay.java diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index 7aa15b725..251f566a9 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -3,38 +3,35 @@ public class BeetleDisplay extends Display{ public void rules() { - String rules = "Draw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die correspond to a part of the beetle." + + currentDisplaySP("Draw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die correspond to a part of the beetle." + "\n If you roll a number, you get to draw that part\nIf you roll the same number again, you do not get to add to your beetle." + - "\nBetween each roll you will add to your wager.\n The first person to draw a beetle keeps the purse."; - } - - public void drawingMade() { - + "\nBetween each roll you will add to your wager.\n The first person to draw a beetle keeps the purse.\n" + + "\nIf both players complete their beetle on the same set of rolls the wagers are returned." + + " What to draw for each roll:" + + "\n1 - head\n2 - body\n3 - left front leg\n4 - right front leg\n5 - left back leg\n6 - right back leg"); } public void drewLeg() { - + currentDisplaySP("You added a leg to your beetle!"); } public void drewBody() { - + currentDisplaySP("You drew your beetle's body!"); } public void drewHead() { - + currentDisplaySP("You drew your beetle's head!"); } public void yourBugIsComplete() { - + currentDisplaySP("Your beetle is complete!"); } public void opponentsBugisComplete() { - + currentDisplaySP("Your opponents beetle is complete."); } public void repeatedRollResult() { - + currentDisplaySP("You already rolled that number."); } - - } diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java new file mode 100644 index 000000000..339edcc9e --- /dev/null +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -0,0 +1,6 @@ +package io.zipcoder.casino; + +public class GoFishDisplay { + + +} From 94439b981745866d96c08cd58d699caa7036df3a Mon Sep 17 00:00:00 2001 From: hazel Date: Tue, 16 Mar 2021 13:18:21 -0400 Subject: [PATCH 08/72] Checkpointing --- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 0ccb3c9d8..e62baea9f 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -7,7 +7,7 @@ public void rulesMenu1(){ } public void rulesMenu2(){ - + currentDisplaySP("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); } public void optionsMenu(){ @@ -15,7 +15,7 @@ public void optionsMenu(){ } public void shooterScores(){ - currentDisplaySP("The shooter rolled got the point!"); + currentDisplaySP("The shooter got the point!"); } public void shooterSevenedOut(){ From 0eb239877324134223fd285eebb47ebe0deb7e94 Mon Sep 17 00:00:00 2001 From: hazel Date: Tue, 16 Mar 2021 13:49:34 -0400 Subject: [PATCH 09/72] Checkpointing --- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index e62baea9f..b58a89b2f 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -3,15 +3,23 @@ public class CrapsDisplay extends Display { public void rulesMenu1(){ - currentDisplaySP("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout.\nType rules2 for more technical rules."); + currentDisplaySP("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); + } + + public void rulesMenuMid(){ + currentDisplaySP("Type rules2 for more technical rules."); } public void rulesMenu2(){ currentDisplaySP("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); } - public void optionsMenu(){ + public void optionsMenu1(){ + currentDisplaySP("You can make a pass bet, a don't pass bet, or a proposition."); + } + public void optionsMenu2(){ + currentDisplaySP("You can make a come bet, a don't come bet, or a proposition."); } public void shooterScores(){ @@ -47,7 +55,7 @@ public void shooterRolled(){ } public void setTypeOfBet(){ - currentDisplaySP("What kind of bet do you want to make?"); + currentDisplaySP("What kind of bet do you want to make? You can also type 'options' or 'help'."); } public void comeOutRoll(){ From 897bf97985e08e0231261dd427087ed8ae0a3d7c Mon Sep 17 00:00:00 2001 From: hazel Date: Tue, 16 Mar 2021 13:58:46 -0400 Subject: [PATCH 10/72] Appeasing uncle bob --- .../java/io/zipcoder/casino/CrapsDisplay.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index b58a89b2f..a40131f0d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -2,63 +2,63 @@ public class CrapsDisplay extends Display { - public void rulesMenu1(){ + public void printRulesMenu1(){ currentDisplaySP("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); } - public void rulesMenuMid(){ + public void printRulesMenuMid(){ currentDisplaySP("Type rules2 for more technical rules."); } - public void rulesMenu2(){ + public void printRulesMenu2(){ currentDisplaySP("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); } - public void optionsMenu1(){ + public void printOptionsMenu1(){ currentDisplaySP("You can make a pass bet, a don't pass bet, or a proposition."); } - public void optionsMenu2(){ + public void printOptionsMenu2(){ currentDisplaySP("You can make a come bet, a don't come bet, or a proposition."); } - public void shooterScores(){ + public void printShooterScores(){ currentDisplaySP("The shooter got the point!"); } - public void shooterSevenedOut(){ + public void printShooterSevenedOut(){ currentDisplaySP("The shooter sevened out..."); } - public void push(){ + public void printPush(){ currentDisplaySP("Your bet is a push."); } - public void oneRolLBetLoss(){ + public void printOneRolLBetLoss(){ currentDisplaySP("Your one-roll proposition failed..."); } - public void oneRollBetWin(){ + public void printOneRollBetWin(){ currentDisplaySP("You won your one-roll proposition!"); } - public void natural(){ + public void printNatural(){ currentDisplaySP("It's a natural!"); } - public void craps(){ + public void printCraps(){ currentDisplaySP("It's craps!"); } - public void shooterRolled(){ + public void printShooterRolled(){ currentDisplaySP("The shooter rolled a " + 5); } - public void setTypeOfBet(){ + public void printSetTypeOfBet(){ currentDisplaySP("What kind of bet do you want to make? You can also type 'options' or 'help'."); } - public void comeOutRoll(){ + public void printComeOutRoll(){ currentDisplaySP("Here's the come out roll..."); } } From c1f42d18dc6093aba11baccb1b1ed30777977402 Mon Sep 17 00:00:00 2001 From: Theresa Date: Tue, 16 Mar 2021 14:36:29 -0400 Subject: [PATCH 11/72] Started writing Diplay class methods --- src/main/java/io/zipcoder/casino/Display.java | 137 ++++++++++++++++++ src/main/java/io/zipcoder/casino/Main.java | 10 ++ src/main/java/io/zipcoder/casino/Player.java | 4 + .../io/zipcoder/casino/utilities/Console.java | 1 + .../java/io/zipcoder/casino/DisplayTest.java | 18 +++ 5 files changed, 170 insertions(+) create mode 100644 src/main/java/io/zipcoder/casino/Main.java create mode 100644 src/main/java/io/zipcoder/casino/Player.java create mode 100644 src/test/java/io/zipcoder/casino/DisplayTest.java diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 0aac3b740..a471571a1 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -1,11 +1,36 @@ package io.zipcoder.casino; +import io.zipcoder.casino.utilities.Console; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + public class Display { String currentDisplay; + private Player p; + private Console c; + + private Scanner s; + private InputStream in; + private PrintStream out; public Display(){ + + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.currentDisplay = ""; + this.p = new Player(); + } + + public void testConsole() { + String var = c.getStringInput("Prompt", null); + System.out.println(var); } public void setCurrentDisplay(String currentDisplay){ @@ -20,4 +45,116 @@ public void currentDisplaySP(String currentDisplay){ this.setCurrentDisplay(currentDisplay); this.printCurrentDisplay(); } + + + // WELCOME MESSAGING + public void printWelcomeMessage() { + System.out.println( + "'########:'####:'########::::::'######:::'#######::'########::'########::::\n"+ + "..... ##::. ##:: ##.... ##::::'##... ##:'##.... ##: ##.... ##: ##.....:::::\n"+ + ":::: ##:::: ##:: ##:::: ##:::: ##:::..:: ##:::: ##: ##:::: ##: ##::::::::::\n"+ + "::: ##::::: ##:: ########::::: ##::::::: ##:::: ##: ##:::: ##: ######::::::\n"+ + ":: ##:::::: ##:: ##.....:::::: ##::::::: ##:::: ##: ##:::: ##: ##...:::::::\n"+ + ": ##::::::: ##:: ##::::::::::: ##::: ##: ##:::: ##: ##:::: ##: ##::::::::::\n"+ + " ########:'####: ##:::::::::::. ######::. #######:: ########:: ########::::\n"+ + "........::....::..:::::::::::::......::::.......:::........:::........:::::\n"+ + ":'######:::::'###:::::'######::'####:'##::: ##::'#######::\n"+ + "'##... ##:::'## ##:::'##... ##:. ##:: ###:: ##:'##.... ##:\n"+ + " ##:::..:::'##:. ##:: ##:::..::: ##:: ####: ##: ##:::: ##:\n"+ + " ##:::::::'##:::. ##:. ######::: ##:: ## ## ##: ##:::: ##:\n"+ + " ##::::::: #########::..... ##:: ##:: ##. ####: ##:::: ##:\n"+ + " ##::: ##: ##.... ##:'##::: ##:: ##:: ##:. ###: ##:::: ##:\n"+ + ". ######:: ##:::: ##:. ######::'####: ##::. ##:. #######::\n"+ + ":......:::..:::::..:::......:::....::..::::..:::.......:::\n\n"+ + "WELCOME TO ZIP CODE CASINO, LOCATED IN WILMINGTON, DE!" + ); + + + } + + public void printWelcomeBackMessage() { + System.out.println( + //"Welcome back " + p.getName() + "!\n"+ + //"Your current account balance is " + p.getAccountBalance + "." + ); + } + + + // MENUS + public void printLoginMenu() { + System.out.println( + "What would you like to do?\n" + + "1.Login\n" + + "2.Create New Account" + ); + } + + public void printGamesMenu() { + System.out.println( + "Pick a Game to Play:\n"+ + " 1. BlackJack\n" + + " 2. Craps\n" + + " 3. Beetle\n" + + " 4. GoFish\n" + ); + } + + + // ERROR MESSAGING + public void printErrorMessage() { + System.out.println("Invalid Input!"); + } + + + // FUNDS MESSAGING + public void printAccountBalance() { + System.out.println( + // "Account Balance: " + p.getAccountBalance() + ); + } + + public void printLowFundsWarning(){ + System.out.println( + "WARNING: YOUR FUNDS ARE GETTING LOW!\n"+ + "Please consider making a deposit." + ); + this.printAccountBalance(); + + } + + public void printZeroFundsWarning() { + System.out.println( + "WARNING: YOUR ACCOUNT BALANCE HAS REACHED $0.00.\n"+ + "PLEASE MAKE A DEPOSIT TO CONTINUE PLAYING." + ); + } + + // GENERIC GAME RESULT MESSAGING + public void printRollResult() { + + } + + public void printDealResult() { + + } + + // USER SET-UP MESSAGING + public void printUserId(){ + + } + + public void printRequestForUserId() { + + } + + public void printRequestForInitialDeposit(){ + + } + + // GENERIC BETTING MESSAGES + public void printRequestBetAmount() { + + } + + } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java new file mode 100644 index 000000000..cf6520c4b --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -0,0 +1,10 @@ +package io.zipcoder.casino; + +public class Main { + + public static void main(String args[]) { + Display d = new Display(); + d.printWelcomeBackMessage(); + d.testConsole(); + } +} diff --git a/src/main/java/io/zipcoder/casino/Player.java b/src/main/java/io/zipcoder/casino/Player.java new file mode 100644 index 000000000..afbd0da06 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Player.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino; + +public class Player { +} diff --git a/src/main/java/io/zipcoder/casino/utilities/Console.java b/src/main/java/io/zipcoder/casino/utilities/Console.java index ab896c956..ce2e5cf78 100644 --- a/src/main/java/io/zipcoder/casino/utilities/Console.java +++ b/src/main/java/io/zipcoder/casino/utilities/Console.java @@ -55,6 +55,7 @@ public Long getLongInput(String prompt, Object... args) { } public Integer getIntegerInput(String prompt, Object... args) { + return getLongInput(prompt, args).intValue(); } } diff --git a/src/test/java/io/zipcoder/casino/DisplayTest.java b/src/test/java/io/zipcoder/casino/DisplayTest.java new file mode 100644 index 000000000..20c35f05e --- /dev/null +++ b/src/test/java/io/zipcoder/casino/DisplayTest.java @@ -0,0 +1,18 @@ +package io.zipcoder.casino; + +import org.junit.Test; + +public class DisplayTest { + + @Test + public void testPrintStartScreen() { + Display disp = new Display(); + disp.printWelcomeMessage(); + } + + @Test + public void testTest() { + Display disp = new Display(); + disp.testConsole(); + } +} From 04acff4938530c5229f799dc5fb1849adc4fe116 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Tue, 16 Mar 2021 14:50:34 -0400 Subject: [PATCH 12/72] GoFishDisplay progress --- .../io/zipcoder/casino/BeetleDisplay.java | 2 ++ src/main/java/io/zipcoder/casino/Casino.java | 6 ++++ src/main/java/io/zipcoder/casino/Display.java | 4 +++ .../io/zipcoder/casino/GoFishDisplay.java | 33 ++++++++++++++++++- 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index 251f566a9..ec828770a 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -31,6 +31,8 @@ public void opponentsBugisComplete() { currentDisplaySP("Your opponents beetle is complete."); } + public void bothBeetlesComplete(){currentDisplaySP("You both drew beetles. The game is a tie.");} + public void repeatedRollResult() { currentDisplaySP("You already rolled that number."); } diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 86953f995..3e6a0de4a 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -1,8 +1,14 @@ package io.zipcoder.casino; +import io.zipcoder.casino.utilities.Console; +import org.graalvm.compiler.serviceprovider.IsolateUtil; + +import java.util.Scanner; + public class Casino { public static void main(String[] args) { // write your tests before you start + } } diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 0aac3b740..95f423784 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -20,4 +20,8 @@ public void currentDisplaySP(String currentDisplay){ this.setCurrentDisplay(currentDisplay); this.printCurrentDisplay(); } + + public String helloMessage() { + return "hello"; + } } diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 339edcc9e..4c1b60d14 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -1,6 +1,37 @@ package io.zipcoder.casino; -public class GoFishDisplay { +public class GoFishDisplay extends Display{ + + public void goFishRules(){ + currentDisplaySP("Two players will be dealt 5 cards each.\nThe object of the game is to have the most pairs when the deck is empty." + + "\nA player creates pairs by asking the other player if they have a specific card in their hand." + + "\nYou must be holding the card the card you request." + + "\n"); + } + + public void goFish(){ + currentDisplaySP("GO FISH!"); + } + + public void cardFound(){ + currentDisplaySP("That card is in their hand."); + } + + public void cardNotFound(){ + currentDisplaySP("Nope. They are not holding that card."); + } + + //only necessary for multiple player games + public void whoWillYouAsk(){ + currentDisplaySP("Who will you ask?"); + } + + public void cardYouWillAskFor(){} + + public void opponentAskedFor(){} + + public void createdAPair() {} + } From f109c06c017003dd1230d32c116a50532563c36f Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Tue, 16 Mar 2021 15:14:24 -0400 Subject: [PATCH 13/72] game interface. dice game abstract class. --- src/main/java/io/zipcoder/casino/DiceGame.java | 18 ++++++++++++++++++ src/main/java/io/zipcoder/casino/Game.java | 14 ++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/main/java/io/zipcoder/casino/DiceGame.java create mode 100644 src/main/java/io/zipcoder/casino/Game.java diff --git a/src/main/java/io/zipcoder/casino/DiceGame.java b/src/main/java/io/zipcoder/casino/DiceGame.java new file mode 100644 index 000000000..3414ba6e2 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/DiceGame.java @@ -0,0 +1,18 @@ +package io.zipcoder.casino; + +import java.util.Random; + +abstract class DiceGame { + + public Integer diceRollSum(int i) { + Random random = new Random(); + Integer thisToss = 0; + + while (i >= 1) { + int randomGen = (random.nextInt(6) + 1); + thisToss += randomGen; + i--; + } + return thisToss; + } +} diff --git a/src/main/java/io/zipcoder/casino/Game.java b/src/main/java/io/zipcoder/casino/Game.java new file mode 100644 index 000000000..65076adf3 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Game.java @@ -0,0 +1,14 @@ +package io.zipcoder.casino; + +import java.util.Random; + +public interface Game { + Random random =new Random(); + + Integer numberOfPlayers = 0; + Boolean GameState = false; + + public void checkForWinner(); + + public void setPlayer(); +} From 5c4fdf56839c3d6572559f67292e546d2f71f1bf Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Tue, 16 Mar 2021 15:48:59 -0400 Subject: [PATCH 14/72] goFishDisplay and dice abstract class --- src/main/java/io/zipcoder/casino/DiceGame.java | 3 ++- src/main/java/io/zipcoder/casino/GoFishDisplay.java | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/DiceGame.java b/src/main/java/io/zipcoder/casino/DiceGame.java index 3414ba6e2..ba4e70688 100644 --- a/src/main/java/io/zipcoder/casino/DiceGame.java +++ b/src/main/java/io/zipcoder/casino/DiceGame.java @@ -2,7 +2,8 @@ import java.util.Random; -abstract class DiceGame { +abstract class DiceGame implements GamblingGame { + public Integer diceRollSum(int i) { Random random = new Random(); diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 4c1b60d14..832fb67aa 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -26,11 +26,11 @@ public void whoWillYouAsk(){ currentDisplaySP("Who will you ask?"); } - public void cardYouWillAskFor(){} + public void cardYouWillAskFor(){currentDisplaySP("What card will you ask for?");} - public void opponentAskedFor(){} + public void opponentAskedFor(){currentDisplaySP("You opponent asked for a" /*random card that is not in opponents hand*/);} - public void createdAPair() {} + public void createdAPair() {currentDisplaySP("Your opponent has a " + /*card you asked for*/ + ". A pair of " + /*card you asked for */+ "'s have been added to your score.");} From e8c865ccc15912534f967dc3eb7395a3b259e198 Mon Sep 17 00:00:00 2001 From: Theresa Date: Tue, 16 Mar 2021 16:21:59 -0400 Subject: [PATCH 15/72] Completed more methods for Display class --- .DS_Store | Bin 0 -> 6148 bytes src/main/java/io/zipcoder/casino/Display.java | 103 ++++++++++-------- src/main/java/io/zipcoder/casino/Main.java | 2 +- 3 files changed, 59 insertions(+), 46 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..84a24410a715f874c41addfae218b6842179ec5d GIT binary patch literal 6148 zcmeHKyH3ME5S%5ENJNtk$}6cNQKvDHQ&7;r4ukjz882TlX4vBq?KDbG%Te9F?VDlfNoYtg z5DWwZ!9Xx@2nPI!S)3fAc+?CAf`LEHfbI{8s#rOWhI#8?lb--Yy+&uDt(RuaNsg7{ zXh;u5ER|@f;!g~*bdD#Fs~kr|ONaR5L;TC{j~B^bXZ@7JA(dgY!9XxDWngCAm7f1Q z{xZc!{xl_e!9XzZ&lr$-eOqt2C_h`jEle-CXW41~q&DL! X$I(!$=y*;i#zi0#5=}7h0}Q+Y$bU9- literal 0 HcmV?d00001 diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index a471571a1..1db598d12 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -2,16 +2,14 @@ import io.zipcoder.casino.utilities.Console; -import java.io.ByteArrayInputStream; -import java.io.FileInputStream; import java.io.InputStream; import java.io.PrintStream; +import java.util.ArrayList; import java.util.Scanner; public class Display { String currentDisplay; - private Player p; private Console c; private Scanner s; @@ -20,36 +18,32 @@ public class Display { public Display(){ + // INPUT/OUTPUT this.in = System.in; this.out = System.out; this.c = new Console(in, out); this.currentDisplay = ""; - this.p = new Player(); } - public void testConsole() { - String var = c.getStringInput("Prompt", null); - System.out.println(var); - } - - public void setCurrentDisplay(String currentDisplay){ - this.currentDisplay = currentDisplay; + // UPDATE/PRINT CURRENT DISPLAY + public void setCurrentDisplay(String newDisplay){ + this.currentDisplay = newDisplay; } public void printCurrentDisplay(){ System.out.println(currentDisplay); } - public void currentDisplaySP(String currentDisplay){ - this.setCurrentDisplay(currentDisplay); + public void setPrintCurrentDisplay(String newDisplay){ + this.setCurrentDisplay(newDisplay); this.printCurrentDisplay(); } // WELCOME MESSAGING public void printWelcomeMessage() { - System.out.println( + this.setPrintCurrentDisplay( "'########:'####:'########::::::'######:::'#######::'########::'########::::\n"+ "..... ##::. ##:: ##.... ##::::'##... ##:'##.... ##: ##.... ##: ##.....:::::\n"+ ":::: ##:::: ##:: ##:::: ##:::: ##:::..:: ##:::: ##: ##:::: ##: ##::::::::::\n"+ @@ -68,29 +62,27 @@ public void printWelcomeMessage() { ":......:::..:::::..:::......:::....::..::::..:::.......:::\n\n"+ "WELCOME TO ZIP CODE CASINO, LOCATED IN WILMINGTON, DE!" ); - - } - public void printWelcomeBackMessage() { - System.out.println( - //"Welcome back " + p.getName() + "!\n"+ - //"Your current account balance is " + p.getAccountBalance + "." + public void printWelcomeBackMessage(String name, int getAccountBalance) { + this.setPrintCurrentDisplay( + "Welcome back " + name + "!\n"+ + "Your current account balance is " + getAccountBalance + "." ); } // MENUS public void printLoginMenu() { - System.out.println( - "What would you like to do?\n" + - "1.Login\n" + - "2.Create New Account" + this.setPrintCurrentDisplay( + "What would you like to do?\n" + + "1.Login\n" + + "2.Create New Account" ); } public void printGamesMenu() { - System.out.println( + this.setPrintCurrentDisplay( "Pick a Game to Play:\n"+ " 1. BlackJack\n" + " 2. Craps\n" + @@ -99,61 +91,82 @@ public void printGamesMenu() { ); } - // ERROR MESSAGING public void printErrorMessage() { - System.out.println("Invalid Input!"); + this.setPrintCurrentDisplay("Invalid Input!"); } // FUNDS MESSAGING - public void printAccountBalance() { - System.out.println( - // "Account Balance: " + p.getAccountBalance() + public void printAccountBalance(double accountBalance) { + this.setPrintCurrentDisplay( + "Account Balance: " + accountBalance ); } - public void printLowFundsWarning(){ - System.out.println( + public void printLowFundsWarning(double accountBalance){ + this.setPrintCurrentDisplay( "WARNING: YOUR FUNDS ARE GETTING LOW!\n"+ - "Please consider making a deposit." + "Please consider making a deposit.\n"+ ); - this.printAccountBalance(); + this.printAccountBalance(accountBalance); } public void printZeroFundsWarning() { - System.out.println( + this.setPrintCurrentDisplay( "WARNING: YOUR ACCOUNT BALANCE HAS REACHED $0.00.\n"+ "PLEASE MAKE A DEPOSIT TO CONTINUE PLAYING." ); } // GENERIC GAME RESULT MESSAGING - public void printRollResult() { - + public void printRollResult(Integer[] diceResults) { + String formattedRollResults = ""; + for(int i = 0; i < diceResults.length; i++) { + formattedRollResults += "Dice " + (i+1) + ": " + diceResults[i] + "\n"; + } + + this.setPrintCurrentDisplay( + formattedRollResults + ); } - public void printDealResult() { + public void printDealResult(ArrayList dealResults) { + String formattedDealResults = ""; + for(int i = 0; i < dealResults.size(); i++) { + formattedDealResults += "Card " + (i+1) + ": " + dealResults.get(i) + "\n"; + } + this.setPrintCurrentDisplay( + formattedDealResults + ); } // USER SET-UP MESSAGING - public void printUserId(){ - + public void printUserId(String userName){ + this.setPrintCurrentDisplay( + "UserId: " + userName + ); } - public void printRequestForUserId() { - + public void printRequestUserId() { + this.setPrintCurrentDisplay( + "Please enter your desired username:" + ); } - public void printRequestForInitialDeposit(){ - + public void printRequestInitialDeposit(){ + this.setPrintCurrentDisplay( + "Please enter deposit amount:" + ); } // GENERIC BETTING MESSAGES public void printRequestBetAmount() { - + this.setPrintCurrentDisplay( + "How much money would you like to bet?" + ); } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index cf6520c4b..3098bc6fd 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -4,7 +4,7 @@ public class Main { public static void main(String args[]) { Display d = new Display(); - d.printWelcomeBackMessage(); + d.printWelcomeMessage(); d.testConsole(); } } From 67e19f0dcbdd1b7f5df8e1f866e3ab2598c13a20 Mon Sep 17 00:00:00 2001 From: Theresa Date: Tue, 16 Mar 2021 18:43:24 -0400 Subject: [PATCH 16/72] Added methods to CardGame class --- README.md | 2 +- .../java/io/zipcoder/casino/CardGame.java | 56 +++++++++++++++++++ src/main/java/io/zipcoder/casino/Display.java | 11 +++- .../java/io/zipcoder/casino/GamblingGame.java | 4 ++ src/main/java/io/zipcoder/casino/Main.java | 1 - .../java/io/zipcoder/casino/DisplayTest.java | 5 -- 6 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/CardGame.java create mode 100644 src/main/java/io/zipcoder/casino/GamblingGame.java diff --git a/README.md b/README.md index 14d017d9b..02c34dd94 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ * `Player` objects should be created upon input from a user. * `Game` interface * Contract which ensures that a class enforces some aspect of _playing_. - * `GamblingGame` interface + * `io.zipcoder.casino.GamblingGame` interface * Contract which ensures that a game enforces some aspect of _waging money_. * `GamblingPlayer` interface * Contract which ensures that a player has some ability to _wage money_. diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java new file mode 100644 index 000000000..6130eb046 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -0,0 +1,56 @@ +package io.zipcoder.casino; + +import java.util.ArrayList; +import java.util.Random; +import java.util.Stack; + +public abstract class CardGame implements GamblingGame { + + Stack deckOfCards; + ArrayList playersHand; + ArrayList dealersHand; + ArrayList deck; + + + public CardGame() { + this.deck = new ArrayList(52); + } + + public void createNewDeck() { + String[] suits = new String[]{"Clubs", "Diamonds", "Hearts", "Spades"}; + // Set zeroth element to null to indicate an unused element (only valid ranks from 1-13) + String[] ranks = new String[]{null, "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"}; + + for (int suit = 0; suit <=3; suit++) { + for (int rank = 1; rank <= 13; rank++) { + this.deck.add(ranks[rank] + " of " + suits[suit]); + } + } + } + + public void shuffleCards() { + ArrayList temp = new ArrayList(); + while(!this.deck.isEmpty()) { + int randCard = (int) (Math.random() * deck.size()); + temp.add(deck.get(randCard)); + } + this.deck = temp; + } + + public void dealCards(int numberOfCards) { + int i = 0; + while (i < numberOfCards * 2) { + if (i < numberOfCards) { + this.playersHand.add(this.deck.get(i)); + } else if (i >= numberOfCards) { + this.dealersHand.add(this.deck.get(i)); + } + this.deck.remove(i); + } + } + + public void skipDeal() { + // ??? + } + +} diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 1db598d12..a99cef367 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -10,12 +10,13 @@ public class Display { String currentDisplay; - private Console c; private Scanner s; private InputStream in; private PrintStream out; + private Console c; + public Display(){ // INPUT/OUTPUT @@ -152,7 +153,13 @@ public void printUserId(String userName){ public void printRequestUserId() { this.setPrintCurrentDisplay( - "Please enter your desired username:" + "Please enter username:" + ); + } + + public void printRequestPassword() { + this.setPrintCurrentDisplay( + "Please enter your password:" ); } diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java new file mode 100644 index 000000000..6ecf5dbba --- /dev/null +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino; + +public interface GamblingGame { +} diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index 3098bc6fd..da774a065 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -5,6 +5,5 @@ public class Main { public static void main(String args[]) { Display d = new Display(); d.printWelcomeMessage(); - d.testConsole(); } } diff --git a/src/test/java/io/zipcoder/casino/DisplayTest.java b/src/test/java/io/zipcoder/casino/DisplayTest.java index 20c35f05e..a83559138 100644 --- a/src/test/java/io/zipcoder/casino/DisplayTest.java +++ b/src/test/java/io/zipcoder/casino/DisplayTest.java @@ -10,9 +10,4 @@ public void testPrintStartScreen() { disp.printWelcomeMessage(); } - @Test - public void testTest() { - Display disp = new Display(); - disp.testConsole(); - } } From 36598ec0f9750f475357db94d155c5e2bfa397b8 Mon Sep 17 00:00:00 2001 From: Theresa Date: Tue, 16 Mar 2021 23:40:52 -0400 Subject: [PATCH 17/72] Wrote methods for PlayerWarehouse class --- .../io/zipcoder/casino/BeetleDisplay.java | 3 +- src/main/java/io/zipcoder/casino/Casino.java | 1 - src/main/java/io/zipcoder/casino/Display.java | 2 +- .../io/zipcoder/casino/PlayerWarehouse.java | 38 +++++++++++++++++++ 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/PlayerWarehouse.java diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index ec828770a..59d89dd9f 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -15,8 +15,7 @@ public void drewLeg() { currentDisplaySP("You added a leg to your beetle!"); } - public void drewBody() { - currentDisplaySP("You drew your beetle's body!"); + public void drewBody() { currentDisplaySP("You drew your beetle's body!"); } public void drewHead() { diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 3e6a0de4a..ab5b65dce 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -2,7 +2,6 @@ import io.zipcoder.casino.utilities.Console; -import org.graalvm.compiler.serviceprovider.IsolateUtil; import java.util.Scanner; diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index b60e97d9b..3a7d15a09 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -108,7 +108,7 @@ public void printAccountBalance(double accountBalance) { public void printLowFundsWarning(double accountBalance){ this.setPrintCurrentDisplay( "WARNING: YOUR FUNDS ARE GETTING LOW!\n"+ - "Please consider making a deposit.\n"+ + "Please consider making a deposit.\n" ); this.printAccountBalance(accountBalance); diff --git a/src/main/java/io/zipcoder/casino/PlayerWarehouse.java b/src/main/java/io/zipcoder/casino/PlayerWarehouse.java new file mode 100644 index 000000000..7975268b4 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/PlayerWarehouse.java @@ -0,0 +1,38 @@ +package io.zipcoder.casino; + +import java.util.HashMap; + +public class PlayerWarehouse { + + private HashMap playerGroup; + private HashMap userNamePasswordMap; + + public PlayerWarehouse() { + this.playerGroup = new HashMap(); + this.userNamePasswordMap = new HashMap(); + } + + public Player getPlayer(String userId) { + return this.playerGroup.get(userId); + } + + public boolean validateUniquePlayer(String userId) { + if (userNamePasswordMap.containsKey(userId)) { + return false; + } + return true; + } + + public void addNewPlayer(String userId, Player player, String password) { + playerGroup.put(userId, player); + userNamePasswordMap.put(userId, password); + } + + public boolean validateLoginCredentials(String userId, String password) { + if (userNamePasswordMap.containsKey(userId) && userNamePasswordMap.get(userId) == password) { + return true; + } + return false; + } + +} From 48dab138bfcf78bae34470ce5519b1ac2be8af31 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Wed, 17 Mar 2021 08:04:26 -0400 Subject: [PATCH 18/72] drew a beetle. Player class. --- .gitignore | 1 + .../io/zipcoder/casino/BeetleDisplay.java | 58 +++++++++++---- src/main/java/io/zipcoder/casino/Casino.java | 1 - .../java/io/zipcoder/casino/CrapsDisplay.java | 30 ++++---- src/main/java/io/zipcoder/casino/Display.java | 2 +- .../io/zipcoder/casino/GoFishDisplay.java | 16 ++-- src/main/java/io/zipcoder/casino/Main.java | 3 + src/main/java/io/zipcoder/casino/Player.java | 32 +++++++- .../java/io/zipcoder/casino/PlayerTest.java | 74 +++++++++++++++++++ 9 files changed, 178 insertions(+), 39 deletions(-) create mode 100644 src/test/java/io/zipcoder/casino/PlayerTest.java diff --git a/.gitignore b/.gitignore index 53c83987d..14d9a6ea5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ local.properties .settings/ .loadpath .recommenders +.DS_Store # External tool builders .externalToolBuilders/ diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index ec828770a..12e3d310e 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -1,39 +1,71 @@ package io.zipcoder.casino; -public class BeetleDisplay extends Display{ +import io.zipcoder.casino.utilities.Console; + +import java.util.Arrays; + +public class BeetleDisplay extends Display { + + String[][] beetle = new String[][]{{"\\","0","/"}, + {"⎛","|","⎞"}, + {"⎝","|","⎠"}, + {"/","⏝","\\"} + }; + + public BeetleDisplay() { + } public void rules() { - currentDisplaySP("Draw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die correspond to a part of the beetle." + - "\n If you roll a number, you get to draw that part\nIf you roll the same number again, you do not get to add to your beetle." + - "\nBetween each roll you will add to your wager.\n The first person to draw a beetle keeps the purse.\n" + + setPrintCurrentDisplay("Draw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die corresponds to a part of the beetle." + + "\nIf you roll a number, you get to draw that part.\nIf you roll the same number again, you do not get to add to your beetle." + + "\nBetween each roll you will add to your wager.\nThe first person to draw a beetle keeps the purse." + "\nIf both players complete their beetle on the same set of rolls the wagers are returned." + - " What to draw for each roll:" + + "\n\nWhat to draw for each roll:" + "\n1 - head\n2 - body\n3 - left front leg\n4 - right front leg\n5 - left back leg\n6 - right back leg"); } public void drewLeg() { - currentDisplaySP("You added a leg to your beetle!"); + setPrintCurrentDisplay("You added a leg to your beetle!"); } public void drewBody() { - currentDisplaySP("You drew your beetle's body!"); + setPrintCurrentDisplay("You drew your beetle's body!"); } public void drewHead() { - currentDisplaySP("You drew your beetle's head!"); + setPrintCurrentDisplay("You drew your beetle's head!"); } public void yourBugIsComplete() { - currentDisplaySP("Your beetle is complete!"); + setPrintCurrentDisplay("Your beetle is complete!"); } public void opponentsBugisComplete() { - currentDisplaySP("Your opponents beetle is complete."); + setPrintCurrentDisplay("Your opponents beetle is complete."); } - public void bothBeetlesComplete(){currentDisplaySP("You both drew beetles. The game is a tie.");} + public void bothBeetlesComplete() { + setPrintCurrentDisplay("You both drew beetles. The game is a tie."); + } public void repeatedRollResult() { - currentDisplaySP("You already rolled that number."); + setPrintCurrentDisplay("You already rolled that number."); + } + + //Beetle Body Parts + public void getBeetleComplete() { + //System.out.println(Arrays.deepToString(beetle)); + /*for (String[] row : beetle) { + System.out.println(Arrays.deepToString(row));*/ + for (int i = 0; i < beetle.length; i++) { + for (int j = 0; j < beetle[i].length; j++) { + System.out.print(beetle[i][j] + " "); + } + System.out.println(); + } + } + + public void getCurrentBeetle() { + } -} +} \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 3e6a0de4a..ab5b65dce 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -2,7 +2,6 @@ import io.zipcoder.casino.utilities.Console; -import org.graalvm.compiler.serviceprovider.IsolateUtil; import java.util.Scanner; diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index a40131f0d..96bbed9c1 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -3,63 +3,63 @@ public class CrapsDisplay extends Display { public void printRulesMenu1(){ - currentDisplaySP("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); + setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); } public void printRulesMenuMid(){ - currentDisplaySP("Type rules2 for more technical rules."); + setPrintCurrentDisplay("Type rules2 for more technical rules."); } public void printRulesMenu2(){ - currentDisplaySP("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); + setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); } public void printOptionsMenu1(){ - currentDisplaySP("You can make a pass bet, a don't pass bet, or a proposition."); + setPrintCurrentDisplay("You can make a pass bet, a don't pass bet, or a proposition."); } public void printOptionsMenu2(){ - currentDisplaySP("You can make a come bet, a don't come bet, or a proposition."); + setPrintCurrentDisplay("You can make a come bet, a don't come bet, or a proposition."); } public void printShooterScores(){ - currentDisplaySP("The shooter got the point!"); + setPrintCurrentDisplay("The shooter got the point!"); } public void printShooterSevenedOut(){ - currentDisplaySP("The shooter sevened out..."); + setPrintCurrentDisplay("The shooter sevened out..."); } public void printPush(){ - currentDisplaySP("Your bet is a push."); + setPrintCurrentDisplay("Your bet is a push."); } public void printOneRolLBetLoss(){ - currentDisplaySP("Your one-roll proposition failed..."); + setPrintCurrentDisplay("Your one-roll proposition failed..."); } public void printOneRollBetWin(){ - currentDisplaySP("You won your one-roll proposition!"); + setPrintCurrentDisplay("You won your one-roll proposition!"); } public void printNatural(){ - currentDisplaySP("It's a natural!"); + setPrintCurrentDisplay("It's a natural!"); } public void printCraps(){ - currentDisplaySP("It's craps!"); + setPrintCurrentDisplay("It's craps!"); } public void printShooterRolled(){ - currentDisplaySP("The shooter rolled a " + 5); + setPrintCurrentDisplay("The shooter rolled a " + 5); } public void printSetTypeOfBet(){ - currentDisplaySP("What kind of bet do you want to make? You can also type 'options' or 'help'."); + setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 'options' or 'help'."); } public void printComeOutRoll(){ - currentDisplaySP("Here's the come out roll..."); + setPrintCurrentDisplay("Here's the come out roll..."); } } diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index b60e97d9b..3a7d15a09 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -108,7 +108,7 @@ public void printAccountBalance(double accountBalance) { public void printLowFundsWarning(double accountBalance){ this.setPrintCurrentDisplay( "WARNING: YOUR FUNDS ARE GETTING LOW!\n"+ - "Please consider making a deposit.\n"+ + "Please consider making a deposit.\n" ); this.printAccountBalance(accountBalance); diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 832fb67aa..7b320c2ea 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -3,34 +3,34 @@ public class GoFishDisplay extends Display{ public void goFishRules(){ - currentDisplaySP("Two players will be dealt 5 cards each.\nThe object of the game is to have the most pairs when the deck is empty." + + setPrintCurrentDisplay("Two players will be dealt 5 cards each.\nThe object of the game is to have the most pairs when the deck is empty." + "\nA player creates pairs by asking the other player if they have a specific card in their hand." + "\nYou must be holding the card the card you request." + "\n"); } public void goFish(){ - currentDisplaySP("GO FISH!"); + setPrintCurrentDisplay("GO FISH!"); } public void cardFound(){ - currentDisplaySP("That card is in their hand."); + setPrintCurrentDisplay("That card is in their hand."); } public void cardNotFound(){ - currentDisplaySP("Nope. They are not holding that card."); + setPrintCurrentDisplay("Nope. They are not holding that card."); } //only necessary for multiple player games public void whoWillYouAsk(){ - currentDisplaySP("Who will you ask?"); + setPrintCurrentDisplay("Who will you ask?"); } - public void cardYouWillAskFor(){currentDisplaySP("What card will you ask for?");} + public void cardYouWillAskFor(){setPrintCurrentDisplay("What card will you ask for?");} - public void opponentAskedFor(){currentDisplaySP("You opponent asked for a" /*random card that is not in opponents hand*/);} + public void opponentAskedFor(){setPrintCurrentDisplay("You opponent asked for a");} - public void createdAPair() {currentDisplaySP("Your opponent has a " + /*card you asked for*/ + ". A pair of " + /*card you asked for */+ "'s have been added to your score.");} + public void createdAPair() {setPrintCurrentDisplay("Your opponent has a " + ". A pair of " + "'s have been added to your score.");} diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index da774a065..f747690df 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -4,6 +4,9 @@ public class Main { public static void main(String args[]) { Display d = new Display(); + BeetleDisplay bd = new BeetleDisplay(); d.printWelcomeMessage(); + bd.getBeetleComplete(); + } } diff --git a/src/main/java/io/zipcoder/casino/Player.java b/src/main/java/io/zipcoder/casino/Player.java index afbd0da06..7dd1bfa12 100644 --- a/src/main/java/io/zipcoder/casino/Player.java +++ b/src/main/java/io/zipcoder/casino/Player.java @@ -1,4 +1,34 @@ package io.zipcoder.casino; -public class Player { +public class Player{ + + String name; + Double wallet; + Double currentBet = 0.0; + + public Player(String name, Double initialDeposit) { + this.name = name; + this.wallet = initialDeposit; + } + + + public String getName() { + return name; + } + + + public Double getWallet() { + return wallet; + } + + public void setWallet(Double deposit) { + this.wallet = wallet + deposit; + } + + + public Double makeBet(Double betAmount) { + currentBet = betAmount; + wallet = wallet - currentBet; + return currentBet; + } } diff --git a/src/test/java/io/zipcoder/casino/PlayerTest.java b/src/test/java/io/zipcoder/casino/PlayerTest.java new file mode 100644 index 000000000..bb9557db3 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/PlayerTest.java @@ -0,0 +1,74 @@ +package io.zipcoder.casino; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class PlayerTest { + + @Test + public void PlayerConstructorTest() { + //Given + Player player1 = new Player("player1", 100.00); + String actual = player1.getName(); + + //When + String expected = "player1"; + + //Assert + Assert.assertEquals(expected,actual); + } + + @Test + public void PlayerGetAccountBalanceTest() { + //Given + Player player2 = new Player("player1", 500.00); + Double actual = player2.getWallet(); + //When + Double expected = 500.00; + + //Assert + Assert.assertEquals(expected,actual); + } + + @Test + public void PlayerSetAccountBalanceTest() { + //Given + Player player3 = new Player("player1", 500.00); + player3.setWallet(100.00); + Double actual = player3.getWallet(); + //When + Double expected = 600.00; + + //Assert + Assert.assertEquals(expected,actual); + } + @Test + public void PlayerMakeBetTest() { + //given + Player player4 = new Player("player1", 50.00); + Double expected = player4.makeBet(5.0); + + //when + Double actual = 5.0; + //assert + Assert.assertEquals(expected,actual); + + } + + @Test + public void PlayerMakeBetTest2() { + //given + Player player5 = new Player("player1", 50.00); + player5.makeBet(5.0); + Double expected = player5.getWallet(); + + //when + Double actual = 45.0; + //assert + Assert.assertEquals(expected,actual); + + } + +} From 15ce9b5ce7ace07252ac1a8800435ba0e944e528 Mon Sep 17 00:00:00 2001 From: smartist17 <79124739+smartist17@users.noreply.github.com> Date: Wed, 17 Mar 2021 10:13:24 -0400 Subject: [PATCH 19/72] Interfaces + bj display --- .../io/zipcoder/casino/BlackJackDisplay.java | 25 +++++++++++++++++++ src/main/java/io/zipcoder/casino/Casino.java | 10 +++----- src/main/java/io/zipcoder/casino/Display.java | 4 +++ .../java/io/zipcoder/casino/GamblingGame.java | 15 +++++++++++ .../io/zipcoder/casino/GamblingPlayer.java | 11 ++++++++ 5 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/BlackJackDisplay.java create mode 100644 src/main/java/io/zipcoder/casino/GamblingGame.java create mode 100644 src/main/java/io/zipcoder/casino/GamblingPlayer.java diff --git a/src/main/java/io/zipcoder/casino/BlackJackDisplay.java b/src/main/java/io/zipcoder/casino/BlackJackDisplay.java new file mode 100644 index 000000000..f9e97d608 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/BlackJackDisplay.java @@ -0,0 +1,25 @@ +package io.zipcoder.casino; + +public class BlackJackDisplay extends Display { + + public void rules() { + currentDisplaySP(); + + } + + public void hit() { + + } + public void stand() { + + } + + public void splitPairs() { + + } + + public void doubleDown() { + + } + +} \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 3e6a0de4a..e2f9f5db2 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -1,14 +1,10 @@ package io.zipcoder.casino; - -import io.zipcoder.casino.utilities.Console; -import org.graalvm.compiler.serviceprovider.IsolateUtil; - -import java.util.Scanner; - public class Casino { public static void main(String[] args) { // write your tests before you start - + Display display = new Display(); + System.out.println(display.helloMessage()); + display.getUserInput("Welcome whats your name?"); } } diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 95f423784..9fa8368d4 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -1,5 +1,7 @@ package io.zipcoder.casino; +import java.util.Scanner; + public class Display { String currentDisplay; @@ -24,4 +26,6 @@ public void currentDisplaySP(String currentDisplay){ public String helloMessage() { return "hello"; } + + } diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java new file mode 100644 index 000000000..7174e9ac0 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -0,0 +1,15 @@ +package io.zipcoder.casino; + +public interface GamblingGame { + + public String startGame(); + + public String acceptBetFrom(); + + public String calculateReward(); + + public String calculateLoss(); + + public String endGame(); + +} diff --git a/src/main/java/io/zipcoder/casino/GamblingPlayer.java b/src/main/java/io/zipcoder/casino/GamblingPlayer.java new file mode 100644 index 000000000..19678e558 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/GamblingPlayer.java @@ -0,0 +1,11 @@ +package io.zipcoder.casino; + +public interface GamblingPlayer { + +public String placeBet(); + +public String getName(); + +public Double accountBalance(); + +} From 354c44817685da2c01a992288665ca48f6680964 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 13:38:42 -0400 Subject: [PATCH 20/72] Checkpointing --- .../io/zipcoder/casino/BlackJackDisplay.java | 2 +- src/main/java/io/zipcoder/casino/Casino.java | 3 - src/main/java/io/zipcoder/casino/Craps.java | 129 ++++++++++++++++++ .../java/io/zipcoder/casino/CrapsDisplay.java | 20 +-- src/main/java/io/zipcoder/casino/Main.java | 8 +- 5 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/Craps.java diff --git a/src/main/java/io/zipcoder/casino/BlackJackDisplay.java b/src/main/java/io/zipcoder/casino/BlackJackDisplay.java index f9e97d608..45396e123 100644 --- a/src/main/java/io/zipcoder/casino/BlackJackDisplay.java +++ b/src/main/java/io/zipcoder/casino/BlackJackDisplay.java @@ -3,7 +3,7 @@ public class BlackJackDisplay extends Display { public void rules() { - currentDisplaySP(); + setPrintCurrentDisplay(""); } diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 34789c05c..ebf5467fb 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -6,8 +6,5 @@ public class Casino { public static void main(String[] args) { // write your tests before you start - Display display = new Display(); - System.out.println(display.helloMessage()); - display.getUserInput("Welcome whats your name?"); } } diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java new file mode 100644 index 000000000..3d19f038f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -0,0 +1,129 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public class Craps{ + + private Console c; + private Scanner s; + private Display d; + private InputStream in; + private PrintStream out; + private Player player; + private CrapsDisplay cd; + + private Integer input; + private Integer innerInput; + private Integer furtherInput; + + private Boolean[] outcomes; + private Boolean[] bets; + + public Craps(Player player){ + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.d = new Display(); + this.player = player; + this.cd = new CrapsDisplay(); + + this.input = 0; + this.innerInput = 0; + this.furtherInput = 0; + + this.outcomes = new Boolean[21]; + this.bets = new Boolean[21]; + } + + /* *** Here is the index of every *** + *** bet in the boolean arrays. *** + 0- pass + 1- don't pass + 2- come + 3- don't come + 4- field + 5- place bet 4 + 6- place bet 5 + 7- place bet 6 + 8- place bet 8 + 9- place bet 9 + 10- place bet 10 + 11- one-roll 7 + 12- one-roll craps + 13- one-roll 6 + 14- one-roll 8 + 15- one-roll 4 + 16- one-roll 10 + 17- one-roll 3 + 18- one-roll 11 + 19- one-roll 2 + 20- one-roll 12 */ + + public void crapsEngine(){ + + this.initialRulesPrompt(); + + Boolean noPointSet = true; + Boolean firstRoll = true; + Boolean decisionUnmade = true; + + while(noPointSet){ + while(decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); + switch(input){ + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch(innerInput){ + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + } + break; + case 2: + } + } + + } + + + } + + public void initialRulesPrompt(){ + cd.initalRulesAsk(); + Boolean haventAnswered = true; + while(haventAnswered){ + input = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch(input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenu2(); + cd.readyToPlay(); + haventAnswered = false; + break; + case 2: + cd.readyToPlay(); + haventAnswered = false; + break; + default: + d.setPrintCurrentDisplay("Invalid user input. Please reread instructions."); + } + } + } + +} + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 96bbed9c1..f0797a5b4 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -2,24 +2,24 @@ public class CrapsDisplay extends Display { + public void initalRulesAsk(){ + setPrintCurrentDisplay("Welcome! Would you like the rules first?"); + } + public void printRulesMenu1(){ - setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); + setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout.\n"); } public void printRulesMenuMid(){ - setPrintCurrentDisplay("Type rules2 for more technical rules."); + setPrintCurrentDisplay("There are more technical rules. Do you want them?"); } public void printRulesMenu2(){ - setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); - } - - public void printOptionsMenu1(){ - setPrintCurrentDisplay("You can make a pass bet, a don't pass bet, or a proposition."); + setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nThe field bet is the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!\n"); } - public void printOptionsMenu2(){ - setPrintCurrentDisplay("You can make a come bet, a don't come bet, or a proposition."); + public void readyToPlay(){ + setPrintCurrentDisplay("Alright! Let's play Craps!"); } public void printShooterScores(){ @@ -55,7 +55,7 @@ public void printShooterRolled(){ } public void printSetTypeOfBet(){ - setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 'options' or 'help'."); + setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 1 for help."); } public void printComeOutRoll(){ diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index f747690df..fc8f551a5 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,10 +3,10 @@ public class Main { public static void main(String args[]) { - Display d = new Display(); - BeetleDisplay bd = new BeetleDisplay(); - d.printWelcomeMessage(); - bd.getBeetleComplete(); + Player x = new Player("Hazel", 100.0); + Craps craps = new Craps(x); + craps.crapsEngine(); + } } From 448e14d455d9f02acdc994ebc141fb804e5765b7 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:22:54 -0400 Subject: [PATCH 21/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 62 +++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 3d19f038f..34232ebec 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -22,6 +22,8 @@ public class Craps{ private Boolean[] outcomes; private Boolean[] bets; + private Double[] betAmounts; + private Double lastBet; public Craps(Player player){ this.in = System.in; @@ -37,6 +39,20 @@ public Craps(Player player){ this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; + this.betAmounts = new Double[21]; + this.lastBet = 0.0; + + for(int i = 0; i < 21; i++){ + outcomes[i] = false; + } + + for(int i = 0; i < 21; i++){ + bets[i] = false; + } + + for(int i = 0; i < 21; i++){ + betAmounts[i] = 0.0; + } } /* *** Here is the index of every *** @@ -89,6 +105,44 @@ public void crapsEngine(){ } break; case 2: + chooseBetAmountAndMakeBet(0); + break; + case 3: + chooseBetAmountAndMakeBet(1); + break; + case 0: + decisionUnmade = false; + case 4: + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + switch(furtherInput){ + case 1: + chooseBetAmountAndMakeBet(12); + break; + case 2: + chooseBetAmountAndMakeBet(19); + break; + case 3: + chooseBetAmountAndMakeBet(17); + break; + case 4: + chooseBetAmountAndMakeBet(15); + break; + case 6: + chooseBetAmountAndMakeBet(13); + break; + case 8: + chooseBetAmountAndMakeBet(14); + break; + case 10: + chooseBetAmountAndMakeBet(16); + break; + case 11: + chooseBetAmountAndMakeBet(18); + break; + case 12: + chooseBetAmountAndMakeBet(20); + break; + } } } @@ -119,6 +173,14 @@ public void initialRulesPrompt(){ } } + public void chooseBetAmountAndMakeBet(Integer x){ + Double middleMan; + middleMan = c.getDoubleInput("How much money are you going to bet?"); + lastBet = player.makeBet(middleMan); + betAmounts[x] = lastBet; + bets[x] = true; + } + } From c60ad344199cb0051f1cacd375eb55b1d76ef16a Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:31:10 -0400 Subject: [PATCH 22/72] Filled out craps to the first dice roll --- src/main/java/io/zipcoder/casino/Craps.java | 7 ++++++- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 34232ebec..7cf39e592 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -112,8 +112,9 @@ public void crapsEngine(){ break; case 0: decisionUnmade = false; + break; case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); switch(furtherInput){ case 1: chooseBetAmountAndMakeBet(12); @@ -130,6 +131,9 @@ public void crapsEngine(){ case 6: chooseBetAmountAndMakeBet(13); break; + case 7: + chooseBetAmountAndMakeBet(11); + break; case 8: chooseBetAmountAndMakeBet(14); break; @@ -144,6 +148,7 @@ public void crapsEngine(){ break; } } + cd.youCanBetAgain(); } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index f0797a5b4..a52fa2d2d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -22,6 +22,10 @@ public void readyToPlay(){ setPrintCurrentDisplay("Alright! Let's play Craps!"); } + public void youCanBetAgain(){ + setPrintCurrentDisplay("You can make more bets!"); + } + public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } From 91be8bbe5dea6569c4d4f2f14c09aa4cd86bd2a9 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 13:38:42 -0400 Subject: [PATCH 23/72] Checkpointing --- src/main/java/io/zipcoder/casino/Casino.java | 3 - src/main/java/io/zipcoder/casino/Craps.java | 129 ++++++++++++++++++ .../java/io/zipcoder/casino/CrapsDisplay.java | 20 +-- src/main/java/io/zipcoder/casino/Main.java | 8 +- 4 files changed, 143 insertions(+), 17 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/Craps.java diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index bbb8982a2..2d99bc1da 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -17,8 +17,5 @@ public class Casino { public static void main(String[] args) { // write your tests before you start - Display display = new Display(); - System.out.println(display.helloMessage()); - display.getUserInput("Welcome whats your name?"); } } diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java new file mode 100644 index 000000000..3d19f038f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -0,0 +1,129 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public class Craps{ + + private Console c; + private Scanner s; + private Display d; + private InputStream in; + private PrintStream out; + private Player player; + private CrapsDisplay cd; + + private Integer input; + private Integer innerInput; + private Integer furtherInput; + + private Boolean[] outcomes; + private Boolean[] bets; + + public Craps(Player player){ + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.d = new Display(); + this.player = player; + this.cd = new CrapsDisplay(); + + this.input = 0; + this.innerInput = 0; + this.furtherInput = 0; + + this.outcomes = new Boolean[21]; + this.bets = new Boolean[21]; + } + + /* *** Here is the index of every *** + *** bet in the boolean arrays. *** + 0- pass + 1- don't pass + 2- come + 3- don't come + 4- field + 5- place bet 4 + 6- place bet 5 + 7- place bet 6 + 8- place bet 8 + 9- place bet 9 + 10- place bet 10 + 11- one-roll 7 + 12- one-roll craps + 13- one-roll 6 + 14- one-roll 8 + 15- one-roll 4 + 16- one-roll 10 + 17- one-roll 3 + 18- one-roll 11 + 19- one-roll 2 + 20- one-roll 12 */ + + public void crapsEngine(){ + + this.initialRulesPrompt(); + + Boolean noPointSet = true; + Boolean firstRoll = true; + Boolean decisionUnmade = true; + + while(noPointSet){ + while(decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); + switch(input){ + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch(innerInput){ + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + } + break; + case 2: + } + } + + } + + + } + + public void initialRulesPrompt(){ + cd.initalRulesAsk(); + Boolean haventAnswered = true; + while(haventAnswered){ + input = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch(input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenu2(); + cd.readyToPlay(); + haventAnswered = false; + break; + case 2: + cd.readyToPlay(); + haventAnswered = false; + break; + default: + d.setPrintCurrentDisplay("Invalid user input. Please reread instructions."); + } + } + } + +} + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 96bbed9c1..f0797a5b4 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -2,24 +2,24 @@ public class CrapsDisplay extends Display { + public void initalRulesAsk(){ + setPrintCurrentDisplay("Welcome! Would you like the rules first?"); + } + public void printRulesMenu1(){ - setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); + setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout.\n"); } public void printRulesMenuMid(){ - setPrintCurrentDisplay("Type rules2 for more technical rules."); + setPrintCurrentDisplay("There are more technical rules. Do you want them?"); } public void printRulesMenu2(){ - setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); - } - - public void printOptionsMenu1(){ - setPrintCurrentDisplay("You can make a pass bet, a don't pass bet, or a proposition."); + setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nThe field bet is the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!\n"); } - public void printOptionsMenu2(){ - setPrintCurrentDisplay("You can make a come bet, a don't come bet, or a proposition."); + public void readyToPlay(){ + setPrintCurrentDisplay("Alright! Let's play Craps!"); } public void printShooterScores(){ @@ -55,7 +55,7 @@ public void printShooterRolled(){ } public void printSetTypeOfBet(){ - setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 'options' or 'help'."); + setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 1 for help."); } public void printComeOutRoll(){ diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index f747690df..fc8f551a5 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,10 +3,10 @@ public class Main { public static void main(String args[]) { - Display d = new Display(); - BeetleDisplay bd = new BeetleDisplay(); - d.printWelcomeMessage(); - bd.getBeetleComplete(); + Player x = new Player("Hazel", 100.0); + Craps craps = new Craps(x); + craps.crapsEngine(); + } } From b3a8778ac395ebddd64dfa4b1d1c84446bb73dac Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:22:54 -0400 Subject: [PATCH 24/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 62 +++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 3d19f038f..34232ebec 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -22,6 +22,8 @@ public class Craps{ private Boolean[] outcomes; private Boolean[] bets; + private Double[] betAmounts; + private Double lastBet; public Craps(Player player){ this.in = System.in; @@ -37,6 +39,20 @@ public Craps(Player player){ this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; + this.betAmounts = new Double[21]; + this.lastBet = 0.0; + + for(int i = 0; i < 21; i++){ + outcomes[i] = false; + } + + for(int i = 0; i < 21; i++){ + bets[i] = false; + } + + for(int i = 0; i < 21; i++){ + betAmounts[i] = 0.0; + } } /* *** Here is the index of every *** @@ -89,6 +105,44 @@ public void crapsEngine(){ } break; case 2: + chooseBetAmountAndMakeBet(0); + break; + case 3: + chooseBetAmountAndMakeBet(1); + break; + case 0: + decisionUnmade = false; + case 4: + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + switch(furtherInput){ + case 1: + chooseBetAmountAndMakeBet(12); + break; + case 2: + chooseBetAmountAndMakeBet(19); + break; + case 3: + chooseBetAmountAndMakeBet(17); + break; + case 4: + chooseBetAmountAndMakeBet(15); + break; + case 6: + chooseBetAmountAndMakeBet(13); + break; + case 8: + chooseBetAmountAndMakeBet(14); + break; + case 10: + chooseBetAmountAndMakeBet(16); + break; + case 11: + chooseBetAmountAndMakeBet(18); + break; + case 12: + chooseBetAmountAndMakeBet(20); + break; + } } } @@ -119,6 +173,14 @@ public void initialRulesPrompt(){ } } + public void chooseBetAmountAndMakeBet(Integer x){ + Double middleMan; + middleMan = c.getDoubleInput("How much money are you going to bet?"); + lastBet = player.makeBet(middleMan); + betAmounts[x] = lastBet; + bets[x] = true; + } + } From 59a9e02992a5ad77a04023574552f7d23e33e4f3 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:31:10 -0400 Subject: [PATCH 25/72] Filled out craps to the first dice roll --- src/main/java/io/zipcoder/casino/Craps.java | 7 ++++++- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 34232ebec..7cf39e592 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -112,8 +112,9 @@ public void crapsEngine(){ break; case 0: decisionUnmade = false; + break; case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); switch(furtherInput){ case 1: chooseBetAmountAndMakeBet(12); @@ -130,6 +131,9 @@ public void crapsEngine(){ case 6: chooseBetAmountAndMakeBet(13); break; + case 7: + chooseBetAmountAndMakeBet(11); + break; case 8: chooseBetAmountAndMakeBet(14); break; @@ -144,6 +148,7 @@ public void crapsEngine(){ break; } } + cd.youCanBetAgain(); } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index f0797a5b4..a52fa2d2d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -22,6 +22,10 @@ public void readyToPlay(){ setPrintCurrentDisplay("Alright! Let's play Craps!"); } + public void youCanBetAgain(){ + setPrintCurrentDisplay("You can make more bets!"); + } + public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } From 800b5360b63e5d595a414ca5061345e45a9499d7 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:33:14 -0400 Subject: [PATCH 26/72] Updating --- src/main/java/io/zipcoder/casino/Display.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 47da2fece..4d3ac5bbc 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -1,8 +1,5 @@ package io.zipcoder.casino; -<<<<<<< HEAD -======= ->>>>>>> 2d9a6333640d23c5de20f3343a85c18403c50a0c import io.zipcoder.casino.utilities.Console; import java.io.InputStream; From aeea383bc19e74d1064b9d4db65cf2d3b1d06e9d Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Wed, 17 Mar 2021 16:47:15 -0400 Subject: [PATCH 27/72] beetle progress --- src/main/java/io/zipcoder/casino/Beetle.java | 177 +++++++++++++++++- .../io/zipcoder/casino/BeetleDisplay.java | 16 +- .../io/zipcoder/casino/BlackJackDisplay.java | 2 +- src/main/java/io/zipcoder/casino/Casino.java | 4 +- .../java/io/zipcoder/casino/DiceGame.java | 1 + src/main/java/io/zipcoder/casino/Main.java | 5 +- .../java/io/zipcoder/casino/BeetleTest.java | 46 +++++ 7 files changed, 236 insertions(+), 15 deletions(-) create mode 100644 src/test/java/io/zipcoder/casino/BeetleTest.java diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java index bfa7935d0..6b359d939 100644 --- a/src/main/java/io/zipcoder/casino/Beetle.java +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -1,4 +1,179 @@ package io.zipcoder.casino; -public class Beetle { +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.HashSet; +import java.util.Scanner; +import java.util.Set; + +public class Beetle extends DiceGame{ + //Console console = new Console(); + Scanner scanner = new Scanner(System.in); + + Boolean GameState = true; + BeetleDisplay bd = new BeetleDisplay(); + private String[][] completeBeetle = new String[][]{{"\\","0","/"}, + {"⎛","|","⎞"}, + {"⎝","|","⎠"}, + {"/","⏝","\\"} + }; + private String[][] usersBeetle = new String[][]{{" "," "," "}, + {" "," "," "}, + {" "," "," "}, + {" "," "," "} + }; + private String[][] opponentsBeetle = new String[][]{{" "," "," "}, + {" "," "," "}, + {" "," "," "}, + {" "," "," "} + }; + + private Set usersRolls = new HashSet(); + private Set opponentsRolls = new HashSet(); + + + public Beetle() { + } + + //if opponent set is equal to or greater than user set opponent will bet. + + //facilitator + public void gameEngine() { + Boolean userWins = false; + Boolean opponentWins = false; + Boolean playersTied = false; + + while (!playersTied && !userWins && !opponentWins) { + System.out.println("Would you like to place a bet?"); + String userInput = scanner.nextLine(); + Integer userRollValue = diceRollSum(1); + bd.usersRollResults(userRollValue); + analyzeRoll(usersRolls, usersBeetle, userRollValue); + drawPlayerBeetle(usersBeetle); + + Integer opponentsRollValue = diceRollSum(1); + bd.opponentsRollResults(opponentsRollValue); + analyzeRoll(opponentsRolls, opponentsBeetle, opponentsRollValue); + drawPlayerBeetle(opponentsBeetle); + + if (getCompleteBeetle() == getUsersBeetle() && getCompleteBeetle() == getOpponentsBeetle()) { + playersTied = true; + break; + } + else if (getCompleteBeetle() == getUsersBeetle()) { + userWins = true; + break; + } + else if (getCompleteBeetle() == getOpponentsBeetle()) { + opponentWins = true; + break; + } + } + } + + + public void analyzeRoll(Set rollSet, String[][] playersBeetle, Integer diceRoll){ + if(!rollSet.contains(diceRoll)) { + drawBeetle(rollSet, playersBeetle,diceRoll); + rollSet.add(diceRoll); + } + else { + bd.repeatedRollResult(); + } + } + + public void drawBeetle(Set rollSet, String[][] playersBeetle, Integer diceRoll) { + + switch (diceRoll) { + case 1: + bd.drewLeg(); + playersBeetle[0][0] = completeBeetle[0][0]; + break; + case 2: + bd.drewLeg(); + playersBeetle[0][2] = completeBeetle[0][2]; + break; + case 3: + bd.drewLeg(); + playersBeetle[3][0] = completeBeetle[3][0]; + break; + case 4: + bd.drewLeg(); + playersBeetle[3][2] = completeBeetle[3][2]; + break; + case 5: + bd.drewHead(); + playersBeetle[0][1] = completeBeetle[0][1]; + playersBeetle[1][1] = completeBeetle[1][1]; + playersBeetle[2][1] = completeBeetle[2][1]; + break; + case 6: + bd.drewBody(); + playersBeetle[1][0] = completeBeetle[1][0]; + playersBeetle[1][2] = completeBeetle[1][2]; + playersBeetle[2][0] = completeBeetle[2][0]; + playersBeetle[2][2] = completeBeetle[2][2]; + playersBeetle[3][1] = completeBeetle[3][1]; + + break; + default: + System.out.println("something went wrong"); + break; + } + } + + public String[][] drawPlayerBeetle(String[][] playersBeetle){ + for (int i = 0; i < playersBeetle.length; i++) { + for (int j = 0; j < playersBeetle[i].length; j++) { + System.out.print(playersBeetle[i][j] + " "); + } + System.out.println(); + } + return playersBeetle; + } + + public Set getUsersRolls() { + return usersRolls; + } + + public Set getOpponentsRolls() { + return opponentsRolls; + } + + public String[][] getUsersBeetle(){ + return usersBeetle; + } + + public String[][] getOpponentsBeetle(){ + return opponentsBeetle; + } + + public String[][] getCompleteBeetle(){ + return completeBeetle; + } + + + + + public String startGame() { + return null; + } + + public String acceptBetFrom() { + return null; + } + + public String calculateReward() { + return null; + } + + public String calculateLoss() { + return null; + } + + public String endGame() { + return null; + } } diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index 12e3d310e..be6bf33c5 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -1,9 +1,5 @@ package io.zipcoder.casino; -import io.zipcoder.casino.utilities.Console; - -import java.util.Arrays; - public class BeetleDisplay extends Display { String[][] beetle = new String[][]{{"\\","0","/"}, @@ -48,15 +44,20 @@ public void bothBeetlesComplete() { setPrintCurrentDisplay("You both drew beetles. The game is a tie."); } + public void usersRollResults(Integer usersRoll) { + setPrintCurrentDisplay("You rolled a " + usersRoll); + } + + public void opponentsRollResults(Integer opponentsRoll) { + setPrintCurrentDisplay("Your opponent rolled a " + opponentsRoll); + } + public void repeatedRollResult() { setPrintCurrentDisplay("You already rolled that number."); } //Beetle Body Parts public void getBeetleComplete() { - //System.out.println(Arrays.deepToString(beetle)); - /*for (String[] row : beetle) { - System.out.println(Arrays.deepToString(row));*/ for (int i = 0; i < beetle.length; i++) { for (int j = 0; j < beetle[i].length; j++) { System.out.print(beetle[i][j] + " "); @@ -64,7 +65,6 @@ public void getBeetleComplete() { System.out.println(); } } - public void getCurrentBeetle() { } diff --git a/src/main/java/io/zipcoder/casino/BlackJackDisplay.java b/src/main/java/io/zipcoder/casino/BlackJackDisplay.java index f9e97d608..5580f265f 100644 --- a/src/main/java/io/zipcoder/casino/BlackJackDisplay.java +++ b/src/main/java/io/zipcoder/casino/BlackJackDisplay.java @@ -3,7 +3,7 @@ public class BlackJackDisplay extends Display { public void rules() { - currentDisplaySP(); + ; } diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 34789c05c..7f65d2d3d 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -6,8 +6,8 @@ public class Casino { public static void main(String[] args) { // write your tests before you start - Display display = new Display(); + /*Display display = new Display(); System.out.println(display.helloMessage()); - display.getUserInput("Welcome whats your name?"); + display.getUserInput("Welcome whats your name?");*/ } } diff --git a/src/main/java/io/zipcoder/casino/DiceGame.java b/src/main/java/io/zipcoder/casino/DiceGame.java index ba4e70688..29625b0c6 100644 --- a/src/main/java/io/zipcoder/casino/DiceGame.java +++ b/src/main/java/io/zipcoder/casino/DiceGame.java @@ -2,6 +2,7 @@ import java.util.Random; + abstract class DiceGame implements GamblingGame { diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index f747690df..5937fd656 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -4,9 +4,8 @@ public class Main { public static void main(String args[]) { Display d = new Display(); - BeetleDisplay bd = new BeetleDisplay(); - d.printWelcomeMessage(); - bd.getBeetleComplete(); + Beetle beetle = new Beetle(); + beetle.gameEngine(); } } diff --git a/src/test/java/io/zipcoder/casino/BeetleTest.java b/src/test/java/io/zipcoder/casino/BeetleTest.java new file mode 100644 index 000000000..65ccc52e3 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/BeetleTest.java @@ -0,0 +1,46 @@ +package io.zipcoder.casino; + +import org.junit.Assert; +import org.junit.Test; + +public class BeetleTest { + + @Test + public void playerBeetleTest() { + //given + Beetle beetle = new Beetle(); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 4); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 5); + // and + String[][] expected = new String[][]{{" ","0"," "}, + {" ","|"," "}, + {" ","|"," "}, + {" "," ","\\"}}; + String[][] actual = (beetle.drawPlayerBeetle(beetle.getUsersBeetle())); + //assert + Assert.assertEquals(expected,actual); + + } + + + @Test + public void gameEngineTest() { + Beetle beetle = new Beetle(); + beetle.gameEngine(); + } + + @Test + public void completeBeetleTest() { + Beetle beetle = new Beetle(); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 1); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 2); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 3); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 4); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 5); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 6); + + Assert.assertEquals(beetle.getCompleteBeetle(),beetle.getUsersBeetle()); + + } + +} From 9374e4535fc300fc0de2591c952b6b64130111f7 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 16:56:47 -0400 Subject: [PATCH 28/72] Checkpointing --- src/main/java/io/zipcoder/casino/Casino.java | 14 -- src/main/java/io/zipcoder/casino/Craps.java | 203 +++++++++++++++++- .../java/io/zipcoder/casino/CrapsDisplay.java | 8 +- .../java/io/zipcoder/casino/GamblingGame.java | 4 - 4 files changed, 203 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 2d99bc1da..b5c126283 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -1,19 +1,5 @@ package io.zipcoder.casino; -<<<<<<< HEAD -<<<<<<< HEAD -======= - -======= ->>>>>>> 2d9a6333640d23c5de20f3343a85c18403c50a0c -import io.zipcoder.casino.utilities.Console; -import java.util.Scanner; - -<<<<<<< HEAD ->>>>>>> 17106eff69db6462352572b1842f4e0083c113dc -======= - ->>>>>>> 2d9a6333640d23c5de20f3343a85c18403c50a0c public class Casino { public static void main(String[] args) { // write your tests before you start diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 7cf39e592..8803cb547 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -6,7 +6,7 @@ import java.io.PrintStream; import java.util.Scanner; -public class Craps{ +public class Craps extends DiceGame{ private Console c; private Scanner s; @@ -24,6 +24,7 @@ public class Craps{ private Boolean[] bets; private Double[] betAmounts; private Double lastBet; + private Integer point; public Craps(Player player){ this.in = System.in; @@ -86,6 +87,7 @@ public void crapsEngine(){ Boolean noPointSet = true; Boolean firstRoll = true; Boolean decisionUnmade = true; + Boolean notSevenedOut = true; while(noPointSet){ while(decisionUnmade) { @@ -148,9 +150,24 @@ public void crapsEngine(){ break; } } - cd.youCanBetAgain(); + if(decisionUnmade) { + cd.youCanBetAgain(); + } } + decisionUnmade = true; + if(firstRoll){ + cd.printComeOutRoll(); + firstRoll = false; + } + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPrePoint(x); + oneRollReset(); + if(x == 4 || x == 5 || x == 6 || x == 8 || x == 9 || x == 10){ + point = x; + noPointSet = false; + } } @@ -186,6 +203,188 @@ public void chooseBetAmountAndMakeBet(Integer x){ bets[x] = true; } + public void oneRollReset(){ + bets[4] = false; + betAmounts[4] = 0.0; + for(int i = 11; i < 21; i++){ + bets[i] = false; + betAmounts[i] = 0.0; + } + } + + public void checkBetsPrePoint(Integer x){ + if(x == 2 && bets[19]){ + player.setWallet(betAmounts[19] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 2 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 2 && bets[1]){ //pass + player.setWallet(betAmounts[1] * 2); + cd.printCraps(); + } + if(x == 3 && bets[17]){ + player.setWallet(betAmounts[17] * 30); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[1]){ //pass + player.setWallet(betAmounts[1] * 2); + cd.printCraps(); + } + if(x == 4 && bets[15]){ + player.setWallet(betAmounts[15] * 14); + cd.printOneRollBetWin(); + } + if(x == 6 && bets[13]){ + player.setWallet(betAmounts[13] * 18); + cd.printOneRollBetWin(); + } + if(x == 7 && bets[11]){ + player.setWallet(betAmounts[11] * 8); + cd.printNatural(); + cd.printOneRollBetWin(); + } + if(x == 7 && bets[0]){ //pass + player.setWallet(betAmounts[0] * 2); + cd.printNatural(); + } + if(x == 8 && bets[14]){ + player.setWallet(betAmounts[14] * 18); + cd.printOneRollBetWin(); + } + if(x == 10 && bets[16]){ + player.setWallet(betAmounts[16] * 14); + cd.printOneRollBetWin(); + } + if(x == 11 && bets[18]){ + player.setWallet(betAmounts[18] * 30); + cd.printOneRollBetWin(); + cd.printNatural(); + } + if(x == 11 && bets[0]){ //pass + player.setWallet(betAmounts[0] * 2); + cd.printNatural(); + } + if(x == 12 && bets[20]){ + player.setWallet(betAmounts[20]); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 12 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 12 && bets[1]){ //pass + player.setWallet(betAmounts[1] * 2); + cd.printCraps(); + } + } + + public void checkBetsPostPoint(Integer x, Integer point){ + if(x == 2 && bets[19]){ + player.setWallet(betAmounts[19] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 2 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[17]){ + player.setWallet(betAmounts[17] * 30); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 4 && bets[15]){ + player.setWallet(betAmounts[15] * 14); + cd.printOneRollBetWin(); + } + if(x == 6 && bets[13]){ + player.setWallet(betAmounts[13] * 18); + cd.printOneRollBetWin(); + } + if(x == 7 && bets[11]){ + player.setWallet(betAmounts[11] * 8); + cd.printNatural(); + cd.printOneRollBetWin(); + } + if(x == 8 && bets[14]){ + player.setWallet(betAmounts[14] * 18); + cd.printOneRollBetWin(); + } + if(x == 10 && bets[16]){ + player.setWallet(betAmounts[16] * 14); + cd.printOneRollBetWin(); + } + if(x == 11 && bets[18]){ + player.setWallet(betAmounts[18] * 30); + cd.printOneRollBetWin(); + cd.printNatural(); + } + if(x == 12 && bets[20]){ + player.setWallet(betAmounts[20]); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 12 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == point && bets[2]){ + player.setWallet(betAmounts[2]); + cd.printShooterScores(); + bets[3] = false; + betAmounts[3] = 0.0; + } + if(x == 7 && bets[3]){ + player.setWallet(betAmounts[3]); + cd.printShooterSevenedOut(); + bets[2] = false; + betAmounts [2] = 0.0; + } + if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ + + } + } + + public String startGame() { + return null; + } + + public String acceptBetFrom() { + return null; + } + + public String calculateReward() { + return null; + } + + public String calculateLoss() { + return null; + } + + public String endGame() { + return null; + } + } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index a52fa2d2d..638b98e2d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -38,10 +38,6 @@ public void printPush(){ setPrintCurrentDisplay("Your bet is a push."); } - public void printOneRolLBetLoss(){ - setPrintCurrentDisplay("Your one-roll proposition failed..."); - } - public void printOneRollBetWin(){ setPrintCurrentDisplay("You won your one-roll proposition!"); } @@ -54,8 +50,8 @@ public void printCraps(){ setPrintCurrentDisplay("It's craps!"); } - public void printShooterRolled(){ - setPrintCurrentDisplay("The shooter rolled a " + 5); + public void printShooterRolled(Integer x){ + setPrintCurrentDisplay("The shooter rolled a " + x); } public void printSetTypeOfBet(){ diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java index 1ffe446ec..10aad9b13 100644 --- a/src/main/java/io/zipcoder/casino/GamblingGame.java +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -1,10 +1,6 @@ package io.zipcoder.casino; public interface GamblingGame { -<<<<<<< HEAD - -======= ->>>>>>> 2d9a6333640d23c5de20f3343a85c18403c50a0c public String startGame(); From a7af20c60752b1ddc9dde265792a51d3d8a4c1a0 Mon Sep 17 00:00:00 2001 From: Theresa Date: Wed, 17 Mar 2021 16:58:36 -0400 Subject: [PATCH 29/72] Added methods for GoFish & fixed broken shuffle & dealCards methods --- .../java/io/zipcoder/casino/CardGame.java | 39 ++++--- src/main/java/io/zipcoder/casino/GoFish.java | 103 ++++++++++++++++++ .../io/zipcoder/casino/GoFishDisplay.java | 4 +- .../java/io/zipcoder/casino/GoFishTest.java | 85 +++++++++++++++ 4 files changed, 215 insertions(+), 16 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/GoFish.java create mode 100644 src/test/java/io/zipcoder/casino/GoFishTest.java diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index 6130eb046..5c37ce14f 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -5,34 +5,48 @@ import java.util.Stack; public abstract class CardGame implements GamblingGame { - - Stack deckOfCards; ArrayList playersHand; ArrayList dealersHand; ArrayList deck; - + String[] ranks; + String[] suits; public CardGame() { + this.deck = new ArrayList(52); + // Set zeroth element to null to indicate an unused element (only valid ranks from 1-13) + this.ranks = new String[]{null, "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; + this.suits = new String[]{"Clubs", "Diamonds", "Hearts", "Spades"}; + this.playersHand = new ArrayList(); + this.dealersHand = new ArrayList(); } - public void createNewDeck() { - String[] suits = new String[]{"Clubs", "Diamonds", "Hearts", "Spades"}; - // Set zeroth element to null to indicate an unused element (only valid ranks from 1-13) - String[] ranks = new String[]{null, "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"}; + public ArrayList getDeck() { + return this.deck; + } + public ArrayList getPlayersHand() { + return this.playersHand; + } + + public ArrayList getDealersHand() { + return this.dealersHand; + } + + public void createNewDeck() { for (int suit = 0; suit <=3; suit++) { for (int rank = 1; rank <= 13; rank++) { - this.deck.add(ranks[rank] + " of " + suits[suit]); + this.deck.add(this.ranks[rank] + " of " + this.suits[suit]); } } } public void shuffleCards() { - ArrayList temp = new ArrayList(); + ArrayList temp = new ArrayList(52); while(!this.deck.isEmpty()) { int randCard = (int) (Math.random() * deck.size()); - temp.add(deck.get(randCard)); + temp.add(this.deck.get(randCard)); + this.deck.remove(randCard); } this.deck = temp; } @@ -46,11 +60,8 @@ public void dealCards(int numberOfCards) { this.dealersHand.add(this.deck.get(i)); } this.deck.remove(i); + i++; } } - - public void skipDeal() { - // ??? - } } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java new file mode 100644 index 000000000..69c15e88f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -0,0 +1,103 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Iterator; + +public class GoFish extends CardGame { + + // players hand + // dealers hand + // deck + + Console c; + private InputStream in; + private PrintStream out; + GoFishDisplay d; + String rankAskedFor; + + public GoFish() { + + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + c = new Console(in, out); + + d = new GoFishDisplay(); + } + + public void beginGame(int numberOfCards) { + this.createNewDeck(); // Create new standard 52 card deck + this.shuffleCards(); // Shuffle the deck randomly + //this.dealCards(numberOfCards); // Deal numberOfCards to two people + } + + // Move to display class?? + public String displayPlayersHand(ArrayList playersHand) { + String playersHandOutput = ""; + Iterator itr = playersHand.iterator(); + while(itr.hasNext()) { + playersHandOutput += itr.next() + "/n"; + } + return playersHandOutput; + } + + public String getRankOnCard(String cardRankAndSuit) { + return cardRankAndSuit.substring(0, cardRankAndSuit.indexOf(" ")); + } + + public String getRankToAskFor_Human() { + d.cardYouWillAskFor(); + return c.getStringInput(null, null); + } + + public String getRankToAskFor_Computer() { + return null; + } + + public boolean checkRankRequestedIsAllowed(ArrayList currentPlayersHand, String rankAskedFor) { + if (playersHand.contains(rankAskedFor)) { + return true; + } else { + d.printNotInYourHand(); + return false; + } + } + + public boolean checkIfRankInOtherPlayersHand(ArrayList otherPlayersHand, String rankAskedFor) { + if (otherPlayersHand.contains(rankAskedFor)) { + return true; + } else { + return false; + } + } + + public void takeCardFromOtherPlayer(ArrayList playerTakingCard, ArrayList playerGivingCard, String rankAskedFor) { + for (int i = 0; i < playerGivingCard.size(); i++) { + if (this.getRankOnCard(playerGivingCard.get(i)) == rankAskedFor) { + playerTakingCard.add(playerGivingCard.get(i)); + playerGivingCard.remove(i); + } + } + } + + public void checkForPairsInCurrentPlayersHand(ArrayList currentPlayer) { + + } + +} + + + + + + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 7b320c2ea..d311d1d83 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -4,7 +4,7 @@ public class GoFishDisplay extends Display{ public void goFishRules(){ setPrintCurrentDisplay("Two players will be dealt 5 cards each.\nThe object of the game is to have the most pairs when the deck is empty." + - "\nA player creates pairs by asking the other player if they have a specific card in their hand." + + "\nA player creates pairs by asking the other player if they have a specific card rank in their hand." + "\nYou must be holding the card the card you request." + "\n"); } @@ -32,6 +32,6 @@ public void whoWillYouAsk(){ public void createdAPair() {setPrintCurrentDisplay("Your opponent has a " + ". A pair of " + "'s have been added to your score.");} - + public void printNotInYourHand() {setPrintCurrentDisplay("Ooops! That rank isn't in your hand. Ask for one that is!");} } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java new file mode 100644 index 000000000..d851c9e0b --- /dev/null +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -0,0 +1,85 @@ +package io.zipcoder.casino; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; + +public class GoFishTest { + + GoFish go; + + @Before + public void setUp() { + go = new GoFish(); + } + + @Test + public void testCreateNewDeck() { + // Given + int numberOfCards = 5; + String expectedAtIdx0 = "Ace of Clubs"; + String expectedAtIdx1 = "2 of Clubs"; + String expectedAtIdx13 = "Ace of Diamonds"; + String expectedAtIdx28 = "3 of Hearts"; + String expectedAtIdx51 = "King of Spades"; + + // When + go.createNewDeck(); + ArrayList actualDeck = go.getDeck(); + String actualAtIdx0 = actualDeck.get(0); + String actualAtIdx1 = actualDeck.get(1); + String actualAtIdx13 = actualDeck.get(13); + String actualAtIdx28 = actualDeck.get(28); + String actualAtIdx51 = actualDeck.get(51); + + // Then + Assert.assertEquals(52, actualDeck.size()); + Assert.assertEquals(expectedAtIdx0, actualAtIdx0); + Assert.assertEquals(expectedAtIdx1, actualAtIdx1); + Assert.assertEquals(expectedAtIdx13, actualAtIdx13); + Assert.assertEquals(expectedAtIdx28, actualAtIdx28); + Assert.assertEquals(expectedAtIdx51, actualAtIdx51); + } + + @Test + public void testShuffleCards() { + // Given + go.createNewDeck(); + ArrayList unshuffledDeck = new ArrayList(go.getDeck()); + + // When + go.shuffleCards(); + ArrayList shuffledDeck = go.getDeck(); + + // Then + Assert.assertNotEquals(unshuffledDeck, shuffledDeck); + + //System.out.println(Arrays.toString(unshuffledDeck.toArray())); + //System.out.println(Arrays.toString(shuffledDeck.toArray())); + } + + @Test + public void testDealCards() { + // Given + go.createNewDeck(); + ArrayList actualDeck = go.getDeck(); + + // When + go.dealCards(5); + ArrayList actualPerson1 = go.getPlayersHand(); + ArrayList actualPerson2 = go.getDealersHand(); + + // Then + Assert.assertEquals(5, actualPerson1.size()); + Assert.assertEquals(5, actualPerson2.size()); + Assert.assertEquals(42, actualDeck.size()); + + //System.out.println(Arrays.toString(actualPerson1.toArray())); + //System.out.println(Arrays.toString(actualPerson2.toArray())); + } + + +} From 12bbc4584cdcaa13fc5f6aa5e742ca07e17a28b6 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 18:31:43 -0400 Subject: [PATCH 30/72] Finished bet options --- src/main/java/io/zipcoder/casino/Craps.java | 69 +++++++++++++++++-- .../java/io/zipcoder/casino/CrapsDisplay.java | 10 ++- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 8803cb547..16597875d 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -217,77 +217,94 @@ public void checkBetsPrePoint(Integer x){ player.setWallet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 2 && bets[1]){ //pass player.setWallet(betAmounts[1] * 2); cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); } if(x == 3 && bets[17]){ player.setWallet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[1]){ //pass player.setWallet(betAmounts[1] * 2); cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); } if(x == 4 && bets[15]){ player.setWallet(betAmounts[15] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ player.setWallet(betAmounts[13] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ player.setWallet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[11] * 8); } if(x == 7 && bets[0]){ //pass player.setWallet(betAmounts[0] * 2); cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); } if(x == 8 && bets[14]){ player.setWallet(betAmounts[14] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ player.setWallet(betAmounts[16] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ player.setWallet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); + cd.printWinnings(betAmounts[18] * 30); } if(x == 11 && bets[0]){ //pass player.setWallet(betAmounts[0] * 2); cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20]); + player.setWallet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 12 && bets[1]){ //pass player.setWallet(betAmounts[1] * 2); cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); } } @@ -296,72 +313,116 @@ public void checkBetsPostPoint(Integer x, Integer point){ player.setWallet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[17]){ player.setWallet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 4 && bets[15]){ player.setWallet(betAmounts[15] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ player.setWallet(betAmounts[13] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ player.setWallet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[11] * 8); } if(x == 8 && bets[14]){ player.setWallet(betAmounts[14] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ player.setWallet(betAmounts[16] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ player.setWallet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); + cd.printWinnings(betAmounts[18] * 30); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20]); + player.setWallet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == point && bets[2]){ player.setWallet(betAmounts[2]); cd.printShooterScores(); + cd.printWinnings(betAmounts[2]); + cd.printPush(); bets[3] = false; betAmounts[3] = 0.0; } if(x == 7 && bets[3]){ - player.setWallet(betAmounts[3]); + player.setWallet(betAmounts[3] * 2); cd.printShooterSevenedOut(); + cd.printWinnings(betAmounts[3] * 2); bets[2] = false; betAmounts [2] = 0.0; } if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ - + player.setWallet(betAmounts[4] * 2); + cd.printWinnings(betAmounts[4] * 2); + } + if(x == 2 && bets[4] || x == 12 && bets[4]){ + player.setWallet(betAmounts[4] * 4); + cd.printWinnings(betAmounts[4] * 4); + } + if(x == 4 && bets[5]){ + player.setWallet(betAmounts[5] * 2); + cd.printWinnings(betAmounts[5] * 2); + } + if(x == 5 && bets[6]){ + player.setWallet(betAmounts[6] * 2); + cd.printWinnings(betAmounts[6] * 2); + } + if(x == 6 && bets[7]){ + player.setWallet(betAmounts[7] * 2); + cd.printWinnings(betAmounts[7] * 2); + } + if(x == 8 && bets[8]){ + player.setWallet(betAmounts[8] * 2); + cd.printWinnings(betAmounts[8] * 2); + } + if(x == 9 && bets[9]){ + player.setWallet(betAmounts[9] * 2); + cd.printWinnings(betAmounts[9] * 2); + } + if(x == 10 && bets[10]){ + player.setWallet(betAmounts[10] * 2); + cd.printWinnings(betAmounts[10] * 2); } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 638b98e2d..b473cdbfd 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -26,12 +26,20 @@ public void youCanBetAgain(){ setPrintCurrentDisplay("You can make more bets!"); } + public void printWinnings(Double winnings){ + setPrintCurrentDisplay("You made $" + winnings + "!"); + } + + public void printLosings(Double bet){ + setPrintCurrentDisplay("There goes $" + bet + "."); + } + public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } public void printShooterSevenedOut(){ - setPrintCurrentDisplay("The shooter sevened out..."); + setPrintCurrentDisplay("The shooter sevened out... The round is over."); } public void printPush(){ From 7a94f4beaf0da97d0d577b53c80c1eedd80d2623 Mon Sep 17 00:00:00 2001 From: Theresa Date: Thu, 18 Mar 2021 13:09:02 -0400 Subject: [PATCH 31/72] Changed a few methods --- src/main/java/io/zipcoder/casino/GoFish.java | 63 +++++++++++-------- .../io/zipcoder/casino/GoFishDisplay.java | 10 ++- .../java/io/zipcoder/casino/GoFishTest.java | 35 +++++++++++ 3 files changed, 75 insertions(+), 33 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 69c15e88f..473202734 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -17,6 +17,8 @@ public class GoFish extends CardGame { private InputStream in; private PrintStream out; GoFishDisplay d; + int bookCountPlayer; + int bookCountDealer; String rankAskedFor; public GoFish() { @@ -24,15 +26,18 @@ public GoFish() { this.in = System.in; this.out = System.out; this.c = new Console(in, out); - c = new Console(in, out); d = new GoFishDisplay(); + + this.bookCountPlayer = 0; + this.bookCountDealer = 0; } - public void beginGame(int numberOfCards) { - this.createNewDeck(); // Create new standard 52 card deck - this.shuffleCards(); // Shuffle the deck randomly - //this.dealCards(numberOfCards); // Deal numberOfCards to two people + + public void setupGame(int numberOfCards) { + this.createNewDeck(); + this.shuffleCards(); + this.dealCards(numberOfCards); } // Move to display class?? @@ -40,39 +45,30 @@ public String displayPlayersHand(ArrayList playersHand) { String playersHandOutput = ""; Iterator itr = playersHand.iterator(); while(itr.hasNext()) { - playersHandOutput += itr.next() + "/n"; + playersHandOutput += itr.next() + "\n"; } return playersHandOutput; } - public String getRankOnCard(String cardRankAndSuit) { - return cardRankAndSuit.substring(0, cardRankAndSuit.indexOf(" ")); - } - public String getRankToAskFor_Human() { - d.cardYouWillAskFor(); + d.printWhatRankYouWillAskFor(); return c.getStringInput(null, null); } - public String getRankToAskFor_Computer() { - return null; - } - - public boolean checkRankRequestedIsAllowed(ArrayList currentPlayersHand, String rankAskedFor) { - if (playersHand.contains(rankAskedFor)) { - return true; - } else { - d.printNotInYourHand(); - return false; - } + public String getRankToAskFor_Computer(ArrayList computersHand) { + int pickCard = (int) Math.random() * (computersHand.size() - 1); + return this.getRankOnCard(computersHand.get(pickCard)); } - public boolean checkIfRankInOtherPlayersHand(ArrayList otherPlayersHand, String rankAskedFor) { - if (otherPlayersHand.contains(rankAskedFor)) { - return true; - } else { - return false; + // Use this to check if rank in requesting player's hand first (can only request a rank already in your hand) + // And use to check if rank is in other player's hand + public boolean checkIfRankInPlayersHand(ArrayList playersHand, String rankAskedFor) { + for (int i = 0; i < playersHand.size(); i++) { + if (getRankOnCard(playersHand.get(i)) == rankAskedFor) { + return true; + } } + return false; } public void takeCardFromOtherPlayer(ArrayList playerTakingCard, ArrayList playerGivingCard, String rankAskedFor) { @@ -84,10 +80,23 @@ public void takeCardFromOtherPlayer(ArrayList playerTakingCard, ArrayLis } } + public void drawCardFromDeck(ArrayList playerHand) { + playerHand.add(this.deck.get(0)); + this.deck.remove(0); + } + public void checkForPairsInCurrentPlayersHand(ArrayList currentPlayer) { } + public void checkWinner(int bookCount) { + bookCount += 1; + } + + public String getRankOnCard(String cardRankAndSuit) { + return cardRankAndSuit.substring(0, cardRankAndSuit.indexOf(" ")); + } + } diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index d311d1d83..4716f9cf7 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -17,7 +17,7 @@ public void cardFound(){ setPrintCurrentDisplay("That card is in their hand."); } - public void cardNotFound(){ + public void printCardNotFound(){ setPrintCurrentDisplay("Nope. They are not holding that card."); } @@ -26,12 +26,10 @@ public void whoWillYouAsk(){ setPrintCurrentDisplay("Who will you ask?"); } - public void cardYouWillAskFor(){setPrintCurrentDisplay("What card will you ask for?");} + public void printWhatRankYouWillAskFor(){setPrintCurrentDisplay("What card will you ask for?");} - public void opponentAskedFor(){setPrintCurrentDisplay("You opponent asked for a");} + public void printOponentAskedFor(){setPrintCurrentDisplay("You opponent asked for a");} - public void createdAPair() {setPrintCurrentDisplay("Your opponent has a " + ". A pair of " + "'s have been added to your score.");} - - public void printNotInYourHand() {setPrintCurrentDisplay("Ooops! That rank isn't in your hand. Ask for one that is!");} + public void printCreatedAPair() {setPrintCurrentDisplay("Your opponent has a " + ". A pair of " + "'s have been added to your score.");} } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index d851c9e0b..d261f73a9 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -81,5 +81,40 @@ public void testDealCards() { //System.out.println(Arrays.toString(actualPerson2.toArray())); } + @Test + public void testSetupGame() { + + } + + @Test // Move to display class?? + public void displayPlayersHand() { + // Given + go.setupGame(5); + String hand = go.displayPlayersHand(go.getPlayersHand()); + System.out.println(hand); + } + + @Test + public void testGetRankOnCard() { + // Given + String given = "2 of Diamonds"; + String expected = "2"; + + String givenCase2 = "Ace of Hearts"; + String expectedCase2 = "Ace"; + + String givenCase3 = "10 of Clubs"; + String expectedCase3 = "10"; + + // When + String actual = go.getRankOnCard(given); + String actualCase2 = go.getRankOnCard(givenCase2); + String actualCase3 = go.getRankOnCard(givenCase3); + + // Then + Assert.assertEquals(expected, actual); + Assert.assertEquals(expectedCase2, actualCase2); + Assert.assertEquals(expectedCase3, actualCase3); + } } From 43d880928ab6dd03e0e98d3be5425a9109c6cf2f Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 13:27:37 -0400 Subject: [PATCH 32/72] Filled out gameplay flow post-point --- src/main/java/io/zipcoder/casino/Craps.java | 144 +++++++++++++++++- .../java/io/zipcoder/casino/CrapsDisplay.java | 4 - .../java/io/zipcoder/casino/GamblingGame.java | 6 +- 3 files changed, 140 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 16597875d..5d24e5dd9 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -19,6 +19,7 @@ public class Craps extends DiceGame{ private Integer input; private Integer innerInput; private Integer furtherInput; + private Integer yetFurtherInput; private Boolean[] outcomes; private Boolean[] bets; @@ -104,6 +105,9 @@ public void crapsEngine(){ break; case 2: break; + default: + cd.printErrorMessage(); + continue; } break; case 2: @@ -148,7 +152,13 @@ public void crapsEngine(){ case 12: chooseBetAmountAndMakeBet(20); break; + default: + cd.printErrorMessage(); + continue; } + default: + cd.printErrorMessage(); + continue; } if(decisionUnmade) { cd.youCanBetAgain(); @@ -171,6 +181,126 @@ public void crapsEngine(){ } + + while(notSevenedOut){ + while(decisionUnmade){ + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'come,' 3 for 'don't come,' or 4 for a proposition."); + switch(input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch (innerInput) { + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + default: + cd.printErrorMessage(); + continue; + } + case 2: + chooseBetAmountAndMakeBet(2); + break; + case 3: + chooseBetAmountAndMakeBet(3); + break; + case 0: + decisionUnmade = false; + break; + case 4: + furtherInput = c.getIntegerInput("Type 1 to bet the field, 2 for a place bet, or 3 for a one-roll bet."); + switch(furtherInput){ + case 1: + chooseBetAmountAndMakeBet(4); + break; + case 2: + yetFurtherInput = c.getIntegerInput("Type the number you want to make your place bet on (4, 5, 6, 8, 9, or 10, but not the point."); + if(yetFurtherInput == point){ + cd.printErrorMessage(); + continue; + } + switch(yetFurtherInput){ + case 4: + chooseBetAmountAndMakeBet(5); + break; + case 5: + chooseBetAmountAndMakeBet(6); + break; + case 6: + chooseBetAmountAndMakeBet(7); + break; + case 8: + chooseBetAmountAndMakeBet(8); + break; + case 9: + chooseBetAmountAndMakeBet(9); + break; + case 10: + chooseBetAmountAndMakeBet(10); + break; + default: + cd.printErrorMessage(); + continue; + } + case 3: + yetFurtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + switch(yetFurtherInput) { + case 1: + chooseBetAmountAndMakeBet(12); + break; + case 2: + chooseBetAmountAndMakeBet(19); + break; + case 3: + chooseBetAmountAndMakeBet(17); + break; + case 4: + chooseBetAmountAndMakeBet(15); + break; + case 6: + chooseBetAmountAndMakeBet(13); + break; + case 7: + chooseBetAmountAndMakeBet(11); + break; + case 8: + chooseBetAmountAndMakeBet(14); + break; + case 10: + chooseBetAmountAndMakeBet(16); + break; + case 11: + chooseBetAmountAndMakeBet(18); + break; + case 12: + chooseBetAmountAndMakeBet(20); + break; + default: + cd.printErrorMessage(); + continue; + } + } + default: + cd.printErrorMessage(); + continue; + } + } + + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPostPoint(x, point); + oneRollReset(); + if(x == 7){ + notSevenedOut = false; + d.setPrintCurrentDisplay(endGame()); + } + + } + + } public void initialRulesPrompt(){ @@ -182,11 +312,11 @@ public void initialRulesPrompt(){ case 1: cd.printRulesMenu1(); cd.printRulesMenu2(); - cd.readyToPlay(); + d.setPrintCurrentDisplay(startGame()); haventAnswered = false; break; case 2: - cd.readyToPlay(); + d.setPrintCurrentDisplay(startGame()); haventAnswered = false; break; default: @@ -427,23 +557,23 @@ public void checkBetsPostPoint(Integer x, Integer point){ } public String startGame() { - return null; + return "Alright! Let's play Craps!"; } - public String acceptBetFrom() { + public Double acceptBetFrom() { return null; } - public String calculateReward() { + public Double calculateReward() { return null; } - public String calculateLoss() { + public Double calculateLoss() { return null; } public String endGame() { - return null; + return "That's the end of the round!"; } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index b473cdbfd..dff5dac77 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -18,10 +18,6 @@ public void printRulesMenu2(){ setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nThe field bet is the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!\n"); } - public void readyToPlay(){ - setPrintCurrentDisplay("Alright! Let's play Craps!"); - } - public void youCanBetAgain(){ setPrintCurrentDisplay("You can make more bets!"); } diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java index 10aad9b13..8f2c9b16c 100644 --- a/src/main/java/io/zipcoder/casino/GamblingGame.java +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -4,11 +4,11 @@ public interface GamblingGame { public String startGame(); - public String acceptBetFrom(); + public Double acceptBetFrom(); - public String calculateReward(); + public Double calculateReward(); - public String calculateLoss(); + public Double calculateLoss(); public String endGame(); From ffd6f041676374ffc9051ec612443b996d13ebb6 Mon Sep 17 00:00:00 2001 From: Theresa Date: Thu, 18 Mar 2021 13:42:18 -0400 Subject: [PATCH 33/72] Added method for getting value on card --- src/main/java/io/zipcoder/casino/CardGame.java | 18 ++++++++++++++++++ src/main/java/io/zipcoder/casino/GoFish.java | 4 ---- .../java/io/zipcoder/casino/GoFishTest.java | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index 5c37ce14f..dbdea2dc5 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -3,11 +3,13 @@ import java.util.ArrayList; import java.util.Random; import java.util.Stack; +import java.util.TreeMap; public abstract class CardGame implements GamblingGame { ArrayList playersHand; ArrayList dealersHand; ArrayList deck; + TreeMap deckMap; String[] ranks; String[] suits; @@ -19,6 +21,7 @@ public CardGame() { this.suits = new String[]{"Clubs", "Diamonds", "Hearts", "Spades"}; this.playersHand = new ArrayList(); this.dealersHand = new ArrayList(); + this.deckMap = new TreeMap(); } public ArrayList getDeck() { @@ -63,5 +66,20 @@ public void dealCards(int numberOfCards) { i++; } } + + public String getRankOnCard(String cardRankAndSuit) { + return cardRankAndSuit.substring(0, cardRankAndSuit.indexOf(" ")); + } + + public int getValueOfCard(String rankOnCard) { + int valueOfCard = 0; + if (rankOnCard.equals("Ace") || rankOnCard.equals("Jack") || rankOnCard.equals("King") || rankOnCard.equals("Queen")) { + valueOfCard = 10; + } else { + valueOfCard = Integer.parseInt(rankOnCard); + } + + return valueOfCard; + } } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 473202734..cea02dbdd 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -93,10 +93,6 @@ public void checkWinner(int bookCount) { bookCount += 1; } - public String getRankOnCard(String cardRankAndSuit) { - return cardRankAndSuit.substring(0, cardRankAndSuit.indexOf(" ")); - } - } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index d261f73a9..7b9113be3 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -117,4 +117,19 @@ public void testGetRankOnCard() { Assert.assertEquals(expectedCase3, actualCase3); } + + @Test + public void TestGetValueOfCard() { + String given = "Ace of Hearts"; + String given1 = "2 of Clubs"; + String given2 = "7 of Diamonds"; + String given3 = "King of Diamonds"; + + System.out.println(go.getValueOfCard(go.getRankOnCard(given))); + System.out.println(go.getValueOfCard(go.getRankOnCard(given1))); + System.out.println(go.getValueOfCard(go.getRankOnCard(given2))); + System.out.println(go.getValueOfCard(go.getRankOnCard(given3))); + + } + } From 8681833ef97b7f58039a407e622d618f4d89ef28 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Thu, 18 Mar 2021 14:33:10 -0400 Subject: [PATCH 34/72] beetle almost complete. additions to display and player --- src/main/java/io/zipcoder/casino/Beetle.java | 99 ++++++++++++++----- .../io/zipcoder/casino/BeetleDisplay.java | 28 ++++-- src/main/java/io/zipcoder/casino/Display.java | 8 ++ .../java/io/zipcoder/casino/GamblingGame.java | 6 +- src/main/java/io/zipcoder/casino/Main.java | 2 +- src/main/java/io/zipcoder/casino/Player.java | 19 +++- .../java/io/zipcoder/casino/PlayerTest.java | 39 ++++++++ 7 files changed, 159 insertions(+), 42 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java index 6b359d939..71af9f8c9 100644 --- a/src/main/java/io/zipcoder/casino/Beetle.java +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -2,18 +2,23 @@ import io.zipcoder.casino.utilities.Console; +import java.awt.geom.Arc2D; import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintStream; +import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Beetle extends DiceGame{ - //Console console = new Console(); + Console console; + private InputStream in; + private PrintStream out; Scanner scanner = new Scanner(System.in); - - Boolean GameState = true; BeetleDisplay bd = new BeetleDisplay(); + Player player1 = new Player("Shel", 100.00); + private String[][] completeBeetle = new String[][]{{"\\","0","/"}, {"⎛","|","⎞"}, {"⎝","|","⎠"}, @@ -32,46 +37,74 @@ public class Beetle extends DiceGame{ private Set usersRolls = new HashSet(); private Set opponentsRolls = new HashSet(); - - + private Double purse = 0.00; + public Beetle() { + this.in = System.in; + this.out = System.out; + this.console = new Console(in, out); + } //if opponent set is equal to or greater than user set opponent will bet. //facilitator public void gameEngine() { - Boolean userWins = false; - Boolean opponentWins = false; - Boolean playersTied = false; + Boolean userHasNotWon = true; + Boolean opponentHasNotWon = true; + Boolean playersHaveNotTied = true; + + acceptBetFromUser(1.00); + acceptBetFrom(); + bd.currentPurse(purse); + + while (playersHaveNotTied && userHasNotWon && opponentHasNotWon) { + //current purse amount + Double betAmount = (console.getDoubleInput("how much would you like to bet?")); + acceptBetFromUser(betAmount); + if (opponentsRolls.size() >= usersRolls.size()) { + Double opponentBet = acceptBetFrom(); + bd.opponentHasPlacedABet(opponentBet); + } + + bd.border(); + bd.currentPurse(purse); - while (!playersTied && !userWins && !opponentWins) { - System.out.println("Would you like to place a bet?"); - String userInput = scanner.nextLine(); Integer userRollValue = diceRollSum(1); bd.usersRollResults(userRollValue); analyzeRoll(usersRolls, usersBeetle, userRollValue); drawPlayerBeetle(usersBeetle); + bd.border(); Integer opponentsRollValue = diceRollSum(1); bd.opponentsRollResults(opponentsRollValue); analyzeRoll(opponentsRolls, opponentsBeetle, opponentsRollValue); drawPlayerBeetle(opponentsBeetle); + bd.border(); - if (getCompleteBeetle() == getUsersBeetle() && getCompleteBeetle() == getOpponentsBeetle()) { - playersTied = true; + if (Arrays.deepEquals(completeBeetle, usersBeetle) && Arrays.deepEquals(completeBeetle, opponentsBeetle)) { + playersHaveNotTied = false; + bd.bothBeetlesComplete(); + player1.setWallet(player1.getCurrentBet()); + System.out.println("Your bets were returned to your wallet."); break; - } - else if (getCompleteBeetle() == getUsersBeetle()) { - userWins = true; + } else if (Arrays.deepEquals(completeBeetle, usersBeetle)) { + userHasNotWon = false; + bd.userBugIsComplete(); + player1.setWallet(purse); + player1.setCurrentBet(0.00); break; - } - else if (getCompleteBeetle() == getOpponentsBeetle()) { - opponentWins = true; + } else if (Arrays.deepEquals(completeBeetle, opponentsBeetle)) { + opponentHasNotWon = false; + bd.opponentsBugisComplete(); + player1.setWallet(-player1.getCurrentBet()); + player1.setCurrentBet(0.00); break; - } } } + System.out.println(player1.getWallet()); + + } public void analyzeRoll(Set rollSet, String[][] playersBeetle, Integer diceRoll){ @@ -134,6 +167,11 @@ public String[][] drawPlayerBeetle(String[][] playersBeetle){ return playersBeetle; } + + public void opponentBet() { + + } + public Set getUsersRolls() { return usersRolls; } @@ -161,16 +199,25 @@ public String startGame() { return null; } - public String acceptBetFrom() { - return null; + public Double acceptBetFrom() { + Double betAmount = 1.00; + purse += betAmount; + return betAmount; } - public String calculateReward() { - return null; + public void acceptBetFromUser(Double betAmount) { + player1.makeBet(betAmount); + purse += betAmount; } - public String calculateLoss() { - return null; + public Double calculateReward() { + double reward = purse - player1.getCurrentBet(); + + return reward; + } + + public Double calculateLoss() { + return player1.getCurrentBet(); } public String endGame() { diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index be6bf33c5..77fc82347 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -21,23 +21,23 @@ public void rules() { } public void drewLeg() { - setPrintCurrentDisplay("You added a leg to your beetle!"); + setPrintCurrentDisplay("A leg was added to the beetle!"); } public void drewBody() { - setPrintCurrentDisplay("You drew your beetle's body!"); + setPrintCurrentDisplay("The beetle's body was drawn!"); } public void drewHead() { - setPrintCurrentDisplay("You drew your beetle's head!"); + setPrintCurrentDisplay("This beetle has a head now!"); } - public void yourBugIsComplete() { - setPrintCurrentDisplay("Your beetle is complete!"); + public void userBugIsComplete() { + setPrintCurrentDisplay("Your beetle is complete!\nYOU WIN!!!!"); } public void opponentsBugisComplete() { - setPrintCurrentDisplay("Your opponents beetle is complete."); + setPrintCurrentDisplay("Your opponents beetle is complete.\nYou lose."); } public void bothBeetlesComplete() { @@ -65,7 +65,21 @@ public void getBeetleComplete() { System.out.println(); } } - public void getCurrentBeetle() { + public void border() { + setPrintCurrentDisplay("\n======================\n"); + } + + public void openingBetMessage() { + setPrintCurrentDisplay("This game has a table minimum of $1"); + } + public void opponentHasPlacedABet(Double betAmount) { + setPrintCurrentDisplay("Your opponent has placed a bet of " + betAmount); } + + public void currentPurse(Double purse) { + setPrintCurrentDisplay("The purse is currently at " + purse); + } + + } \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 3ba8d9fac..c25510c09 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -144,6 +144,14 @@ public void printDealResult(ArrayList dealResults) { ); } + public void printAmountOfWinnings(Double winningsAmount) { + setPrintCurrentDisplay("You won " + winningsAmount+ "!!!"); + } + + public void printAmountOfLoss(Double lossAmount) { + setPrintCurrentDisplay("You lost " + lossAmount + "."); + } + // USER SET-UP MESSAGING public void printUserId(String userName){ this.setPrintCurrentDisplay( diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java index 10aad9b13..8f2c9b16c 100644 --- a/src/main/java/io/zipcoder/casino/GamblingGame.java +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -4,11 +4,11 @@ public interface GamblingGame { public String startGame(); - public String acceptBetFrom(); + public Double acceptBetFrom(); - public String calculateReward(); + public Double calculateReward(); - public String calculateLoss(); + public Double calculateLoss(); public String endGame(); diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef4bba5ea..37c4ee7c0 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -5,7 +5,7 @@ public class Main { public static void main(String args[]) { Display d = new Display(); Beetle beetle = new Beetle(); - d.printWelcomeMessage(); + //d.printWelcomeMessage(); beetle.gameEngine(); } diff --git a/src/main/java/io/zipcoder/casino/Player.java b/src/main/java/io/zipcoder/casino/Player.java index 7dd1bfa12..749674566 100644 --- a/src/main/java/io/zipcoder/casino/Player.java +++ b/src/main/java/io/zipcoder/casino/Player.java @@ -2,9 +2,9 @@ public class Player{ - String name; - Double wallet; - Double currentBet = 0.0; + private String name; + private Double wallet; + private Double currentBet = 0.0; public Player(String name, Double initialDeposit) { this.name = name; @@ -27,8 +27,17 @@ public void setWallet(Double deposit) { public Double makeBet(Double betAmount) { - currentBet = betAmount; - wallet = wallet - currentBet; + currentBet += betAmount; + wallet = wallet - betAmount; return currentBet; } + + public Double getCurrentBet() { + return currentBet; + } + + public void setCurrentBet(Double currentBet) { + this.currentBet = currentBet; + } + } diff --git a/src/test/java/io/zipcoder/casino/PlayerTest.java b/src/test/java/io/zipcoder/casino/PlayerTest.java index bb9557db3..9fb882956 100644 --- a/src/test/java/io/zipcoder/casino/PlayerTest.java +++ b/src/test/java/io/zipcoder/casino/PlayerTest.java @@ -71,4 +71,43 @@ public void PlayerMakeBetTest2() { } + @Test + public void PlayerMakeBetTest3() { + Player player6 = new Player("player1", 50.00); + player6.makeBet(5.0); + Double expected = player6.getCurrentBet(); + + //when + Double actual = 5.0; + //assert + Assert.assertEquals(expected,actual); + } + + @Test + public void PlayerMakeBetTest4() { + Player player7 = new Player("player1", 50.00); + player7.makeBet(5.0); + player7.makeBet(2.0); + player7.makeBet(2.0); + Double expected = player7.getCurrentBet(); + + //when + Double actual = 9.0; + //assert + Assert.assertEquals(expected,actual); + } + + @Test + public void PlayerMakeBetTest5() { + Player player7 = new Player("player1", 50.00); + player7.makeBet(5.0); + player7.makeBet(2.0); + player7.makeBet(2.0); + Double expected = player7.getWallet(); + + //when + Double actual = 41.0; + //assert + Assert.assertEquals(expected,actual); + } } From b65ca8e86bf042c33d480379baa0591a73c4a9a8 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 14:43:36 -0400 Subject: [PATCH 35/72] Craps finished --- src/main/java/io/zipcoder/casino/Craps.java | 14 ++++++++++---- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 8 ++++++++ src/main/java/io/zipcoder/casino/Main.java | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 5d24e5dd9..60836f508 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -156,6 +156,7 @@ public void crapsEngine(){ cd.printErrorMessage(); continue; } + break; default: cd.printErrorMessage(); continue; @@ -177,6 +178,9 @@ public void crapsEngine(){ if(x == 4 || x == 5 || x == 6 || x == 8 || x == 9 || x == 10){ point = x; noPointSet = false; + cd.printThatPoint(); + } else { + cd.printNoPoint(); } } @@ -278,17 +282,20 @@ public void crapsEngine(){ case 12: chooseBetAmountAndMakeBet(20); break; + case 0: + continue; default: cd.printErrorMessage(); continue; } } + break; default: cd.printErrorMessage(); continue; } } - + decisionUnmade = true; Integer x = diceRollSum(2); cd.printShooterRolled(x); checkBetsPostPoint(x, point); @@ -432,9 +439,9 @@ public void checkBetsPrePoint(Integer x){ cd.printWinnings(betAmounts[12] * 14); } if(x == 12 && bets[1]){ //pass - player.setWallet(betAmounts[1] * 2); + player.setWallet(betAmounts[1]); cd.printCraps(); - cd.printWinnings(betAmounts[1] * 2); + cd.printPush(); } } @@ -511,7 +518,6 @@ public void checkBetsPostPoint(Integer x, Integer point){ player.setWallet(betAmounts[2]); cd.printShooterScores(); cd.printWinnings(betAmounts[2]); - cd.printPush(); bets[3] = false; betAmounts[3] = 0.0; } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index dff5dac77..ea6c496a7 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -58,6 +58,14 @@ public void printShooterRolled(Integer x){ setPrintCurrentDisplay("The shooter rolled a " + x); } + public void printThatPoint(){ + setPrintCurrentDisplay("That's the point!"); + } + + public void printNoPoint(){ + setPrintCurrentDisplay("No point yet!"); + } + public void printSetTypeOfBet(){ setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 1 for help."); } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index fc8f551a5..361ada84a 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,7 +3,7 @@ public class Main { public static void main(String args[]) { - Player x = new Player("Hazel", 100.0); + Player x = new Player("Hazel", 500.0); Craps craps = new Craps(x); craps.crapsEngine(); From 8ecfef9a4927cb5b448abed77e57f59ee6e4b268 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 13:38:42 -0400 Subject: [PATCH 36/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 129 ++++++++++++++++++ .../java/io/zipcoder/casino/CrapsDisplay.java | 20 +-- src/main/java/io/zipcoder/casino/Main.java | 8 +- 3 files changed, 143 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/Craps.java diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java new file mode 100644 index 000000000..3d19f038f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -0,0 +1,129 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public class Craps{ + + private Console c; + private Scanner s; + private Display d; + private InputStream in; + private PrintStream out; + private Player player; + private CrapsDisplay cd; + + private Integer input; + private Integer innerInput; + private Integer furtherInput; + + private Boolean[] outcomes; + private Boolean[] bets; + + public Craps(Player player){ + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.d = new Display(); + this.player = player; + this.cd = new CrapsDisplay(); + + this.input = 0; + this.innerInput = 0; + this.furtherInput = 0; + + this.outcomes = new Boolean[21]; + this.bets = new Boolean[21]; + } + + /* *** Here is the index of every *** + *** bet in the boolean arrays. *** + 0- pass + 1- don't pass + 2- come + 3- don't come + 4- field + 5- place bet 4 + 6- place bet 5 + 7- place bet 6 + 8- place bet 8 + 9- place bet 9 + 10- place bet 10 + 11- one-roll 7 + 12- one-roll craps + 13- one-roll 6 + 14- one-roll 8 + 15- one-roll 4 + 16- one-roll 10 + 17- one-roll 3 + 18- one-roll 11 + 19- one-roll 2 + 20- one-roll 12 */ + + public void crapsEngine(){ + + this.initialRulesPrompt(); + + Boolean noPointSet = true; + Boolean firstRoll = true; + Boolean decisionUnmade = true; + + while(noPointSet){ + while(decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); + switch(input){ + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch(innerInput){ + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + } + break; + case 2: + } + } + + } + + + } + + public void initialRulesPrompt(){ + cd.initalRulesAsk(); + Boolean haventAnswered = true; + while(haventAnswered){ + input = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch(input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenu2(); + cd.readyToPlay(); + haventAnswered = false; + break; + case 2: + cd.readyToPlay(); + haventAnswered = false; + break; + default: + d.setPrintCurrentDisplay("Invalid user input. Please reread instructions."); + } + } + } + +} + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 96bbed9c1..f0797a5b4 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -2,24 +2,24 @@ public class CrapsDisplay extends Display { + public void initalRulesAsk(){ + setPrintCurrentDisplay("Welcome! Would you like the rules first?"); + } + public void printRulesMenu1(){ - setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout."); + setPrintCurrentDisplay("Welcome to Craps!\nIn Craps, the 'shooter' rolls two dice repeatedly.\nTheir first roll, the 'come out roll,' has three potential outcomes.\nA 7 or 11 total is a pass. A 2, 3, or 12 is craps. Anything else is a point.\nYou can bet 'pass' (the shooter rolls a pass) or 'don't pass' (the shooter rolls craps) for 1 to 1 payout.\nThe shooter keeps rolling until a point is set. On a point outcome, the number rolled is saved.\nNow, the shooter can 'come' by hitting the point outcome again, or 'seven out,' ending the round by rolling a 7.\nYou can bet 'come' (shooter hits point before sevening out) or 'don't come' (vice versa) for 1 to 1 payout.\n"); } public void printRulesMenuMid(){ - setPrintCurrentDisplay("Type rules2 for more technical rules."); + setPrintCurrentDisplay("There are more technical rules. Do you want them?"); } public void printRulesMenu2(){ - setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nField bets are the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!"); - } - - public void printOptionsMenu1(){ - setPrintCurrentDisplay("You can make a pass bet, a don't pass bet, or a proposition."); + setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nThe field bet is the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!\n"); } - public void printOptionsMenu2(){ - setPrintCurrentDisplay("You can make a come bet, a don't come bet, or a proposition."); + public void readyToPlay(){ + setPrintCurrentDisplay("Alright! Let's play Craps!"); } public void printShooterScores(){ @@ -55,7 +55,7 @@ public void printShooterRolled(){ } public void printSetTypeOfBet(){ - setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 'options' or 'help'."); + setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 1 for help."); } public void printComeOutRoll(){ diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef4bba5ea..fc8f551a5 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,10 +3,10 @@ public class Main { public static void main(String args[]) { - Display d = new Display(); - Beetle beetle = new Beetle(); - d.printWelcomeMessage(); - beetle.gameEngine(); + Player x = new Player("Hazel", 100.0); + Craps craps = new Craps(x); + craps.crapsEngine(); + } } From ba16a4031941435947449361106468a73926a8d2 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:22:54 -0400 Subject: [PATCH 37/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 62 +++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 3d19f038f..34232ebec 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -22,6 +22,8 @@ public class Craps{ private Boolean[] outcomes; private Boolean[] bets; + private Double[] betAmounts; + private Double lastBet; public Craps(Player player){ this.in = System.in; @@ -37,6 +39,20 @@ public Craps(Player player){ this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; + this.betAmounts = new Double[21]; + this.lastBet = 0.0; + + for(int i = 0; i < 21; i++){ + outcomes[i] = false; + } + + for(int i = 0; i < 21; i++){ + bets[i] = false; + } + + for(int i = 0; i < 21; i++){ + betAmounts[i] = 0.0; + } } /* *** Here is the index of every *** @@ -89,6 +105,44 @@ public void crapsEngine(){ } break; case 2: + chooseBetAmountAndMakeBet(0); + break; + case 3: + chooseBetAmountAndMakeBet(1); + break; + case 0: + decisionUnmade = false; + case 4: + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + switch(furtherInput){ + case 1: + chooseBetAmountAndMakeBet(12); + break; + case 2: + chooseBetAmountAndMakeBet(19); + break; + case 3: + chooseBetAmountAndMakeBet(17); + break; + case 4: + chooseBetAmountAndMakeBet(15); + break; + case 6: + chooseBetAmountAndMakeBet(13); + break; + case 8: + chooseBetAmountAndMakeBet(14); + break; + case 10: + chooseBetAmountAndMakeBet(16); + break; + case 11: + chooseBetAmountAndMakeBet(18); + break; + case 12: + chooseBetAmountAndMakeBet(20); + break; + } } } @@ -119,6 +173,14 @@ public void initialRulesPrompt(){ } } + public void chooseBetAmountAndMakeBet(Integer x){ + Double middleMan; + middleMan = c.getDoubleInput("How much money are you going to bet?"); + lastBet = player.makeBet(middleMan); + betAmounts[x] = lastBet; + bets[x] = true; + } + } From 71e950767b7779d17f644b571266a5d5f6715070 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:31:10 -0400 Subject: [PATCH 38/72] Filled out craps to the first dice roll --- src/main/java/io/zipcoder/casino/Craps.java | 7 ++++++- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 34232ebec..7cf39e592 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -112,8 +112,9 @@ public void crapsEngine(){ break; case 0: decisionUnmade = false; + break; case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); switch(furtherInput){ case 1: chooseBetAmountAndMakeBet(12); @@ -130,6 +131,9 @@ public void crapsEngine(){ case 6: chooseBetAmountAndMakeBet(13); break; + case 7: + chooseBetAmountAndMakeBet(11); + break; case 8: chooseBetAmountAndMakeBet(14); break; @@ -144,6 +148,7 @@ public void crapsEngine(){ break; } } + cd.youCanBetAgain(); } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index f0797a5b4..a52fa2d2d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -22,6 +22,10 @@ public void readyToPlay(){ setPrintCurrentDisplay("Alright! Let's play Craps!"); } + public void youCanBetAgain(){ + setPrintCurrentDisplay("You can make more bets!"); + } + public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } From a2262be855d9e16270229e6d832a058428c5b69b Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 13:38:42 -0400 Subject: [PATCH 39/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 67 ------------------- .../java/io/zipcoder/casino/CrapsDisplay.java | 4 -- 2 files changed, 71 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 7cf39e592..3d19f038f 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -22,8 +22,6 @@ public class Craps{ private Boolean[] outcomes; private Boolean[] bets; - private Double[] betAmounts; - private Double lastBet; public Craps(Player player){ this.in = System.in; @@ -39,20 +37,6 @@ public Craps(Player player){ this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; - this.betAmounts = new Double[21]; - this.lastBet = 0.0; - - for(int i = 0; i < 21; i++){ - outcomes[i] = false; - } - - for(int i = 0; i < 21; i++){ - bets[i] = false; - } - - for(int i = 0; i < 21; i++){ - betAmounts[i] = 0.0; - } } /* *** Here is the index of every *** @@ -105,50 +89,7 @@ public void crapsEngine(){ } break; case 2: - chooseBetAmountAndMakeBet(0); - break; - case 3: - chooseBetAmountAndMakeBet(1); - break; - case 0: - decisionUnmade = false; - break; - case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); - switch(furtherInput){ - case 1: - chooseBetAmountAndMakeBet(12); - break; - case 2: - chooseBetAmountAndMakeBet(19); - break; - case 3: - chooseBetAmountAndMakeBet(17); - break; - case 4: - chooseBetAmountAndMakeBet(15); - break; - case 6: - chooseBetAmountAndMakeBet(13); - break; - case 7: - chooseBetAmountAndMakeBet(11); - break; - case 8: - chooseBetAmountAndMakeBet(14); - break; - case 10: - chooseBetAmountAndMakeBet(16); - break; - case 11: - chooseBetAmountAndMakeBet(18); - break; - case 12: - chooseBetAmountAndMakeBet(20); - break; - } } - cd.youCanBetAgain(); } } @@ -178,14 +119,6 @@ public void initialRulesPrompt(){ } } - public void chooseBetAmountAndMakeBet(Integer x){ - Double middleMan; - middleMan = c.getDoubleInput("How much money are you going to bet?"); - lastBet = player.makeBet(middleMan); - betAmounts[x] = lastBet; - bets[x] = true; - } - } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index a52fa2d2d..f0797a5b4 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -22,10 +22,6 @@ public void readyToPlay(){ setPrintCurrentDisplay("Alright! Let's play Craps!"); } - public void youCanBetAgain(){ - setPrintCurrentDisplay("You can make more bets!"); - } - public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } From 0f1f64a77ed713113d70a1b14a07934f4973df2f Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:22:54 -0400 Subject: [PATCH 40/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 62 +++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 3d19f038f..34232ebec 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -22,6 +22,8 @@ public class Craps{ private Boolean[] outcomes; private Boolean[] bets; + private Double[] betAmounts; + private Double lastBet; public Craps(Player player){ this.in = System.in; @@ -37,6 +39,20 @@ public Craps(Player player){ this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; + this.betAmounts = new Double[21]; + this.lastBet = 0.0; + + for(int i = 0; i < 21; i++){ + outcomes[i] = false; + } + + for(int i = 0; i < 21; i++){ + bets[i] = false; + } + + for(int i = 0; i < 21; i++){ + betAmounts[i] = 0.0; + } } /* *** Here is the index of every *** @@ -89,6 +105,44 @@ public void crapsEngine(){ } break; case 2: + chooseBetAmountAndMakeBet(0); + break; + case 3: + chooseBetAmountAndMakeBet(1); + break; + case 0: + decisionUnmade = false; + case 4: + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + switch(furtherInput){ + case 1: + chooseBetAmountAndMakeBet(12); + break; + case 2: + chooseBetAmountAndMakeBet(19); + break; + case 3: + chooseBetAmountAndMakeBet(17); + break; + case 4: + chooseBetAmountAndMakeBet(15); + break; + case 6: + chooseBetAmountAndMakeBet(13); + break; + case 8: + chooseBetAmountAndMakeBet(14); + break; + case 10: + chooseBetAmountAndMakeBet(16); + break; + case 11: + chooseBetAmountAndMakeBet(18); + break; + case 12: + chooseBetAmountAndMakeBet(20); + break; + } } } @@ -119,6 +173,14 @@ public void initialRulesPrompt(){ } } + public void chooseBetAmountAndMakeBet(Integer x){ + Double middleMan; + middleMan = c.getDoubleInput("How much money are you going to bet?"); + lastBet = player.makeBet(middleMan); + betAmounts[x] = lastBet; + bets[x] = true; + } + } From 7073e23013b8db86c458de1f568aaaa52d185385 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 14:31:10 -0400 Subject: [PATCH 41/72] Filled out craps to the first dice roll --- src/main/java/io/zipcoder/casino/Craps.java | 7 ++++++- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 34232ebec..7cf39e592 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -112,8 +112,9 @@ public void crapsEngine(){ break; case 0: decisionUnmade = false; + break; case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); switch(furtherInput){ case 1: chooseBetAmountAndMakeBet(12); @@ -130,6 +131,9 @@ public void crapsEngine(){ case 6: chooseBetAmountAndMakeBet(13); break; + case 7: + chooseBetAmountAndMakeBet(11); + break; case 8: chooseBetAmountAndMakeBet(14); break; @@ -144,6 +148,7 @@ public void crapsEngine(){ break; } } + cd.youCanBetAgain(); } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index f0797a5b4..a52fa2d2d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -22,6 +22,10 @@ public void readyToPlay(){ setPrintCurrentDisplay("Alright! Let's play Craps!"); } + public void youCanBetAgain(){ + setPrintCurrentDisplay("You can make more bets!"); + } + public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } From fbeed884c9803b634ed661ff34ebe40503fc8153 Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 16:56:47 -0400 Subject: [PATCH 42/72] Checkpointing --- src/main/java/io/zipcoder/casino/Craps.java | 203 +++++++++++++++++- .../java/io/zipcoder/casino/CrapsDisplay.java | 8 +- 2 files changed, 203 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 7cf39e592..8803cb547 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -6,7 +6,7 @@ import java.io.PrintStream; import java.util.Scanner; -public class Craps{ +public class Craps extends DiceGame{ private Console c; private Scanner s; @@ -24,6 +24,7 @@ public class Craps{ private Boolean[] bets; private Double[] betAmounts; private Double lastBet; + private Integer point; public Craps(Player player){ this.in = System.in; @@ -86,6 +87,7 @@ public void crapsEngine(){ Boolean noPointSet = true; Boolean firstRoll = true; Boolean decisionUnmade = true; + Boolean notSevenedOut = true; while(noPointSet){ while(decisionUnmade) { @@ -148,9 +150,24 @@ public void crapsEngine(){ break; } } - cd.youCanBetAgain(); + if(decisionUnmade) { + cd.youCanBetAgain(); + } } + decisionUnmade = true; + if(firstRoll){ + cd.printComeOutRoll(); + firstRoll = false; + } + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPrePoint(x); + oneRollReset(); + if(x == 4 || x == 5 || x == 6 || x == 8 || x == 9 || x == 10){ + point = x; + noPointSet = false; + } } @@ -186,6 +203,188 @@ public void chooseBetAmountAndMakeBet(Integer x){ bets[x] = true; } + public void oneRollReset(){ + bets[4] = false; + betAmounts[4] = 0.0; + for(int i = 11; i < 21; i++){ + bets[i] = false; + betAmounts[i] = 0.0; + } + } + + public void checkBetsPrePoint(Integer x){ + if(x == 2 && bets[19]){ + player.setWallet(betAmounts[19] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 2 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 2 && bets[1]){ //pass + player.setWallet(betAmounts[1] * 2); + cd.printCraps(); + } + if(x == 3 && bets[17]){ + player.setWallet(betAmounts[17] * 30); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[1]){ //pass + player.setWallet(betAmounts[1] * 2); + cd.printCraps(); + } + if(x == 4 && bets[15]){ + player.setWallet(betAmounts[15] * 14); + cd.printOneRollBetWin(); + } + if(x == 6 && bets[13]){ + player.setWallet(betAmounts[13] * 18); + cd.printOneRollBetWin(); + } + if(x == 7 && bets[11]){ + player.setWallet(betAmounts[11] * 8); + cd.printNatural(); + cd.printOneRollBetWin(); + } + if(x == 7 && bets[0]){ //pass + player.setWallet(betAmounts[0] * 2); + cd.printNatural(); + } + if(x == 8 && bets[14]){ + player.setWallet(betAmounts[14] * 18); + cd.printOneRollBetWin(); + } + if(x == 10 && bets[16]){ + player.setWallet(betAmounts[16] * 14); + cd.printOneRollBetWin(); + } + if(x == 11 && bets[18]){ + player.setWallet(betAmounts[18] * 30); + cd.printOneRollBetWin(); + cd.printNatural(); + } + if(x == 11 && bets[0]){ //pass + player.setWallet(betAmounts[0] * 2); + cd.printNatural(); + } + if(x == 12 && bets[20]){ + player.setWallet(betAmounts[20]); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 12 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 12 && bets[1]){ //pass + player.setWallet(betAmounts[1] * 2); + cd.printCraps(); + } + } + + public void checkBetsPostPoint(Integer x, Integer point){ + if(x == 2 && bets[19]){ + player.setWallet(betAmounts[19] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 2 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[17]){ + player.setWallet(betAmounts[17] * 30); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 3 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 4 && bets[15]){ + player.setWallet(betAmounts[15] * 14); + cd.printOneRollBetWin(); + } + if(x == 6 && bets[13]){ + player.setWallet(betAmounts[13] * 18); + cd.printOneRollBetWin(); + } + if(x == 7 && bets[11]){ + player.setWallet(betAmounts[11] * 8); + cd.printNatural(); + cd.printOneRollBetWin(); + } + if(x == 8 && bets[14]){ + player.setWallet(betAmounts[14] * 18); + cd.printOneRollBetWin(); + } + if(x == 10 && bets[16]){ + player.setWallet(betAmounts[16] * 14); + cd.printOneRollBetWin(); + } + if(x == 11 && bets[18]){ + player.setWallet(betAmounts[18] * 30); + cd.printOneRollBetWin(); + cd.printNatural(); + } + if(x == 12 && bets[20]){ + player.setWallet(betAmounts[20]); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == 12 && bets[12]){ + player.setWallet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + } + if(x == point && bets[2]){ + player.setWallet(betAmounts[2]); + cd.printShooterScores(); + bets[3] = false; + betAmounts[3] = 0.0; + } + if(x == 7 && bets[3]){ + player.setWallet(betAmounts[3]); + cd.printShooterSevenedOut(); + bets[2] = false; + betAmounts [2] = 0.0; + } + if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ + + } + } + + public String startGame() { + return null; + } + + public String acceptBetFrom() { + return null; + } + + public String calculateReward() { + return null; + } + + public String calculateLoss() { + return null; + } + + public String endGame() { + return null; + } + } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index a52fa2d2d..638b98e2d 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -38,10 +38,6 @@ public void printPush(){ setPrintCurrentDisplay("Your bet is a push."); } - public void printOneRolLBetLoss(){ - setPrintCurrentDisplay("Your one-roll proposition failed..."); - } - public void printOneRollBetWin(){ setPrintCurrentDisplay("You won your one-roll proposition!"); } @@ -54,8 +50,8 @@ public void printCraps(){ setPrintCurrentDisplay("It's craps!"); } - public void printShooterRolled(){ - setPrintCurrentDisplay("The shooter rolled a " + 5); + public void printShooterRolled(Integer x){ + setPrintCurrentDisplay("The shooter rolled a " + x); } public void printSetTypeOfBet(){ From d3d117a8aa116bcca218d2ecd3e401f0c727d6ae Mon Sep 17 00:00:00 2001 From: hazel Date: Wed, 17 Mar 2021 18:31:43 -0400 Subject: [PATCH 43/72] Finished bet options --- src/main/java/io/zipcoder/casino/Craps.java | 69 +++++++++++++++++-- .../java/io/zipcoder/casino/CrapsDisplay.java | 10 ++- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 8803cb547..16597875d 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -217,77 +217,94 @@ public void checkBetsPrePoint(Integer x){ player.setWallet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 2 && bets[1]){ //pass player.setWallet(betAmounts[1] * 2); cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); } if(x == 3 && bets[17]){ player.setWallet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[1]){ //pass player.setWallet(betAmounts[1] * 2); cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); } if(x == 4 && bets[15]){ player.setWallet(betAmounts[15] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ player.setWallet(betAmounts[13] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ player.setWallet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[11] * 8); } if(x == 7 && bets[0]){ //pass player.setWallet(betAmounts[0] * 2); cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); } if(x == 8 && bets[14]){ player.setWallet(betAmounts[14] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ player.setWallet(betAmounts[16] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ player.setWallet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); + cd.printWinnings(betAmounts[18] * 30); } if(x == 11 && bets[0]){ //pass player.setWallet(betAmounts[0] * 2); cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20]); + player.setWallet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 12 && bets[1]){ //pass player.setWallet(betAmounts[1] * 2); cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); } } @@ -296,72 +313,116 @@ public void checkBetsPostPoint(Integer x, Integer point){ player.setWallet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[17]){ player.setWallet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == 4 && bets[15]){ player.setWallet(betAmounts[15] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ player.setWallet(betAmounts[13] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ player.setWallet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[11] * 8); } if(x == 8 && bets[14]){ player.setWallet(betAmounts[14] * 18); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ player.setWallet(betAmounts[16] * 14); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ player.setWallet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); + cd.printWinnings(betAmounts[18] * 30); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20]); + player.setWallet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ player.setWallet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); } if(x == point && bets[2]){ player.setWallet(betAmounts[2]); cd.printShooterScores(); + cd.printWinnings(betAmounts[2]); + cd.printPush(); bets[3] = false; betAmounts[3] = 0.0; } if(x == 7 && bets[3]){ - player.setWallet(betAmounts[3]); + player.setWallet(betAmounts[3] * 2); cd.printShooterSevenedOut(); + cd.printWinnings(betAmounts[3] * 2); bets[2] = false; betAmounts [2] = 0.0; } if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ - + player.setWallet(betAmounts[4] * 2); + cd.printWinnings(betAmounts[4] * 2); + } + if(x == 2 && bets[4] || x == 12 && bets[4]){ + player.setWallet(betAmounts[4] * 4); + cd.printWinnings(betAmounts[4] * 4); + } + if(x == 4 && bets[5]){ + player.setWallet(betAmounts[5] * 2); + cd.printWinnings(betAmounts[5] * 2); + } + if(x == 5 && bets[6]){ + player.setWallet(betAmounts[6] * 2); + cd.printWinnings(betAmounts[6] * 2); + } + if(x == 6 && bets[7]){ + player.setWallet(betAmounts[7] * 2); + cd.printWinnings(betAmounts[7] * 2); + } + if(x == 8 && bets[8]){ + player.setWallet(betAmounts[8] * 2); + cd.printWinnings(betAmounts[8] * 2); + } + if(x == 9 && bets[9]){ + player.setWallet(betAmounts[9] * 2); + cd.printWinnings(betAmounts[9] * 2); + } + if(x == 10 && bets[10]){ + player.setWallet(betAmounts[10] * 2); + cd.printWinnings(betAmounts[10] * 2); } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index 638b98e2d..b473cdbfd 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -26,12 +26,20 @@ public void youCanBetAgain(){ setPrintCurrentDisplay("You can make more bets!"); } + public void printWinnings(Double winnings){ + setPrintCurrentDisplay("You made $" + winnings + "!"); + } + + public void printLosings(Double bet){ + setPrintCurrentDisplay("There goes $" + bet + "."); + } + public void printShooterScores(){ setPrintCurrentDisplay("The shooter got the point!"); } public void printShooterSevenedOut(){ - setPrintCurrentDisplay("The shooter sevened out..."); + setPrintCurrentDisplay("The shooter sevened out... The round is over."); } public void printPush(){ From 8b82339b6e9026e1a51722486a934810b512d9d3 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 13:27:37 -0400 Subject: [PATCH 44/72] Filled out gameplay flow post-point --- src/main/java/io/zipcoder/casino/Craps.java | 144 +++++++++++++++++- .../java/io/zipcoder/casino/CrapsDisplay.java | 4 - .../java/io/zipcoder/casino/GamblingGame.java | 6 +- 3 files changed, 140 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 16597875d..5d24e5dd9 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -19,6 +19,7 @@ public class Craps extends DiceGame{ private Integer input; private Integer innerInput; private Integer furtherInput; + private Integer yetFurtherInput; private Boolean[] outcomes; private Boolean[] bets; @@ -104,6 +105,9 @@ public void crapsEngine(){ break; case 2: break; + default: + cd.printErrorMessage(); + continue; } break; case 2: @@ -148,7 +152,13 @@ public void crapsEngine(){ case 12: chooseBetAmountAndMakeBet(20); break; + default: + cd.printErrorMessage(); + continue; } + default: + cd.printErrorMessage(); + continue; } if(decisionUnmade) { cd.youCanBetAgain(); @@ -171,6 +181,126 @@ public void crapsEngine(){ } + + while(notSevenedOut){ + while(decisionUnmade){ + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'come,' 3 for 'don't come,' or 4 for a proposition."); + switch(input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + switch (innerInput) { + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + default: + cd.printErrorMessage(); + continue; + } + case 2: + chooseBetAmountAndMakeBet(2); + break; + case 3: + chooseBetAmountAndMakeBet(3); + break; + case 0: + decisionUnmade = false; + break; + case 4: + furtherInput = c.getIntegerInput("Type 1 to bet the field, 2 for a place bet, or 3 for a one-roll bet."); + switch(furtherInput){ + case 1: + chooseBetAmountAndMakeBet(4); + break; + case 2: + yetFurtherInput = c.getIntegerInput("Type the number you want to make your place bet on (4, 5, 6, 8, 9, or 10, but not the point."); + if(yetFurtherInput == point){ + cd.printErrorMessage(); + continue; + } + switch(yetFurtherInput){ + case 4: + chooseBetAmountAndMakeBet(5); + break; + case 5: + chooseBetAmountAndMakeBet(6); + break; + case 6: + chooseBetAmountAndMakeBet(7); + break; + case 8: + chooseBetAmountAndMakeBet(8); + break; + case 9: + chooseBetAmountAndMakeBet(9); + break; + case 10: + chooseBetAmountAndMakeBet(10); + break; + default: + cd.printErrorMessage(); + continue; + } + case 3: + yetFurtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + switch(yetFurtherInput) { + case 1: + chooseBetAmountAndMakeBet(12); + break; + case 2: + chooseBetAmountAndMakeBet(19); + break; + case 3: + chooseBetAmountAndMakeBet(17); + break; + case 4: + chooseBetAmountAndMakeBet(15); + break; + case 6: + chooseBetAmountAndMakeBet(13); + break; + case 7: + chooseBetAmountAndMakeBet(11); + break; + case 8: + chooseBetAmountAndMakeBet(14); + break; + case 10: + chooseBetAmountAndMakeBet(16); + break; + case 11: + chooseBetAmountAndMakeBet(18); + break; + case 12: + chooseBetAmountAndMakeBet(20); + break; + default: + cd.printErrorMessage(); + continue; + } + } + default: + cd.printErrorMessage(); + continue; + } + } + + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPostPoint(x, point); + oneRollReset(); + if(x == 7){ + notSevenedOut = false; + d.setPrintCurrentDisplay(endGame()); + } + + } + + } public void initialRulesPrompt(){ @@ -182,11 +312,11 @@ public void initialRulesPrompt(){ case 1: cd.printRulesMenu1(); cd.printRulesMenu2(); - cd.readyToPlay(); + d.setPrintCurrentDisplay(startGame()); haventAnswered = false; break; case 2: - cd.readyToPlay(); + d.setPrintCurrentDisplay(startGame()); haventAnswered = false; break; default: @@ -427,23 +557,23 @@ public void checkBetsPostPoint(Integer x, Integer point){ } public String startGame() { - return null; + return "Alright! Let's play Craps!"; } - public String acceptBetFrom() { + public Double acceptBetFrom() { return null; } - public String calculateReward() { + public Double calculateReward() { return null; } - public String calculateLoss() { + public Double calculateLoss() { return null; } public String endGame() { - return null; + return "That's the end of the round!"; } } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index b473cdbfd..dff5dac77 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -18,10 +18,6 @@ public void printRulesMenu2(){ setPrintCurrentDisplay("There are a number of extra bets you can make, called propositions.\nOne-roll propositions are a bet that the next roll will land on a specific number, with variable payouts.\n6 or 8- 9 to 1 payout. 4 or 10- 7 to 1. 2 or 12- 30 to 1. 3 or 11- 15 to 1. Craps- 7 to 1. 7- 4 to 1.\nThe field bet is the final one-roll bet. Rolling 3, 4, 9, 10, or 11 pays 1 to 1. Rolling 2 or 12 pays 2 to 1.\nPlace bets can be performed once the point is known. You're betting that a specific different point option will be rolled- this has 1 to 1 payout.\nThat's every bet in Craps! Have fun!\n"); } - public void readyToPlay(){ - setPrintCurrentDisplay("Alright! Let's play Craps!"); - } - public void youCanBetAgain(){ setPrintCurrentDisplay("You can make more bets!"); } diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java index 10aad9b13..8f2c9b16c 100644 --- a/src/main/java/io/zipcoder/casino/GamblingGame.java +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -4,11 +4,11 @@ public interface GamblingGame { public String startGame(); - public String acceptBetFrom(); + public Double acceptBetFrom(); - public String calculateReward(); + public Double calculateReward(); - public String calculateLoss(); + public Double calculateLoss(); public String endGame(); From 9bd31cf4f9c39f900d61c891da53e671af3c2036 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 14:43:36 -0400 Subject: [PATCH 45/72] Craps finished --- src/main/java/io/zipcoder/casino/Craps.java | 14 ++++++++++---- src/main/java/io/zipcoder/casino/CrapsDisplay.java | 8 ++++++++ src/main/java/io/zipcoder/casino/Main.java | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 5d24e5dd9..60836f508 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -156,6 +156,7 @@ public void crapsEngine(){ cd.printErrorMessage(); continue; } + break; default: cd.printErrorMessage(); continue; @@ -177,6 +178,9 @@ public void crapsEngine(){ if(x == 4 || x == 5 || x == 6 || x == 8 || x == 9 || x == 10){ point = x; noPointSet = false; + cd.printThatPoint(); + } else { + cd.printNoPoint(); } } @@ -278,17 +282,20 @@ public void crapsEngine(){ case 12: chooseBetAmountAndMakeBet(20); break; + case 0: + continue; default: cd.printErrorMessage(); continue; } } + break; default: cd.printErrorMessage(); continue; } } - + decisionUnmade = true; Integer x = diceRollSum(2); cd.printShooterRolled(x); checkBetsPostPoint(x, point); @@ -432,9 +439,9 @@ public void checkBetsPrePoint(Integer x){ cd.printWinnings(betAmounts[12] * 14); } if(x == 12 && bets[1]){ //pass - player.setWallet(betAmounts[1] * 2); + player.setWallet(betAmounts[1]); cd.printCraps(); - cd.printWinnings(betAmounts[1] * 2); + cd.printPush(); } } @@ -511,7 +518,6 @@ public void checkBetsPostPoint(Integer x, Integer point){ player.setWallet(betAmounts[2]); cd.printShooterScores(); cd.printWinnings(betAmounts[2]); - cd.printPush(); bets[3] = false; betAmounts[3] = 0.0; } diff --git a/src/main/java/io/zipcoder/casino/CrapsDisplay.java b/src/main/java/io/zipcoder/casino/CrapsDisplay.java index dff5dac77..ea6c496a7 100644 --- a/src/main/java/io/zipcoder/casino/CrapsDisplay.java +++ b/src/main/java/io/zipcoder/casino/CrapsDisplay.java @@ -58,6 +58,14 @@ public void printShooterRolled(Integer x){ setPrintCurrentDisplay("The shooter rolled a " + x); } + public void printThatPoint(){ + setPrintCurrentDisplay("That's the point!"); + } + + public void printNoPoint(){ + setPrintCurrentDisplay("No point yet!"); + } + public void printSetTypeOfBet(){ setPrintCurrentDisplay("What kind of bet do you want to make? You can also type 1 for help."); } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index fc8f551a5..361ada84a 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,7 +3,7 @@ public class Main { public static void main(String args[]) { - Player x = new Player("Hazel", 100.0); + Player x = new Player("Hazel", 500.0); Craps craps = new Craps(x); craps.crapsEngine(); From 11b0c5d75afe27418cc26fe60f65800308a73e09 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 14:47:22 -0400 Subject: [PATCH 46/72] Updating --- src/test/java/io/zipcoder/casino/CrapsTest.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/test/java/io/zipcoder/casino/CrapsTest.java diff --git a/src/test/java/io/zipcoder/casino/CrapsTest.java b/src/test/java/io/zipcoder/casino/CrapsTest.java new file mode 100644 index 000000000..95eddb072 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/CrapsTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino; + +public class CrapsTest { +} From 8c11864d02e8b201f3c13e47bbadad4a5ad535fd Mon Sep 17 00:00:00 2001 From: Theresa Date: Thu, 18 Mar 2021 15:16:17 -0400 Subject: [PATCH 47/72] Added some more test methods for GoFish --- .../java/io/zipcoder/casino/CardGame.java | 19 +++- src/main/java/io/zipcoder/casino/GoFish.java | 12 +-- .../java/io/zipcoder/casino/GoFishTest.java | 90 ++++++++++++++++--- 3 files changed, 93 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index dbdea2dc5..3b0c6ef26 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -1,9 +1,6 @@ package io.zipcoder.casino; -import java.util.ArrayList; -import java.util.Random; -import java.util.Stack; -import java.util.TreeMap; +import java.util.*; public abstract class CardGame implements GamblingGame { ArrayList playersHand; @@ -28,6 +25,11 @@ public ArrayList getDeck() { return this.deck; } + // needed for testing + public void setPlayersHand(ArrayList playersHand) { + this.playersHand = playersHand; + } + public ArrayList getPlayersHand() { return this.playersHand; } @@ -81,5 +83,14 @@ public int getValueOfCard(String rankOnCard) { return valueOfCard; } + + public String displayPlayersHand(ArrayList playersHand) { + String playersHandOutput = ""; + Iterator itr = playersHand.iterator(); + while(itr.hasNext()) { + playersHandOutput += itr.next() + "\n"; + } + return playersHandOutput; + } } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index cea02dbdd..e1061a888 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -40,16 +40,6 @@ public void setupGame(int numberOfCards) { this.dealCards(numberOfCards); } - // Move to display class?? - public String displayPlayersHand(ArrayList playersHand) { - String playersHandOutput = ""; - Iterator itr = playersHand.iterator(); - while(itr.hasNext()) { - playersHandOutput += itr.next() + "\n"; - } - return playersHandOutput; - } - public String getRankToAskFor_Human() { d.printWhatRankYouWillAskFor(); return c.getStringInput(null, null); @@ -85,7 +75,7 @@ public void drawCardFromDeck(ArrayList playerHand) { this.deck.remove(0); } - public void checkForPairsInCurrentPlayersHand(ArrayList currentPlayer) { + public void checkFullBookInHand(ArrayList currentPlayer) { } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index 7b9113be3..7128de6d7 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -3,6 +3,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.theories.suppliers.TestedOn; import java.util.ArrayList; import java.util.Arrays; @@ -81,19 +82,6 @@ public void testDealCards() { //System.out.println(Arrays.toString(actualPerson2.toArray())); } - @Test - public void testSetupGame() { - - } - - @Test // Move to display class?? - public void displayPlayersHand() { - // Given - go.setupGame(5); - String hand = go.displayPlayersHand(go.getPlayersHand()); - System.out.println(hand); - } - @Test public void testGetRankOnCard() { // Given @@ -117,6 +105,35 @@ public void testGetRankOnCard() { Assert.assertEquals(expectedCase3, actualCase3); } + @Test + public void testGetValueOnCard() { + // Given + int expectedRank = 10; + int expectedRank2 = 9; + String inputRank = "Ace"; + String inputRank2 = "9"; + + // When + int actualRank = go.getValueOfCard(inputRank); + int actualRank2 = go.getValueOfCard(inputRank2); + + Assert.assertEquals(expectedRank, actualRank); + Assert.assertEquals(expectedRank2, actualRank2); + } + + @Test + public void testDisplayPlayersHand() { + // Given + ArrayList playersHand = new ArrayList(Arrays.asList("2 of Diamonds", "Queen of Hearts", "3 of Spades", "4 of Clubs", "7 of Hearts")); + go.setPlayersHand(playersHand); + String expected = "2 of Diamonds\nQueen of Hearts\n3 of Spades\n4 of Clubs\n7 of Hearts\n"; + + // When + String actual = go.displayPlayersHand(go.getPlayersHand()); + + // Then + Assert.assertEquals(expected, String.valueOf(actual)); + } @Test public void TestGetValueOfCard() { @@ -132,4 +149,51 @@ public void TestGetValueOfCard() { } + @Test + public void testGetRankToAskFor_Human() { + + } + + @Test + public void testGetRankToAskFor_Computer() { + + } + + @Test + public void testCheckIfRankInPlayersHand() { + + } + + @Test + public void testTakeCardFromOtherPlayer() { + + } + + @Test + public void testDrawCardFromDeck() { + // Given + int expectedPlayerHand = 6; + int expectedDeckSize = 41; + go.setupGame(5); + + // When + go.drawCardFromDeck(go.getPlayersHand()); + int actualPlayerHand = go.getPlayersHand().size(); + int actualDeckSize = go.getDeck().size(); + + // Then + Assert.assertEquals(expectedPlayerHand, actualPlayerHand); + Assert.assertEquals(expectedDeckSize, actualDeckSize); + } + + @Test + public void testCheckFullBookInHand() { + + } + + @Test + public void testCheckWinner() { + + } + } From 5240da72807996e3aad0b039933f7fc935410644 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 16:10:04 -0400 Subject: [PATCH 48/72] Checkpointing --- src/main/java/io/zipcoder/casino/Beetle.java | 10 +++++++--- src/main/java/io/zipcoder/casino/Casino.java | 11 ++++++----- src/main/java/io/zipcoder/casino/Craps.java | 14 +++++++++----- .../java/io/zipcoder/casino/GamblingGame.java | 2 +- src/main/java/io/zipcoder/casino/GoFish.java | 19 +++++++++++++++++++ src/main/java/io/zipcoder/casino/Main.java | 2 -- .../java/io/zipcoder/casino/CrapsTest.java | 4 ---- 7 files changed, 42 insertions(+), 20 deletions(-) delete mode 100644 src/test/java/io/zipcoder/casino/CrapsTest.java diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java index 6b359d939..f9ef05de6 100644 --- a/src/main/java/io/zipcoder/casino/Beetle.java +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -161,15 +161,19 @@ public String startGame() { return null; } - public String acceptBetFrom() { + public Double acceptBetFrom(Double betAmount) { return null; } - public String calculateReward() { + public Double acceptBetFrom() { return null; } - public String calculateLoss() { + public Double calculateReward() { + return null; + } + + public Double calculateLoss() { return null; } diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index a2fac8a79..5830ba3ed 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -4,10 +4,11 @@ import java.util.Scanner; public class Casino { - public static void main(String[] args) { - // write your tests before you start - /*Display display = new Display(); - System.out.println(display.helloMessage()); - display.getUserInput("Welcome whats your name?");*/ + public Casino(String[] args) { + + } + + public void run(){ + } } diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 60836f508..aef6cbfe1 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -514,19 +514,23 @@ public void checkBetsPostPoint(Integer x, Integer point){ cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } + if(x == point){ + bets[3] = false; + betAmounts[3] = 0.0; + } + if(x == 7){ + bets[2] = false; + betAmounts [2] = 0.0; + } if(x == point && bets[2]){ player.setWallet(betAmounts[2]); cd.printShooterScores(); cd.printWinnings(betAmounts[2]); - bets[3] = false; - betAmounts[3] = 0.0; } if(x == 7 && bets[3]){ player.setWallet(betAmounts[3] * 2); cd.printShooterSevenedOut(); cd.printWinnings(betAmounts[3] * 2); - bets[2] = false; - betAmounts [2] = 0.0; } if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ player.setWallet(betAmounts[4] * 2); @@ -566,7 +570,7 @@ public String startGame() { return "Alright! Let's play Craps!"; } - public Double acceptBetFrom() { + public Double acceptBetFrom(Double betAmount) { return null; } diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java index 8f2c9b16c..82cccdb8b 100644 --- a/src/main/java/io/zipcoder/casino/GamblingGame.java +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -4,7 +4,7 @@ public interface GamblingGame { public String startGame(); - public Double acceptBetFrom(); + public Double acceptBetFrom(Double betAmount); public Double calculateReward(); diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index cea02dbdd..22c75c870 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -93,6 +93,25 @@ public void checkWinner(int bookCount) { bookCount += 1; } + public String startGame() { + return null; + } + + public Double acceptBetFrom(Double betAmount) { + return null; + } + + public Double calculateReward() { + return null; + } + + public Double calculateLoss() { + return null; + } + + public String endGame() { + return null; + } } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index 361ada84a..781cd3909 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -6,7 +6,5 @@ public static void main(String args[]) { Player x = new Player("Hazel", 500.0); Craps craps = new Craps(x); craps.crapsEngine(); - - } } diff --git a/src/test/java/io/zipcoder/casino/CrapsTest.java b/src/test/java/io/zipcoder/casino/CrapsTest.java deleted file mode 100644 index 95eddb072..000000000 --- a/src/test/java/io/zipcoder/casino/CrapsTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.zipcoder.casino; - -public class CrapsTest { -} From a78e548633ffbee9fc053d4f9701501388d4f5b8 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 16:44:28 -0400 Subject: [PATCH 49/72] Working on users --- src/main/java/io/zipcoder/casino/Casino.java | 74 +++++++++++++++++++- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 5830ba3ed..c0384682f 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -1,14 +1,82 @@ package io.zipcoder.casino; import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Random; import java.util.Scanner; public class Casino { - public Casino(String[] args) { + private Console c; + private Scanner s; + private Display d; + private InputStream in; + private PrintStream out; + private PlayerWarehouse pwh; + private Random rand; + private Boolean atLogin; + private Player currentPlayer; + + public Casino(String[] args) { + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.d = new Display(); + this.rand = new Random(); + this.atLogin = true; + this.currentPlayer = new Player("Timberdoodle", 2.0); } - public void run(){ - + public void run() { + while (atLogin) { + + d.setPrintCurrentDisplay("Welcome! Are you a new or returning user?"); + Integer input1 = c.getIntegerInput("Press 1 for new, 2 for returning."); + + if (input1 == 1) { + + String newName = c.getStringInput("What's your name?"); + String newPass = c.getStringInput("Make a password."); + Double newDeposit = c.getDoubleInput("Make an initial deposit."); + String newId; + + while(true) { + newId = "" + rand.nextInt(9999); + if(pwh.validateUniquePlayer(newId)){ + break; + } + } + + d.setPrintCurrentDisplay("Your user ID is " + newId + ". Remember it!\n"); + pwh.addNewPlayer(newId, new Player(newName, newDeposit), newPass); + d.setPrintCurrentDisplay("And you're all set!\n"); + + } else if (input1 == 2) { + + while(true) { + String oldId = c.getStringInput("What's your user ID?"); + String oldPass = c.getStringInput("What's your password?"); + if(pwh.validateLoginCredentials(oldId, oldPass)){ + currentPlayer = pwh.getPlayer(oldId); + break; + }else{ + d.setPrintCurrentDisplay("Improper login credentials."); + } + } + + } else { + d.printErrorMessage(); + } + } } } + + + + + + + + From 7669f307729dc609da969c217aad8494335d2bf6 Mon Sep 17 00:00:00 2001 From: Theresa Date: Thu, 18 Mar 2021 17:13:47 -0400 Subject: [PATCH 50/72] Added more test methods for GoFish --- .../java/io/zipcoder/casino/CardGame.java | 27 +++++++---- src/main/java/io/zipcoder/casino/GoFish.java | 45 +++++++++++------- .../java/io/zipcoder/casino/GoFishTest.java | 47 +++++++++++++++++++ 3 files changed, 91 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index 3b0c6ef26..c70808e7a 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -3,41 +3,48 @@ import java.util.*; public abstract class CardGame implements GamblingGame { - ArrayList playersHand; - ArrayList dealersHand; + ArrayList deck; - TreeMap deckMap; String[] ranks; String[] suits; + ArrayList playersHand; + ArrayList dealersHand; + public CardGame() { this.deck = new ArrayList(52); // Set zeroth element to null to indicate an unused element (only valid ranks from 1-13) this.ranks = new String[]{null, "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; this.suits = new String[]{"Clubs", "Diamonds", "Hearts", "Spades"}; + this.playersHand = new ArrayList(); this.dealersHand = new ArrayList(); - this.deckMap = new TreeMap(); } + // GETTERS public ArrayList getDeck() { return this.deck; } - // needed for testing - public void setPlayersHand(ArrayList playersHand) { - this.playersHand = playersHand; - } - public ArrayList getPlayersHand() { return this.playersHand; } public ArrayList getDealersHand() { - return this.dealersHand; + return this.dealersHand; + } + + // SETTERS + public void setPlayersHand(ArrayList playersHand) { + this.playersHand = playersHand; + } + + public void setDealersHand(ArrayList dealersHand) { + this.dealersHand = dealersHand; } + // CARD GAME METHODS public void createNewDeck() { for (int suit = 0; suit <=3; suit++) { for (int rank = 1; rank <= 13; rank++) { diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index e1061a888..4bee89664 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -13,33 +13,33 @@ public class GoFish extends CardGame { // dealers hand // deck - Console c; - private InputStream in; - private PrintStream out; - GoFishDisplay d; - int bookCountPlayer; - int bookCountDealer; - String rankAskedFor; + private Console c; + private GoFishDisplay d; + private int bookCountPlayer; + private int bookCountDealer; + private String turn; public GoFish() { - this.in = System.in; - this.out = System.out; - this.c = new Console(in, out); - - d = new GoFishDisplay(); + this.c = new Console(System.in, System.out); + this.d = new GoFishDisplay(); this.bookCountPlayer = 0; this.bookCountDealer = 0; + this.turn = "player"; } - public void setupGame(int numberOfCards) { this.createNewDeck(); this.shuffleCards(); this.dealCards(numberOfCards); } + public void setBookCounts(int bookCountPlayer, int bookCountDealer) { + this.bookCountPlayer = bookCountPlayer; + this.bookCountDealer = bookCountDealer; + } + public String getRankToAskFor_Human() { d.printWhatRankYouWillAskFor(); return c.getStringInput(null, null); @@ -50,8 +50,6 @@ public String getRankToAskFor_Computer(ArrayList computersHand) { return this.getRankOnCard(computersHand.get(pickCard)); } - // Use this to check if rank in requesting player's hand first (can only request a rank already in your hand) - // And use to check if rank is in other player's hand public boolean checkIfRankInPlayersHand(ArrayList playersHand, String rankAskedFor) { for (int i = 0; i < playersHand.size(); i++) { if (getRankOnCard(playersHand.get(i)) == rankAskedFor) { @@ -63,7 +61,7 @@ public boolean checkIfRankInPlayersHand(ArrayList playersHand, String ra public void takeCardFromOtherPlayer(ArrayList playerTakingCard, ArrayList playerGivingCard, String rankAskedFor) { for (int i = 0; i < playerGivingCard.size(); i++) { - if (this.getRankOnCard(playerGivingCard.get(i)) == rankAskedFor) { + if (this.getRankOnCard(playerGivingCard.get(i)).equals(rankAskedFor)) { playerTakingCard.add(playerGivingCard.get(i)); playerGivingCard.remove(i); } @@ -79,8 +77,19 @@ public void checkFullBookInHand(ArrayList currentPlayer) { } - public void checkWinner(int bookCount) { - bookCount += 1; + public boolean checkGameOver() { + if (this.bookCountDealer + this.bookCountPlayer == 13) { + return true; + } + return false; + } + + public String checkWinner() { + if (this.bookCountDealer > this.bookCountPlayer) { + return "dealer"; + } else { + return "player"; + } } } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index 7128de6d7..9a02b11b9 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -166,7 +166,22 @@ public void testCheckIfRankInPlayersHand() { @Test public void testTakeCardFromOtherPlayer() { + // Given + go.setPlayersHand(new ArrayList(Arrays.asList("2 of Clubs"))); + go.setDealersHand(new ArrayList(Arrays.asList("Ace of Diamonds"))); + + // When + go.takeCardFromOtherPlayer(go.getPlayersHand(), go.getDealersHand(), "Ace"); + // Then + ArrayList expectedPlayer = new ArrayList(Arrays.asList("2 of Clubs", "Ace of Diamonds")); + ArrayList expectedDealer = new ArrayList(); + + ArrayList actualPlayer = go.getPlayersHand(); + ArrayList actualDealer = go.getDealersHand(); + + Assert.assertEquals(expectedPlayer, actualPlayer); + Assert.assertEquals(expectedDealer, actualDealer); } @Test @@ -191,9 +206,41 @@ public void testCheckFullBookInHand() { } + @Test + public void checkGameOverTrue() { + // Given + go.setBookCounts(10, 3); + + // When + boolean actual = go.checkGameOver(); + + // Then + Assert.assertTrue(actual); + } + + @Test + public void checkGameOverFalse() { + // Given + go.setBookCounts(9, 3); + + // When + boolean actual = go.checkGameOver(); + + // Then + Assert.assertFalse(actual); + } + @Test public void testCheckWinner() { + // Given + go.setBookCounts(10, 3); + String expected = "player"; + + // When + String actual = go.checkWinner(); + // Then + Assert.assertEquals(expected, actual); } } From 964a4595a5ca09fe56737403a9ffc857f7f8152e Mon Sep 17 00:00:00 2001 From: Theresa Date: Thu, 18 Mar 2021 17:49:26 -0400 Subject: [PATCH 51/72] Added some more tests and a couple more methods to GoFish --- src/main/java/io/zipcoder/casino/GoFish.java | 34 ++++++++++++++----- .../io/zipcoder/casino/GoFishDisplay.java | 4 +-- src/main/java/io/zipcoder/casino/Main.java | 3 -- .../java/io/zipcoder/casino/GoFishTest.java | 23 ++++++++++++- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 4bee89664..42a6ef48d 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -2,17 +2,11 @@ import io.zipcoder.casino.utilities.Console; -import java.io.InputStream; -import java.io.PrintStream; import java.util.ArrayList; -import java.util.Iterator; +import java.util.Collections; public class GoFish extends CardGame { - // players hand - // dealers hand - // deck - private Console c; private GoFishDisplay d; private int bookCountPlayer; @@ -52,7 +46,7 @@ public String getRankToAskFor_Computer(ArrayList computersHand) { public boolean checkIfRankInPlayersHand(ArrayList playersHand, String rankAskedFor) { for (int i = 0; i < playersHand.size(); i++) { - if (getRankOnCard(playersHand.get(i)) == rankAskedFor) { + if (getRankOnCard(playersHand.get(i)).equals(rankAskedFor)) { return true; } } @@ -73,8 +67,30 @@ public void drawCardFromDeck(ArrayList playerHand) { this.deck.remove(0); } - public void checkFullBookInHand(ArrayList currentPlayer) { + public String checkFullBookInHand(ArrayList currentPlayer) { + Collections.sort(currentPlayer); + int count = 0; + for (int i = 1; i < currentPlayer.size(); i++) { + if (this.getRankOnCard(currentPlayer.get(i - 1)) == this.getRankOnCard(currentPlayer.get(i))) { + count += 1; + if (count == 4) { + return this.getRankOnCard(currentPlayer.get(i)); + } + } else { + count = 0; + } + } + return "no books yet"; + } + public void createABook(ArrayList currentPlayer, int currentPlayerBook) { + String rankToRemove = checkFullBookInHand(currentPlayer); + for(int i = 0; i < currentPlayer.size(); i++) { + if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove)) { + currentPlayer.remove(i); + } + } + currentPlayerBook += 1; } public boolean checkGameOver() { diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 4716f9cf7..e94946510 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -3,8 +3,8 @@ public class GoFishDisplay extends Display{ public void goFishRules(){ - setPrintCurrentDisplay("Two players will be dealt 5 cards each.\nThe object of the game is to have the most pairs when the deck is empty." + - "\nA player creates pairs by asking the other player if they have a specific card rank in their hand." + + setPrintCurrentDisplay("Two players will be dealt 5 cards each.\nThe object of the game is to have the most books (set of 4 cards of the same rank) when the deck is empty." + + "\nA player creates a book by asking the other player if they have a specific card rank in their hand." + "\nYou must be holding the card the card you request." + "\n"); } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index f747690df..d6abc1ca0 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -4,9 +4,6 @@ public class Main { public static void main(String args[]) { Display d = new Display(); - BeetleDisplay bd = new BeetleDisplay(); - d.printWelcomeMessage(); - bd.getBeetleComplete(); } } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index 9a02b11b9..b06878386 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -3,7 +3,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.junit.experimental.theories.suppliers.TestedOn; import java.util.ArrayList; import java.util.Arrays; @@ -149,6 +148,7 @@ public void TestGetValueOfCard() { } + // Not sure how to test this one @Test public void testGetRankToAskFor_Human() { @@ -156,12 +156,28 @@ public void testGetRankToAskFor_Human() { @Test public void testGetRankToAskFor_Computer() { + // Given + go.setDealersHand(new ArrayList(Arrays.asList("Ace of Hearts", "2 of Spades", "6 of Diamonds"))); + + // When + String actual = go.getRankToAskFor_Computer(go.getDealersHand()); + // Then + Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); } @Test public void testCheckIfRankInPlayersHand() { + // Given + go.setPlayersHand(new ArrayList(Arrays.asList("King of Diamonds", "4 of Spades"))); + + // When + boolean actual = go.checkIfRankInPlayersHand(go.getPlayersHand(), "King"); + boolean actual2 = go.checkIfRankInPlayersHand(go.getPlayersHand(), "5"); + // Then + Assert.assertTrue(actual); + Assert.assertFalse(actual2); } @Test @@ -206,6 +222,11 @@ public void testCheckFullBookInHand() { } + @Test + public void testCrateABook() { + + } + @Test public void checkGameOverTrue() { // Given From f7114176089ff2d22d5ca25802caef8b5a6ae7f9 Mon Sep 17 00:00:00 2001 From: hazel Date: Thu, 18 Mar 2021 18:55:38 -0400 Subject: [PATCH 52/72] Fixed PlayerWarehouse bug --- src/main/java/io/zipcoder/casino/Casino.java | 19 ++++++++++++++----- src/main/java/io/zipcoder/casino/Main.java | 5 ++--- .../io/zipcoder/casino/PlayerWarehouse.java | 5 ++++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index c0384682f..2662ad5ca 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -19,14 +19,15 @@ public class Casino { private Boolean atLogin; private Player currentPlayer; - public Casino(String[] args) { + public Casino() { this.in = System.in; this.out = System.out; this.c = new Console(in, out); this.d = new Display(); + this.pwh = new PlayerWarehouse(); this.rand = new Random(); this.atLogin = true; - this.currentPlayer = new Player("Timberdoodle", 2.0); + this.currentPlayer = new Player("TIMBERDOODLE72", 2.0); } public void run() { @@ -56,19 +57,27 @@ public void run() { } else if (input1 == 2) { while(true) { - String oldId = c.getStringInput("What's your user ID?"); - String oldPass = c.getStringInput("What's your password?"); + String oldId; + oldId = c.getStringInput("What's your user ID?"); + String oldPass; + oldPass = c.getStringInput("What's your password?"); if(pwh.validateLoginCredentials(oldId, oldPass)){ currentPlayer = pwh.getPlayer(oldId); break; }else{ - d.setPrintCurrentDisplay("Improper login credentials."); + d.setPrintCurrentDisplay("Improper login credentials.\n"); + break; } } } else { d.printErrorMessage(); } + + if(currentPlayer.getName() != "TIMBERDOODLE72"){ + break; + } + } } } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index 781cd3909..ef25eeb1c 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,8 +3,7 @@ public class Main { public static void main(String args[]) { - Player x = new Player("Hazel", 500.0); - Craps craps = new Craps(x); - craps.crapsEngine(); + Casino casino = new Casino(); + casino.run(); } } diff --git a/src/main/java/io/zipcoder/casino/PlayerWarehouse.java b/src/main/java/io/zipcoder/casino/PlayerWarehouse.java index 7975268b4..45298c924 100644 --- a/src/main/java/io/zipcoder/casino/PlayerWarehouse.java +++ b/src/main/java/io/zipcoder/casino/PlayerWarehouse.java @@ -29,7 +29,10 @@ public void addNewPlayer(String userId, Player player, String password) { } public boolean validateLoginCredentials(String userId, String password) { - if (userNamePasswordMap.containsKey(userId) && userNamePasswordMap.get(userId) == password) { + + + + if (userNamePasswordMap.containsKey(userId) && userNamePasswordMap.get(userId).equals(password)) { return true; } return false; From cedefd266650a5cde76a81c979e574dcaf9a05e5 Mon Sep 17 00:00:00 2001 From: Theresa Date: Thu, 18 Mar 2021 19:00:07 -0400 Subject: [PATCH 53/72] Started working out GoFish game flow --- src/main/java/io/zipcoder/casino/GoFish.java | 12 ++++--- .../io/zipcoder/casino/GoFishDisplay.java | 2 ++ .../java/io/zipcoder/casino/GoFishEngine.java | 35 +++++++++++++++++++ src/main/java/io/zipcoder/casino/Main.java | 3 +- .../java/io/zipcoder/casino/GoFishTest.java | 2 +- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/GoFishEngine.java diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 42a6ef48d..1b3b2f5bd 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -23,6 +23,10 @@ public GoFish() { this.turn = "player"; } + public String getTurn() { + return this.turn; + } + public void setupGame(int numberOfCards) { this.createNewDeck(); this.shuffleCards(); @@ -36,12 +40,12 @@ public void setBookCounts(int bookCountPlayer, int bookCountDealer) { public String getRankToAskFor_Human() { d.printWhatRankYouWillAskFor(); - return c.getStringInput(null, null); + return c.getStringInput("", null); } - public String getRankToAskFor_Computer(ArrayList computersHand) { - int pickCard = (int) Math.random() * (computersHand.size() - 1); - return this.getRankOnCard(computersHand.get(pickCard)); + public String getRankToAskFor_Computer() { + int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); + return this.getRankOnCard(this.dealersHand.get(pickCard)); } public boolean checkIfRankInPlayersHand(ArrayList playersHand, String rankAskedFor) { diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index e94946510..041e1d971 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -9,6 +9,8 @@ public void goFishRules(){ "\n"); } + public void printYourHand() {setPrintCurrentDisplay("CARDS IN YOUR HAND:");} + public void goFish(){ setPrintCurrentDisplay("GO FISH!"); } diff --git a/src/main/java/io/zipcoder/casino/GoFishEngine.java b/src/main/java/io/zipcoder/casino/GoFishEngine.java new file mode 100644 index 000000000..a32097b7c --- /dev/null +++ b/src/main/java/io/zipcoder/casino/GoFishEngine.java @@ -0,0 +1,35 @@ +package io.zipcoder.casino; + +public class GoFishEngine { + + private GoFish g; + private GoFishDisplay d; + + public GoFishEngine() { + this.g = new GoFish(); + this.d = new GoFishDisplay(); + } + + public void startGame() { + g.setupGame(5); + this.playGame(); + } + + public void playGame() { + while (g.checkGameOver() == false) { + if (g.getTurn() == "player") { + + d.printYourHand(); + System.out.println(g.displayPlayersHand(g.getPlayersHand())); + g.getRankToAskFor_Human(); + + } else if (g.getTurn() == "dealer") { + + g.getRankToAskFor_Computer(); + } + } + + + } +} + diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index d6abc1ca0..1537d2b35 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -4,6 +4,7 @@ public class Main { public static void main(String args[]) { Display d = new Display(); - + GoFishEngine play = new GoFishEngine(); + play.startGame(); } } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index b06878386..efac5e052 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -160,7 +160,7 @@ public void testGetRankToAskFor_Computer() { go.setDealersHand(new ArrayList(Arrays.asList("Ace of Hearts", "2 of Spades", "6 of Diamonds"))); // When - String actual = go.getRankToAskFor_Computer(go.getDealersHand()); + String actual = go.getRankToAskFor_Computer(); // Then Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); From e53c800a9fc595a2d70605f7cfab2ba1a847d9e9 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Thu, 18 Mar 2021 23:47:19 -0400 Subject: [PATCH 54/72] game is fully functional --- src/main/java/io/zipcoder/casino/Beetle.java | 106 ++++++++++------- .../io/zipcoder/casino/BeetleDisplay.java | 22 +++- src/main/java/io/zipcoder/casino/Casino.java | 56 +++++++-- src/main/java/io/zipcoder/casino/Display.java | 15 ++- src/main/java/io/zipcoder/casino/GoFish.java | 16 ++- src/main/java/io/zipcoder/casino/Player.java | 7 +- .../java/io/zipcoder/casino/BeetleTest.java | 108 +++++++++++++++++- .../java/io/zipcoder/casino/PlayerTest.java | 11 ++ 8 files changed, 278 insertions(+), 63 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java index 16759562b..7f5df16f5 100644 --- a/src/main/java/io/zipcoder/casino/Beetle.java +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -6,18 +6,17 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Scanner; -import java.util.Set; +import java.text.NumberFormat; +import java.util.*; public class Beetle extends DiceGame{ + Player player; + Random random = new Random(); Console console; private InputStream in; private PrintStream out; - Scanner scanner = new Scanner(System.in); BeetleDisplay bd = new BeetleDisplay(); - Player player1 = new Player("Shel", 100.00); + NumberFormat nf = NumberFormat.getCurrencyInstance(); private String[][] completeBeetle = new String[][]{{"\\","0","/"}, {"⎛","|","⎞"}, @@ -39,7 +38,8 @@ public class Beetle extends DiceGame{ private Set opponentsRolls = new HashSet(); private Double purse = 0.00; - public Beetle() { + public Beetle(Player player) { + this.player = player; this.in = System.in; this.out = System.out; this.console = new Console(in, out); @@ -54,59 +54,68 @@ public void gameEngine() { Boolean opponentHasNotWon = true; Boolean playersHaveNotTied = true; + welcomeSequence(); + acceptBetFromUser(1.00); - acceptBetFrom(); + openingBet(); bd.currentPurse(purse); - while (playersHaveNotTied && userHasNotWon && opponentHasNotWon) { - //current purse amount Double betAmount = (console.getDoubleInput("how much would you like to bet?")); acceptBetFromUser(betAmount); - if (opponentsRolls.size() >= usersRolls.size()) { - Double opponentBet = acceptBetFrom(); - bd.opponentHasPlacedABet(opponentBet); + if (opponentsRolls.size() >= usersRolls.size()) + { + Double opponentBetAmount = opponentBet(betAmount); + bd.opponentHasPlacedABet(opponentBetAmount); } - bd.border(); + bd.borderWithSpace(); bd.currentPurse(purse); Integer userRollValue = diceRollSum(1); bd.usersRollResults(userRollValue); analyzeRoll(usersRolls, usersBeetle, userRollValue); + bd.yourBeetle(); drawPlayerBeetle(usersBeetle); bd.border(); Integer opponentsRollValue = diceRollSum(1); bd.opponentsRollResults(opponentsRollValue); analyzeRoll(opponentsRolls, opponentsBeetle, opponentsRollValue); + bd.opponentsBeetle(); drawPlayerBeetle(opponentsBeetle); - bd.border(); + bd.borderWithSpace(); if (Arrays.deepEquals(completeBeetle, usersBeetle) && Arrays.deepEquals(completeBeetle, opponentsBeetle)) { playersHaveNotTied = false; bd.bothBeetlesComplete(); - player1.setWallet(player1.getCurrentBet()); + player.setWallet(player.getCurrentBet()); System.out.println("Your bets were returned to your wallet."); break; } else if (Arrays.deepEquals(completeBeetle, usersBeetle)) { userHasNotWon = false; bd.userBugIsComplete(); - player1.setWallet(purse); - player1.setCurrentBet(0.00); + player.setWallet(purse); + player.setCurrentBet(0.00); break; } else if (Arrays.deepEquals(completeBeetle, opponentsBeetle)) { opponentHasNotWon = false; bd.opponentsBugisComplete(); - player1.setWallet(-player1.getCurrentBet()); - player1.setCurrentBet(0.00); + player.setWallet(-player.getCurrentBet()); + player.setCurrentBet(0.00); break; } } - System.out.println(player1.getWallet()); - + bd.printAccountBalance(player.getWallet()); } + + public void welcomeSequence() { + bd.welcome(); + drawPlayerBeetle(getCompleteBeetle()); + bd.rules(); + } + public void analyzeRoll(Set rollSet, String[][] playersBeetle, Integer diceRoll){ if(!rollSet.contains(diceRoll)) { drawBeetle(rollSet, playersBeetle,diceRoll); @@ -168,10 +177,6 @@ public String[][] drawPlayerBeetle(String[][] playersBeetle){ } - public void opponentBet() { - - } - public Set getUsersRolls() { return usersRolls; } @@ -192,39 +197,54 @@ public String[][] getCompleteBeetle(){ return completeBeetle; } - - - - public String startGame() { - return null; + public void acceptBetFromUser(Double betAmount) { + player.makeBet(betAmount); + purse += betAmount; } - public Double acceptBetFrom(Double betAmount) { - return null; + public Double openingBet() { + purse += 1; + return purse; } - public Double acceptBetFrom() { - Double betAmount = 1.00; - purse += betAmount; + public Double opponentBet(Double userBet) { + Double multiplier = random.nextDouble()+0.5; + Double betAmount = userBet * Math.round(multiplier*100)/100; return betAmount; } - public void acceptBetFromUser(Double betAmount) { - player1.makeBet(betAmount); - purse += betAmount; - } - public Double calculateReward() { - double reward = purse - player1.getCurrentBet(); + double reward = purse - player.getCurrentBet(); return reward; } public Double calculateLoss() { - return player1.getCurrentBet(); + return player.getCurrentBet(); } + public Double getPurse() { + return purse; + } + + + + + + public String endGame() { return null; } + + public String startGame() { + return null; + } + + public Double acceptBetFrom(Double betAmount) { + return null; + } + + public Double acceptBetFrom() { + return null; + } } diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index 77fc82347..a61d19f66 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -11,13 +11,16 @@ public class BeetleDisplay extends Display { public BeetleDisplay() { } + public void welcome() { + setPrintCurrentDisplay("WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"); + } public void rules() { - setPrintCurrentDisplay("Draw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die corresponds to a part of the beetle." + + setPrintCurrentDisplay("\nDraw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die corresponds to a part of the beetle." + "\nIf you roll a number, you get to draw that part.\nIf you roll the same number again, you do not get to add to your beetle." + "\nBetween each roll you will add to your wager.\nThe first person to draw a beetle keeps the purse." + "\nIf both players complete their beetle on the same set of rolls the wagers are returned." + "\n\nWhat to draw for each roll:" + - "\n1 - head\n2 - body\n3 - left front leg\n4 - right front leg\n5 - left back leg\n6 - right back leg"); + "\n1 - head\n2 - body\n3 - left front leg\n4 - right front leg\n5 - left back leg\n6 - right back leg\n\n"); } public void drewLeg() { @@ -66,6 +69,10 @@ public void getBeetleComplete() { } } public void border() { + setPrintCurrentDisplay("======================"); + } + + public void borderWithSpace() { setPrintCurrentDisplay("\n======================\n"); } @@ -74,12 +81,19 @@ public void openingBetMessage() { } public void opponentHasPlacedABet(Double betAmount) { - setPrintCurrentDisplay("Your opponent has placed a bet of " + betAmount); + setPrintCurrentDisplay("Your opponent has placed a bet of $" + betAmount); } public void currentPurse(Double purse) { - setPrintCurrentDisplay("The purse is currently at " + purse); + setPrintCurrentDisplay("The purse is currently at $" + purse); } + public void yourBeetle() { + setPrintCurrentDisplay("YOUR BEETLE"); + } + + public void opponentsBeetle() { + setPrintCurrentDisplay("OPPONENTS BEETLE"); + } } \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 2662ad5ca..c06e89f38 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -31,6 +31,7 @@ public Casino() { } public void run() { + d.printWelcomeMessage(); while (atLogin) { d.setPrintCurrentDisplay("Welcome! Are you a new or returning user?"); @@ -77,15 +78,54 @@ public void run() { if(currentPlayer.getName() != "TIMBERDOODLE72"){ break; } + } + gamesMenu(); + } + public void gamesMenu() { + d.printGamesMenu(); + Integer gamesListedMenu = c.getIntegerInput(" "); + switch (gamesListedMenu) { + case 1: + System.out.println("Feature Under Construction"); + break; + + case 2: + Craps craps = new Craps(currentPlayer); + craps.crapsEngine(); + break; + + case 3: + Beetle beetle = new Beetle(currentPlayer); + beetle.gameEngine(); + break; + + case 4: + System.out.println("Feature Under Construction"); + break; + + case 5: + d.printAccountBalance(currentPlayer.getWallet()); + break; + case 6: + d.printDepositMessage(); + Double deposit = c.getDoubleInput(""); + currentPlayer.makeDeposit(deposit); + break; + case 7: + System.exit(0); + default: + System.out.println("Please enter a valid input."); + break; } + if(currentPlayer.getWallet() == 0.00) { + d.printZeroFundsWarning(); + } + else if (currentPlayer.getWallet() <= 50.00) { + d.printLowFundsWarning(currentPlayer.getWallet()); + } else { + System.out.println("Having fun? KEEP PLAYING!!"); + } + gamesMenu(); } } - - - - - - - - diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index c25510c09..ba67d4c2c 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -88,7 +88,10 @@ public void printGamesMenu() { " 1. BlackJack\n" + " 2. Craps\n" + " 3. Beetle\n" + - " 4. GoFish\n" + " 4. GoFish\n" + + " 5. Check Account Balance\n" + + " 6. Make a Deposit\n" + + " 7. Exit\n" ); } @@ -121,6 +124,12 @@ public void printZeroFundsWarning() { ); } + public void printDepositMessage() { + this.setPrintCurrentDisplay( + "How much are you depositing?" + ); + } + // GENERIC GAME RESULT MESSAGING public void printRollResult(Integer[] diceResults) { String formattedRollResults = ""; @@ -145,11 +154,11 @@ public void printDealResult(ArrayList dealResults) { } public void printAmountOfWinnings(Double winningsAmount) { - setPrintCurrentDisplay("You won " + winningsAmount+ "!!!"); + setPrintCurrentDisplay("You won $" + winningsAmount+ "!!!"); } public void printAmountOfLoss(Double lossAmount) { - setPrintCurrentDisplay("You lost " + lossAmount + "."); + setPrintCurrentDisplay("You lost $" + lossAmount + "."); } // USER SET-UP MESSAGING diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 928ecb878..a390cc401 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -40,6 +40,16 @@ public void setupGame(int numberOfCards) { this.dealCards(numberOfCards); } + // Move to display class?? + public String displayPlayersHand(ArrayList playersHand) { + String playersHandOutput = ""; + Iterator itr = playersHand.iterator(); + while(itr.hasNext()) { + playersHandOutput += itr.next() + "\n"; + } + return playersHandOutput; + } + public String getRankToAskFor_Human() { d.printWhatRankYouWillAskFor(); return c.getStringInput(null, null); @@ -75,7 +85,7 @@ public void drawCardFromDeck(ArrayList playerHand) { this.deck.remove(0); } - public void checkFullBookInHand(ArrayList currentPlayer) { + public void checkForPairsInCurrentPlayersHand(ArrayList currentPlayer) { } @@ -91,6 +101,10 @@ public Double acceptBetFrom(Double betAmount) { return null; } + public Double acceptBetFrom() { + return null; + } + public Double calculateReward() { return null; } diff --git a/src/main/java/io/zipcoder/casino/Player.java b/src/main/java/io/zipcoder/casino/Player.java index 749674566..5aae3d890 100644 --- a/src/main/java/io/zipcoder/casino/Player.java +++ b/src/main/java/io/zipcoder/casino/Player.java @@ -3,7 +3,7 @@ public class Player{ private String name; - private Double wallet; + private Double wallet = 0.0; private Double currentBet = 0.0; public Player(String name, Double initialDeposit) { @@ -40,4 +40,9 @@ public void setCurrentBet(Double currentBet) { this.currentBet = currentBet; } + public Double makeDeposit(Double depositAmount) { + wallet += depositAmount; + return wallet; + } + } diff --git a/src/test/java/io/zipcoder/casino/BeetleTest.java b/src/test/java/io/zipcoder/casino/BeetleTest.java index 65ccc52e3..e3e8db510 100644 --- a/src/test/java/io/zipcoder/casino/BeetleTest.java +++ b/src/test/java/io/zipcoder/casino/BeetleTest.java @@ -8,7 +8,8 @@ public class BeetleTest { @Test public void playerBeetleTest() { //given - Beetle beetle = new Beetle(); + Player player1 = new Player("player", 100.00); + Beetle beetle = new Beetle(player1); beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 4); beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 5); // and @@ -22,16 +23,36 @@ public void playerBeetleTest() { } + @Test + public void opponentBeetleTest() { + //given + Player player1 = new Player("player", 100.00); + Beetle beetle = new Beetle(player1); + beetle.analyzeRoll(beetle.getOpponentsRolls(), beetle.getOpponentsBeetle(), 4); + beetle.analyzeRoll(beetle.getOpponentsRolls(), beetle.getOpponentsBeetle(), 5); + // and + String[][] expected = new String[][]{{" ","0"," "}, + {" ","|"," "}, + {" ","|"," "}, + {" "," ","\\"}}; + String[][] actual = (beetle.drawPlayerBeetle(beetle.getOpponentsBeetle())); + //assert + Assert.assertEquals(expected,actual); + + } @Test public void gameEngineTest() { - Beetle beetle = new Beetle(); + Player player1 = new Player("player", 100.00); + Beetle beetle = new Beetle(player1); + beetle.gameEngine(); } @Test public void completeBeetleTest() { - Beetle beetle = new Beetle(); + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 1); beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 2); beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 3); @@ -43,4 +64,85 @@ public void completeBeetleTest() { } + @Test + public void getUserRollsTest() { + Player human = new Player("human", 50.00); + Beetle beetle = new Beetle(human); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 1); + beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 2); + + Integer expected = 2; + Integer actual = beetle.getUsersRolls().size(); + + Assert.assertEquals(expected,actual); + + } + + @Test + public void acceptUserBetTest() { + Player robot = new Player("robot", 100.00); + Beetle beetle = new Beetle(robot); + + beetle.acceptBetFromUser(50.00); + + Double actual = beetle.getPurse(); + Double expected = 50.0; + + Assert.assertEquals(expected, actual); + } + + @Test + public void openingBetTest() { + Player hubot = new Player("hubot", 100.00); + Beetle beetle = new Beetle(hubot); + beetle.openingBet(); + + Double expected = 1.0; + Double actual = beetle.getPurse(); + + Assert.assertEquals(expected,actual); + } + + @Test + public void opponentBetTest() { + Player hubot = new Player("hubot", 100.00); + Beetle beetle = new Beetle(hubot); + + Double expected = beetle.opponentBet(10.00); + + Assert.assertTrue(expected >=5 && expected <= 15); + + } + + @Test + public void calculateRewardTest() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.openingBet(); + beetle.acceptBetFromUser(50.0); + + Double actual = beetle.calculateReward(); + Double expected = 1.0; + + Assert.assertEquals(expected, actual); + } + + @Test + public void calculateLossTest() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.openingBet(); + beetle.acceptBetFromUser(50.0); + + Double actual = beetle.calculateLoss(); + Double expected = 50.0; + + Assert.assertEquals(expected, actual); + } + + + + } diff --git a/src/test/java/io/zipcoder/casino/PlayerTest.java b/src/test/java/io/zipcoder/casino/PlayerTest.java index 9fb882956..3cf290992 100644 --- a/src/test/java/io/zipcoder/casino/PlayerTest.java +++ b/src/test/java/io/zipcoder/casino/PlayerTest.java @@ -110,4 +110,15 @@ public void PlayerMakeBetTest5() { //assert Assert.assertEquals(expected,actual); } + @Test + public void MakeDepositTest() { + Player player8 = new Player("player1", 50.00); + player8.makeDeposit(50.00); + + Double expected = 100.00; + Double actual = player8.getWallet(); + + Assert.assertEquals(expected, actual); + + } } From 746f4330102477d826df8b7c128a6a81af6311a5 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Fri, 19 Mar 2021 00:40:41 -0400 Subject: [PATCH 55/72] Beetle Dispaly tests --- .../io/zipcoder/casino/BeetleDisplay.java | 79 +++++++---- src/main/java/io/zipcoder/casino/Display.java | 5 + .../zipcoder/casino/BeetleDisplayTests.java | 126 ++++++++++++++++++ .../zipcoder/casino/PlayerWarehouseTest.java | 6 + 4 files changed, 190 insertions(+), 26 deletions(-) create mode 100644 src/test/java/io/zipcoder/casino/BeetleDisplayTests.java create mode 100644 src/test/java/io/zipcoder/casino/PlayerWarehouseTest.java diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index a61d19f66..75ad49e1b 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -11,8 +11,10 @@ public class BeetleDisplay extends Display { public BeetleDisplay() { } - public void welcome() { - setPrintCurrentDisplay("WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"); + public String welcome() { + String message ="WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; + setPrintCurrentDisplay(message); + return message; } public void rules() { setPrintCurrentDisplay("\nDraw the beetle before your opponent and win big!\nThe rules are simple:\nEach side of the die corresponds to a part of the beetle." + @@ -23,28 +25,40 @@ public void rules() { "\n1 - head\n2 - body\n3 - left front leg\n4 - right front leg\n5 - left back leg\n6 - right back leg\n\n"); } - public void drewLeg() { - setPrintCurrentDisplay("A leg was added to the beetle!"); + public String drewLeg() { + String message = "A leg was added to the beetle!"; + setPrintCurrentDisplay(message); + return message; } - public void drewBody() { - setPrintCurrentDisplay("The beetle's body was drawn!"); + public String drewBody() { + String message ="The beetle's body was drawn!"; + setPrintCurrentDisplay(message); + return message; } - public void drewHead() { - setPrintCurrentDisplay("This beetle has a head now!"); + public String drewHead() { + String message ="This beetle has a head now!"; + setPrintCurrentDisplay(message); + return message; } - public void userBugIsComplete() { - setPrintCurrentDisplay("Your beetle is complete!\nYOU WIN!!!!"); + public String userBugIsComplete() { + String message ="Your beetle is complete!\nYOU WIN!!!!"; + setPrintCurrentDisplay(message); + return message; } - public void opponentsBugisComplete() { - setPrintCurrentDisplay("Your opponents beetle is complete.\nYou lose."); + public String opponentsBugisComplete() { + String message ="Your opponents beetle is complete.\nYou lose."; + setPrintCurrentDisplay(message); + return message; } - public void bothBeetlesComplete() { - setPrintCurrentDisplay("You both drew beetles. The game is a tie."); + public String bothBeetlesComplete() { + String message ="You both drew beetles. The game is a tie."; + setPrintCurrentDisplay(message); + return message; } public void usersRollResults(Integer usersRoll) { @@ -55,8 +69,10 @@ public void opponentsRollResults(Integer opponentsRoll) { setPrintCurrentDisplay("Your opponent rolled a " + opponentsRoll); } - public void repeatedRollResult() { - setPrintCurrentDisplay("You already rolled that number."); + public String repeatedRollResult() { + String message ="You already rolled that number."; + setPrintCurrentDisplay(message); + return message; } //Beetle Body Parts @@ -68,16 +84,23 @@ public void getBeetleComplete() { System.out.println(); } } - public void border() { - setPrintCurrentDisplay("======================"); + public String border() { + String message ="======================"; + setPrintCurrentDisplay(message); + return message; } - public void borderWithSpace() { - setPrintCurrentDisplay("\n======================\n"); + public String borderWithSpace() { + String message ="\n======================\n"; + setPrintCurrentDisplay(message); + return message; } - public void openingBetMessage() { - setPrintCurrentDisplay("This game has a table minimum of $1"); + + public String openingBetMessage() { + String message ="This game has a table minimum of $1"; + setPrintCurrentDisplay(message); + return message; } public void opponentHasPlacedABet(Double betAmount) { @@ -88,12 +111,16 @@ public void currentPurse(Double purse) { setPrintCurrentDisplay("The purse is currently at $" + purse); } - public void yourBeetle() { - setPrintCurrentDisplay("YOUR BEETLE"); + public String yourBeetle() { + String message ="YOUR BEETLE"; + setPrintCurrentDisplay(message); + return message; } - public void opponentsBeetle() { - setPrintCurrentDisplay("OPPONENTS BEETLE"); + public String opponentsBeetle() { + String message ="OPPONENTS BEETLE"; + setPrintCurrentDisplay(message); + return message; } } \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index ba67d4c2c..c6abc8d6f 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -193,5 +193,10 @@ public void printRequestBetAmount() { ); } + public String getCurrentDisplay(){ + System.out.println(currentDisplay); + return currentDisplay; + } + } diff --git a/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java b/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java new file mode 100644 index 000000000..ecbdfb15d --- /dev/null +++ b/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java @@ -0,0 +1,126 @@ +package io.zipcoder.casino; + +import org.junit.Assert; +import org.junit.Test; + +public class BeetleDisplayTests { + Display d = new Display(); + BeetleDisplay bd = new BeetleDisplay(); + + @Test + public void welcomeTest() { + bd.welcome(); + String actual = "WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; + String expected = bd.welcome(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void rulesTest() { + bd.welcome(); + String actual = "WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; + String expected = bd.welcome(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void drewLegTest() { + bd.drewLeg(); + String actual = "A leg was added to the beetle!"; + String expected = bd.drewLeg(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void drewBodyTest() { + bd.drewBody(); + String actual = "The beetle's body was drawn!"; + String expected = bd.drewBody(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void drewHeadTest() { + bd.drewHead(); + String actual = "This beetle has a head now!"; + String expected = bd.drewHead(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void userBugIsCompleteTest() { + bd.userBugIsComplete(); + String actual = "Your beetle is complete!\nYOU WIN!!!!"; + String expected = bd.userBugIsComplete(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void opponentsBugisCompleteTest() { + bd.opponentsBugisComplete(); + String actual = "Your opponents beetle is complete.\nYou lose."; + String expected = bd.opponentsBugisComplete(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void bothBeetlesCompleteTest() { + bd.bothBeetlesComplete(); + String actual = "You both drew beetles. The game is a tie."; + String expected = bd.bothBeetlesComplete(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void repeatedRollResult() { + bd.repeatedRollResult(); + String actual = "You already rolled that number."; + String expected = bd.repeatedRollResult(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void border() { + bd.border(); + String actual = "======================"; + String expected = bd.border(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void borderWithSpace() { + bd.borderWithSpace(); + String actual = "\n======================\n"; + String expected = bd.borderWithSpace(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void yourBeetle() { + bd.yourBeetle(); + String actual = "YOUR BEETLE"; + String expected = bd.yourBeetle(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void opponentsBeetle() { + bd.opponentsBeetle(); + String actual = "OPPONENTS BEETLE"; + String expected = bd.opponentsBeetle(); + + Assert.assertEquals(expected, actual); + } +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/PlayerWarehouseTest.java b/src/test/java/io/zipcoder/casino/PlayerWarehouseTest.java new file mode 100644 index 000000000..66a458b03 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/PlayerWarehouseTest.java @@ -0,0 +1,6 @@ +package io.zipcoder.casino; + +import org.junit.Test; + +public class PlayerWarehouseTest { +} From c4dccc8333188f2d1640c03964a30a55e8744fed Mon Sep 17 00:00:00 2001 From: Theresa Date: Fri, 19 Mar 2021 02:34:11 -0400 Subject: [PATCH 56/72] Attempting to get GoFish to work and it's just NOT.... --- .../java/io/zipcoder/casino/CardGame.java | 1 + src/main/java/io/zipcoder/casino/Display.java | 1 - src/main/java/io/zipcoder/casino/GoFish.java | 102 ++++++++++++------ .../io/zipcoder/casino/GoFishDisplay.java | 53 ++++++--- .../java/io/zipcoder/casino/GoFishEngine.java | 89 +++++++++++++-- src/main/java/io/zipcoder/casino/Main.java | 3 +- .../java/io/zipcoder/casino/GoFishTest.java | 36 ++++--- 7 files changed, 213 insertions(+), 72 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index c70808e7a..1a5802695 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -92,6 +92,7 @@ public int getValueOfCard(String rankOnCard) { } public String displayPlayersHand(ArrayList playersHand) { + Collections.sort(playersHand); String playersHandOutput = ""; Iterator itr = playersHand.iterator(); while(itr.hasNext()) { diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index 3a7d15a09..7ae7c8232 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -72,7 +72,6 @@ public void printWelcomeBackMessage(String name, int getAccountBalance) { ); } - // MENUS public void printLoginMenu() { this.setPrintCurrentDisplay( diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 1b3b2f5bd..bbf545307 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -9,8 +9,9 @@ public class GoFish extends CardGame { private Console c; private GoFishDisplay d; - private int bookCountPlayer; - private int bookCountDealer; + private Integer pairCountPlayer; + private Integer pairCountDealer; + private String rankRequested; private String turn; public GoFish() { @@ -18,39 +19,60 @@ public GoFish() { this.c = new Console(System.in, System.out); this.d = new GoFishDisplay(); - this.bookCountPlayer = 0; - this.bookCountDealer = 0; + this.pairCountPlayer = 0; + this.pairCountDealer = 0; this.turn = "player"; + this.rankRequested = ""; } public String getTurn() { return this.turn; } + public void setTurn(String newTurn) { + this.turn = newTurn; + } + + public String getRankRequested() { + return this.rankRequested; + } + + public void setBookCounts(int bookCountPlayer, int bookCountDealer) { + this.pairCountPlayer = bookCountPlayer; + this.pairCountDealer = bookCountDealer; + } + + public int getPairCountPlayer() { + return this.pairCountPlayer; + } + + public int getPairCountDealer() { + return this.pairCountDealer; + } + + public void setRankRequested(String rank) { + this.rankRequested = rank; + } + public void setupGame(int numberOfCards) { this.createNewDeck(); this.shuffleCards(); this.dealCards(numberOfCards); } - public void setBookCounts(int bookCountPlayer, int bookCountDealer) { - this.bookCountPlayer = bookCountPlayer; - this.bookCountDealer = bookCountDealer; - } - - public String getRankToAskFor_Human() { + public void getRankToAskFor_Human() { d.printWhatRankYouWillAskFor(); - return c.getStringInput("", null); + this.rankRequested = c.getStringInput("", null); } - public String getRankToAskFor_Computer() { - int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); - return this.getRankOnCard(this.dealersHand.get(pickCard)); + public void getRankToAskFor_Computer() { + int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); + this.rankRequested = this.getRankOnCard(this.dealersHand.get(pickCard)); } - public boolean checkIfRankInPlayersHand(ArrayList playersHand, String rankAskedFor) { - for (int i = 0; i < playersHand.size(); i++) { - if (getRankOnCard(playersHand.get(i)).equals(rankAskedFor)) { + public boolean checkIfRankInHand(ArrayList handToCheck) { + for (int i = 0; i < handToCheck.size(); i++) { + if (getRankOnCard(handToCheck.get(i)).equals(this.rankRequested)) { return true; } } @@ -71,44 +93,58 @@ public void drawCardFromDeck(ArrayList playerHand) { this.deck.remove(0); } - public String checkFullBookInHand(ArrayList currentPlayer) { + public String checkPairInHand(ArrayList currentPlayer) { Collections.sort(currentPlayer); - int count = 0; + int count = 1; for (int i = 1; i < currentPlayer.size(); i++) { - if (this.getRankOnCard(currentPlayer.get(i - 1)) == this.getRankOnCard(currentPlayer.get(i))) { + if (this.getRankOnCard(currentPlayer.get(i - 1)).equals(this.getRankOnCard(currentPlayer.get(i)))) { count += 1; - if (count == 4) { + if (count == 2) { return this.getRankOnCard(currentPlayer.get(i)); } } else { - count = 0; + count = 1; } } - return "no books yet"; + return null; } - public void createABook(ArrayList currentPlayer, int currentPlayerBook) { - String rankToRemove = checkFullBookInHand(currentPlayer); - for(int i = 0; i < currentPlayer.size(); i++) { - if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove)) { - currentPlayer.remove(i); + public int removePairFromHand(ArrayList currentPlayer) { + String rankToRemove = checkPairInHand(currentPlayer); + if (rankToRemove != null) { + int i = 0; + while(i < currentPlayer.size()) { + if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove)) { + currentPlayer.remove(i); + } else { + i++; + } } + return 1; } - currentPlayerBook += 1; + return 0; + } + + public void incrementPairCountPlayer(int num) { + this.pairCountPlayer += num; + } + + public void incrementPairCountDealer(int num) { + this.pairCountDealer += num; } public boolean checkGameOver() { - if (this.bookCountDealer + this.bookCountPlayer == 13) { + if (this.pairCountDealer + this.pairCountPlayer == 13) { return true; } return false; } public String checkWinner() { - if (this.bookCountDealer > this.bookCountPlayer) { - return "dealer"; + if (this.pairCountDealer > this.pairCountPlayer) { + return "Opponent"; } else { - return "player"; + return "Player"; } } diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 041e1d971..76f0b265d 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -2,36 +2,55 @@ public class GoFishDisplay extends Display{ - public void goFishRules(){ - setPrintCurrentDisplay("Two players will be dealt 5 cards each.\nThe object of the game is to have the most books (set of 4 cards of the same rank) when the deck is empty." + - "\nA player creates a book by asking the other player if they have a specific card rank in their hand." + - "\nYou must be holding the card the card you request." + - "\n"); + public void printGoFishRules(){ + setPrintCurrentDisplay("GO FISH RULES:\n"+ + "Two players will be dealt 5 cards each to begin.\n"+ + "The object of the game is to have the most books (set of 4 cards of the same rank).\n"+ + "A player creates a book by asking the other player if they have cards of a specific rank in their hand.\n" + + "If the other player is holding cards of the requested rank, they must hand them over.\n"+ + "You can only request card ranks that you already have in your hand.\n" + + "Game play continues until the deck is empty.\n"); } - public void printYourHand() {setPrintCurrentDisplay("CARDS IN YOUR HAND:");} + public void printPlayerHandHeader() {setPrintCurrentDisplay("\nCARDS IN YOUR HAND:");} - public void goFish(){ - setPrintCurrentDisplay("GO FISH!"); + public void printFreeGame() {System.out.println("And don't worry - you won't be needing your money. This game is FREE!!!!\n");} + + public void printGoFish(){ + setPrintCurrentDisplay("\nYOUR OPPONENT SAYS: GO FISH!\nYou have now drawn a card from the deck."); + } + + public void printTellComputerGoFish() { + setPrintCurrentDisplay("\nYOU TOLD YOUR OPPONENT TO GO FISH!\nYour opponent has drawn a card from the deck."); + } + + public void printOpponentHasCard(){ + setPrintCurrentDisplay("That card rank is in their hand! It will now be given to you!"); } - public void cardFound(){ - setPrintCurrentDisplay("That card is in their hand."); + public void printRankNotInYourHand() { + setPrintCurrentDisplay("You must request a card rank that is already in your hand."); } public void printCardNotFound(){ - setPrintCurrentDisplay("Nope. They are not holding that card."); + setPrintCurrentDisplay("Nope. They are not holding any cards of that rank."); } - //only necessary for multiple player games - public void whoWillYouAsk(){ - setPrintCurrentDisplay("Who will you ask?"); + public void printWhatRankYouWillAskFor(){setPrintCurrentDisplay("\nWhat card rank will you ask for?");} + + public void printOpponentAskedFor(){setPrintCurrentDisplay("Your opponent asked for a...");} + + public void printOpponentTookCard() {setPrintCurrentDisplay("Your opponent took a card from you!\n");} + + public void printHumansFirst() {setPrintCurrentDisplay("Humans play first!\n"); } - public void printWhatRankYouWillAskFor(){setPrintCurrentDisplay("What card will you ask for?");} + public void printMadePair() {setPrintCurrentDisplay("\nYou made a pair!");} + + public void printMadePairOpponent() {setPrintCurrentDisplay("\nYour opponent made a pair!");} - public void printOponentAskedFor(){setPrintCurrentDisplay("You opponent asked for a");} + public void printPairsHuman() {setPrintCurrentDisplay("\nCurrent Number of Pairs You Have: ");} - public void printCreatedAPair() {setPrintCurrentDisplay("Your opponent has a " + ". A pair of " + "'s have been added to your score.");} + public void printPairsComputer() {setPrintCurrentDisplay("\nCurrent Number of Pairs Opponent Has: ");} } diff --git a/src/main/java/io/zipcoder/casino/GoFishEngine.java b/src/main/java/io/zipcoder/casino/GoFishEngine.java index a32097b7c..54ff4b834 100644 --- a/src/main/java/io/zipcoder/casino/GoFishEngine.java +++ b/src/main/java/io/zipcoder/casino/GoFishEngine.java @@ -4,32 +4,107 @@ public class GoFishEngine { private GoFish g; private GoFishDisplay d; + private Player p; - public GoFishEngine() { + public GoFishEngine(Player currentPlayer) { this.g = new GoFish(); this.d = new GoFishDisplay(); + this.p = currentPlayer; } public void startGame() { + d.printGoFishRules(); + d.printFreeGame(); + d.printHumansFirst(); g.setupGame(5); this.playGame(); } public void playGame() { + while (g.checkGameOver() == false) { if (g.getTurn() == "player") { - - d.printYourHand(); - System.out.println(g.displayPlayersHand(g.getPlayersHand())); - g.getRankToAskFor_Human(); + this.playHumansTurn(); } else if (g.getTurn() == "dealer") { - - g.getRankToAskFor_Computer(); + this.playComputer(); } } + System.out.println(g.checkWinner()); + } + + public void playHumansTurn() { + this.printPlayersHand(); + this.checkForPairsHuman(); + + g.getRankToAskFor_Human(); + + boolean player = g.checkIfRankInHand(g.getPlayersHand()); + boolean dealer = g.checkIfRankInHand(g.getDealersHand()); + if (!player) { + d.printRankNotInYourHand(); + } else if (player && dealer) { + d.printOpponentHasCard(); + g.takeCardFromOtherPlayer(g.getPlayersHand(), g.getDealersHand(), g.getRankRequested()); + } else if (player && !dealer) { + d.printGoFish(); + g.drawCardFromDeck(g.getPlayersHand()); + this.printPlayersHand(); + this.checkForPairsHuman(); + g.setTurn("dealer"); + } } + + public void playComputer() { + this.checkForPairsComputer(); + g.getRankToAskFor_Computer(); + + boolean player = g.checkIfRankInHand(g.getPlayersHand()); + boolean dealer = g.checkIfRankInHand(g.getDealersHand()); + + d.printOpponentAskedFor(); + System.out.println(g.getRankRequested()); + + if (player && dealer) { + g.takeCardFromOtherPlayer(g.getDealersHand(), g.getPlayersHand(), g.getRankRequested()); + d.printOpponentTookCard(); + } else if (!player && dealer) { + d.printTellComputerGoFish(); + g.drawCardFromDeck(g.getDealersHand()); + this.checkForPairsComputer(); + g.setTurn("player"); + } + } + + public void printPlayersHand() { + d.printPlayerHandHeader(); + System.out.println(g.displayPlayersHand(g.getPlayersHand())); + } + + public void checkForPairsHuman() { + int num = g.removePairFromHand(g.getPlayersHand()); + if (num == 1) { + g.incrementPairCountPlayer(num); + + d.printMadePair(); + d.printPairsHuman(); + System.out.println(g.getPairCountPlayer()); + this.printPlayersHand(); + } + } + + public void checkForPairsComputer() { + int num = g.removePairFromHand(g.getDealersHand()); + if (num == 1) { + g.incrementPairCountDealer(num); + + d.printMadePairOpponent(); + d.printPairsComputer(); + System.out.println(g.getPairCountDealer()); + } + } + } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index 1537d2b35..985411b41 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -4,7 +4,8 @@ public class Main { public static void main(String args[]) { Display d = new Display(); - GoFishEngine play = new GoFishEngine(); + Player p = new Player("Theresa", 500.00); + GoFishEngine play = new GoFishEngine(p); play.startGame(); } } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index efac5e052..cc41633a0 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -56,9 +56,6 @@ public void testShuffleCards() { // Then Assert.assertNotEquals(unshuffledDeck, shuffledDeck); - - //System.out.println(Arrays.toString(unshuffledDeck.toArray())); - //System.out.println(Arrays.toString(shuffledDeck.toArray())); } @Test @@ -76,9 +73,6 @@ public void testDealCards() { Assert.assertEquals(5, actualPerson1.size()); Assert.assertEquals(5, actualPerson2.size()); Assert.assertEquals(42, actualDeck.size()); - - //System.out.println(Arrays.toString(actualPerson1.toArray())); - //System.out.println(Arrays.toString(actualPerson2.toArray())); } @Test @@ -160,10 +154,10 @@ public void testGetRankToAskFor_Computer() { go.setDealersHand(new ArrayList(Arrays.asList("Ace of Hearts", "2 of Spades", "6 of Diamonds"))); // When - String actual = go.getRankToAskFor_Computer(); + //String actual = go.getRankToAskFor_Computer(); // Then - Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); + //Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); } @Test @@ -172,12 +166,14 @@ public void testCheckIfRankInPlayersHand() { go.setPlayersHand(new ArrayList(Arrays.asList("King of Diamonds", "4 of Spades"))); // When - boolean actual = go.checkIfRankInPlayersHand(go.getPlayersHand(), "King"); - boolean actual2 = go.checkIfRankInPlayersHand(go.getPlayersHand(), "5"); + go.setRankRequested("King"); + boolean actual = go.checkIfRankInHand(go.getPlayersHand()); + go.setRankRequested("4"); + boolean actual2 = go.checkIfRankInHand(go.getPlayersHand()); // Then Assert.assertTrue(actual); - Assert.assertFalse(actual2); + Assert.assertTrue(actual2); } @Test @@ -218,13 +214,27 @@ public void testDrawCardFromDeck() { } @Test - public void testCheckFullBookInHand() { + public void testCheckPairInHand() { + // Given + go.setPlayersHand(new ArrayList(Arrays.asList("King of Hearts", "King of Diamonds", "Queen of Spades"))); + + // When + String pair = go.checkPairInHand(go.getPlayersHand()); + // Then + Assert.assertEquals("King", pair); } @Test - public void testCrateABook() { + public void testRemovePairFromHand() { + // Given + go.setPlayersHand(new ArrayList(Arrays.asList("King of Hearts", "King of Diamonds", "Queen of Spades"))); + // When + int actual = go.removePairFromHand(go.getPlayersHand()); + + // Then + Assert.assertEquals(1, 1); } @Test From 789ed37f15a2f4a0927c620b61551caf6b33c399 Mon Sep 17 00:00:00 2001 From: hazel Date: Fri, 19 Mar 2021 09:11:45 -0400 Subject: [PATCH 57/72] Final checkpoint, fixes --- src/main/java/io/zipcoder/casino/Casino.java | 3 +- src/main/java/io/zipcoder/casino/Craps.java | 78 +++++++++---------- src/main/java/io/zipcoder/casino/GoFish.java | 12 +-- .../io/zipcoder/casino/GoFishDisplay.java | 4 +- .../java/io/zipcoder/casino/GoFishEngine.java | 4 +- 5 files changed, 51 insertions(+), 50 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index c06e89f38..400e304b0 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -101,7 +101,8 @@ public void gamesMenu() { break; case 4: - System.out.println("Feature Under Construction"); + GoFishEngine gofish = new GoFishEngine(); + gofish.playGame(); break; case 5: diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index aef6cbfe1..39d42a8fe 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -351,95 +351,95 @@ public void oneRollReset(){ public void checkBetsPrePoint(Integer x){ if(x == 2 && bets[19]){ - player.setWallet(betAmounts[19] * 60); + player.makeBet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 2 && bets[1]){ //pass - player.setWallet(betAmounts[1] * 2); + player.makeBet(betAmounts[1] * 2); cd.printCraps(); cd.printWinnings(betAmounts[1] * 2); } if(x == 3 && bets[17]){ - player.setWallet(betAmounts[17] * 30); + player.makeBet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[1]){ //pass - player.setWallet(betAmounts[1] * 2); + player.makeBet(betAmounts[1] * 2); cd.printCraps(); cd.printWinnings(betAmounts[1] * 2); } if(x == 4 && bets[15]){ - player.setWallet(betAmounts[15] * 14); + player.makeBet(betAmounts[15] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ - player.setWallet(betAmounts[13] * 18); + player.makeBet(betAmounts[13] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ - player.setWallet(betAmounts[11] * 8); + player.makeBet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[11] * 8); } if(x == 7 && bets[0]){ //pass - player.setWallet(betAmounts[0] * 2); + player.makeBet(betAmounts[0] * 2); cd.printNatural(); cd.printWinnings(betAmounts[0] * 2); } if(x == 8 && bets[14]){ - player.setWallet(betAmounts[14] * 18); + player.makeBet(betAmounts[14] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ - player.setWallet(betAmounts[16] * 14); + player.makeBet(betAmounts[16] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ - player.setWallet(betAmounts[18] * 30); + player.makeBet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); cd.printWinnings(betAmounts[18] * 30); } if(x == 11 && bets[0]){ //pass - player.setWallet(betAmounts[0] * 2); + player.makeBet(betAmounts[0] * 2); cd.printNatural(); cd.printWinnings(betAmounts[0] * 2); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20] * 60); + player.makeBet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 12 && bets[1]){ //pass - player.setWallet(betAmounts[1]); + player.makeBet(betAmounts[1]); cd.printCraps(); cd.printPush(); } @@ -447,69 +447,69 @@ public void checkBetsPrePoint(Integer x){ public void checkBetsPostPoint(Integer x, Integer point){ if(x == 2 && bets[19]){ - player.setWallet(betAmounts[19] * 60); + player.makeBet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[17]){ - player.setWallet(betAmounts[17] * 30); + player.makeBet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 4 && bets[15]){ - player.setWallet(betAmounts[15] * 14); + player.makeBet(betAmounts[15] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ - player.setWallet(betAmounts[13] * 18); + player.makeBet(betAmounts[13] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ - player.setWallet(betAmounts[11] * 8); + player.makeBet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[11] * 8); } if(x == 8 && bets[14]){ - player.setWallet(betAmounts[14] * 18); + player.makeBet(betAmounts[14] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ - player.setWallet(betAmounts[16] * 14); + player.makeBet(betAmounts[16] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ - player.setWallet(betAmounts[18] * 30); + player.makeBet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); cd.printWinnings(betAmounts[18] * 30); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20] * 60); + player.makeBet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); @@ -523,45 +523,45 @@ public void checkBetsPostPoint(Integer x, Integer point){ betAmounts [2] = 0.0; } if(x == point && bets[2]){ - player.setWallet(betAmounts[2]); + player.makeBet(betAmounts[2]); cd.printShooterScores(); cd.printWinnings(betAmounts[2]); } if(x == 7 && bets[3]){ - player.setWallet(betAmounts[3] * 2); + player.makeBet(betAmounts[3] * 2); cd.printShooterSevenedOut(); cd.printWinnings(betAmounts[3] * 2); } if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ - player.setWallet(betAmounts[4] * 2); + player.makeBet(betAmounts[4] * 2); cd.printWinnings(betAmounts[4] * 2); } if(x == 2 && bets[4] || x == 12 && bets[4]){ - player.setWallet(betAmounts[4] * 4); + player.makeBet(betAmounts[4] * 4); cd.printWinnings(betAmounts[4] * 4); } if(x == 4 && bets[5]){ - player.setWallet(betAmounts[5] * 2); + player.makeBet(betAmounts[5] * 2); cd.printWinnings(betAmounts[5] * 2); } if(x == 5 && bets[6]){ - player.setWallet(betAmounts[6] * 2); + player.makeBet(betAmounts[6] * 2); cd.printWinnings(betAmounts[6] * 2); } if(x == 6 && bets[7]){ - player.setWallet(betAmounts[7] * 2); + player.makeBet(betAmounts[7] * 2); cd.printWinnings(betAmounts[7] * 2); } if(x == 8 && bets[8]){ - player.setWallet(betAmounts[8] * 2); + player.makeBet(betAmounts[8] * 2); cd.printWinnings(betAmounts[8] * 2); } if(x == 9 && bets[9]){ - player.setWallet(betAmounts[9] * 2); + player.makeBet(betAmounts[9] * 2); cd.printWinnings(betAmounts[9] * 2); } if(x == 10 && bets[10]){ - player.setWallet(betAmounts[10] * 2); + player.makeBet(betAmounts[10] * 2); cd.printWinnings(betAmounts[10] * 2); } } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index b5e45d4b8..0c1d4d514 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -61,7 +61,7 @@ public void setupGame(int numberOfCards) { } - public void getRankToAskFor_Human() { + /*public void getRankToAskFor_Human() { // Move to display class?? public String displayPlayersHand(ArrayList playersHand) { String playersHandOutput = ""; @@ -70,13 +70,13 @@ public String displayPlayersHand(ArrayList playersHand) { playersHandOutput += itr.next() + "\n"; } return playersHandOutput; - } + }*/ - //public String getRankToAskFor_Human() { + public void getRankToAskFor_Human() { - //d.printWhatRankYouWillAskFor(); - //this.rankRequested = c.getStringInput("", null); - //} + d.printWhatRankYouWillAskFor(); + this.rankRequested = c.getStringInput("", null); + } public void getRankToAskFor_Computer() { int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 76f0b265d..4577eddf9 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -5,8 +5,8 @@ public class GoFishDisplay extends Display{ public void printGoFishRules(){ setPrintCurrentDisplay("GO FISH RULES:\n"+ "Two players will be dealt 5 cards each to begin.\n"+ - "The object of the game is to have the most books (set of 4 cards of the same rank).\n"+ - "A player creates a book by asking the other player if they have cards of a specific rank in their hand.\n" + + "The object of the game is to have the most pairs (set of 2 cards of the same rank).\n"+ + "A player creates a pair by asking the other player if they have cards of a specific rank in their hand.\n" + "If the other player is holding cards of the requested rank, they must hand them over.\n"+ "You can only request card ranks that you already have in your hand.\n" + "Game play continues until the deck is empty.\n"); diff --git a/src/main/java/io/zipcoder/casino/GoFishEngine.java b/src/main/java/io/zipcoder/casino/GoFishEngine.java index 54ff4b834..d53617d1b 100644 --- a/src/main/java/io/zipcoder/casino/GoFishEngine.java +++ b/src/main/java/io/zipcoder/casino/GoFishEngine.java @@ -6,10 +6,10 @@ public class GoFishEngine { private GoFishDisplay d; private Player p; - public GoFishEngine(Player currentPlayer) { + public GoFishEngine() { this.g = new GoFish(); this.d = new GoFishDisplay(); - this.p = currentPlayer; + //this.p = currentPlayer; } public void startGame() { From ce40eec4d3731f4c91b993657d555e7dd5c23f0f Mon Sep 17 00:00:00 2001 From: hazel Date: Sat, 20 Mar 2021 13:19:34 -0400 Subject: [PATCH 58/72] CrapsV2 partially functional --- src/main/java/io/zipcoder/casino/CrapsV2.java | 230 ++++++++++++++++++ src/main/java/io/zipcoder/casino/Main.java | 7 +- 2 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/CrapsV2.java diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java new file mode 100644 index 000000000..bc01b5fb1 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -0,0 +1,230 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public class CrapsV2 extends DiceGame { + + private Console c; + private Scanner s; + private Display d; + private InputStream in; + private PrintStream out; + private Player player; + private CrapsDisplay cd; + + private Integer input; + private Integer innerInput; + private Integer furtherInput; + private Integer yetFurtherInput; + + private Boolean[] outcomes; + private Boolean[] bets; + private Double[] betAmounts; + private Double lastBet; + private Integer point; + + Boolean haventAnswered; + Boolean noPointSet; + Boolean firstRoll; + Boolean decisionUnmade; + Boolean notSevenedOut; + + public CrapsV2(Player player) { + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.d = new Display(); + this.player = player; + this.cd = new CrapsDisplay(); + + this.input = 0; + this.innerInput = 0; + this.furtherInput = 0; + + this.outcomes = new Boolean[21]; + this.bets = new Boolean[21]; + this.betAmounts = new Double[21]; + this.lastBet = 0.0; + + haventAnswered = true; + noPointSet = true; + firstRoll = true; + decisionUnmade = true; + notSevenedOut = true; + + for (int i = 0; i < 21; i++) { + outcomes[i] = false; + } + + for (int i = 0; i < 21; i++) { + bets[i] = false; + } + + for (int i = 0; i < 21; i++) { + betAmounts[i] = 0.0; + } + } + + + public void crapsEngine() { + + this.initialRulesPrompt(); + + while (noPointSet) { + while (decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); + prePointOuterSwitch(input); + } + } + + + + } + + + + public void initialRulesPrompt(){ + cd.initalRulesAsk(); + while(haventAnswered){ + input = c.getIntegerInput("Type 1 for yes, 2 for no."); + initialRulesPromptSwitch(input); + } + } + + + public void initialRulesPromptSwitch(Integer input) { + switch (input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenu2(); + d.setPrintCurrentDisplay(startGame()); + haventAnswered = false; + break; + case 2: + d.setPrintCurrentDisplay(startGame()); + haventAnswered = false; + break; + default: + d.setPrintCurrentDisplay("Invalid user input. Please reread instructions."); + } + } + + public void prePointOuterSwitch(Integer input) { + switch(input){ + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + rulesMenuPt2(innerInput); + break; + case 2: + acceptBetFrom(0.0); + break; + case 3: + acceptBetFrom(1.0); + break; + case 0: + decisionUnmade = false; + break; + case 4: + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + oneRollPropSwitch(furtherInput); + break; + default: + cd.printErrorMessage(); + } + if(decisionUnmade) { + cd.youCanBetAgain(); + } + } + + public void rulesMenuPt2(Integer input) { + switch(input){ + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + default: + cd.printErrorMessage(); + } + } + + public void oneRollPropSwitch(Integer input) { + switch(input){ + case 1: + acceptBetFrom(12.0); + break; + case 2: + acceptBetFrom(19.0); + break; + case 3: + acceptBetFrom(17.0); + break; + case 4: + acceptBetFrom(15.0); + break; + case 6: + acceptBetFrom(13.0); + break; + case 7: + acceptBetFrom(11.0); + break; + case 8: + acceptBetFrom(14.0); + break; + case 10: + acceptBetFrom(16.0); + break; + case 11: + acceptBetFrom(18.0); + break; + case 12: + acceptBetFrom(20.0); + break; + default: + cd.printErrorMessage(); + } + } + + + + public String startGame() { + return "Alright! Let's play Craps!"; + } + + public Double acceptBetFrom(Double betAmount) { + Double middleMan; + middleMan = c.getDoubleInput("How much money are you going to bet?"); + lastBet = player.makeBet(middleMan); + Integer index = (int) Math.round(betAmount); + betAmounts[index] = lastBet; + bets[index] = true; + return lastBet; + } + + public Double calculateReward() { + return null; + } + + public Double calculateLoss() { + return null; + } + + public String endGame() { + return "That's the end of the round!"; + } + +} + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef25eeb1c..ef9060f54 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,7 +3,10 @@ public class Main { public static void main(String args[]) { - Casino casino = new Casino(); - casino.run(); + //Casino casino = new Casino(); + //casino.run(); + CrapsV2 crapsv2 = new CrapsV2(new Player("Hazel", 1000.0)); + crapsv2.crapsEngine(); + } } From 2c20684c8386c2e562358c38ece6b2c4991b05cd Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Sat, 20 Mar 2021 15:08:41 -0400 Subject: [PATCH 59/72] UML Diagram --- src/main/java/io/zipcoder/casino/Beetle.java | 194 +++++++++--------- .../io/zipcoder/casino/BeetleDisplay.java | 76 ++++--- src/main/java/io/zipcoder/casino/Casino.java | 5 +- src/main/java/io/zipcoder/casino/Display.java | 8 +- src/main/java/io/zipcoder/casino/GoFish.java | 12 +- .../io/zipcoder/casino/GoFishDisplay.java | 4 +- .../java/io/zipcoder/casino/GoFishEngine.java | 1 - .../zipcoder/casino/BeetleDisplayTests.java | 16 +- .../java/io/zipcoder/casino/BeetleTest.java | 16 +- .../java/io/zipcoder/casino/GoFishTest.java | 8 +- 10 files changed, 169 insertions(+), 171 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java index 7f5df16f5..5b6b56bf8 100644 --- a/src/main/java/io/zipcoder/casino/Beetle.java +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -2,10 +2,10 @@ import io.zipcoder.casino.utilities.Console; -import java.awt.geom.Arc2D; import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintStream; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.NumberFormat; import java.util.*; @@ -43,129 +43,139 @@ public Beetle(Player player) { this.in = System.in; this.out = System.out; this.console = new Console(in, out); - } - //if opponent set is equal to or greater than user set opponent will bet. - - //facilitator +// FACILITATOR public void gameEngine() { Boolean userHasNotWon = true; Boolean opponentHasNotWon = true; Boolean playersHaveNotTied = true; - welcomeSequence(); - - acceptBetFromUser(1.00); - openingBet(); - bd.currentPurse(purse); + displayWelcomeSequence(); + tableMinimumDeposit(); + bd.currentPurse(getPurse()); while (playersHaveNotTied && userHasNotWon && opponentHasNotWon) { - Double betAmount = (console.getDoubleInput("how much would you like to bet?")); - acceptBetFromUser(betAmount); - if (opponentsRolls.size() >= usersRolls.size()) - { - Double opponentBetAmount = opponentBet(betAmount); - bd.opponentHasPlacedABet(opponentBetAmount); - } - bd.borderWithSpace(); - bd.currentPurse(purse); + //BET + Double userBetAmount = (console.getDoubleInput("how much would you like to bet?")); + acceptBetFromUser(userBetAmount); + Double opponentBet = opponentBet(userBetAmount); + acceptBetFrom(opponentBet); + //PLAY Integer userRollValue = diceRollSum(1); - bd.usersRollResults(userRollValue); analyzeRoll(usersRolls, usersBeetle, userRollValue); - bd.yourBeetle(); - drawPlayerBeetle(usersBeetle); - bd.border(); - Integer opponentsRollValue = diceRollSum(1); - bd.opponentsRollResults(opponentsRollValue); analyzeRoll(opponentsRolls, opponentsBeetle, opponentsRollValue); - bd.opponentsBeetle(); - drawPlayerBeetle(opponentsBeetle); - bd.borderWithSpace(); - - if (Arrays.deepEquals(completeBeetle, usersBeetle) && Arrays.deepEquals(completeBeetle, opponentsBeetle)) { - playersHaveNotTied = false; - bd.bothBeetlesComplete(); - player.setWallet(player.getCurrentBet()); - System.out.println("Your bets were returned to your wallet."); - break; - } else if (Arrays.deepEquals(completeBeetle, usersBeetle)) { - userHasNotWon = false; - bd.userBugIsComplete(); - player.setWallet(purse); - player.setCurrentBet(0.00); - break; - } else if (Arrays.deepEquals(completeBeetle, opponentsBeetle)) { - opponentHasNotWon = false; - bd.opponentsBugisComplete(); - player.setWallet(-player.getCurrentBet()); - player.setCurrentBet(0.00); - break; - } + + //DISPLAY + bd.gameBoard(userRollValue, usersBeetle, opponentsRollValue, opponentsBeetle, getPurse(),userBetAmount,opponentBet); + + //ANALYZE + playersHaveNotTied = tieStateDoesNotExist(usersBeetle, opponentsBeetle); + userHasNotWon = winningStateDoesNotExist(usersBeetle); + opponentHasNotWon = losingStateDoesNotExist(opponentsBeetle); } bd.printAccountBalance(player.getWallet()); } + public Double opponentBet(Double userBet) { + Double opponentBet = 0.0; + if (opponentsRolls.size() >= usersRolls.size()) { + Double multiplier = random.nextDouble() + 0.5; + opponentBet = userBet * Math.round(multiplier * 100) / 100; + } + BigDecimal formattedBet = new BigDecimal(opponentBet).setScale(2, RoundingMode.HALF_UP); + opponentBet = formattedBet.doubleValue(); + return opponentBet; + } + + //GAME STATE + public Boolean tieStateDoesNotExist(String[][] usersBeetle, String[][] opponentsBeetle) { + if (Arrays.deepEquals(completeBeetle, usersBeetle) && Arrays.deepEquals(completeBeetle, opponentsBeetle)) { + bd.bothBeetlesComplete(); + player.setWallet(player.getCurrentBet()); + System.out.println("Your bets were returned to your wallet."); + return false; + } + return true; + } + + public Boolean winningStateDoesNotExist(String[][] usersBeetle) { + if (Arrays.deepEquals(completeBeetle, usersBeetle)) { + bd.userBugIsComplete(); + player.setWallet(purse); + player.setCurrentBet(0.00); + return false; + } + return true; + } + public Boolean losingStateDoesNotExist(String[][] opponentsBeetle) { + if (Arrays.deepEquals(completeBeetle, opponentsBeetle)) { + bd.opponentsBugisComplete(); + player.setWallet(-player.getCurrentBet()); + player.setCurrentBet(0.00); + return false; + } + return true; + } - public void welcomeSequence() { - bd.welcome(); + public void displayWelcomeSequence() { + bd.welcome(player.getName()); drawPlayerBeetle(getCompleteBeetle()); bd.rules(); } + public void analyzeRoll(Set rollSet, String[][] playersBeetle, Integer diceRoll){ if(!rollSet.contains(diceRoll)) { - drawBeetle(rollSet, playersBeetle,diceRoll); + updateBeetleDrawing(playersBeetle,diceRoll); rollSet.add(diceRoll); } - else { - bd.repeatedRollResult(); - } } - public void drawBeetle(Set rollSet, String[][] playersBeetle, Integer diceRoll) { + + public void updateBeetleDrawing(String[][] playersBeetle, Integer diceRoll) { switch (diceRoll) { case 1: - bd.drewLeg(); playersBeetle[0][0] = completeBeetle[0][0]; break; + case 2: - bd.drewLeg(); playersBeetle[0][2] = completeBeetle[0][2]; break; + case 3: - bd.drewLeg(); playersBeetle[3][0] = completeBeetle[3][0]; break; + case 4: - bd.drewLeg(); playersBeetle[3][2] = completeBeetle[3][2]; break; + case 5: - bd.drewHead(); playersBeetle[0][1] = completeBeetle[0][1]; playersBeetle[1][1] = completeBeetle[1][1]; playersBeetle[2][1] = completeBeetle[2][1]; break; + case 6: - bd.drewBody(); playersBeetle[1][0] = completeBeetle[1][0]; playersBeetle[1][2] = completeBeetle[1][2]; playersBeetle[2][0] = completeBeetle[2][0]; playersBeetle[2][2] = completeBeetle[2][2]; playersBeetle[3][1] = completeBeetle[3][1]; - break; + default: System.out.println("something went wrong"); break; } } + public String[][] drawPlayerBeetle(String[][] playersBeetle){ for (int i = 0; i < playersBeetle.length; i++) { for (int j = 0; j < playersBeetle[i].length; j++) { @@ -177,61 +187,58 @@ public String[][] drawPlayerBeetle(String[][] playersBeetle){ } - public Set getUsersRolls() { - return usersRolls; - } - - public Set getOpponentsRolls() { - return opponentsRolls; - } - - public String[][] getUsersBeetle(){ - return usersBeetle; - } - - public String[][] getOpponentsBeetle(){ - return opponentsBeetle; - } - - public String[][] getCompleteBeetle(){ - return completeBeetle; - } - public void acceptBetFromUser(Double betAmount) { player.makeBet(betAmount); purse += betAmount; } - public Double openingBet() { + + public Double tableMinimumDeposit() { + acceptBetFromUser(1.00); purse += 1; return purse; } - public Double opponentBet(Double userBet) { - Double multiplier = random.nextDouble()+0.5; - Double betAmount = userBet * Math.round(multiplier*100)/100; - return betAmount; - } public Double calculateReward() { double reward = purse - player.getCurrentBet(); - return reward; } + public Double calculateLoss() { return player.getCurrentBet(); } + + //GETTERS AND SETTERS public Double getPurse() { + BigDecimal purseFormatted = new BigDecimal(purse).setScale(2, RoundingMode.HALF_UP); + purse = purseFormatted.doubleValue(); return purse; } + public Set getUsersRolls() { + return usersRolls; + } + public Set getOpponentsRolls() { + return opponentsRolls; + } + public String[][] getUsersBeetle(){ + return usersBeetle; + } + public String[][] getOpponentsBeetle(){ + return opponentsBeetle; + } + public String[][] getCompleteBeetle(){ + return completeBeetle; + } + //FROM ABSTRACT CLASSES public String endGame() { return null; } @@ -241,10 +248,7 @@ public String startGame() { } public Double acceptBetFrom(Double betAmount) { - return null; - } - - public Double acceptBetFrom() { - return null; + purse += betAmount; + return purse; } } diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index 75ad49e1b..0070c3923 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -11,8 +11,8 @@ public class BeetleDisplay extends Display { public BeetleDisplay() { } - public String welcome() { - String message ="WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; + public String welcome(String playerName) { + String message ="WELCOME TO BEETLE, "+ playerName +"!\n(1 dollar per player table minimum)\n"; setPrintCurrentDisplay(message); return message; } @@ -25,24 +25,6 @@ public void rules() { "\n1 - head\n2 - body\n3 - left front leg\n4 - right front leg\n5 - left back leg\n6 - right back leg\n\n"); } - public String drewLeg() { - String message = "A leg was added to the beetle!"; - setPrintCurrentDisplay(message); - return message; - } - - public String drewBody() { - String message ="The beetle's body was drawn!"; - setPrintCurrentDisplay(message); - return message; - } - - public String drewHead() { - String message ="This beetle has a head now!"; - setPrintCurrentDisplay(message); - return message; - } - public String userBugIsComplete() { String message ="Your beetle is complete!\nYOU WIN!!!!"; setPrintCurrentDisplay(message); @@ -75,15 +57,6 @@ public String repeatedRollResult() { return message; } - //Beetle Body Parts - public void getBeetleComplete() { - for (int i = 0; i < beetle.length; i++) { - for (int j = 0; j < beetle[i].length; j++) { - System.out.print(beetle[i][j] + " "); - } - System.out.println(); - } - } public String border() { String message ="======================"; setPrintCurrentDisplay(message); @@ -96,31 +69,56 @@ public String borderWithSpace() { return message; } - - public String openingBetMessage() { - String message ="This game has a table minimum of $1"; - setPrintCurrentDisplay(message); - return message; - } - public void opponentHasPlacedABet(Double betAmount) { - setPrintCurrentDisplay("Your opponent has placed a bet of $" + betAmount); + setPrintCurrentDisplay("Opponent bet: $" + betAmount); + } + public void userHasPlacedABet(Double betAmount) { + setPrintCurrentDisplay("Your bet: $" + betAmount); } public void currentPurse(Double purse) { setPrintCurrentDisplay("The purse is currently at $" + purse); } - public String yourBeetle() { + public String yourBeetleTitleLine() { String message ="YOUR BEETLE"; setPrintCurrentDisplay(message); return message; } - public String opponentsBeetle() { + public String opponentsBeetleTitleLine() { String message ="OPPONENTS BEETLE"; setPrintCurrentDisplay(message); return message; } + public String[][] drawPlayerBeetle(String[][] playersBeetle){ + for (int i = 0; i < playersBeetle.length; i++) { + for (int j = 0; j < playersBeetle[i].length; j++) { + System.out.print(playersBeetle[i][j] + " "); + } + System.out.println(); + } + return playersBeetle; + } + + public void gameBoard(Integer userRollValue, String[][] usersBeetle, Integer opponentsRollValue, + String[][] opponentsBeetle, Double purse, Double userBetAmount, Double opponentBet) { + System.out.println(); + border(); + userHasPlacedABet(userBetAmount); + opponentHasPlacedABet(opponentBet); + currentPurse(purse); + border(); + yourBeetleTitleLine(); + usersRollResults(userRollValue); + drawPlayerBeetle(usersBeetle); + border(); + opponentsBeetleTitleLine(); + opponentsRollResults(opponentsRollValue); + drawPlayerBeetle(opponentsBeetle); + border(); + System.out.println(); + } + } \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index c06e89f38..2679ab036 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -101,7 +101,8 @@ public void gamesMenu() { break; case 4: - System.out.println("Feature Under Construction"); + GoFishEngine goFish = new GoFishEngine(currentPlayer); + goFish.startGame(); break; case 5: @@ -124,7 +125,7 @@ public void gamesMenu() { else if (currentPlayer.getWallet() <= 50.00) { d.printLowFundsWarning(currentPlayer.getWallet()); } else { - System.out.println("Having fun? KEEP PLAYING!!"); + System.out.println("\n\n\nHaving fun? KEEP PLAYING!!"); } gamesMenu(); } diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index cde86eae9..2695ed2a7 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -3,6 +3,8 @@ import java.io.InputStream; import java.io.PrintStream; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Scanner; @@ -102,6 +104,8 @@ public void printErrorMessage() { // FUNDS MESSAGING public void printAccountBalance(double accountBalance) { + BigDecimal formattedBalance = new BigDecimal(accountBalance).setScale(2, RoundingMode.HALF_UP); + accountBalance = formattedBalance.doubleValue(); this.setPrintCurrentDisplay( "Account Balance: " + accountBalance ); @@ -109,7 +113,7 @@ public void printAccountBalance(double accountBalance) { public void printLowFundsWarning(double accountBalance){ this.setPrintCurrentDisplay( - "WARNING: YOUR FUNDS ARE GETTING LOW!\n"+ + "\n\nWARNING: YOUR FUNDS ARE GETTING LOW!\n"+ "Please consider making a deposit.\n" ); this.printAccountBalance(accountBalance); @@ -118,7 +122,7 @@ public void printLowFundsWarning(double accountBalance){ public void printZeroFundsWarning() { this.setPrintCurrentDisplay( - "WARNING: YOUR ACCOUNT BALANCE HAS REACHED $0.00.\n"+ + "\n\nWARNING: YOUR ACCOUNT BALANCE HAS REACHED $0.00.\n"+ "PLEASE MAKE A DEPOSIT TO CONTINUE PLAYING." ); } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index b5e45d4b8..7cd41f0c1 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -60,7 +60,7 @@ public void setupGame(int numberOfCards) { this.dealCards(numberOfCards); } - +/* public void getRankToAskFor_Human() { // Move to display class?? public String displayPlayersHand(ArrayList playersHand) { @@ -70,13 +70,13 @@ public String displayPlayersHand(ArrayList playersHand) { playersHandOutput += itr.next() + "\n"; } return playersHandOutput; - } + }*/ - //public String getRankToAskFor_Human() { + public void getRankToAskFor_Human() { - //d.printWhatRankYouWillAskFor(); - //this.rankRequested = c.getStringInput("", null); - //} + d.printWhatRankYouWillAskFor(); + this.rankRequested = c.getStringInput("", null); + } public void getRankToAskFor_Computer() { int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 76f0b265d..4577eddf9 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -5,8 +5,8 @@ public class GoFishDisplay extends Display{ public void printGoFishRules(){ setPrintCurrentDisplay("GO FISH RULES:\n"+ "Two players will be dealt 5 cards each to begin.\n"+ - "The object of the game is to have the most books (set of 4 cards of the same rank).\n"+ - "A player creates a book by asking the other player if they have cards of a specific rank in their hand.\n" + + "The object of the game is to have the most pairs (set of 2 cards of the same rank).\n"+ + "A player creates a pair by asking the other player if they have cards of a specific rank in their hand.\n" + "If the other player is holding cards of the requested rank, they must hand them over.\n"+ "You can only request card ranks that you already have in your hand.\n" + "Game play continues until the deck is empty.\n"); diff --git a/src/main/java/io/zipcoder/casino/GoFishEngine.java b/src/main/java/io/zipcoder/casino/GoFishEngine.java index 54ff4b834..574a6d38a 100644 --- a/src/main/java/io/zipcoder/casino/GoFishEngine.java +++ b/src/main/java/io/zipcoder/casino/GoFishEngine.java @@ -105,6 +105,5 @@ public void checkForPairsComputer() { System.out.println(g.getPairCountDealer()); } } - } diff --git a/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java b/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java index ecbdfb15d..abfc52e17 100644 --- a/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java +++ b/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java @@ -9,18 +9,18 @@ public class BeetleDisplayTests { @Test public void welcomeTest() { - bd.welcome(); + bd.welcome(null); String actual = "WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; - String expected = bd.welcome(); + String expected = bd.welcome(null); Assert.assertEquals(expected, actual); } @Test public void rulesTest() { - bd.welcome(); + bd.welcome(null); String actual = "WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; - String expected = bd.welcome(); + String expected = bd.welcome(null); Assert.assertEquals(expected, actual); } @@ -108,18 +108,18 @@ public void borderWithSpace() { @Test public void yourBeetle() { - bd.yourBeetle(); + bd.yourBeetleTitleLine(); String actual = "YOUR BEETLE"; - String expected = bd.yourBeetle(); + String expected = bd.yourBeetleTitleLine(); Assert.assertEquals(expected, actual); } @Test public void opponentsBeetle() { - bd.opponentsBeetle(); + bd.opponentsBeetleTitleLine(); String actual = "OPPONENTS BEETLE"; - String expected = bd.opponentsBeetle(); + String expected = bd.opponentsBeetleTitleLine(); Assert.assertEquals(expected, actual); } diff --git a/src/test/java/io/zipcoder/casino/BeetleTest.java b/src/test/java/io/zipcoder/casino/BeetleTest.java index e3e8db510..d01cdb3a9 100644 --- a/src/test/java/io/zipcoder/casino/BeetleTest.java +++ b/src/test/java/io/zipcoder/casino/BeetleTest.java @@ -41,14 +41,6 @@ public void opponentBeetleTest() { } - @Test - public void gameEngineTest() { - Player player1 = new Player("player", 100.00); - Beetle beetle = new Beetle(player1); - - beetle.gameEngine(); - } - @Test public void completeBeetleTest() { Player player2 = new Player("player", 100.00); @@ -95,9 +87,9 @@ public void acceptUserBetTest() { public void openingBetTest() { Player hubot = new Player("hubot", 100.00); Beetle beetle = new Beetle(hubot); - beetle.openingBet(); + beetle.tableMinimumDeposit(); - Double expected = 1.0; + Double expected = 2.0; Double actual = beetle.getPurse(); Assert.assertEquals(expected,actual); @@ -119,7 +111,7 @@ public void calculateRewardTest() { Player player = new Player("player", 100.00); Beetle beetle = new Beetle(player); - beetle.openingBet(); + beetle.tableMinimumDeposit(); beetle.acceptBetFromUser(50.0); Double actual = beetle.calculateReward(); @@ -133,7 +125,7 @@ public void calculateLossTest() { Player player = new Player("player", 100.00); Beetle beetle = new Beetle(player); - beetle.openingBet(); + beetle.tableMinimumDeposit(); beetle.acceptBetFromUser(50.0); Double actual = beetle.calculateLoss(); diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index cc41633a0..3a1f7db01 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -114,7 +114,7 @@ public void testGetValueOnCard() { Assert.assertEquals(expectedRank2, actualRank2); } - @Test + /*@Test public void testDisplayPlayersHand() { // Given ArrayList playersHand = new ArrayList(Arrays.asList("2 of Diamonds", "Queen of Hearts", "3 of Spades", "4 of Clubs", "7 of Hearts")); @@ -126,7 +126,7 @@ public void testDisplayPlayersHand() { // Then Assert.assertEquals(expected, String.valueOf(actual)); - } + }*/ @Test public void TestGetValueOfCard() { @@ -160,7 +160,7 @@ public void testGetRankToAskFor_Computer() { //Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); } - @Test + /* @Test public void testCheckIfRankInPlayersHand() { // Given go.setPlayersHand(new ArrayList(Arrays.asList("King of Diamonds", "4 of Spades"))); @@ -273,5 +273,5 @@ public void testCheckWinner() { // Then Assert.assertEquals(expected, actual); } - +*/ } From 463fe3d5df1671dbeecb0a9b0e269c3ecff79e56 Mon Sep 17 00:00:00 2001 From: r-m-hufford Date: Sat, 20 Mar 2021 16:48:20 -0400 Subject: [PATCH 60/72] BeetleService added. more tests. --- src/main/java/io/zipcoder/casino/Beetle.java | 171 ++++----------- .../io/zipcoder/casino/BeetleDisplay.java | 6 + .../io/zipcoder/casino/BeetleService.java | 94 +++++++++ src/main/java/io/zipcoder/casino/Craps.java | 2 +- .../java/io/zipcoder/casino/GamblingGame.java | 2 +- src/main/java/io/zipcoder/casino/GoFish.java | 2 +- .../zipcoder/casino/BeetleDisplayTests.java | 44 ---- .../io/zipcoder/casino/BeetleServiceTest.java | 197 ++++++++++++++++++ .../java/io/zipcoder/casino/BeetleTest.java | 143 +++++++------ 9 files changed, 415 insertions(+), 246 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/BeetleService.java create mode 100644 src/test/java/io/zipcoder/casino/BeetleServiceTest.java diff --git a/src/main/java/io/zipcoder/casino/Beetle.java b/src/main/java/io/zipcoder/casino/Beetle.java index 5b6b56bf8..4b39af3f5 100644 --- a/src/main/java/io/zipcoder/casino/Beetle.java +++ b/src/main/java/io/zipcoder/casino/Beetle.java @@ -6,7 +6,6 @@ import java.io.PrintStream; import java.math.BigDecimal; import java.math.RoundingMode; -import java.text.NumberFormat; import java.util.*; public class Beetle extends DiceGame{ @@ -15,27 +14,9 @@ public class Beetle extends DiceGame{ Console console; private InputStream in; private PrintStream out; - BeetleDisplay bd = new BeetleDisplay(); - NumberFormat nf = NumberFormat.getCurrencyInstance(); - - private String[][] completeBeetle = new String[][]{{"\\","0","/"}, - {"⎛","|","⎞"}, - {"⎝","|","⎠"}, - {"/","⏝","\\"} - }; - private String[][] usersBeetle = new String[][]{{" "," "," "}, - {" "," "," "}, - {" "," "," "}, - {" "," "," "} - }; - private String[][] opponentsBeetle = new String[][]{{" "," "," "}, - {" "," "," "}, - {" "," "," "}, - {" "," "," "} - }; - - private Set usersRolls = new HashSet(); - private Set opponentsRolls = new HashSet(); + BeetleDisplay display = new BeetleDisplay(); + BeetleService service = new BeetleService(); + private Double purse = 0.00; public Beetle(Player player) { @@ -51,49 +32,38 @@ public void gameEngine() { Boolean opponentHasNotWon = true; Boolean playersHaveNotTied = true; - displayWelcomeSequence(); + display.displayWelcomeSequence(player, service.getCompleteBeetle()); tableMinimumDeposit(); - bd.currentPurse(getPurse()); + display.currentPurse(getPurse()); while (playersHaveNotTied && userHasNotWon && opponentHasNotWon) { //BET Double userBetAmount = (console.getDoubleInput("how much would you like to bet?")); acceptBetFromUser(userBetAmount); Double opponentBet = opponentBet(userBetAmount); - acceptBetFrom(opponentBet); + setPurse(opponentBet); //PLAY Integer userRollValue = diceRollSum(1); - analyzeRoll(usersRolls, usersBeetle, userRollValue); + analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), userRollValue); Integer opponentsRollValue = diceRollSum(1); - analyzeRoll(opponentsRolls, opponentsBeetle, opponentsRollValue); + analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), opponentsRollValue); //DISPLAY - bd.gameBoard(userRollValue, usersBeetle, opponentsRollValue, opponentsBeetle, getPurse(),userBetAmount,opponentBet); + display.gameBoard(userRollValue, service.getUsersBeetle(), opponentsRollValue, service.getOpponentsBeetle(), getPurse(),userBetAmount,opponentBet); //ANALYZE - playersHaveNotTied = tieStateDoesNotExist(usersBeetle, opponentsBeetle); - userHasNotWon = winningStateDoesNotExist(usersBeetle); - opponentHasNotWon = losingStateDoesNotExist(opponentsBeetle); - } - bd.printAccountBalance(player.getWallet()); - } - - public Double opponentBet(Double userBet) { - Double opponentBet = 0.0; - if (opponentsRolls.size() >= usersRolls.size()) { - Double multiplier = random.nextDouble() + 0.5; - opponentBet = userBet * Math.round(multiplier * 100) / 100; + playersHaveNotTied = tieStateDoesNotExist(service.getUsersBeetle(), service.getOpponentsBeetle()); + userHasNotWon = winningStateDoesNotExist(service.getUsersBeetle()); + opponentHasNotWon = losingStateDoesNotExist(service.getOpponentsBeetle()); } - BigDecimal formattedBet = new BigDecimal(opponentBet).setScale(2, RoundingMode.HALF_UP); - opponentBet = formattedBet.doubleValue(); - return opponentBet; + display.printAccountBalance(player.getWallet()); } //GAME STATE public Boolean tieStateDoesNotExist(String[][] usersBeetle, String[][] opponentsBeetle) { - if (Arrays.deepEquals(completeBeetle, usersBeetle) && Arrays.deepEquals(completeBeetle, opponentsBeetle)) { - bd.bothBeetlesComplete(); + if (Arrays.deepEquals(service.getCompleteBeetle(), usersBeetle) && Arrays.deepEquals(service.getCompleteBeetle(), opponentsBeetle)) { + display.bothBeetlesComplete(); player.setWallet(player.getCurrentBet()); System.out.println("Your bets were returned to your wallet."); return false; @@ -102,8 +72,8 @@ public Boolean tieStateDoesNotExist(String[][] usersBeetle, String[][] opponents } public Boolean winningStateDoesNotExist(String[][] usersBeetle) { - if (Arrays.deepEquals(completeBeetle, usersBeetle)) { - bd.userBugIsComplete(); + if (Arrays.deepEquals(service.getCompleteBeetle(), usersBeetle)) { + display.userBugIsComplete(); player.setWallet(purse); player.setCurrentBet(0.00); return false; @@ -112,8 +82,8 @@ public Boolean winningStateDoesNotExist(String[][] usersBeetle) { } public Boolean losingStateDoesNotExist(String[][] opponentsBeetle) { - if (Arrays.deepEquals(completeBeetle, opponentsBeetle)) { - bd.opponentsBugisComplete(); + if (Arrays.deepEquals(service.getCompleteBeetle(), opponentsBeetle)) { + display.opponentsBugisComplete(); player.setWallet(-player.getCurrentBet()); player.setCurrentBet(0.00); return false; @@ -121,72 +91,14 @@ public Boolean losingStateDoesNotExist(String[][] opponentsBeetle) { return true; } - public void displayWelcomeSequence() { - bd.welcome(player.getName()); - drawPlayerBeetle(getCompleteBeetle()); - bd.rules(); - } - - public void analyzeRoll(Set rollSet, String[][] playersBeetle, Integer diceRoll){ if(!rollSet.contains(diceRoll)) { - updateBeetleDrawing(playersBeetle,diceRoll); + service.updateBeetleDrawing(playersBeetle,diceRoll); rollSet.add(diceRoll); } } - - public void updateBeetleDrawing(String[][] playersBeetle, Integer diceRoll) { - - switch (diceRoll) { - case 1: - playersBeetle[0][0] = completeBeetle[0][0]; - break; - - case 2: - playersBeetle[0][2] = completeBeetle[0][2]; - break; - - case 3: - playersBeetle[3][0] = completeBeetle[3][0]; - break; - - case 4: - playersBeetle[3][2] = completeBeetle[3][2]; - break; - - case 5: - playersBeetle[0][1] = completeBeetle[0][1]; - playersBeetle[1][1] = completeBeetle[1][1]; - playersBeetle[2][1] = completeBeetle[2][1]; - break; - - case 6: - playersBeetle[1][0] = completeBeetle[1][0]; - playersBeetle[1][2] = completeBeetle[1][2]; - playersBeetle[2][0] = completeBeetle[2][0]; - playersBeetle[2][2] = completeBeetle[2][2]; - playersBeetle[3][1] = completeBeetle[3][1]; - break; - - default: - System.out.println("something went wrong"); - break; - } - } - - - public String[][] drawPlayerBeetle(String[][] playersBeetle){ - for (int i = 0; i < playersBeetle.length; i++) { - for (int j = 0; j < playersBeetle[i].length; j++) { - System.out.print(playersBeetle[i][j] + " "); - } - System.out.println(); - } - return playersBeetle; - } - - + //BETTING public void acceptBetFromUser(Double betAmount) { player.makeBet(betAmount); purse += betAmount; @@ -199,46 +111,39 @@ public Double tableMinimumDeposit() { return purse; } + public Double opponentBet(Double userBet) { + Double opponentBet = 0.0; + if (service.getOpponentsRolls().size() >= service.getUsersRolls().size()) { + Double multiplier = random.nextDouble() + 0.5; + opponentBet = userBet * Math.round(multiplier * 100) / 100; + } + BigDecimal formattedBet = new BigDecimal(opponentBet).setScale(2, RoundingMode.HALF_UP); + opponentBet = formattedBet.doubleValue(); + return opponentBet; + } public Double calculateReward() { double reward = purse - player.getCurrentBet(); return reward; } - + //PURSE public Double calculateLoss() { return player.getCurrentBet(); } - - //GETTERS AND SETTERS public Double getPurse() { BigDecimal purseFormatted = new BigDecimal(purse).setScale(2, RoundingMode.HALF_UP); purse = purseFormatted.doubleValue(); return purse; } - public Set getUsersRolls() { - return usersRolls; - } - - public Set getOpponentsRolls() { - return opponentsRolls; - } - - public String[][] getUsersBeetle(){ - return usersBeetle; - } - - public String[][] getOpponentsBeetle(){ - return opponentsBeetle; - } - - public String[][] getCompleteBeetle(){ - return completeBeetle; + public Double setPurse(Double betAmount) { + purse += betAmount; + return purse; } - //FROM ABSTRACT CLASSES + //UNUSED METHODS FROM ABSTRACT CLASS public String endGame() { return null; } @@ -247,8 +152,4 @@ public String startGame() { return null; } - public Double acceptBetFrom(Double betAmount) { - purse += betAmount; - return purse; - } } diff --git a/src/main/java/io/zipcoder/casino/BeetleDisplay.java b/src/main/java/io/zipcoder/casino/BeetleDisplay.java index 0070c3923..b99f4195c 100644 --- a/src/main/java/io/zipcoder/casino/BeetleDisplay.java +++ b/src/main/java/io/zipcoder/casino/BeetleDisplay.java @@ -102,6 +102,12 @@ public String[][] drawPlayerBeetle(String[][] playersBeetle){ return playersBeetle; } + public void displayWelcomeSequence(Player player, String[][] beetle) { + welcome(player.getName()); + drawPlayerBeetle(beetle); + rules(); + } + public void gameBoard(Integer userRollValue, String[][] usersBeetle, Integer opponentsRollValue, String[][] opponentsBeetle, Double purse, Double userBetAmount, Double opponentBet) { System.out.println(); diff --git a/src/main/java/io/zipcoder/casino/BeetleService.java b/src/main/java/io/zipcoder/casino/BeetleService.java new file mode 100644 index 000000000..0f484ad22 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/BeetleService.java @@ -0,0 +1,94 @@ +package io.zipcoder.casino; +import java.util.*; + + + +public class BeetleService { + + private String[][] completeBeetle = new String[][]{{"\\","0","/"}, + {"⎛","|","⎞"}, + {"⎝","|","⎠"}, + {"/","⏝","\\"} + }; + + private String[][] usersBeetle = new String[][]{{" "," "," "}, + {" "," "," "}, + {" "," "," "}, + {" "," "," "} + }; + private String[][] opponentsBeetle = new String[][]{{" "," "," "}, + {" "," "," "}, + {" "," "," "}, + {" "," "," "} + }; + + private Set usersRolls = new HashSet(); + private Set opponentsRolls = new HashSet(); + + public BeetleService() { + + } + + public void updateBeetleDrawing(String[][] playersBeetle, Integer diceRoll) { + + switch (diceRoll) { + case 1: + playersBeetle[0][0] = completeBeetle[0][0]; + break; + + case 2: + playersBeetle[0][2] = completeBeetle[0][2]; + break; + + case 3: + playersBeetle[3][0] = completeBeetle[3][0]; + break; + + case 4: + playersBeetle[3][2] = completeBeetle[3][2]; + break; + + case 5: + playersBeetle[0][1] = completeBeetle[0][1]; + playersBeetle[1][1] = completeBeetle[1][1]; + playersBeetle[2][1] = completeBeetle[2][1]; + break; + + case 6: + playersBeetle[1][0] = completeBeetle[1][0]; + playersBeetle[1][2] = completeBeetle[1][2]; + playersBeetle[2][0] = completeBeetle[2][0]; + playersBeetle[2][2] = completeBeetle[2][2]; + playersBeetle[3][1] = completeBeetle[3][1]; + break; + + default: + System.out.println("something went wrong"); + break; + } + } + + public String[][] getCompleteBeetle(){ + return completeBeetle; + } + + public Set getUsersRolls() { + return usersRolls; + } + + public Set getOpponentsRolls() { + return opponentsRolls; + } + + public String[][] getUsersBeetle(){ + return usersBeetle; + } + + public String[][] getOpponentsBeetle(){ + return opponentsBeetle; + } + + + + +} diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index aef6cbfe1..0b019dc6e 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -570,7 +570,7 @@ public String startGame() { return "Alright! Let's play Craps!"; } - public Double acceptBetFrom(Double betAmount) { + public Double setPurse(Double betAmount) { return null; } diff --git a/src/main/java/io/zipcoder/casino/GamblingGame.java b/src/main/java/io/zipcoder/casino/GamblingGame.java index 82cccdb8b..21ded58a4 100644 --- a/src/main/java/io/zipcoder/casino/GamblingGame.java +++ b/src/main/java/io/zipcoder/casino/GamblingGame.java @@ -4,7 +4,7 @@ public interface GamblingGame { public String startGame(); - public Double acceptBetFrom(Double betAmount); + public Double setPurse(Double betAmount); public Double calculateReward(); diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 7cd41f0c1..60ab0a435 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -168,7 +168,7 @@ public String startGame() { return null; } - public Double acceptBetFrom(Double betAmount) { + public Double setPurse(Double betAmount) { return null; } diff --git a/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java b/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java index abfc52e17..f975ecc09 100644 --- a/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java +++ b/src/test/java/io/zipcoder/casino/BeetleDisplayTests.java @@ -7,50 +7,6 @@ public class BeetleDisplayTests { Display d = new Display(); BeetleDisplay bd = new BeetleDisplay(); - @Test - public void welcomeTest() { - bd.welcome(null); - String actual = "WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; - String expected = bd.welcome(null); - - Assert.assertEquals(expected, actual); - } - - @Test - public void rulesTest() { - bd.welcome(null); - String actual = "WELCOME TO BEETLE!\n(1 dollar per player table minimum)\n"; - String expected = bd.welcome(null); - - Assert.assertEquals(expected, actual); - } - - @Test - public void drewLegTest() { - bd.drewLeg(); - String actual = "A leg was added to the beetle!"; - String expected = bd.drewLeg(); - - Assert.assertEquals(expected, actual); - } - - @Test - public void drewBodyTest() { - bd.drewBody(); - String actual = "The beetle's body was drawn!"; - String expected = bd.drewBody(); - - Assert.assertEquals(expected, actual); - } - - @Test - public void drewHeadTest() { - bd.drewHead(); - String actual = "This beetle has a head now!"; - String expected = bd.drewHead(); - - Assert.assertEquals(expected, actual); - } @Test public void userBugIsCompleteTest() { diff --git a/src/test/java/io/zipcoder/casino/BeetleServiceTest.java b/src/test/java/io/zipcoder/casino/BeetleServiceTest.java new file mode 100644 index 000000000..8000ed119 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/BeetleServiceTest.java @@ -0,0 +1,197 @@ +package io.zipcoder.casino; + +import org.junit.Assert; +import org.junit.Test; + +public class BeetleServiceTest { + BeetleService service = new BeetleService(); + BeetleDisplay display = new BeetleDisplay(); + + @Test + public void playerBeetleTest() { + //given + Player player1 = new Player("player", 100.00); + Beetle beetle = new Beetle(player1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 4); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 5); + // and + String[][] expected = new String[][]{{" ","0"," "}, + {" ","|"," "}, + {" ","|"," "}, + {" "," ","\\"}}; + String[][] actual = (display.drawPlayerBeetle(service.getUsersBeetle())); + //assert + Assert.assertEquals(expected,actual); + + } + + @Test + public void opponentBeetleTest() { + //given + Player player1 = new Player("player", 100.00); + Beetle beetle = new Beetle(player1); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 4); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 5); + // and + String[][] expected = new String[][]{{" ","0"," "}, + {" ","|"," "}, + {" ","|"," "}, + {" "," ","\\"}}; + String[][] actual = (display.drawPlayerBeetle(service.getOpponentsBeetle())); + //assert + Assert.assertEquals(expected,actual); + + } + + @Test + public void completeBeetleTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 3); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 4); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 5); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 6); + + Assert.assertEquals(service.getCompleteBeetle(),service.getUsersBeetle()); + + } + + @Test + public void getUserRollsTest() { + Player human = new Player("human", 50.00); + Beetle beetle = new Beetle(human); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + + Integer expected = 2; + Integer actual = service.getUsersRolls().size(); + + Assert.assertEquals(expected,actual); + + } + + @Test + public void tieStateTrueTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 1); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 2); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 3); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 4); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 5); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 6); + + Assert.assertTrue(beetle.tieStateDoesNotExist(service.getUsersBeetle(), service.getOpponentsBeetle())); + + } + + @Test + public void tieStateFalseTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 3); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 4); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 5); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 6); + + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 1); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 2); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 3); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 4); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 5); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 6); + + Assert.assertFalse(beetle.tieStateDoesNotExist(service.getUsersBeetle(), service.getOpponentsBeetle())); + + } + + + @Test + public void winningStateTrueTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 3); + + + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 1); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 2); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 3); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 4); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 5); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 6); + + Assert.assertTrue(beetle.winningStateDoesNotExist(service.getUsersBeetle())); + + } + + @Test + public void winningStateFalseTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 3); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 4); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 5); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 6); + + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 1); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 2); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 3); + + + Assert.assertFalse(beetle.winningStateDoesNotExist(service.getUsersBeetle())); + + } + + @Test + public void losingStateTrueTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 3); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 4); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 5); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 6); + + + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 4); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 5); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 6); + + Assert.assertTrue(beetle.losingStateDoesNotExist(service.getOpponentsBeetle())); + + } + + @Test + public void losingStateFalseTest() { + Player player2 = new Player("player", 100.00); + Beetle beetle = new Beetle(player2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 1); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 2); + beetle.analyzeRoll(service.getUsersRolls(), service.getUsersBeetle(), 3); + + + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 1); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 2); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 3); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 4); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 5); + beetle.analyzeRoll(service.getOpponentsRolls(), service.getOpponentsBeetle(), 6); + + Assert.assertFalse(beetle.losingStateDoesNotExist(service.getOpponentsBeetle())); + + } + + +} diff --git a/src/test/java/io/zipcoder/casino/BeetleTest.java b/src/test/java/io/zipcoder/casino/BeetleTest.java index d01cdb3a9..b1d256c27 100644 --- a/src/test/java/io/zipcoder/casino/BeetleTest.java +++ b/src/test/java/io/zipcoder/casino/BeetleTest.java @@ -5,70 +5,7 @@ public class BeetleTest { - @Test - public void playerBeetleTest() { - //given - Player player1 = new Player("player", 100.00); - Beetle beetle = new Beetle(player1); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 4); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 5); - // and - String[][] expected = new String[][]{{" ","0"," "}, - {" ","|"," "}, - {" ","|"," "}, - {" "," ","\\"}}; - String[][] actual = (beetle.drawPlayerBeetle(beetle.getUsersBeetle())); - //assert - Assert.assertEquals(expected,actual); - - } - - @Test - public void opponentBeetleTest() { - //given - Player player1 = new Player("player", 100.00); - Beetle beetle = new Beetle(player1); - beetle.analyzeRoll(beetle.getOpponentsRolls(), beetle.getOpponentsBeetle(), 4); - beetle.analyzeRoll(beetle.getOpponentsRolls(), beetle.getOpponentsBeetle(), 5); - // and - String[][] expected = new String[][]{{" ","0"," "}, - {" ","|"," "}, - {" ","|"," "}, - {" "," ","\\"}}; - String[][] actual = (beetle.drawPlayerBeetle(beetle.getOpponentsBeetle())); - //assert - Assert.assertEquals(expected,actual); - - } - - @Test - public void completeBeetleTest() { - Player player2 = new Player("player", 100.00); - Beetle beetle = new Beetle(player2); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 1); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 2); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 3); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 4); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 5); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 6); - - Assert.assertEquals(beetle.getCompleteBeetle(),beetle.getUsersBeetle()); - - } - - @Test - public void getUserRollsTest() { - Player human = new Player("human", 50.00); - Beetle beetle = new Beetle(human); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 1); - beetle.analyzeRoll(beetle.getUsersRolls(), beetle.getUsersBeetle(), 2); - - Integer expected = 2; - Integer actual = beetle.getUsersRolls().size(); - - Assert.assertEquals(expected,actual); - - } +BeetleDisplay display = new BeetleDisplay(); @Test public void acceptUserBetTest() { @@ -106,6 +43,17 @@ public void opponentBetTest() { } + @Test (expected = NullPointerException.class) + public void opponentBetTest2() { + Player hubot = new Player("hubot", 100.00); + Beetle beetle = new Beetle(hubot); + + Double expected = beetle.opponentBet(null); + + Assert.assertTrue(expected >=5 && expected <= 15); + + } + @Test public void calculateRewardTest() { Player player = new Player("player", 100.00); @@ -120,6 +68,34 @@ public void calculateRewardTest() { Assert.assertEquals(expected, actual); } + @Test + public void calculateRewardTest2() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.tableMinimumDeposit(); + beetle.acceptBetFromUser(14.00); + + Double actual = beetle.calculateReward(); + Double expected = 15.00; + + Assert.assertNotEquals(expected, actual); + } + + @Test (expected = NullPointerException.class) + public void calculateRewardTest3() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.tableMinimumDeposit(); + beetle.acceptBetFromUser(null); + + Double actual = beetle.calculateReward(); + Double expected = 1.00; + + Assert.assertEquals(expected, actual); + } + @Test public void calculateLossTest() { Player player = new Player("player", 100.00); @@ -128,13 +104,52 @@ public void calculateLossTest() { beetle.tableMinimumDeposit(); beetle.acceptBetFromUser(50.0); + Double actual = beetle.calculateLoss(); + Double expected = 51.0; + + Assert.assertEquals(expected, actual); + } + + @Test + public void calculateLossTest2() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.tableMinimumDeposit(); + beetle.acceptBetFromUser(50.0); + Double actual = beetle.calculateLoss(); Double expected = 50.0; + Assert.assertNotEquals(expected, actual); + } + + @Test (expected = NullPointerException.class) + public void calculateLossTest3() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.tableMinimumDeposit(); + beetle.acceptBetFromUser(null); + + Double actual = beetle.calculateLoss(); + Double expected = 51.0; + Assert.assertEquals(expected, actual); } + @Test + public void getPurseTest() { + Player player = new Player("player", 100.00); + Beetle beetle = new Beetle(player); + + beetle.setPurse(43.96666667); + Double actual = beetle.getPurse(); + Double expected = 43.97; + + Assert.assertEquals(expected, actual); + } } From f99180360303151ab280d4832a301bd68eaea78b Mon Sep 17 00:00:00 2001 From: Theresa Date: Sun, 21 Mar 2021 14:21:48 -0400 Subject: [PATCH 61/72] Small changes --- src/main/java/io/zipcoder/casino/GoFish.java | 2 +- src/main/java/io/zipcoder/casino/GoFishDisplay.java | 4 ++-- src/main/java/io/zipcoder/casino/GoFishEngine.java | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index bbf545307..5eb454510 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -134,7 +134,7 @@ public void incrementPairCountDealer(int num) { } public boolean checkGameOver() { - if (this.pairCountDealer + this.pairCountPlayer == 13) { + if (this.pairCountDealer + this.pairCountPlayer == 26) { return true; } return false; diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index 76f0b265d..f87ce3905 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -5,8 +5,8 @@ public class GoFishDisplay extends Display{ public void printGoFishRules(){ setPrintCurrentDisplay("GO FISH RULES:\n"+ "Two players will be dealt 5 cards each to begin.\n"+ - "The object of the game is to have the most books (set of 4 cards of the same rank).\n"+ - "A player creates a book by asking the other player if they have cards of a specific rank in their hand.\n" + + "The object of the game is to have the most pairs.\n"+ + "A player creates a pair by asking the other player if they have cards of a specific rank in their hand.\n" + "If the other player is holding cards of the requested rank, they must hand them over.\n"+ "You can only request card ranks that you already have in your hand.\n" + "Game play continues until the deck is empty.\n"); diff --git a/src/main/java/io/zipcoder/casino/GoFishEngine.java b/src/main/java/io/zipcoder/casino/GoFishEngine.java index 54ff4b834..a6c1856f2 100644 --- a/src/main/java/io/zipcoder/casino/GoFishEngine.java +++ b/src/main/java/io/zipcoder/casino/GoFishEngine.java @@ -92,6 +92,7 @@ public void checkForPairsHuman() { d.printPairsHuman(); System.out.println(g.getPairCountPlayer()); this.printPlayersHand(); + this.checkForPairsHuman(); } } From 7b77904614ac594c2b06068065e4bf68d0fbbf12 Mon Sep 17 00:00:00 2001 From: hazel Date: Sun, 21 Mar 2021 16:17:59 -0400 Subject: [PATCH 62/72] CrapsV2 functional --- src/main/java/io/zipcoder/casino/CrapsV2.java | 249 +++++++++++++++++- 1 file changed, 242 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java index bc01b5fb1..d9b0d0431 100644 --- a/src/main/java/io/zipcoder/casino/CrapsV2.java +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -25,7 +25,7 @@ public class CrapsV2 extends DiceGame { private Boolean[] bets; private Double[] betAmounts; private Double lastBet; - private Integer point; + private Integer point = 0; Boolean haventAnswered; Boolean noPointSet; @@ -78,12 +78,42 @@ public void crapsEngine() { while (decisionUnmade) { cd.printSetTypeOfBet(); input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); - prePointOuterSwitch(input); + outerSwitch(input); + } + decisionUnmade = true; + if(firstRoll){ + cd.printComeOutRoll(); + firstRoll = false; + } + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPrePoint(x); + oneRollReset(); + if(x == 4 || x == 5 || x == 6 || x == 8 || x == 9 || x == 10){ + point = x; + noPointSet = false; + cd.printThatPoint(); + } else { + cd.printNoPoint(); } } - - + while(notSevenedOut) { + while (decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'come,' 3 for 'don't come,' or 4 for a proposition."); + outerSwitch(input); + } + decisionUnmade = true; + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPostPoint(x); + oneRollReset(); + if(x == 7){ + notSevenedOut = false; + d.setPrintCurrentDisplay(endGame()); + } + } } @@ -114,7 +144,7 @@ public void initialRulesPromptSwitch(Integer input) { } } - public void prePointOuterSwitch(Integer input) { + public void outerSwitch(Integer input) { switch(input){ case 1: cd.printRulesMenu1(); @@ -132,8 +162,14 @@ public void prePointOuterSwitch(Integer input) { decisionUnmade = false; break; case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); - oneRollPropSwitch(furtherInput); + if (noPointSet) { + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + oneRollPropSwitch(furtherInput); + } + else{ + furtherInput = c.getIntegerInput("Type 1 to bet the field, 2 for a place bet, or 3 for a one-roll bet."); + postPointPropSwitch(furtherInput); + } break; default: cd.printErrorMessage(); @@ -192,7 +228,206 @@ public void oneRollPropSwitch(Integer input) { } } + public void postPointPropSwitch(Integer x){ + switch(furtherInput) { + case 1: + acceptBetFrom(4.0); + break; + case 2: + yetFurtherInput = c.getIntegerInput("Type the number you want to make your place bet on (4, 5, 6, 8, 9, or 10, but not the point."); + if (yetFurtherInput == point) { + cd.printErrorMessage(); + } + switch (yetFurtherInput) { + case 4: + acceptBetFrom(5.0); + break; + case 5: + acceptBetFrom(6.0); + break; + case 6: + acceptBetFrom(7.0); + break; + case 8: + acceptBetFrom(8.0); + break; + case 9: + acceptBetFrom(9.0); + break; + case 10: + acceptBetFrom(10.0); + break; + default: + cd.printErrorMessage(); + } + case 3: + yetFurtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + oneRollPropSwitch(yetFurtherInput); + } + } + + public void checkBetsPrePoint(Integer x){ + checkBetsConst(x); + if(x == 2 && bets[1]){ //pass + player.makeBet(betAmounts[1] * 2); + cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); + } + if(x == 3 && bets[1]){ //pass + player.makeBet(betAmounts[1] * 2); + cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); + } + if(x == 7 && bets[0]){ //pass + player.makeBet(betAmounts[0] * 2); + cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); + } + if(x == 11 && bets[0]){ //pass + player.makeBet(betAmounts[0] * 2); + cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); + } + if(x == 12 && bets[1]){ //pass + player.makeBet(betAmounts[1]); + cd.printCraps(); + cd.printPush(); + } + } + + public void checkBetsPostPoint(Integer x){ + checkBetsConst(x); + if(x == point){ + bets[3] = false; + betAmounts[3] = 0.0; + } + if(x == 7){ + bets[2] = false; + betAmounts [2] = 0.0; + } + if(x == point && bets[2]){ + player.makeBet(betAmounts[2]); + cd.printShooterScores(); + cd.printWinnings(betAmounts[2]); + } + if(x == 7 && bets[3]){ + player.makeBet(betAmounts[3] * 2); + cd.printShooterSevenedOut(); + cd.printWinnings(betAmounts[3] * 2); + } + if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ + player.makeBet(betAmounts[4] * 2); + cd.printWinnings(betAmounts[4] * 2); + } + if(x == 2 && bets[4] || x == 12 && bets[4]){ + player.makeBet(betAmounts[4] * 4); + cd.printWinnings(betAmounts[4] * 4); + } + if(x == 4 && bets[5]){ + player.makeBet(betAmounts[5] * 2); + cd.printWinnings(betAmounts[5] * 2); + } + if(x == 5 && bets[6]){ + player.makeBet(betAmounts[6] * 2); + cd.printWinnings(betAmounts[6] * 2); + } + if(x == 6 && bets[7]){ + player.makeBet(betAmounts[7] * 2); + cd.printWinnings(betAmounts[7] * 2); + } + if(x == 8 && bets[8]){ + player.makeBet(betAmounts[8] * 2); + cd.printWinnings(betAmounts[8] * 2); + } + if(x == 9 && bets[9]){ + player.makeBet(betAmounts[9] * 2); + cd.printWinnings(betAmounts[9] * 2); + } + if(x == 10 && bets[10]){ + player.makeBet(betAmounts[10] * 2); + cd.printWinnings(betAmounts[10] * 2); + } + } + + public void checkBetsConst(Integer x){ + if(x == 2 && bets[19]){ + player.makeBet(betAmounts[19] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[19] * 60); + } + if(x == 2 && bets[12]){ + player.makeBet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); + } + if(x == 3 && bets[17]){ + player.makeBet(betAmounts[17] * 30); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[17] * 30); + } + if(x == 3 && bets[12]){ + player.makeBet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); + } + if(x == 4 && bets[15]){ + player.makeBet(betAmounts[15] * 14); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[15] * 14); + } + if(x == 6 && bets[13]){ + player.makeBet(betAmounts[13] * 18); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[13] * 18); + } + if(x == 7 && bets[11]){ + player.makeBet(betAmounts[11] * 8); + cd.printNatural(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[11] * 8); + } + if(x == 8 && bets[14]){ + player.makeBet(betAmounts[14] * 18); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[14] * 18); + } + if(x == 10 && bets[16]){ + player.makeBet(betAmounts[16] * 14); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[16] * 14); + } + if(x == 11 && bets[18]){ + player.makeBet(betAmounts[18] * 30); + cd.printOneRollBetWin(); + cd.printNatural(); + cd.printWinnings(betAmounts[18] * 30); + } + if(x == 12 && bets[20]){ + player.makeBet(betAmounts[20] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[20] * 60); + } + if(x == 12 && bets[12]){ + player.makeBet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); + } + } + public void oneRollReset(){ + bets[4] = false; + betAmounts[4] = 0.0; + for(int i = 11; i < 21; i++){ + bets[i] = false; + betAmounts[i] = 0.0; + } + } public String startGame() { return "Alright! Let's play Craps!"; From 7a3b77158b44133d95e5fafa4a5acf7fb5da7e29 Mon Sep 17 00:00:00 2001 From: hazel Date: Sun, 21 Mar 2021 16:59:39 -0400 Subject: [PATCH 63/72] Neatened CrapsV2 --- src/main/java/io/zipcoder/casino/CrapsV2.java | 44 +++++-------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java index d9b0d0431..bef51a78e 100644 --- a/src/main/java/io/zipcoder/casino/CrapsV2.java +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -16,22 +16,22 @@ public class CrapsV2 extends DiceGame { private Player player; private CrapsDisplay cd; - private Integer input; - private Integer innerInput; - private Integer furtherInput; - private Integer yetFurtherInput; + private Integer input = 0; + private Integer innerInput = 0; + private Integer furtherInput = 0; + private Integer yetFurtherInput = 0; private Boolean[] outcomes; private Boolean[] bets; private Double[] betAmounts; - private Double lastBet; + private Double lastBet = 0.0; private Integer point = 0; - Boolean haventAnswered; - Boolean noPointSet; - Boolean firstRoll; - Boolean decisionUnmade; - Boolean notSevenedOut; + Boolean haventAnswered = true; + Boolean noPointSet = true; + Boolean firstRoll = true; + Boolean decisionUnmade = true; + Boolean notSevenedOut = true; public CrapsV2(Player player) { this.in = System.in; @@ -41,20 +41,9 @@ public CrapsV2(Player player) { this.player = player; this.cd = new CrapsDisplay(); - this.input = 0; - this.innerInput = 0; - this.furtherInput = 0; - this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; this.betAmounts = new Double[21]; - this.lastBet = 0.0; - - haventAnswered = true; - noPointSet = true; - firstRoll = true; - decisionUnmade = true; - notSevenedOut = true; for (int i = 0; i < 21; i++) { outcomes[i] = false; @@ -69,7 +58,6 @@ public CrapsV2(Player player) { } } - public void crapsEngine() { this.initialRulesPrompt(); @@ -116,8 +104,6 @@ public void crapsEngine() { } } - - public void initialRulesPrompt(){ cd.initalRulesAsk(); while(haventAnswered){ @@ -126,7 +112,6 @@ public void initialRulesPrompt(){ } } - public void initialRulesPromptSwitch(Integer input) { switch (input) { case 1: @@ -455,11 +440,4 @@ public String endGame() { return "That's the end of the round!"; } -} - - - - - - - +} \ No newline at end of file From 2262a0574bc8d6e5dab0d8c015c63024188bd898 Mon Sep 17 00:00:00 2001 From: Theresa Date: Sun, 21 Mar 2021 21:49:05 -0400 Subject: [PATCH 64/72] Think I've almost got it working 100% --- .../java/io/zipcoder/casino/CardGame.java | 5 +- src/main/java/io/zipcoder/casino/Casino.java | 4 +- src/main/java/io/zipcoder/casino/Display.java | 6 +- src/main/java/io/zipcoder/casino/GoFish.java | 237 ++++++++++-------- .../io/zipcoder/casino/GoFishDisplay.java | 83 ++++-- .../java/io/zipcoder/casino/GoFishEngine.java | 100 ++------ src/main/java/io/zipcoder/casino/Main.java | 7 +- .../java/io/zipcoder/casino/GoFishTest.java | 16 +- 8 files changed, 239 insertions(+), 219 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index 1a5802695..88161e25f 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -2,7 +2,7 @@ import java.util.*; -public abstract class CardGame implements GamblingGame { +public abstract class CardGame /*implements Game*/ { ArrayList deck; String[] ranks; @@ -44,7 +44,7 @@ public void setDealersHand(ArrayList dealersHand) { this.dealersHand = dealersHand; } - // CARD GAME METHODS + // GAME SET-UP METHODS public void createNewDeck() { for (int suit = 0; suit <=3; suit++) { for (int rank = 1; rank <= 13; rank++) { @@ -76,6 +76,7 @@ public void dealCards(int numberOfCards) { } } + // GET CARD INFO METHODS public String getRankOnCard(String cardRankAndSuit) { return cardRankAndSuit.substring(0, cardRankAndSuit.indexOf(" ")); } diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index c06e89f38..28ae18f45 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -101,9 +101,9 @@ public void gamesMenu() { break; case 4: - System.out.println("Feature Under Construction"); + GoFishEngine goFish = new GoFishEngine(currentPlayer); + goFish.playGame(); break; - case 5: d.printAccountBalance(currentPlayer.getWallet()); break; diff --git a/src/main/java/io/zipcoder/casino/Display.java b/src/main/java/io/zipcoder/casino/Display.java index cde86eae9..cf00a6741 100644 --- a/src/main/java/io/zipcoder/casino/Display.java +++ b/src/main/java/io/zipcoder/casino/Display.java @@ -65,10 +65,10 @@ public void printWelcomeMessage() { ); } - public void printWelcomeBackMessage(String name, int getAccountBalance) { + public void printWelcomeMessage(String name, double getAccountBalance) { this.setPrintCurrentDisplay( - "Welcome back " + name + "!\n"+ - "Your current account balance is " + getAccountBalance + "." + "Welcome " + name + "!\n"+ + "Your current account balance is $" + getAccountBalance + "." ); } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 9da2e304b..42f2253da 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -1,7 +1,5 @@ package io.zipcoder.casino; - import io.zipcoder.casino.utilities.Console; - import java.util.ArrayList; import java.util.Collections; @@ -9,49 +7,49 @@ public class GoFish extends CardGame { private Console c; private GoFishDisplay d; - private Integer pairCountPlayer; - private Integer pairCountDealer; + private Player p; + private Integer pairCountHuman; + private Integer pairCountComputer; private String rankRequested; private String turn; - public GoFish() { + public GoFish(Player currentPlayer) { this.c = new Console(System.in, System.out); this.d = new GoFishDisplay(); + this.p = currentPlayer; - this.pairCountPlayer = 0; - this.pairCountDealer = 0; - this.turn = "player"; + this.pairCountHuman = 0; + this.pairCountComputer = 0; + this.turn = "Player"; this.rankRequested = ""; } - public String getTurn() { - return this.turn; - } + // GETTERS + public String getTurn() { return this.turn; } - public void setTurn(String newTurn) { - this.turn = newTurn; - } + public int getPairCountHuman() { return this.pairCountHuman; } - public String getRankRequested() { - return this.rankRequested; - } + public int getPairCountComputer() {return this.pairCountComputer;} - public void setBookCounts(int bookCountPlayer, int bookCountDealer) { - this.pairCountPlayer = bookCountPlayer; - this.pairCountDealer = bookCountDealer; - } + public String getRankRequested() { return this.rankRequested; } - public int getPairCountPlayer() { - return this.pairCountPlayer; - } + // SETTERS + public void setTurn(String newTurn) { this.turn = newTurn; } - public int getPairCountDealer() { - return this.pairCountDealer; + public void setPairCounts(int pairCountPlayer, int pairCountDealer) { + this.pairCountHuman = pairCountPlayer; + this.pairCountComputer = pairCountDealer; } - public void setRankRequested(String rank) { - this.rankRequested = rank; + public void setRankRequested(String rank) { this.rankRequested = rank; } + + // GAME PLAY METHODS + public String startGame() { + d.printGoFishRules(); + d.printWelcomeMessage(p.getName(), p.getWallet()); + this.setupGame(5); + return null; } public void setupGame(int numberOfCards) { @@ -60,30 +58,23 @@ public void setupGame(int numberOfCards) { this.dealCards(numberOfCards); } - - public void getRankToAskFor_Human() { - // Move to display class?? - public String displayPlayersHand(ArrayList playersHand) { - String playersHandOutput = ""; - Iterator itr = playersHand.iterator(); - while(itr.hasNext()) { - playersHandOutput += itr.next() + "\n"; + public boolean getRankToAskFor_Player() { + d.printWhatRankYouWillAskFor(); + this.rankRequested = c.getStringInput("", (Object[]) null); + if (!checkIfRankInHand(this.playersHand)) { + d.printInvalidRankRequested(); + return false; } - return playersHandOutput; + return true; } - //public String getRankToAskFor_Human() { - - //d.printWhatRankYouWillAskFor(); - //this.rankRequested = c.getStringInput("", null); - //} - - public void getRankToAskFor_Computer() { - int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); - this.rankRequested = this.getRankOnCard(this.dealersHand.get(pickCard)); + public String getRankToAskFor_Computer () { + int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); + this.rankRequested = this.getRankOnCard(this.dealersHand.get(pickCard)); + return this.rankRequested; } - public boolean checkIfRankInHand(ArrayList handToCheck) { + public boolean checkIfRankInHand (ArrayList < String > handToCheck) { for (int i = 0; i < handToCheck.size(); i++) { if (getRankOnCard(handToCheck.get(i)).equals(this.rankRequested)) { return true; @@ -92,21 +83,59 @@ public boolean checkIfRankInHand(ArrayList handToCheck) { return false; } - public void takeCardFromOtherPlayer(ArrayList playerTakingCard, ArrayList playerGivingCard, String rankAskedFor) { + public void takeCardFromOtherPlayer (ArrayList < String > playerTakingCard, ArrayList < String > playerGivingCard, String rankAskedFor){ for (int i = 0; i < playerGivingCard.size(); i++) { if (this.getRankOnCard(playerGivingCard.get(i)).equals(rankAskedFor)) { playerTakingCard.add(playerGivingCard.get(i)); playerGivingCard.remove(i); } } + + if (this.turn.equals("Computer")) { + d.printComputerTookCard(); + } else { + d.printPlayerTookCard(); + } + } + + public String stealOrGoFish(ArrayList currentPlayer, ArrayList opposingPlayer, String rankRequested) { + if (checkIfRankInHand(opposingPlayer)) { + this.takeCardFromOtherPlayer(currentPlayer, opposingPlayer, rankRequested); + return "Take Card"; + } else { + this.goFish(this.turn); + return "Go Fish"; + } + } + + public String goFish(String currentTurn) { + if (currentTurn.equals("Computer")) { + d.printTellComputerGoFish(); + if (!this.drawCardFromDeck(this.dealersHand).equals(this.rankRequested)) { + this.setTurn("Player"); + } else { + d.printAnotherTurn(); + }; + } else if (currentTurn.equals("Player")) { + String cardDrawnRank = this.drawCardFromDeck(this.playersHand); + d.printComputerSaysGoFish(cardDrawnRank); + if (!cardDrawnRank.equals(this.rankRequested)) { + this.setTurn("Computer"); + } else { + d.printAnotherTurn(); + } + } + return this.turn; } - public void drawCardFromDeck(ArrayList playerHand) { + public String drawCardFromDeck (ArrayList < String > playerHand) { + String cardDrawnRank = this.getRankOnCard(this.deck.get(0)); playerHand.add(this.deck.get(0)); this.deck.remove(0); + return cardDrawnRank; } - public String checkPairInHand(ArrayList currentPlayer) { + public String checkPairInHand (ArrayList < String > currentPlayer) { Collections.sort(currentPlayer); int count = 1; for (int i = 1; i < currentPlayer.size(); i++) { @@ -122,71 +151,74 @@ public String checkPairInHand(ArrayList currentPlayer) { return null; } - //public void checkForPairsInCurrentPlayersHand(ArrayList currentPlayer) { - - - public int removePairFromHand(ArrayList currentPlayer) { + public String removePairFromHand (ArrayList < String > currentPlayer) { String rankToRemove = checkPairInHand(currentPlayer); - if (rankToRemove != null) { - int i = 0; - while(i < currentPlayer.size()) { - if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove)) { - currentPlayer.remove(i); - } else { - i++; + while (rankToRemove != null) { + if (rankToRemove != null) { + int i = 0, count = 0; + while (i < currentPlayer.size()) { + if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove) && count < 3) { + currentPlayer.remove(i); + count++; + } else { + i++; + } } + this.incrementPairCount(rankToRemove); + rankToRemove = checkPairInHand(currentPlayer); } - return 1; } - return 0; - } - - public void incrementPairCountPlayer(int num) { - this.pairCountPlayer += num; - } - - public void incrementPairCountDealer(int num) { - this.pairCountDealer += num; + return rankToRemove; + } + + // this method is ugly :( need to clean up + public void incrementPairCount(String rankRemoved){ + if (this.turn.equals("Computer")) { + this.pairCountComputer++; + d.printNumPairsComputer(rankRemoved, this.pairCountComputer); + // Draw card if hand is empty + if (this.dealersHand.size() == 0 && this.deck.size() != 0) { + this.drawCardFromDeck(this.dealersHand); + d.printRanOutOfCards(); + } else if (this.dealersHand.size() == 0 && this.deck.size() == 0) { + this.checkGameOver(); + }; + } else if (this.turn.equals("Player")) { + this.pairCountHuman++; + d.printNumPairsPlayer(rankRemoved, this.pairCountHuman); + // Draw card if hand is empty + if (this.playersHand.size() == 0 && this.deck.size() != 0) { + this.drawCardFromDeck(this.playersHand); + d.printRanOutOfCards(); + } else if (this.playersHand.size() == 0 && this.deck.size() == 0) { + this.checkGameOver(); + } + d.printPlayersHand(this.displayPlayersHand(this.playersHand)); + } } - public boolean checkGameOver() { - if (this.pairCountDealer + this.pairCountPlayer == 26) { + public boolean checkGameOver () { + if (this.deck.size() == 0) { + this.removePairFromHand(this.playersHand); + this.removePairFromHand(this.dealersHand); return true; } return false; } - public String checkWinner() { - if (this.pairCountDealer > this.pairCountPlayer) { - return "Opponent"; - } else { - return "Player"; - } - } - - public String startGame() { - return null; - } - - public Double acceptBetFrom(Double betAmount) { - return null; - } - - public Double acceptBetFrom() { - return null; - } - - public Double calculateReward() { - return null; - } - - public Double calculateLoss() { - return null; + public void checkForWinner () { + d.printGameOver(); + System.out.println("Final No. Pairs Computer: " + this.pairCountComputer); + System.out.println("Final No. Pairs Player: " + this.pairCountHuman); + if (this.pairCountComputer > this.pairCountHuman) { + d.printComputerWinner(); + } else if (this.pairCountComputer < this.pairCountHuman){ + d.printPlayerWinner(); + } else { + d.printTiedGame(); + } } - public String endGame() { - return null; - } } @@ -200,3 +232,4 @@ public String endGame() { + diff --git a/src/main/java/io/zipcoder/casino/GoFishDisplay.java b/src/main/java/io/zipcoder/casino/GoFishDisplay.java index f87ce3905..0adfa50ad 100644 --- a/src/main/java/io/zipcoder/casino/GoFishDisplay.java +++ b/src/main/java/io/zipcoder/casino/GoFishDisplay.java @@ -2,6 +2,7 @@ public class GoFishDisplay extends Display{ + // GAME START MESSAGING public void printGoFishRules(){ setPrintCurrentDisplay("GO FISH RULES:\n"+ "Two players will be dealt 5 cards each to begin.\n"+ @@ -9,48 +10,88 @@ public void printGoFishRules(){ "A player creates a pair by asking the other player if they have cards of a specific rank in their hand.\n" + "If the other player is holding cards of the requested rank, they must hand them over.\n"+ "You can only request card ranks that you already have in your hand.\n" + - "Game play continues until the deck is empty.\n"); + "Game play continues until the deck is empty.\n"+ + "Humans play first!\n"); } - public void printPlayerHandHeader() {setPrintCurrentDisplay("\nCARDS IN YOUR HAND:");} + // TURN SEPARATORS + public void printTurnSeparator(int deckSize, String currentPlayer) { + setPrintCurrentDisplay("\n=================================================================================="+ + "\nCARDS REMAINING IN DECK: " + deckSize+ + "\nCURRENT PLAYER: " + currentPlayer); + } - public void printFreeGame() {System.out.println("And don't worry - you won't be needing your money. This game is FREE!!!!\n");} + // FOR PRINTING PLAYER'S CARDS + public void printPlayersHand(String playersHand) { + setPrintCurrentDisplay("\nCARDS IN YOUR HAND:\n"+ + playersHand); + } - public void printGoFish(){ - setPrintCurrentDisplay("\nYOUR OPPONENT SAYS: GO FISH!\nYou have now drawn a card from the deck."); + // ASKING FOR CARDS + public void printWhatRankYouWillAskFor(){ + setPrintCurrentDisplay("\nWhat card rank will you ask for?"); } - public void printTellComputerGoFish() { - setPrintCurrentDisplay("\nYOU TOLD YOUR OPPONENT TO GO FISH!\nYour opponent has drawn a card from the deck."); + public void printInvalidRankRequested() { + setPrintCurrentDisplay("You must request a card rank that is already in your hand."); } - public void printOpponentHasCard(){ - setPrintCurrentDisplay("That card rank is in their hand! It will now be given to you!"); + public void printComputerAskedFor(String rankRequested){ + setPrintCurrentDisplay("\nComputer Requested Rank: " + rankRequested); } - public void printRankNotInYourHand() { - setPrintCurrentDisplay("You must request a card rank that is already in your hand."); + // TAKING CARDS + public void printPlayerTookCard(){ + setPrintCurrentDisplay("That card rank is in the computer's hand! It will now be given to you!\n"+ + "You get to play another turn!"); } - public void printCardNotFound(){ - setPrintCurrentDisplay("Nope. They are not holding any cards of that rank."); + public void printComputerTookCard() { + setPrintCurrentDisplay("You have the requested rank in your hand! The computer has taken it from you!\n"+ + "The computer gets to play another turn!"); } - public void printWhatRankYouWillAskFor(){setPrintCurrentDisplay("\nWhat card rank will you ask for?");} + // GO FISH + public void printComputerSaysGoFish(String cardDrawnRank){ + setPrintCurrentDisplay("\nTHE COMPUTER SAYS: GO FISH!\nRank Drawn: " + cardDrawnRank + "."); + } - public void printOpponentAskedFor(){setPrintCurrentDisplay("Your opponent asked for a...");} + public void printTellComputerGoFish() { + setPrintCurrentDisplay("\nYOU TOLD THE COMPUTER TO GO FISH!\nThe Computer has drawn a card from the deck."); + } - public void printOpponentTookCard() {setPrintCurrentDisplay("Your opponent took a card from you!\n");} + public void printAnotherTurn() { + setPrintCurrentDisplay("\nCard drawn from deck is same rank as that requested. Current player gets another turn."); + } - public void printHumansFirst() {setPrintCurrentDisplay("Humans play first!\n"); + // PAIRS + public void printNumPairsPlayer(String rankRemoved, int numPairsPlayer) { + setPrintCurrentDisplay("\nYay! You made a pair of rank " + rankRemoved + "!\nCurrent Number of Pairs You Have: " + numPairsPlayer); + } + + public void printNumPairsComputer(String rankRemoved, int numPairsComputer) { + setPrintCurrentDisplay("\nThe Computer made a pair of rank " + rankRemoved + "!\nCurrent Number of Pairs Computer Has: " + numPairsComputer); + } + + public void printRanOutOfCards() { + setPrintCurrentDisplay("\nEmpty hand - one card drawn from deck."); } - public void printMadePair() {setPrintCurrentDisplay("\nYou made a pair!");} - public void printMadePairOpponent() {setPrintCurrentDisplay("\nYour opponent made a pair!");} + // FINAL GAME RESULTS + public void printGameOver() { + setPrintCurrentDisplay("\nGAME OVER"); + } + public void printPlayerWinner() { + setPrintCurrentDisplay("\nCongratulations, you WIN!!!"); + } - public void printPairsHuman() {setPrintCurrentDisplay("\nCurrent Number of Pairs You Have: ");} + public void printComputerWinner() { + setPrintCurrentDisplay("\nSorry, the computer BEAT you!"); + } - public void printPairsComputer() {setPrintCurrentDisplay("\nCurrent Number of Pairs Opponent Has: ");} + public void printTiedGame() { + setPrintCurrentDisplay("\nYou TIED with the computer!"); + } } diff --git a/src/main/java/io/zipcoder/casino/GoFishEngine.java b/src/main/java/io/zipcoder/casino/GoFishEngine.java index a6c1856f2..a12aae1af 100644 --- a/src/main/java/io/zipcoder/casino/GoFishEngine.java +++ b/src/main/java/io/zipcoder/casino/GoFishEngine.java @@ -4,108 +4,48 @@ public class GoFishEngine { private GoFish g; private GoFishDisplay d; - private Player p; public GoFishEngine(Player currentPlayer) { - this.g = new GoFish(); + this.g = new GoFish(currentPlayer); this.d = new GoFishDisplay(); - this.p = currentPlayer; - } - - public void startGame() { - d.printGoFishRules(); - d.printFreeGame(); - d.printHumansFirst(); - g.setupGame(5); - this.playGame(); } public void playGame() { + g.startGame(); + this.playGameLoop(); + g.checkForWinner(); + } - while (g.checkGameOver() == false) { - if (g.getTurn() == "player") { + public void playGameLoop() { + while (!g.checkGameOver()) { + if (g.getTurn().equals("Player")) { + d.printTurnSeparator(g.getDeck().size(), "You!"); this.playHumansTurn(); - } else if (g.getTurn() == "dealer") { + } else if (g.getTurn().equals("Computer")) { + d.printTurnSeparator(g.getDeck().size(), "Computer"); this.playComputer(); } } - - System.out.println(g.checkWinner()); } public void playHumansTurn() { - this.printPlayersHand(); - this.checkForPairsHuman(); - - g.getRankToAskFor_Human(); - - boolean player = g.checkIfRankInHand(g.getPlayersHand()); - boolean dealer = g.checkIfRankInHand(g.getDealersHand()); + d.printPlayersHand(g.displayPlayersHand(g.getPlayersHand())); + g.removePairFromHand(g.getPlayersHand()); - if (!player) { - d.printRankNotInYourHand(); - } else if (player && dealer) { - d.printOpponentHasCard(); - g.takeCardFromOtherPlayer(g.getPlayersHand(), g.getDealersHand(), g.getRankRequested()); - } else if (player && !dealer) { - d.printGoFish(); - g.drawCardFromDeck(g.getPlayersHand()); - this.printPlayersHand(); - this.checkForPairsHuman(); - g.setTurn("dealer"); + if (g.getRankToAskFor_Player()) { + g.stealOrGoFish(g.getPlayersHand(), g.getDealersHand(), g.getRankRequested()); } } public void playComputer() { - this.checkForPairsComputer(); - g.getRankToAskFor_Computer(); - - boolean player = g.checkIfRankInHand(g.getPlayersHand()); - boolean dealer = g.checkIfRankInHand(g.getDealersHand()); - - d.printOpponentAskedFor(); - System.out.println(g.getRankRequested()); + if(g.getDealersHand().size() == 0 && g.getDeck().size() != 0) {g.drawCardFromDeck(g.getDealersHand());} - if (player && dealer) { - g.takeCardFromOtherPlayer(g.getDealersHand(), g.getPlayersHand(), g.getRankRequested()); - d.printOpponentTookCard(); - } else if (!player && dealer) { - d.printTellComputerGoFish(); - g.drawCardFromDeck(g.getDealersHand()); - this.checkForPairsComputer(); - g.setTurn("player"); - } - } + g.removePairFromHand(g.getDealersHand()); - public void printPlayersHand() { - d.printPlayerHandHeader(); - System.out.println(g.displayPlayersHand(g.getPlayersHand())); - } - - public void checkForPairsHuman() { - int num = g.removePairFromHand(g.getPlayersHand()); - if (num == 1) { - g.incrementPairCountPlayer(num); - - d.printMadePair(); - d.printPairsHuman(); - System.out.println(g.getPairCountPlayer()); - this.printPlayersHand(); - this.checkForPairsHuman(); - } - } - - public void checkForPairsComputer() { - int num = g.removePairFromHand(g.getDealersHand()); - if (num == 1) { - g.incrementPairCountDealer(num); - - d.printMadePairOpponent(); - d.printPairsComputer(); - System.out.println(g.getPairCountDealer()); - } + g.getRankToAskFor_Computer(); + d.printComputerAskedFor(g.getRankRequested()); + g.stealOrGoFish(g.getDealersHand(), g.getPlayersHand(), g.getRankRequested()); } - } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef25eeb1c..dac3dabc7 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,7 +3,10 @@ public class Main { public static void main(String args[]) { - Casino casino = new Casino(); - casino.run(); + //Casino casino = new Casino(); + //casino.run(); + Player p = new Player("Theresa", 500.0); + GoFishEngine goFish = new GoFishEngine(p); + goFish.playGame(); } } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index cc41633a0..ec7d8fffb 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -10,10 +10,12 @@ public class GoFishTest { GoFish go; + Player p; @Before public void setUp() { - go = new GoFish(); + p = new Player("Theresa", 500.00); + go = new GoFish(p); } @Test @@ -231,7 +233,7 @@ public void testRemovePairFromHand() { go.setPlayersHand(new ArrayList(Arrays.asList("King of Hearts", "King of Diamonds", "Queen of Spades"))); // When - int actual = go.removePairFromHand(go.getPlayersHand()); + //int actual = go.removePairFromHand(go.getPlayersHand()); // Then Assert.assertEquals(1, 1); @@ -240,7 +242,7 @@ public void testRemovePairFromHand() { @Test public void checkGameOverTrue() { // Given - go.setBookCounts(10, 3); + go.setPairCounts(10, 3); // When boolean actual = go.checkGameOver(); @@ -252,7 +254,7 @@ public void checkGameOverTrue() { @Test public void checkGameOverFalse() { // Given - go.setBookCounts(9, 3); + go.setPairCounts(9, 3); // When boolean actual = go.checkGameOver(); @@ -264,14 +266,14 @@ public void checkGameOverFalse() { @Test public void testCheckWinner() { // Given - go.setBookCounts(10, 3); + go.setPairCounts(10, 3); String expected = "player"; // When - String actual = go.checkWinner(); + //String actual = go.checkForWinner(); // Then - Assert.assertEquals(expected, actual); + //Assert.assertEquals(expected, actual); } } From f6b1ffe18ef42b71ae12de09cb1038989286db76 Mon Sep 17 00:00:00 2001 From: Theresa Date: Sun, 21 Mar 2021 22:37:21 -0400 Subject: [PATCH 65/72] Got all GoFish tests working again --- .../java/io/zipcoder/casino/CardGame.java | 4 ++- src/main/java/io/zipcoder/casino/Game.java | 3 +- src/main/java/io/zipcoder/casino/GoFish.java | 36 +++++++++++-------- src/main/java/io/zipcoder/casino/Main.java | 7 ++-- .../java/io/zipcoder/casino/GoFishTest.java | 30 +++++++--------- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CardGame.java b/src/main/java/io/zipcoder/casino/CardGame.java index 88161e25f..975535be3 100644 --- a/src/main/java/io/zipcoder/casino/CardGame.java +++ b/src/main/java/io/zipcoder/casino/CardGame.java @@ -2,7 +2,7 @@ import java.util.*; -public abstract class CardGame /*implements Game*/ { +public abstract class CardGame implements Game { ArrayList deck; String[] ranks; @@ -44,6 +44,8 @@ public void setDealersHand(ArrayList dealersHand) { this.dealersHand = dealersHand; } + public void setDeck(ArrayList deck) {this.deck = deck;} + // GAME SET-UP METHODS public void createNewDeck() { for (int suit = 0; suit <=3; suit++) { diff --git a/src/main/java/io/zipcoder/casino/Game.java b/src/main/java/io/zipcoder/casino/Game.java index 65076adf3..a6a26a001 100644 --- a/src/main/java/io/zipcoder/casino/Game.java +++ b/src/main/java/io/zipcoder/casino/Game.java @@ -8,7 +8,6 @@ public interface Game { Integer numberOfPlayers = 0; Boolean GameState = false; - public void checkForWinner(); + public String checkForWinner(); - public void setPlayer(); } diff --git a/src/main/java/io/zipcoder/casino/GoFish.java b/src/main/java/io/zipcoder/casino/GoFish.java index 42f2253da..1d5871321 100644 --- a/src/main/java/io/zipcoder/casino/GoFish.java +++ b/src/main/java/io/zipcoder/casino/GoFish.java @@ -69,7 +69,7 @@ public boolean getRankToAskFor_Player() { } public String getRankToAskFor_Computer () { - int pickCard = (int) Math.random() * (this.dealersHand.size() - 1); + int pickCard = (int) Math.floor(Math.random() * (this.dealersHand.size())); this.rankRequested = this.getRankOnCard(this.dealersHand.get(pickCard)); return this.rankRequested; } @@ -153,25 +153,26 @@ public String checkPairInHand (ArrayList < String > currentPlayer) { public String removePairFromHand (ArrayList < String > currentPlayer) { String rankToRemove = checkPairInHand(currentPlayer); + String allRanksRemoved = ""; while (rankToRemove != null) { - if (rankToRemove != null) { - int i = 0, count = 0; - while (i < currentPlayer.size()) { - if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove) && count < 3) { - currentPlayer.remove(i); - count++; - } else { - i++; - } + int i = 0, count = 0; + while (i < currentPlayer.size()) { + if (getRankOnCard(currentPlayer.get(i)).equals(rankToRemove) && count < 3) { + currentPlayer.remove(i); + count++; + } else { + i++; } - this.incrementPairCount(rankToRemove); - rankToRemove = checkPairInHand(currentPlayer); } + this.incrementPairCount(rankToRemove); + allRanksRemoved += rankToRemove; + rankToRemove = checkPairInHand(currentPlayer); + } - return rankToRemove; + return allRanksRemoved; } - // this method is ugly :( need to clean up + // this method is super duper ugly :( need to clean up public void incrementPairCount(String rankRemoved){ if (this.turn.equals("Computer")) { this.pairCountComputer++; @@ -206,17 +207,22 @@ public boolean checkGameOver () { return false; } - public void checkForWinner () { + public String checkForWinner () { + String winner = ""; d.printGameOver(); System.out.println("Final No. Pairs Computer: " + this.pairCountComputer); System.out.println("Final No. Pairs Player: " + this.pairCountHuman); if (this.pairCountComputer > this.pairCountHuman) { d.printComputerWinner(); + winner = "Computer"; } else if (this.pairCountComputer < this.pairCountHuman){ d.printPlayerWinner(); + winner = "Player"; } else { d.printTiedGame(); + winner = "Tied"; } + return winner; } } diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index dac3dabc7..ef25eeb1c 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,10 +3,7 @@ public class Main { public static void main(String args[]) { - //Casino casino = new Casino(); - //casino.run(); - Player p = new Player("Theresa", 500.0); - GoFishEngine goFish = new GoFishEngine(p); - goFish.playGame(); + Casino casino = new Casino(); + casino.run(); } } diff --git a/src/test/java/io/zipcoder/casino/GoFishTest.java b/src/test/java/io/zipcoder/casino/GoFishTest.java index ec7d8fffb..6ba47214b 100644 --- a/src/test/java/io/zipcoder/casino/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/GoFishTest.java @@ -121,7 +121,7 @@ public void testDisplayPlayersHand() { // Given ArrayList playersHand = new ArrayList(Arrays.asList("2 of Diamonds", "Queen of Hearts", "3 of Spades", "4 of Clubs", "7 of Hearts")); go.setPlayersHand(playersHand); - String expected = "2 of Diamonds\nQueen of Hearts\n3 of Spades\n4 of Clubs\n7 of Hearts\n"; + String expected = "2 of Diamonds\n3 of Spades\n4 of Clubs\n7 of Hearts\nQueen of Hearts\n"; // When String actual = go.displayPlayersHand(go.getPlayersHand()); @@ -144,22 +144,16 @@ public void TestGetValueOfCard() { } - // Not sure how to test this one - @Test - public void testGetRankToAskFor_Human() { - - } - @Test public void testGetRankToAskFor_Computer() { // Given go.setDealersHand(new ArrayList(Arrays.asList("Ace of Hearts", "2 of Spades", "6 of Diamonds"))); // When - //String actual = go.getRankToAskFor_Computer(); + String actual = go.getRankToAskFor_Computer(); // Then - //Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); + Assert.assertTrue(actual.equals("Ace") || actual.equals("2") || actual.equals("6")); } @Test @@ -230,19 +224,20 @@ public void testCheckPairInHand() { @Test public void testRemovePairFromHand() { // Given - go.setPlayersHand(new ArrayList(Arrays.asList("King of Hearts", "King of Diamonds", "Queen of Spades"))); + go.setPlayersHand(new ArrayList(Arrays.asList("King of Hearts", "King of Diamonds", "2 of Clubs", "Queen of Spades", "2 of Spades"))); // When - //int actual = go.removePairFromHand(go.getPlayersHand()); + String actual = go.removePairFromHand(go.getPlayersHand()); // Then - Assert.assertEquals(1, 1); + Assert.assertEquals("2King", actual); } @Test public void checkGameOverTrue() { // Given - go.setPairCounts(10, 3); + ArrayList actualDeck = new ArrayList(); + go.setDeck(actualDeck); // When boolean actual = go.checkGameOver(); @@ -254,7 +249,8 @@ public void checkGameOverTrue() { @Test public void checkGameOverFalse() { // Given - go.setPairCounts(9, 3); + ArrayList actualDeck = new ArrayList(Arrays.asList("Jack of Clubs")); + go.setDeck(actualDeck); // When boolean actual = go.checkGameOver(); @@ -267,13 +263,13 @@ public void checkGameOverFalse() { public void testCheckWinner() { // Given go.setPairCounts(10, 3); - String expected = "player"; + String expected = "Player"; // When - //String actual = go.checkForWinner(); + String actual = go.checkForWinner(); // Then - //Assert.assertEquals(expected, actual); + Assert.assertEquals(expected, actual); } } From 22dccb92c4231c45abbb5bd89494705801bd0a84 Mon Sep 17 00:00:00 2001 From: Theresa Date: Sun, 21 Mar 2021 22:42:30 -0400 Subject: [PATCH 66/72] Minor fix to a small error I made while merging --- src/main/java/io/zipcoder/casino/Casino.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 863e93dd3..99fce7166 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -103,7 +103,6 @@ public void gamesMenu() { case 4: GoFishEngine goFish = new GoFishEngine(currentPlayer); goFish.playGame(); - goFish.startGame(); break; case 5: d.printAccountBalance(currentPlayer.getWallet()); From 05331294476f348305c851d41bac50fc7ee4452a Mon Sep 17 00:00:00 2001 From: hazel Date: Fri, 19 Mar 2021 09:11:45 -0400 Subject: [PATCH 67/72] Final checkpoint, fixes --- src/main/java/io/zipcoder/casino/Craps.java | 78 ++++++++++----------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Craps.java b/src/main/java/io/zipcoder/casino/Craps.java index 0b019dc6e..14f9e9093 100644 --- a/src/main/java/io/zipcoder/casino/Craps.java +++ b/src/main/java/io/zipcoder/casino/Craps.java @@ -351,95 +351,95 @@ public void oneRollReset(){ public void checkBetsPrePoint(Integer x){ if(x == 2 && bets[19]){ - player.setWallet(betAmounts[19] * 60); + player.makeBet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 2 && bets[1]){ //pass - player.setWallet(betAmounts[1] * 2); + player.makeBet(betAmounts[1] * 2); cd.printCraps(); cd.printWinnings(betAmounts[1] * 2); } if(x == 3 && bets[17]){ - player.setWallet(betAmounts[17] * 30); + player.makeBet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[1]){ //pass - player.setWallet(betAmounts[1] * 2); + player.makeBet(betAmounts[1] * 2); cd.printCraps(); cd.printWinnings(betAmounts[1] * 2); } if(x == 4 && bets[15]){ - player.setWallet(betAmounts[15] * 14); + player.makeBet(betAmounts[15] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ - player.setWallet(betAmounts[13] * 18); + player.makeBet(betAmounts[13] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ - player.setWallet(betAmounts[11] * 8); + player.makeBet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[11] * 8); } if(x == 7 && bets[0]){ //pass - player.setWallet(betAmounts[0] * 2); + player.makeBet(betAmounts[0] * 2); cd.printNatural(); cd.printWinnings(betAmounts[0] * 2); } if(x == 8 && bets[14]){ - player.setWallet(betAmounts[14] * 18); + player.makeBet(betAmounts[14] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ - player.setWallet(betAmounts[16] * 14); + player.makeBet(betAmounts[16] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ - player.setWallet(betAmounts[18] * 30); + player.makeBet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); cd.printWinnings(betAmounts[18] * 30); } if(x == 11 && bets[0]){ //pass - player.setWallet(betAmounts[0] * 2); + player.makeBet(betAmounts[0] * 2); cd.printNatural(); cd.printWinnings(betAmounts[0] * 2); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20] * 60); + player.makeBet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 12 && bets[1]){ //pass - player.setWallet(betAmounts[1]); + player.makeBet(betAmounts[1]); cd.printCraps(); cd.printPush(); } @@ -447,69 +447,69 @@ public void checkBetsPrePoint(Integer x){ public void checkBetsPostPoint(Integer x, Integer point){ if(x == 2 && bets[19]){ - player.setWallet(betAmounts[19] * 60); + player.makeBet(betAmounts[19] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[19] * 60); } if(x == 2 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 3 && bets[17]){ - player.setWallet(betAmounts[17] * 30); + player.makeBet(betAmounts[17] * 30); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[17] * 30); } if(x == 3 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); } if(x == 4 && bets[15]){ - player.setWallet(betAmounts[15] * 14); + player.makeBet(betAmounts[15] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[15] * 14); } if(x == 6 && bets[13]){ - player.setWallet(betAmounts[13] * 18); + player.makeBet(betAmounts[13] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[13] * 18); } if(x == 7 && bets[11]){ - player.setWallet(betAmounts[11] * 8); + player.makeBet(betAmounts[11] * 8); cd.printNatural(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[11] * 8); } if(x == 8 && bets[14]){ - player.setWallet(betAmounts[14] * 18); + player.makeBet(betAmounts[14] * 18); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[14] * 18); } if(x == 10 && bets[16]){ - player.setWallet(betAmounts[16] * 14); + player.makeBet(betAmounts[16] * 14); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[16] * 14); } if(x == 11 && bets[18]){ - player.setWallet(betAmounts[18] * 30); + player.makeBet(betAmounts[18] * 30); cd.printOneRollBetWin(); cd.printNatural(); cd.printWinnings(betAmounts[18] * 30); } if(x == 12 && bets[20]){ - player.setWallet(betAmounts[20] * 60); + player.makeBet(betAmounts[20] * 60); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[20] * 60); } if(x == 12 && bets[12]){ - player.setWallet(betAmounts[12] * 14); + player.makeBet(betAmounts[12] * 14); cd.printCraps(); cd.printOneRollBetWin(); cd.printWinnings(betAmounts[12] * 14); @@ -523,45 +523,45 @@ public void checkBetsPostPoint(Integer x, Integer point){ betAmounts [2] = 0.0; } if(x == point && bets[2]){ - player.setWallet(betAmounts[2]); + player.makeBet(betAmounts[2]); cd.printShooterScores(); cd.printWinnings(betAmounts[2]); } if(x == 7 && bets[3]){ - player.setWallet(betAmounts[3] * 2); + player.makeBet(betAmounts[3] * 2); cd.printShooterSevenedOut(); cd.printWinnings(betAmounts[3] * 2); } if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ - player.setWallet(betAmounts[4] * 2); + player.makeBet(betAmounts[4] * 2); cd.printWinnings(betAmounts[4] * 2); } if(x == 2 && bets[4] || x == 12 && bets[4]){ - player.setWallet(betAmounts[4] * 4); + player.makeBet(betAmounts[4] * 4); cd.printWinnings(betAmounts[4] * 4); } if(x == 4 && bets[5]){ - player.setWallet(betAmounts[5] * 2); + player.makeBet(betAmounts[5] * 2); cd.printWinnings(betAmounts[5] * 2); } if(x == 5 && bets[6]){ - player.setWallet(betAmounts[6] * 2); + player.makeBet(betAmounts[6] * 2); cd.printWinnings(betAmounts[6] * 2); } if(x == 6 && bets[7]){ - player.setWallet(betAmounts[7] * 2); + player.makeBet(betAmounts[7] * 2); cd.printWinnings(betAmounts[7] * 2); } if(x == 8 && bets[8]){ - player.setWallet(betAmounts[8] * 2); + player.makeBet(betAmounts[8] * 2); cd.printWinnings(betAmounts[8] * 2); } if(x == 9 && bets[9]){ - player.setWallet(betAmounts[9] * 2); + player.makeBet(betAmounts[9] * 2); cd.printWinnings(betAmounts[9] * 2); } if(x == 10 && bets[10]){ - player.setWallet(betAmounts[10] * 2); + player.makeBet(betAmounts[10] * 2); cd.printWinnings(betAmounts[10] * 2); } } From 93e7e7a0106fc2a76ad2f700995f9538bb0498e6 Mon Sep 17 00:00:00 2001 From: hazel Date: Sat, 20 Mar 2021 13:19:34 -0400 Subject: [PATCH 68/72] CrapsV2 partially functional --- src/main/java/io/zipcoder/casino/CrapsV2.java | 230 ++++++++++++++++++ src/main/java/io/zipcoder/casino/Main.java | 7 +- 2 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/CrapsV2.java diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java new file mode 100644 index 000000000..bc01b5fb1 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -0,0 +1,230 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.utilities.Console; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public class CrapsV2 extends DiceGame { + + private Console c; + private Scanner s; + private Display d; + private InputStream in; + private PrintStream out; + private Player player; + private CrapsDisplay cd; + + private Integer input; + private Integer innerInput; + private Integer furtherInput; + private Integer yetFurtherInput; + + private Boolean[] outcomes; + private Boolean[] bets; + private Double[] betAmounts; + private Double lastBet; + private Integer point; + + Boolean haventAnswered; + Boolean noPointSet; + Boolean firstRoll; + Boolean decisionUnmade; + Boolean notSevenedOut; + + public CrapsV2(Player player) { + this.in = System.in; + this.out = System.out; + this.c = new Console(in, out); + this.d = new Display(); + this.player = player; + this.cd = new CrapsDisplay(); + + this.input = 0; + this.innerInput = 0; + this.furtherInput = 0; + + this.outcomes = new Boolean[21]; + this.bets = new Boolean[21]; + this.betAmounts = new Double[21]; + this.lastBet = 0.0; + + haventAnswered = true; + noPointSet = true; + firstRoll = true; + decisionUnmade = true; + notSevenedOut = true; + + for (int i = 0; i < 21; i++) { + outcomes[i] = false; + } + + for (int i = 0; i < 21; i++) { + bets[i] = false; + } + + for (int i = 0; i < 21; i++) { + betAmounts[i] = 0.0; + } + } + + + public void crapsEngine() { + + this.initialRulesPrompt(); + + while (noPointSet) { + while (decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); + prePointOuterSwitch(input); + } + } + + + + } + + + + public void initialRulesPrompt(){ + cd.initalRulesAsk(); + while(haventAnswered){ + input = c.getIntegerInput("Type 1 for yes, 2 for no."); + initialRulesPromptSwitch(input); + } + } + + + public void initialRulesPromptSwitch(Integer input) { + switch (input) { + case 1: + cd.printRulesMenu1(); + cd.printRulesMenu2(); + d.setPrintCurrentDisplay(startGame()); + haventAnswered = false; + break; + case 2: + d.setPrintCurrentDisplay(startGame()); + haventAnswered = false; + break; + default: + d.setPrintCurrentDisplay("Invalid user input. Please reread instructions."); + } + } + + public void prePointOuterSwitch(Integer input) { + switch(input){ + case 1: + cd.printRulesMenu1(); + cd.printRulesMenuMid(); + innerInput = c.getIntegerInput("Type 1 for yes, 2 for no."); + rulesMenuPt2(innerInput); + break; + case 2: + acceptBetFrom(0.0); + break; + case 3: + acceptBetFrom(1.0); + break; + case 0: + decisionUnmade = false; + break; + case 4: + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + oneRollPropSwitch(furtherInput); + break; + default: + cd.printErrorMessage(); + } + if(decisionUnmade) { + cd.youCanBetAgain(); + } + } + + public void rulesMenuPt2(Integer input) { + switch(input){ + case 1: + cd.printRulesMenu2(); + break; + case 2: + break; + default: + cd.printErrorMessage(); + } + } + + public void oneRollPropSwitch(Integer input) { + switch(input){ + case 1: + acceptBetFrom(12.0); + break; + case 2: + acceptBetFrom(19.0); + break; + case 3: + acceptBetFrom(17.0); + break; + case 4: + acceptBetFrom(15.0); + break; + case 6: + acceptBetFrom(13.0); + break; + case 7: + acceptBetFrom(11.0); + break; + case 8: + acceptBetFrom(14.0); + break; + case 10: + acceptBetFrom(16.0); + break; + case 11: + acceptBetFrom(18.0); + break; + case 12: + acceptBetFrom(20.0); + break; + default: + cd.printErrorMessage(); + } + } + + + + public String startGame() { + return "Alright! Let's play Craps!"; + } + + public Double acceptBetFrom(Double betAmount) { + Double middleMan; + middleMan = c.getDoubleInput("How much money are you going to bet?"); + lastBet = player.makeBet(middleMan); + Integer index = (int) Math.round(betAmount); + betAmounts[index] = lastBet; + bets[index] = true; + return lastBet; + } + + public Double calculateReward() { + return null; + } + + public Double calculateLoss() { + return null; + } + + public String endGame() { + return "That's the end of the round!"; + } + +} + + + + + + + diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef25eeb1c..ef9060f54 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,7 +3,10 @@ public class Main { public static void main(String args[]) { - Casino casino = new Casino(); - casino.run(); + //Casino casino = new Casino(); + //casino.run(); + CrapsV2 crapsv2 = new CrapsV2(new Player("Hazel", 1000.0)); + crapsv2.crapsEngine(); + } } From 7001f68f0c464ee1415d19982c3e6ee470531e60 Mon Sep 17 00:00:00 2001 From: hazel Date: Sun, 21 Mar 2021 16:17:59 -0400 Subject: [PATCH 69/72] CrapsV2 functional --- src/main/java/io/zipcoder/casino/CrapsV2.java | 249 +++++++++++++++++- 1 file changed, 242 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java index bc01b5fb1..d9b0d0431 100644 --- a/src/main/java/io/zipcoder/casino/CrapsV2.java +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -25,7 +25,7 @@ public class CrapsV2 extends DiceGame { private Boolean[] bets; private Double[] betAmounts; private Double lastBet; - private Integer point; + private Integer point = 0; Boolean haventAnswered; Boolean noPointSet; @@ -78,12 +78,42 @@ public void crapsEngine() { while (decisionUnmade) { cd.printSetTypeOfBet(); input = c.getIntegerInput("Type 0 for no bet, 2 for 'pass,' 3 for 'don't pass,' or 4 for a proposition."); - prePointOuterSwitch(input); + outerSwitch(input); + } + decisionUnmade = true; + if(firstRoll){ + cd.printComeOutRoll(); + firstRoll = false; + } + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPrePoint(x); + oneRollReset(); + if(x == 4 || x == 5 || x == 6 || x == 8 || x == 9 || x == 10){ + point = x; + noPointSet = false; + cd.printThatPoint(); + } else { + cd.printNoPoint(); } } - - + while(notSevenedOut) { + while (decisionUnmade) { + cd.printSetTypeOfBet(); + input = c.getIntegerInput("Type 0 for no bet, 2 for 'come,' 3 for 'don't come,' or 4 for a proposition."); + outerSwitch(input); + } + decisionUnmade = true; + Integer x = diceRollSum(2); + cd.printShooterRolled(x); + checkBetsPostPoint(x); + oneRollReset(); + if(x == 7){ + notSevenedOut = false; + d.setPrintCurrentDisplay(endGame()); + } + } } @@ -114,7 +144,7 @@ public void initialRulesPromptSwitch(Integer input) { } } - public void prePointOuterSwitch(Integer input) { + public void outerSwitch(Integer input) { switch(input){ case 1: cd.printRulesMenu1(); @@ -132,8 +162,14 @@ public void prePointOuterSwitch(Integer input) { decisionUnmade = false; break; case 4: - furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); - oneRollPropSwitch(furtherInput); + if (noPointSet) { + furtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + oneRollPropSwitch(furtherInput); + } + else{ + furtherInput = c.getIntegerInput("Type 1 to bet the field, 2 for a place bet, or 3 for a one-roll bet."); + postPointPropSwitch(furtherInput); + } break; default: cd.printErrorMessage(); @@ -192,7 +228,206 @@ public void oneRollPropSwitch(Integer input) { } } + public void postPointPropSwitch(Integer x){ + switch(furtherInput) { + case 1: + acceptBetFrom(4.0); + break; + case 2: + yetFurtherInput = c.getIntegerInput("Type the number you want to make your place bet on (4, 5, 6, 8, 9, or 10, but not the point."); + if (yetFurtherInput == point) { + cd.printErrorMessage(); + } + switch (yetFurtherInput) { + case 4: + acceptBetFrom(5.0); + break; + case 5: + acceptBetFrom(6.0); + break; + case 6: + acceptBetFrom(7.0); + break; + case 8: + acceptBetFrom(8.0); + break; + case 9: + acceptBetFrom(9.0); + break; + case 10: + acceptBetFrom(10.0); + break; + default: + cd.printErrorMessage(); + } + case 3: + yetFurtherInput = c.getIntegerInput("You can make a one roll bet. Type 2, 3, 4, 6, 7, 8, 10, 11, or 12 to bet on that number, 1 for craps, or 0 to cancel."); + oneRollPropSwitch(yetFurtherInput); + } + } + + public void checkBetsPrePoint(Integer x){ + checkBetsConst(x); + if(x == 2 && bets[1]){ //pass + player.makeBet(betAmounts[1] * 2); + cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); + } + if(x == 3 && bets[1]){ //pass + player.makeBet(betAmounts[1] * 2); + cd.printCraps(); + cd.printWinnings(betAmounts[1] * 2); + } + if(x == 7 && bets[0]){ //pass + player.makeBet(betAmounts[0] * 2); + cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); + } + if(x == 11 && bets[0]){ //pass + player.makeBet(betAmounts[0] * 2); + cd.printNatural(); + cd.printWinnings(betAmounts[0] * 2); + } + if(x == 12 && bets[1]){ //pass + player.makeBet(betAmounts[1]); + cd.printCraps(); + cd.printPush(); + } + } + + public void checkBetsPostPoint(Integer x){ + checkBetsConst(x); + if(x == point){ + bets[3] = false; + betAmounts[3] = 0.0; + } + if(x == 7){ + bets[2] = false; + betAmounts [2] = 0.0; + } + if(x == point && bets[2]){ + player.makeBet(betAmounts[2]); + cd.printShooterScores(); + cd.printWinnings(betAmounts[2]); + } + if(x == 7 && bets[3]){ + player.makeBet(betAmounts[3] * 2); + cd.printShooterSevenedOut(); + cd.printWinnings(betAmounts[3] * 2); + } + if(x == 3 && bets[4] || x == 4 && bets[4] || x == 9 && bets[4] || x == 10 && bets[4] || x == 11 && bets[4]){ + player.makeBet(betAmounts[4] * 2); + cd.printWinnings(betAmounts[4] * 2); + } + if(x == 2 && bets[4] || x == 12 && bets[4]){ + player.makeBet(betAmounts[4] * 4); + cd.printWinnings(betAmounts[4] * 4); + } + if(x == 4 && bets[5]){ + player.makeBet(betAmounts[5] * 2); + cd.printWinnings(betAmounts[5] * 2); + } + if(x == 5 && bets[6]){ + player.makeBet(betAmounts[6] * 2); + cd.printWinnings(betAmounts[6] * 2); + } + if(x == 6 && bets[7]){ + player.makeBet(betAmounts[7] * 2); + cd.printWinnings(betAmounts[7] * 2); + } + if(x == 8 && bets[8]){ + player.makeBet(betAmounts[8] * 2); + cd.printWinnings(betAmounts[8] * 2); + } + if(x == 9 && bets[9]){ + player.makeBet(betAmounts[9] * 2); + cd.printWinnings(betAmounts[9] * 2); + } + if(x == 10 && bets[10]){ + player.makeBet(betAmounts[10] * 2); + cd.printWinnings(betAmounts[10] * 2); + } + } + + public void checkBetsConst(Integer x){ + if(x == 2 && bets[19]){ + player.makeBet(betAmounts[19] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[19] * 60); + } + if(x == 2 && bets[12]){ + player.makeBet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); + } + if(x == 3 && bets[17]){ + player.makeBet(betAmounts[17] * 30); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[17] * 30); + } + if(x == 3 && bets[12]){ + player.makeBet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); + } + if(x == 4 && bets[15]){ + player.makeBet(betAmounts[15] * 14); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[15] * 14); + } + if(x == 6 && bets[13]){ + player.makeBet(betAmounts[13] * 18); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[13] * 18); + } + if(x == 7 && bets[11]){ + player.makeBet(betAmounts[11] * 8); + cd.printNatural(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[11] * 8); + } + if(x == 8 && bets[14]){ + player.makeBet(betAmounts[14] * 18); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[14] * 18); + } + if(x == 10 && bets[16]){ + player.makeBet(betAmounts[16] * 14); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[16] * 14); + } + if(x == 11 && bets[18]){ + player.makeBet(betAmounts[18] * 30); + cd.printOneRollBetWin(); + cd.printNatural(); + cd.printWinnings(betAmounts[18] * 30); + } + if(x == 12 && bets[20]){ + player.makeBet(betAmounts[20] * 60); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[20] * 60); + } + if(x == 12 && bets[12]){ + player.makeBet(betAmounts[12] * 14); + cd.printCraps(); + cd.printOneRollBetWin(); + cd.printWinnings(betAmounts[12] * 14); + } + } + public void oneRollReset(){ + bets[4] = false; + betAmounts[4] = 0.0; + for(int i = 11; i < 21; i++){ + bets[i] = false; + betAmounts[i] = 0.0; + } + } public String startGame() { return "Alright! Let's play Craps!"; From 74f415ac03b654495d0916f541da4de485533a67 Mon Sep 17 00:00:00 2001 From: hazel Date: Sun, 21 Mar 2021 16:59:39 -0400 Subject: [PATCH 70/72] Neatened CrapsV2 --- src/main/java/io/zipcoder/casino/CrapsV2.java | 44 +++++-------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java index d9b0d0431..bef51a78e 100644 --- a/src/main/java/io/zipcoder/casino/CrapsV2.java +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -16,22 +16,22 @@ public class CrapsV2 extends DiceGame { private Player player; private CrapsDisplay cd; - private Integer input; - private Integer innerInput; - private Integer furtherInput; - private Integer yetFurtherInput; + private Integer input = 0; + private Integer innerInput = 0; + private Integer furtherInput = 0; + private Integer yetFurtherInput = 0; private Boolean[] outcomes; private Boolean[] bets; private Double[] betAmounts; - private Double lastBet; + private Double lastBet = 0.0; private Integer point = 0; - Boolean haventAnswered; - Boolean noPointSet; - Boolean firstRoll; - Boolean decisionUnmade; - Boolean notSevenedOut; + Boolean haventAnswered = true; + Boolean noPointSet = true; + Boolean firstRoll = true; + Boolean decisionUnmade = true; + Boolean notSevenedOut = true; public CrapsV2(Player player) { this.in = System.in; @@ -41,20 +41,9 @@ public CrapsV2(Player player) { this.player = player; this.cd = new CrapsDisplay(); - this.input = 0; - this.innerInput = 0; - this.furtherInput = 0; - this.outcomes = new Boolean[21]; this.bets = new Boolean[21]; this.betAmounts = new Double[21]; - this.lastBet = 0.0; - - haventAnswered = true; - noPointSet = true; - firstRoll = true; - decisionUnmade = true; - notSevenedOut = true; for (int i = 0; i < 21; i++) { outcomes[i] = false; @@ -69,7 +58,6 @@ public CrapsV2(Player player) { } } - public void crapsEngine() { this.initialRulesPrompt(); @@ -116,8 +104,6 @@ public void crapsEngine() { } } - - public void initialRulesPrompt(){ cd.initalRulesAsk(); while(haventAnswered){ @@ -126,7 +112,6 @@ public void initialRulesPrompt(){ } } - public void initialRulesPromptSwitch(Integer input) { switch (input) { case 1: @@ -455,11 +440,4 @@ public String endGame() { return "That's the end of the round!"; } -} - - - - - - - +} \ No newline at end of file From b0d6d75db6a4ad3e9b8d0961fb59f9ab9e33636e Mon Sep 17 00:00:00 2001 From: hazel Date: Mon, 22 Mar 2021 08:09:47 -0400 Subject: [PATCH 71/72] Updating --- src/main/java/io/zipcoder/casino/Casino.java | 2 +- src/main/java/io/zipcoder/casino/CrapsV2.java | 4 ++++ src/main/java/io/zipcoder/casino/Main.java | 7 ++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java index 99fce7166..a165a1fbc 100644 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/Casino.java @@ -91,7 +91,7 @@ public void gamesMenu() { break; case 2: - Craps craps = new Craps(currentPlayer); + CrapsV2 craps = new CrapsV2(currentPlayer); craps.crapsEngine(); break; diff --git a/src/main/java/io/zipcoder/casino/CrapsV2.java b/src/main/java/io/zipcoder/casino/CrapsV2.java index bef51a78e..d46c1fdc8 100644 --- a/src/main/java/io/zipcoder/casino/CrapsV2.java +++ b/src/main/java/io/zipcoder/casino/CrapsV2.java @@ -418,6 +418,10 @@ public String startGame() { return "Alright! Let's play Craps!"; } + public Double setPurse(Double betAmount) { + return null; + } + public Double acceptBetFrom(Double betAmount) { Double middleMan; middleMan = c.getDoubleInput("How much money are you going to bet?"); diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef9060f54..ef25eeb1c 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,10 +3,7 @@ public class Main { public static void main(String args[]) { - //Casino casino = new Casino(); - //casino.run(); - CrapsV2 crapsv2 = new CrapsV2(new Player("Hazel", 1000.0)); - crapsv2.crapsEngine(); - + Casino casino = new Casino(); + casino.run(); } } From bb682167ff7e6b37accb2ca5e10c2e04e3656829 Mon Sep 17 00:00:00 2001 From: hazel Date: Mon, 22 Mar 2021 08:18:57 -0400 Subject: [PATCH 72/72] Updating --- src/main/java/io/zipcoder/casino/Main.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index ef9060f54..60ae39d65 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -3,10 +3,8 @@ public class Main { public static void main(String args[]) { - //Casino casino = new Casino(); - //casino.run(); - CrapsV2 crapsv2 = new CrapsV2(new Player("Hazel", 1000.0)); - crapsv2.crapsEngine(); + Casino casino = new Casino(); + casino.run(); } }

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