From 677f8a1fe592117de5aa28d75fca7a8f213e31b3 Mon Sep 17 00:00:00 2001 From: Pavel Date: Sun, 19 Nov 2017 20:44:07 -0500 Subject: [PATCH 01/46] "UML in progress" --- pom.xml | 17 ++++++++++ src/main/java/io/zipcoder/casino/Casino.java | 5 --- .../io/zipcoder/casino/casino/Casino.java | 16 ++++++++++ .../java/io/zipcoder/casino/casino/Games.java | 9 ++++++ .../io/zipcoder/casino/games/CardGame.java | 7 +++++ .../java/io/zipcoder/casino/games/Gamble.java | 7 +++++ .../java/io/zipcoder/casino/games/Game.java | 7 +++++ .../casino/games/blackjack/BlackJack.java | 15 +++++++++ .../games/blackjack/BlackJackPlayer.java | 24 ++++++++++++++ .../io/zipcoder/casino/games/craps/Craps.java | 31 +++++++++++++++++++ .../casino/games/craps/CrapsPlayer.java | 11 +++++++ .../zipcoder/casino/games/gofish/GoFish.java | 9 ++++++ .../casino/games/gofish/GoFishPlayer.java | 9 ++++++ .../io/zipcoder/casino/nuts_n_bolts/Dice.java | 21 +++++++++++++ .../zipcoder/casino/nuts_n_bolts/Player.java | 17 ++++++++++ .../io/zipcoder/casino/nuts_n_bolts/Pot.java | 17 ++++++++++ .../nuts_n_bolts/cards/PlayingCard.java | 21 +++++++++++++ .../nuts_n_bolts/cards/PlayingDeck.java | 17 ++++++++++ .../nuts_n_bolts/cards/PlayingSuit.java | 10 ++++++ .../nuts_n_bolts/cards/PlayingValue.java | 19 ++++++++++++ .../java/io/zipcoder/casino/CasinoTest.java | 5 --- .../io/zipcoder/casino/casino/CasinoTest.java | 5 +++ 22 files changed, 289 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/io/zipcoder/casino/Casino.java create mode 100644 src/main/java/io/zipcoder/casino/casino/Casino.java create mode 100644 src/main/java/io/zipcoder/casino/casino/Games.java create mode 100644 src/main/java/io/zipcoder/casino/games/CardGame.java create mode 100644 src/main/java/io/zipcoder/casino/games/Gamble.java create mode 100644 src/main/java/io/zipcoder/casino/games/Game.java create mode 100644 src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java create mode 100644 src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java create mode 100644 src/main/java/io/zipcoder/casino/games/craps/Craps.java create mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java create mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFish.java create mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java delete mode 100644 src/test/java/io/zipcoder/casino/CasinoTest.java create mode 100644 src/test/java/io/zipcoder/casino/casino/CasinoTest.java diff --git a/pom.xml b/pom.xml index c6ec0cc8..d527a141 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ io.zipcoder casino 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + @@ -16,4 +28,9 @@ test + + + 1.8 + 1.8 + diff --git a/src/main/java/io/zipcoder/casino/Casino.java b/src/main/java/io/zipcoder/casino/Casino.java deleted file mode 100644 index 74dfdd8c..00000000 --- a/src/main/java/io/zipcoder/casino/Casino.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.zipcoder.casino; - - -public class Casino { -} diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java new file mode 100644 index 00000000..61aac9a0 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -0,0 +1,16 @@ +package io.zipcoder.casino.casino; + + +public class Casino { + + private Double playerMoney; + + public void startCasino(){} + + private void pickGame(Games game){ + //switch case to game of choice + } + + + +} diff --git a/src/main/java/io/zipcoder/casino/casino/Games.java b/src/main/java/io/zipcoder/casino/casino/Games.java new file mode 100644 index 00000000..cc17c4ae --- /dev/null +++ b/src/main/java/io/zipcoder/casino/casino/Games.java @@ -0,0 +1,9 @@ +package io.zipcoder.casino.casino; + +public enum Games { + + CRAPS, + GOFISH, + BLACKJACK + +} diff --git a/src/main/java/io/zipcoder/casino/games/CardGame.java b/src/main/java/io/zipcoder/casino/games/CardGame.java new file mode 100644 index 00000000..d181a940 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/CardGame.java @@ -0,0 +1,7 @@ +package io.zipcoder.casino.games; + +public abstract class CardGame implements Game { + + + +} diff --git a/src/main/java/io/zipcoder/casino/games/Gamble.java b/src/main/java/io/zipcoder/casino/games/Gamble.java new file mode 100644 index 00000000..66a7e677 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/Gamble.java @@ -0,0 +1,7 @@ +package io.zipcoder.casino.games; + +public interface Gamble { + + public void takeBet(Double bet); + +} diff --git a/src/main/java/io/zipcoder/casino/games/Game.java b/src/main/java/io/zipcoder/casino/games/Game.java new file mode 100644 index 00000000..d7ce40fb --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/Game.java @@ -0,0 +1,7 @@ +package io.zipcoder.casino.games; + +public interface Game { + + public void play(); + +} diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java new file mode 100644 index 00000000..49e1511f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -0,0 +1,15 @@ +package io.zipcoder.casino.games.blackjack; + +import io.zipcoder.casino.games.CardGame; +import io.zipcoder.casino.games.Gamble; + +public class BlackJack extends CardGame implements Gamble { + + public void play() { + + } + + public void takeBet(Double bet) { + + } +} diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java new file mode 100644 index 00000000..004c2e8e --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java @@ -0,0 +1,24 @@ +package io.zipcoder.casino.games.blackjack; + +import io.zipcoder.casino.nuts_n_bolts.Player; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; + +import java.util.ArrayList; + +public class BlackJackPlayer extends Player{ + + + private ArrayList hand; + private Double money; + + private BlackJackPlayer(String name){ + super(name); + } + + public BlackJackPlayer(Player player, Double startingMoney) { + this.name = player.getName(); + this.money = money; + } + + +} diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java new file mode 100644 index 00000000..4a688b34 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -0,0 +1,31 @@ +package io.zipcoder.casino.games.craps; + +import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.nuts_n_bolts.Dice; +import io.zipcoder.casino.nuts_n_bolts.Player; + +import java.util.ArrayList; + +public class Craps implements Game, Gamble { + + //2 players + //roll to decide first, highest wins + //both make a bet -> pot + //decide if bet is pass or don't pass + //player throwin dice = shooter + //roll 2 dice 7/11 on first roll -> win + // 2/3/12 on first roll -> lose + //come/don't come bets + + private ArrayList players; + private Dice dice = new Dice<>(1,2,3,4,5,6); + + public void play() { + + } + + public void takeBet(Double bet) { + + } +} diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java new file mode 100644 index 00000000..d9e3afd2 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java @@ -0,0 +1,11 @@ +package io.zipcoder.casino.games.craps; + +import io.zipcoder.casino.nuts_n_bolts.Player; + +public class CrapsPlayer extends Player { + + public CrapsPlayer(Double startingMoney) { + super(startingMoney); + } + +} diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java new file mode 100644 index 00000000..14635b2d --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -0,0 +1,9 @@ +package io.zipcoder.casino.games.gofish; + +import io.zipcoder.casino.games.CardGame; + +public class GoFish extends CardGame { + public void play() { + + } +} diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java new file mode 100644 index 00000000..6163952e --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java @@ -0,0 +1,9 @@ +package io.zipcoder.casino.games.gofish; + +import io.zipcoder.casino.nuts_n_bolts.Player; + +public class GoFishPlayer extends Player { + public GoFishPlayer(String name) { + super(name); + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java new file mode 100644 index 00000000..a64b4fd3 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java @@ -0,0 +1,21 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import java.util.ArrayList; + +public class Dice { + + private E[] sides; + + public Dice(E... sides){ + this.sides = sides; + } + + public E[] getAllSides(){ + return null; + } + + public E rollDie(){ + return null; + } + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java new file mode 100644 index 00000000..cf55afed --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java @@ -0,0 +1,17 @@ +package io.zipcoder.casino.nuts_n_bolts; + +public class Player { + + protected String name; + + public Player(String name){ + this.name = name; + } + + protected Player() { + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java new file mode 100644 index 00000000..5be94508 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java @@ -0,0 +1,17 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import io.zipcoder.casino.games.Gamble; + +public class Pot { + + private Double money; + + public Double getMoney() { + return money; + } + + public void setMoney(Double money) { + this.money = money; + } + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java new file mode 100644 index 00000000..0b61175a --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java @@ -0,0 +1,21 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +public class PlayingCard { + + private PlayingSuit suit; + private PlayingValue value; + + public PlayingCard(PlayingSuit suit, PlayingValue value){ + this.suit = suit; + this.value = value; + } + + public PlayingSuit getSuit() { + return suit; + } + + public PlayingValue getValue() { + return value; + } + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java new file mode 100644 index 00000000..35df40ee --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java @@ -0,0 +1,17 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +import java.util.ArrayList; + +public class PlayingDeck { + + private ArrayList cards; + + public PlayingDeck(){} + + public void shuffle(){} + + public void populate(){} + + public void countLeft(){} + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java new file mode 100644 index 00000000..3990c379 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java @@ -0,0 +1,10 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +public enum PlayingSuit { + + HEART, + DIAMOND, + CLUB, + SPADE + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java new file mode 100644 index 00000000..a4eec64f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java @@ -0,0 +1,19 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +public enum PlayingValue { + + TWO, + THREE, + FOUR, + FIVE, + SIX, + SEVEN, + EIGHT, + NINE, + TEN, + JACK, + QUEEN, + KING, + ACE + +} diff --git a/src/test/java/io/zipcoder/casino/CasinoTest.java b/src/test/java/io/zipcoder/casino/CasinoTest.java deleted file mode 100644 index e9286523..00000000 --- a/src/test/java/io/zipcoder/casino/CasinoTest.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.zipcoder.casino; - - -public class CasinoTest { -} diff --git a/src/test/java/io/zipcoder/casino/casino/CasinoTest.java b/src/test/java/io/zipcoder/casino/casino/CasinoTest.java new file mode 100644 index 00000000..61c7fc22 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/casino/CasinoTest.java @@ -0,0 +1,5 @@ +package io.zipcoder.casino.casino; + + +public class CasinoTest { +} From f7a140d0b5698b42a5bb6ac975701cdd616d8687 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 14:30:27 -0500 Subject: [PATCH 02/46] "Stubby stub" --- UserStories | 53 +++++++++++++++++++ .../io/zipcoder/casino/casino/Casino.java | 15 +++++- .../io/zipcoder/casino/games/CardGame.java | 4 +- .../java/io/zipcoder/casino/games/Gamble.java | 1 + .../casino/games/blackjack/BlackJack.java | 53 +++++++++++++++++++ .../games/blackjack/BlackJackPlayer.java | 24 --------- .../io/zipcoder/casino/games/craps/Craps.java | 27 +++++++++- .../casino/games/craps/CrapsPlayer.java | 11 ---- .../zipcoder/casino/games/gofish/GoFish.java | 22 ++++++++ .../casino/games/gofish/GoFishPlayer.java | 9 ++-- .../zipcoder/casino/nuts_n_bolts/Player.java | 17 ------ .../io/zipcoder/casino/nuts_n_bolts/Pot.java | 11 +++- .../io/zipcoder/casino/nuts_n_bolts/User.java | 27 ++++++++++ .../nuts_n_bolts/cards/PlayingDeck.java | 7 ++- 14 files changed, 216 insertions(+), 65 deletions(-) create mode 100644 UserStories delete mode 100644 src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java delete mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java delete mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java diff --git a/UserStories b/UserStories new file mode 100644 index 00000000..31c13cfe --- /dev/null +++ b/UserStories @@ -0,0 +1,53 @@ +THEME - Casino + +EPIC - as a Casino owner + +I want to have a casino +I want that casino to have 3 games +I want to make lots of money + I want to win more than I lose +I want players to come in and play my games +//I want to keep track of my revenues/expenses +I want to ban broke players from playing gambling games, but still allow free games + +User story - as a player + + I want to come into the casino + I want to keep track of my money as I play games + I would like to be able to go home while not in a game + + Games: + I want to play a game + I want to decide if it's a gambling kind of game or not + //I want to decide if any game is gambling or not + I want to be able to decide how many other people to play with (pick tables) + I want to be able to quit at any time (forfeit bet if gambling game) + + Gambling Games: + I want to decide if and how much I bet (can't bet more than wallet, must have at least minimum to play) + I want to be paid fair odds + //Decide betting limits + + Card Games: + I want to keep track of my hand + I want to play with a fair deck + I want to be able to draw cards + I want to be able to move cards around (hand->another player, discard, etc) + I want to be able to see the playing area + + Dice Games: + I want to be able to roll the dice + I want to play with fair dice + + I want to be able to play BlackJack + + I want to decide if I hit or stay + + I want to be able to play GoFish + + I want to ask give me all your X, and get an honest answer + + + I want to be able to play Craps + + //Side bets diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index 61aac9a0..88a8615b 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -1,9 +1,20 @@ package io.zipcoder.casino.casino; +import io.zipcoder.casino.nuts_n_bolts.Player; public class Casino { - private Double playerMoney; + private static Casino INSTANCE = null; + private Player player; + + private Casino(){} + + public static Casino getInstance(){ + if(INSTANCE == null){ + INSTANCE = new Casino(); + } + return INSTANCE; + } public void startCasino(){} @@ -11,6 +22,6 @@ private void pickGame(Games game){ //switch case to game of choice } - + private void exitCasino(){} } diff --git a/src/main/java/io/zipcoder/casino/games/CardGame.java b/src/main/java/io/zipcoder/casino/games/CardGame.java index d181a940..1459ce02 100644 --- a/src/main/java/io/zipcoder/casino/games/CardGame.java +++ b/src/main/java/io/zipcoder/casino/games/CardGame.java @@ -1,7 +1,9 @@ package io.zipcoder.casino.games; -public abstract class CardGame implements Game { +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; +public abstract class CardGame implements Game { + protected PlayingDeck deck; } diff --git a/src/main/java/io/zipcoder/casino/games/Gamble.java b/src/main/java/io/zipcoder/casino/games/Gamble.java index 66a7e677..0fb26345 100644 --- a/src/main/java/io/zipcoder/casino/games/Gamble.java +++ b/src/main/java/io/zipcoder/casino/games/Gamble.java @@ -3,5 +3,6 @@ public interface Gamble { public void takeBet(Double bet); + public void settleBet(); } diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index 49e1511f..4c59beaa 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -2,14 +2,67 @@ import io.zipcoder.casino.games.CardGame; import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.Pot; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; + +import java.util.ArrayList; public class BlackJack extends CardGame implements Gamble { + private Pot pot; + private ArrayList users; + + @Override public void play() { } + @Override public void takeBet(Double bet) { + //match biggest bet + } + + @Override + public void settleBet() { + + } + + public void evaluatePointsInHand(){} + + + + //setup game: + //enter user, enter dealer, get fresh deck + //start game + //make bet + //deal 2 cards each, dealer shows one + //hit or stay? + //dealer hits or stays + //resolve winner + //resolve bets + //would you like to go another round? + + private class BlackJackPlayer{ + + private ArrayList hand = new ArrayList<>(); + private User user; + + public BlackJackPlayer(User user) { + this.user = user; + } + + public void makeABet(Double money){} + + public void winABet(Double money){} + + public void hit(){} + + public void stay(){} + + } + } diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java deleted file mode 100644 index 004c2e8e..00000000 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackPlayer.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.zipcoder.casino.games.blackjack; - -import io.zipcoder.casino.nuts_n_bolts.Player; -import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; - -import java.util.ArrayList; - -public class BlackJackPlayer extends Player{ - - - private ArrayList hand; - private Double money; - - private BlackJackPlayer(String name){ - super(name); - } - - public BlackJackPlayer(Player player, Double startingMoney) { - this.name = player.getName(); - this.money = money; - } - - -} diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 4a688b34..579e6aaf 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -3,7 +3,8 @@ import io.zipcoder.casino.games.Gamble; import io.zipcoder.casino.games.Game; import io.zipcoder.casino.nuts_n_bolts.Dice; -import io.zipcoder.casino.nuts_n_bolts.Player; +import io.zipcoder.casino.nuts_n_bolts.Pot; +import io.zipcoder.casino.nuts_n_bolts.User; import java.util.ArrayList; @@ -18,14 +19,36 @@ public class Craps implements Game, Gamble { // 2/3/12 on first roll -> lose //come/don't come bets - private ArrayList players; + private ArrayList players; private Dice dice = new Dice<>(1,2,3,4,5,6); + private Pot pot; public void play() { } + @Override public void takeBet(Double bet) { } + + @Override + public void settleBet() { + + } + + private class CrapsPlayer { + + private User user; + + public CrapsPlayer(User user) { + this.user = user; + } + + public void makeABet(Double money) { + } + + public void winABet(Double money) { + } + } } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java deleted file mode 100644 index d9e3afd2..00000000 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsPlayer.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.zipcoder.casino.games.craps; - -import io.zipcoder.casino.nuts_n_bolts.Player; - -public class CrapsPlayer extends Player { - - public CrapsPlayer(Double startingMoney) { - super(startingMoney); - } - -} diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index 14635b2d..b4a86866 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -1,9 +1,31 @@ package io.zipcoder.casino.games.gofish; import io.zipcoder.casino.games.CardGame; +import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; + +import java.util.ArrayList; public class GoFish extends CardGame { + public void play() { } + + private class GoFishPlayer { + + private double score = 0; + private User user; + private ArrayList hand = new ArrayList<>(); + + public GoFishPlayer(User user){ + this.user = user; + } + + public void askForCards(GoFishPlayer other){} + + private void getCards(GoFishPlayer other){} + + private void drawCard(){} + } } diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java index 6163952e..c88fb789 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java @@ -1,9 +1,8 @@ package io.zipcoder.casino.games.gofish; import io.zipcoder.casino.nuts_n_bolts.Player; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; + +import java.util.ArrayList; + -public class GoFishPlayer extends Player { - public GoFishPlayer(String name) { - super(name); - } -} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java deleted file mode 100644 index cf55afed..00000000 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Player.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.zipcoder.casino.nuts_n_bolts; - -public class Player { - - protected String name; - - public Player(String name){ - this.name = name; - } - - protected Player() { - } - - public String getName() { - return name; - } -} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java index 5be94508..4f8972c5 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java @@ -4,14 +4,21 @@ public class Pot { - private Double money; + private Double money = 0d; public Double getMoney() { return money; } - public void setMoney(Double money) { + public void addToPot(Double money) { this.money = money; } + public Double takeOutOfPot (Double money){ + return null; //check request < pot + } + + public Double takeAllOutOfPot(){ + return null; + } } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java new file mode 100644 index 00000000..0ef1cc9f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java @@ -0,0 +1,27 @@ +package io.zipcoder.casino.nuts_n_bolts; + +public class User { + + protected String name; + protected Double money; + + public User(String name, Double money){ + this.name = name; + } + + public String getName() { + return name; + } + + public Double getMoney() { + return money; + } + + public void gainMoney(Double money){ + + } + + public void loseMoney(Double money){ + //check to see if money < this.money + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java index 35df40ee..b87bd367 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java @@ -10,8 +10,13 @@ public PlayingDeck(){} public void shuffle(){} - public void populate(){} + public void reset(){} public void countLeft(){} + public PlayingCard draw(){ + //remove the card you drew from the deck + return null; + } + } From df80438a480af6181bd47e36cc760e864d15d526 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 15:24:09 -0500 Subject: [PATCH 03/46] "Stubbed test classes" --- .../zipcoder/casino/games/gofish/GoFish.java | 26 ++++++++++++++++--- .../casino/games/gofish/GoFishPlayer.java | 8 ------ .../games/blackjack/BlackJackPlayerTest.java | 4 +++ .../casino/games/blackjack/BlackJackTest.java | 4 +++ .../casino/games/craps/CrapsPlayerTest.java | 4 +++ .../casino/games/craps/CrapsTest.java | 4 +++ .../casino/games/gofish/GoFishPlayerTest.java | 4 +++ .../casino/games/gofish/GoFishTest.java | 4 +++ .../casino/nuts_n_bolts/DiceTest.java | 4 +++ .../zipcoder/casino/nuts_n_bolts/PotTest.java | 4 +++ .../casino/nuts_n_bolts/UserTest.java | 4 +++ .../nuts_n_bolts/cards/PlayingCardTest.java | 4 +++ .../nuts_n_bolts/cards/PlayingDeckTest.java | 4 +++ 13 files changed, 67 insertions(+), 11 deletions(-) delete mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java create mode 100644 src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java create mode 100644 src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java create mode 100644 src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java create mode 100644 src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java create mode 100644 src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java create mode 100644 src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index b4a86866..3684e08a 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -3,29 +3,49 @@ import io.zipcoder.casino.games.CardGame; import io.zipcoder.casino.nuts_n_bolts.User; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; import java.util.ArrayList; public class GoFish extends CardGame { + private ArrayList players; + + public GoFish(Integer numberOfCompPlayers){ + + } + public void play() { } + private GoFishPlayer createCompPlayer(){ + return null; + } + + private void shufflePlayerOrder(){} + + private void isHandEmpty(){} + private class GoFishPlayer { - private double score = 0; private User user; private ArrayList hand = new ArrayList<>(); + private PlayingValue askedValue = null; public GoFishPlayer(User user){ this.user = user; } - public void askForCards(GoFishPlayer other){} + public void askForCards(GoFishPlayer other, PlayingValue value){} - private void getCards(GoFishPlayer other){} + private void getCards(GoFishPlayer other, PlayingValue value){} private void drawCard(){} + + private Boolean hasFourOfKind(){} + + private void discardFourOfKind(){} + } } diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java deleted file mode 100644 index c88fb789..00000000 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFishPlayer.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.zipcoder.casino.games.gofish; - -import io.zipcoder.casino.nuts_n_bolts.Player; -import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; - -import java.util.ArrayList; - - diff --git a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java new file mode 100644 index 00000000..f05e2dd9 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.games.blackjack; + +public class BlackJackPlayerTest { +} diff --git a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java new file mode 100644 index 00000000..590ebb8c --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.games.blackjack; + +public class BlackJackTest { +} diff --git a/src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java b/src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java new file mode 100644 index 00000000..f7f4519c --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.games.craps; + +public class CrapsPlayerTest { +} diff --git a/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java b/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java new file mode 100644 index 00000000..ce48fa31 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.games.craps; + +public class CrapsTest { +} diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java new file mode 100644 index 00000000..19445e33 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.games.gofish; + +public class GoFishPlayerTest { +} diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java new file mode 100644 index 00000000..033160ee --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.games.gofish; + +public class GoFishTest { +} diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java new file mode 100644 index 00000000..342c6484 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.nuts_n_bolts; + +public class DiceTest { +} diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java new file mode 100644 index 00000000..6060f08e --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.nuts_n_bolts; + +public class PotTest { +} diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java new file mode 100644 index 00000000..3214ffac --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.nuts_n_bolts; + +public class UserTest { +} diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java new file mode 100644 index 00000000..b968135d --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +public class PlayingCardTest { +} diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java new file mode 100644 index 00000000..ad3fc972 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +public class PlayingDeckTest { +} From 5ccb41a70f3a9f09dbb0b19ed0855334314e9861 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 15:55:04 -0500 Subject: [PATCH 04/46] "Copied all old BlackJack stuff into comments for respective classes" --- .../casino/games/blackjack/BlackJack.java | 83 ++++++++ .../io/zipcoder/casino/games/craps/Craps.java | 2 + .../zipcoder/casino/nuts_n_bolts/Console.java | 201 ++++++++++++++++++ .../io/zipcoder/casino/nuts_n_bolts/User.java | 88 ++++++++ .../nuts_n_bolts/cards/PlayingCard.java | 34 +++ .../nuts_n_bolts/cards/PlayingDeck.java | 47 ++++ .../nuts_n_bolts/cards/PlayingSuit.java | 11 +- .../nuts_n_bolts/cards/PlayingValue.java | 29 +-- .../casino/games/blackjack/BlackJackTest.java | 191 +++++++++++++++++ .../casino/nuts_n_bolts/ConsoleTest.java | 97 +++++++++ .../casino/nuts_n_bolts/UserTest.java | 137 ++++++++++++ .../nuts_n_bolts/cards/PlayingCardTest.java | 28 ++- .../nuts_n_bolts/cards/PlayingDeckTest.java | 49 +++++ 13 files changed, 979 insertions(+), 18 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index 4c59beaa..a31097a4 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -66,3 +66,86 @@ public void stay(){} } } + + + +/* +* private Player player; + private Deck deck; + private Player dealer; + private Double pot; + + public Game(){ + player = new Player(); + deck = new Deck(); + dealer = new Player("Dealer"); + deck.shuffle(); + pot = 0.0; + } + + public Double getPot() { + return pot; + } + + public void addToPot(Double amount) { + this.pot += amount; + } + + public Player getPlayer() { + return player; + } + + public Player getDealer() { + return dealer; + } + + public void start() { + + //Deal two cards to the player and the dealer + for (int i = 0; i < 2; i++) + { + dealCard(player); + dealCard(dealer); + } + + } + + public boolean playerWins() { + // if both player and dealer scores are = to 21 dealer wins + // if both player and dealer score are over 21 then dealer wins + // if player's score is <= 21 and players score is greater than dealers score then player wins. + //if dealer's score is > 21 and player's score is <= 21 then players wins. + player.calculateScore(); + dealer.calculateScore(); + + if( (player.getScore().equals(21) && !dealer.getScore().equals(21)) || + (player.getScore()<21 && dealer.getScore() < player.getScore()) || + (player.getScore() < 21 && dealer.getScore() > 21)) { + //Player wins + return true; + } + //Dealer wins + return false; + } + + public void dealCard(Player playerToReceiveCard){ + Card card = deck.getCard(); + playerToReceiveCard.addToHand(card); + } + + public void dealerHitUntilFinished() { + while (dealer.calculateScore() <= 17) + { + dealCard(dealer); + } + } + + public void returnBet() { + if (playerWins()) { + player.receiveWinnings(pot * 2); + } + else { + this.pot = 0.0; + } + } +* */ diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 579e6aaf..34c72f8f 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -41,6 +41,8 @@ private class CrapsPlayer { private User user; + + public CrapsPlayer(User user) { this.user = user; } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java new file mode 100644 index 00000000..66a566a7 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -0,0 +1,201 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import java.util.Scanner; + +public class Console { +/* + private static final double MIN_BET_ALLOWED=0.01; + + private static Game game = new Game(); + private static Scanner scanner = new Scanner (System.in); + + public static void run(){ + + Player userPlayer = game.getPlayer(); + + System.out.print("" + + " ____ _ _ _ _ \n" + + "| __ ) | | __ _ ___| | __(_) __ _ ___| | __\n" + + "| \\ | |/ _` |/ __| |/ /| |/ ` |/ __| |/ / \n" + + "| |_) || | (_| | (__| | < | | (_| | (__| < \n" + + "|____/ |_|\\__,_|\\___|_|\\_\\| |\\__,_|\\___|_|\\_\\ \n" + + " |__/ \n" + + "+--------------------------------------------+" + + "\n\nWelcome to the table!" + + "\n\nWhat's your name? "); + + String userName = getInput(); + userPlayer.setName(userName); + + System.out.println("Hello, " + userName + "!"); + + System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); + + do { + game.start(); + playerBets(userPlayer); + displayPlayerHandAndScore(userPlayer); + displayDealerCardShowing(); + playerHitsOrStays(userPlayer); + game.dealerHitUntilFinished(); + determineWinOrLoss(userPlayer); + } while (playerStaysForAnotherRound(userPlayer)); + + System.out.println("\nThanks for playing! Goodbye!"); + } + + private static boolean playerStaysForAnotherRound(Player userPlayer) { + String input; + System.out.println("\nYou have $" + forceTwoDecimalDouble(userPlayer.getMoney().toString())); + if (userPlayer.getMoney() >= 0.01) { + do { + System.out.print("\nStay for another round? [Yes/No] "); + input = getInput(); + if (isInputYesOrNo(input)) + { + return ("yes".equalsIgnoreCase(input)); + } + } while (!isInputYesOrNo(input)); + + } + else { + System.out.println("\nYou are out of money."); + } + return false; + } + + private static void determineWinOrLoss(Player userPlayer){ + + if (game.playerWins()) { + System.out.println("\nPlayer wins!"); + } else { + System.out.println("\nHouse wins!"); + } + System.out.println("\nHouse has score: " + game.getDealer().getScore()); + resetPotAndDiscardHands(userPlayer); + } + + private static void resetPotAndDiscardHands(Player userPlayer){ + game.returnBet(); + userPlayer.getHand().clear(); + game.getDealer().getHand().clear(); + } + + private static void playerHitsOrStays(Player userPlayer){ + String input; + do { + input=forceHitOrStay(); + if ("hit".equalsIgnoreCase(input)) { + game.dealCard(userPlayer); + } + displayPlayerHandAndScore(userPlayer); + } while ("hit".equalsIgnoreCase(input) && (userPlayer.calculateScore() <= 21)); + } + + private static String forceHitOrStay(){ + String input; + do { + System.out.print("\nHit or stay? "); + input = getInput(); + } while (!isInputStayOrHit(input)); + return input; + } + + private static void displayDealerCardShowing(){ + System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); + } + + private static void displayPlayerHandAndScore(Player userPlayer){ + Card card; + for (int i=0; i=MIN_BET_ALLOWED; + } + + public static boolean isInputDouble(String passedString) + { + try { + Double output = Double.valueOf(passedString); + } catch (NumberFormatException e) { + return false; + } + return (true); + } + + public static boolean isInputStayOrHit(String passedString) + { + return ("hit".equalsIgnoreCase(passedString) || + "stay".equalsIgnoreCase(passedString)); + } + + public static boolean isInputYesOrNo(String passedString) + { + return ("yes".equalsIgnoreCase(passedString) || + "no".equalsIgnoreCase(passedString)); + } + + public static String forceTwoDecimalDouble(String input){ + if ( !(input.contains(".")) || + input.substring(input.indexOf("."), input.length()).length()==3) + { + return input; + } + else + { + if (input.substring(input.indexOf("."), input.length()).length()<3) { + do { + input = input + "0"; + } while (input.substring(input.indexOf("."), input.length()).length() < 3); + return input; + } + + input = input.substring(0,input.indexOf("."))+ + input.substring(input.indexOf("."), input.indexOf(".")+3); + return input; + } + + + }*/ +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java index 0ef1cc9f..35f82077 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java @@ -25,3 +25,91 @@ public void loseMoney(Double money){ //check to see if money < this.money } } + + +/* +* private ArrayList hand; + private String name; + private Double money; + private Integer score; + + public Player(){ + hand = new ArrayList(2); + name="Player"; + money = 500.0; + score = 0; + } + public Player(Double passedMoney){ + this(); + money=passedMoney; + } + public Player(String name, Double passedMoney){ + this(); + money=passedMoney; + this.name=name; + } + public Player(String name) { + this(); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name){ + this.name = name; + } + + public Double getMoney() { + return money; + } + + public Integer getScore() { + return score; + } + + public ArrayList getHand() { + return hand; + } + + // blackjack hit + public void addToHand(Card card) { + hand.add(card); + } + + public boolean hasMoneyToMakeBet(Double amount) { + return (amount <= money); + } + + public void makeBet(Double amount) { + money -= amount; + } + + public boolean isAceInHand() { + for(Card card: hand) { + if(card.getValue() == 1) { + return true; + } + } + return false; + } + + public Integer calculateScore() { + int sum = 0; + for(Card card: hand) { + sum += card.getValue(); + } + + if(isAceInHand() && sum <= 11) { + sum += 10; + } + score = sum; + + return sum; + } + + public void receiveWinnings(Double amount) { + money += amount; + } +* */ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java index 0b61175a..9c666dd7 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java @@ -19,3 +19,37 @@ public PlayingValue getValue() { } } + +/* + //From BlackJack + private String topCardRepresentation; + private String bottomCardRepresentation; + private static String middleCardRepresentation="| |\n"; + + private Card(){ + } + + @Override + public String toString(){ + return topCardRepresentation+middleCardRepresentation+bottomCardRepresentation; + } + public String getTopCardRepresentation(){ + return topCardRepresentation; + } + + + public Card(Suit passedSuit, Integer passedValue){ + this(passedSuit, passedValue, "X"); + } + public Card(Suit passedSuit, Integer passedValue, String passedSuitRepresentation){ + this(passedSuit, passedValue, passedSuitRepresentation, "Y"); + } + public Card(Suit passedSuit, Integer passedValue, String passedSuitRepresentation, String passedFaceRepresentation){ + suit=passedSuit; + value=passedValue; + topCardRepresentation=" ----- \n"+ + "|"+String.format("%2s%-3s", passedFaceRepresentation, passedSuitRepresentation)+"|\n"; + bottomCardRepresentation="|"+String.format("%4s%s", passedFaceRepresentation, passedSuitRepresentation)+"|\n"+ + " ----- \n"; + } + //*/ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java index b87bd367..43906264 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java @@ -1,6 +1,7 @@ package io.zipcoder.casino.nuts_n_bolts.cards; import java.util.ArrayList; +import java.util.Collections; public class PlayingDeck { @@ -20,3 +21,49 @@ public PlayingCard draw(){ } } + +/* + private ArrayList cards; + + public Deck(){ + populate(); + } + + public Card getCard(){ + if(cards.size() == 0) { + populate(); + shuffle(); + } + Card card = cards.get(0); + cards.remove(0); + return card; + } + + public ArrayList getAllCards(){ + return cards; + } + + + private void populate() { + cards = new ArrayList(); + for (Suit suit: Suit.values()) { + for (int value = 1; value <= 13; value++) + { + if (value < 11) + { + if (value==1) + cards.add(new Card(suit, value, Card.suitSymbols[suit.ordinal()], Card.faceSymbols[0])); + else + cards.add(new Card(suit, value, Card.suitSymbols[suit.ordinal()], ""+value)); + } + else + cards.add(new Card(suit, 10, Card.suitSymbols[suit.ordinal()], Card.faceSymbols[value - 10])); + + } + } + } + + public void shuffle(){ + Collections.shuffle(cards); + } + */ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java index 3990c379..07d5956a 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java @@ -2,9 +2,12 @@ public enum PlayingSuit { - HEART, - DIAMOND, - CLUB, - SPADE + HEART("♡"), + DIAMOND("♢"), + CLUB("♧"), + SPADE("♤"); + PlayingSuit(String symbol) { + + } } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java index a4eec64f..9760cd4c 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java @@ -2,18 +2,21 @@ public enum PlayingValue { - TWO, - THREE, - FOUR, - FIVE, - SIX, - SEVEN, - EIGHT, - NINE, - TEN, - JACK, - QUEEN, - KING, - ACE + TWO("2"), + THREE("3"), + FOUR("4"), + FIVE("5"), + SIX("6"), + SEVEN("7"), + EIGHT("8"), + NINE("9"), + TEN("10"), + JACK("J"), + QUEEN("Q"), + KING("K"), + ACE("A"); + PlayingValue(String value) { + + } } diff --git a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java index 590ebb8c..672a6017 100644 --- a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java +++ b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java @@ -2,3 +2,194 @@ public class BlackJackTest { } + +/* +* @Test + public void getPot() { + Game game = new Game(); + Player player = game.getPlayer(); + Double expectedPot = 50.0; + player.makeBet(50.0); + game.addToPot(50.0); + Double actualPot = game.getPot(); + Assert.assertEquals(expectedPot, actualPot); + } + + @Test + public void startTest() { + Game game = new Game(); + game.start(); + int expectedNumberOfPlayerCards = 2; + int expectedNumberOfDealerCards = 2; + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + int actualNumberOfPlayerCards = player.getHand().size(); + int actualNumberOfDealerCards = dealer.getHand().size(); + + Assert.assertEquals(expectedNumberOfPlayerCards, actualNumberOfPlayerCards); + Assert.assertEquals(expectedNumberOfDealerCards, actualNumberOfDealerCards); + } + + @Test + public void playerWinsTest_True1() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(nine); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + + boolean expected = true; + + boolean actual = game.playerWins(); + + Assert.assertEquals(expected, actual); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + } + + @Test + public void playerWinsTest_True2() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(nine); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + dealer.addToHand(nine); + + boolean expected = true; + + boolean actual = game.playerWins(); + + Assert.assertEquals(expected, actual); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + } + + @Test + public void playerWinsTest_True3() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + + boolean expected = true; + + boolean actual = game.playerWins(); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + + Assert.assertEquals(expected, actual); + } + + @Test + public void playerWinsTest_False() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(ace); + + boolean expected = false; + + boolean actual = game.playerWins(); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + + Assert.assertEquals(expected, actual); + } + +// +// @Test +// public void hitPlayer() { +// Game game = new Game(); +// Player player = game.getPlayer(); +// int expectedHandSize = 1; +// game.askPlayerForHit(player); +// int actualHandSize = player.getHandSize(); +// Assert.assertEquals(expectedHandSize, actualHandSize); +// +// } + + @Test + public void dealerHitUntilFinished() { + Game game = new Game(); + Player dealer = game.getDealer(); + + boolean expected = true; + + game.dealerHitUntilFinished(); + boolean actual = (dealer.getHand().size() >= 2); + + Assert.assertEquals(expected, actual); + } + + @Test + public void returnBet() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + + Double expected = 550.0; + player.makeBet(50.0); + game.addToPot(50.0); + game.returnBet(); + Double actual = player.getMoney(); + Assert.assertEquals(expected, actual, .001); + } +* */ \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java new file mode 100644 index 00000000..4e40c2bb --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java @@ -0,0 +1,97 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class ConsoleTest { + + /*@Before + public void setUp(){ + } + + @Test + public void isInputDouble_PassTest(){ + + String input="50."; + boolean actual=Console.isInputDouble(input); + Assert.assertTrue(actual); + + } + + @Test + public void isInputDouble_FailTest(){ + + String input="asdasda"; + boolean actual=Console.isInputDouble(input); + Assert.assertFalse(actual); + + } + + @Test + public void issInputStayOrHit_PassTest(){ + String stay = "stay"; + String hit = "hit"; + + Assert.assertTrue(Console.isInputStayOrHit(stay)); + Assert.assertTrue(Console.isInputStayOrHit(hit)); + } + + @Test + public void isInputStayOrHit_FailTest(){ + String fail = "fail"; + + Assert.assertFalse(Console.isInputStayOrHit(fail)); + } + + @Test + public void isInputDoublePositive_PassTest(){ + String input = "50"; + + Assert.assertTrue(Console.isInputPositive(input)); + } + + @Test + public void isInputDoublePositive_FailTest(){ + String input = "-50"; + + Assert.assertFalse(Console.isInputPositive(input)); + } + + @Test + public void issInputYesOrNo_PassTest(){ + String stay = "yes"; + String hit = "no"; + + Assert.assertTrue(Console.isInputYesOrNo(stay)); + Assert.assertTrue(Console.isInputYesOrNo(hit)); + } + + @Test + public void isInputYesOrNo_FailTest(){ + String fail = "fail"; + + Assert.assertFalse(Console.isInputStayOrHit(fail)); + } + + @Test + public void forceTwoDecimalDoubleTest_PassTooMany(){ + String input="50.00000209"; + String expected="50.00"; + String actual=Console.forceTwoDecimalDouble(input); + + + Assert.assertTrue(expected.equals(actual)); + } + + @Test + public void forceTwoDecimalDoubleTest_PassTooFew(){ + String input="50."; + String expected="50.00"; + String actual=Console.forceTwoDecimalDouble(input); + + Assert.assertTrue(expected.equals(actual)); + } + */ + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java index 3214ffac..707244dc 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java @@ -2,3 +2,140 @@ public class UserTest { } + + +/* +* + @Test + public void getNameTest() { + //: Given + Player testPlayer = new Player("Gabriela"); + String expected = "Gabriela"; + + //: When + String actual = testPlayer.getName(); + + //: Then + Assert.assertEquals(expected, actual); + } + + @Test + public void getMoneyTest(){ + Player testPlayer = new Player("Claude"); + Double expected = 500d; + + Double actual = testPlayer.getMoney(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void getScoreTest(){ + Player testPlayer = new Player("Zan"); + Integer expected = Integer.valueOf(0); + + Integer actual = testPlayer.getScore(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void getHandTest(){ + Player testPlayer = new Player ("Aaron"); + testPlayer.addToHand(new Card(Suit.HEARTS, 8)); + testPlayer.addToHand(new Card(Suit.HEARTS, 7)); + int expected = 2; + + int actual = testPlayer.getHand().size(); + + Assert.assertEquals(expected, actual); + + } + + @Test + public void addCardTest(){ + Player testPlayer = new Player ("Pavel"); + Card card = new Card(Suit.CLUBS, 3); + testPlayer.addToHand(card); + Card expected = card; + + Card actual = testPlayer.getHand().get(0); + + Assert.assertEquals(expected, actual); + + } + + @Test + public void hasMoneyToMakeBetTest() { + Player testPlayer = new Player("Leon"); + boolean expected = true; + + boolean actual = testPlayer.hasMoneyToMakeBet(Double.valueOf(100)); + + Assert.assertEquals(expected, actual); + } + + @Test + public void makeBetTest() { + Player testPlayer = new Player("Tim"); + Double expected = Double.valueOf(400); + + testPlayer.makeBet(Double.valueOf(100)); + Double actual = testPlayer.getMoney(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void isAceInHandTest() { + Player testPlayer = new Player("Tim"); + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + testPlayer.addToHand(ace); + testPlayer.addToHand(nine); + boolean expected = true; + + boolean actual = testPlayer.isAceInHand(); + + } + + @Test + public void calculateScoreTest() { + Player testPlayer = new Player("Tim"); + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + testPlayer.addToHand(ace); + testPlayer.addToHand(nine); + int expected = 20; + + int actual = testPlayer.calculateScore(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void calculateScoreTest2() { + Player testPlayer = new Player("Tim"); + Card ace = new Card(Suit.HEARTS, 1); + Card ace2 = new Card(Suit.CLUBS, 1); + testPlayer.addToHand(ace); + testPlayer.addToHand(ace2); + int expected = 12; + + int actual = testPlayer.calculateScore(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void receiveWinningsTest() { + Player testPlayer = new Player("Tim"); + Double expected = Double.valueOf(600); + + testPlayer.receiveWinnings(Double.valueOf(100)); + Double actual = testPlayer.getMoney(); + + Assert.assertEquals(expected, actual); + } + +* */ \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java index b968135d..bf7b4974 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java @@ -1,4 +1,30 @@ package io.zipcoder.casino.nuts_n_bolts.cards; +import org.junit.Assert; +import org.junit.Test; + public class PlayingCardTest { -} + + /* + @Test + public void testCardGetValue(){ + Card card = new Card(Suit.HEARTS, 2); + + Integer expected=2; + Integer actual=card.getValue(); + + Assert.assertTrue(actual.equals(expected)); + } + + @Test + public void testCardGetSuit(){ + Card card = new Card(Suit.HEARTS, 2); + + Suit expected = Suit.HEARTS; + Suit actual = card.getSuit(); + + Assert.assertTrue(expected.equals(actual)); + } + */ + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java index ad3fc972..e1835382 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java @@ -1,4 +1,53 @@ package io.zipcoder.casino.nuts_n_bolts.cards; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; + public class PlayingDeckTest { +/* + Deck deck; + + @Before + public void setUp() { + deck = new Deck(); + } + @Test + public void getAllCardsTest(){ + deck = new Deck(); + ArrayList cards; + cards = deck.getAllCards(); + + Assert.assertTrue((cards!=null)&&(cards.size()==52)); + } + @Test + public void getCardTest(){ + Assert.assertTrue(deck.getCard() != null); + } + + @Test + public void populateTest() { + Integer expectedCount = 52; + Integer actualCount = deck.getAllCards().size(); + + Assert.assertEquals( expectedCount, actualCount); + Assert.assertTrue(deck.getCard() != null); + } + + @Test + public void shuffleTest(){ + Card[] cardArray1 = new Card[52]; + Card[] cardArray2 = new Card[52]; + + Card[] initialArray = deck.getAllCards().toArray(cardArray1); + deck.shuffle(); + + Card[] shuffledArray = deck.getAllCards().toArray(cardArray2); + + Assert.assertFalse(Arrays.equals(initialArray, shuffledArray)); + } + */ } From 2f326a318a5c188992bde23532501d1857739c8f Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 16:00:29 -0500 Subject: [PATCH 05/46] "Added sanitized input class" --- .../zipcoder/casino/nuts_n_bolts/Console.java | 6 ++- .../zipcoder/casino/nuts_n_bolts/Input.java | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java index 66a566a7..f9173626 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -3,6 +3,9 @@ import java.util.Scanner; public class Console { + +} + /* private static final double MIN_BET_ALLOWED=0.01; @@ -197,5 +200,4 @@ public static String forceTwoDecimalDouble(String input){ } - }*/ -} + }*/ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java new file mode 100644 index 00000000..60bcb482 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java @@ -0,0 +1,41 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import java.util.Scanner; + +public class Input { + + public static String getStringInput(String prompt){ + System.out.println(prompt); + Scanner scanner = new Scanner(System.in); + return scanner.nextLine(); + } + + public static Double getDoubleInput(String prompt){ + String stringInput = ""; + Double doubleInput = null; + do { + stringInput = getStringInput(prompt); + try { + doubleInput = Double.parseDouble(stringInput); + return doubleInput; + } catch (IllegalArgumentException iae) { + System.out.println("Not a valid amount."); + continue; + } + } while (true); + } + + public static Double getPositiveDoubleInput(String prompt){ + Double doubleInput = null; + do { + doubleInput = getDoubleInput(prompt); + if (doubleInput >= 0){ + return doubleInput; + } else { + System.out.println("Please input a positive amount."); + continue; + } + } while (true); + } + +} From 03a9917c6fb72f27871dd60a27283deda8b7aa16 Mon Sep 17 00:00:00 2001 From: timothy Date: Mon, 20 Nov 2017 16:08:19 -0500 Subject: [PATCH 06/46] Add Dice test and alter Dice class --- .../io/zipcoder/casino/nuts_n_bolts/Dice.java | 19 ++++-- .../casino/nuts_n_bolts/DiceTest.java | 61 +++++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java index a64b4fd3..718eca5d 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java @@ -1,21 +1,28 @@ package io.zipcoder.casino.nuts_n_bolts; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; public class Dice { - private E[] sides; + private ArrayList sides; - public Dice(E... sides){ - this.sides = sides; + + public Dice(ArrayList sides){ + this.sides=sides; } - public E[] getAllSides(){ - return null; + public ArrayList getAllSides(){ + return sides; } public E rollDie(){ - return null; + + Random rando = new Random(); + int numOfSides = sides.size(); + + return sides.get(rando.nextInt(numOfSides)); } } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java index 342c6484..a687a816 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java @@ -1,4 +1,65 @@ package io.zipcoder.casino.nuts_n_bolts; +import org.junit.Test; +import org.junit.Assert; + +import java.util.ArrayList; +import java.util.Random; + public class DiceTest { + + @Test + public void testDiceCreation(){ + ArrayList oneToSix = new ArrayList<>(); + for (int i=1; i<7; i++){ + oneToSix.add(i); + } + Dice standardDice = new Dice<>(oneToSix); + ArrayList standardFaces = standardDice.getAllSides(); + int j=1; + + for (Integer i : standardFaces){ + Assert.assertEquals(i.intValue(),j); + j++; + } + + Random rando = new Random(); + ArrayList stringList = new ArrayList<>(); + + for (int i = 0; i stringDice = new Dice<>(stringList); + for (String s : stringDice.getAllSides()){ + Assert.assertEquals(""+j, s); + j++; + } + } + + @Test + public void testDiceRoll(){ + ArrayList oneToSix = new ArrayList<>(); + for (int i=1; i<7; i++){ + oneToSix.add(i); + } + Dice standardDice = new Dice<>(oneToSix); + int totalRolls=0; + int desiredRolls=0; + double percentage=0; + double expected=16.7; + Random rando = new Random(); + + for (int i=0; i<1000000; i++){ + if (standardDice.rollDie()==1){ + desiredRolls++; + } + totalRolls++; + } + + percentage=(double)desiredRolls/(double)totalRolls; + Assert.assertEquals(expected, percentage*100, 0.1); + + } + } From 982a4a7261587c975b2870b8518a67536e25a36c Mon Sep 17 00:00:00 2001 From: linda Date: Mon, 20 Nov 2017 16:18:44 -0500 Subject: [PATCH 07/46] card tests --- .../io/zipcoder/casino/casino/Casino.java | 2 +- .../nuts_n_bolts/cards/PlayingSuit.java | 5 +---- .../io/zipcoder/casino/casino/CasinoTest.java | 17 +++++++++++++++++ .../nuts_n_bolts/cards/PlayingCardTest.java | 19 +++++++++++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index 88a8615b..7d9dd225 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -1,6 +1,6 @@ package io.zipcoder.casino.casino; -import io.zipcoder.casino.nuts_n_bolts.Player; + public class Casino { diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java index 3990c379..e437508f 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java @@ -2,9 +2,6 @@ public enum PlayingSuit { - HEART, - DIAMOND, - CLUB, - SPADE + CLUB, DIAMOND, HEART, SPADE } diff --git a/src/test/java/io/zipcoder/casino/casino/CasinoTest.java b/src/test/java/io/zipcoder/casino/casino/CasinoTest.java index 61c7fc22..d9bd2d7c 100644 --- a/src/test/java/io/zipcoder/casino/casino/CasinoTest.java +++ b/src/test/java/io/zipcoder/casino/casino/CasinoTest.java @@ -1,5 +1,22 @@ package io.zipcoder.casino.casino; + +import org.junit.Assert; +import org.junit.Test; + public class CasinoTest { + + @Test + public void getInstanceTest(){ + + } + + + @Test + public void pickGameTest(){ + + } + + } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java index b968135d..fc8e79d8 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java @@ -1,4 +1,23 @@ package io.zipcoder.casino.nuts_n_bolts.cards; +import org.junit.Test; +package io.zipcoder.casino.casino; +import org.junit.Assert; public class PlayingCardTest { + + @Test + public void getSuitTest(){ + PlayingCard cardOne = new PlayingCard(PlayingSuit.CLUB, 4); + Assert.assertEquals(4, cardOne.getSuit()); + } + + + @Test + public void getValueTest(){ + PlayingCard cardTwo = new PlayingCard(PlayingSuit.HEART,2); + + Assert.assertEquals(6, cardTwo.getValue()); + } + + } From 36bd98413b90596718496cc9c6556ea0daa4c00e Mon Sep 17 00:00:00 2001 From: timothy Date: Mon, 20 Nov 2017 17:28:57 -0500 Subject: [PATCH 08/46] Pot and PotTest --- .../io/zipcoder/casino/nuts_n_bolts/Pot.java | 14 ++++-- .../zipcoder/casino/nuts_n_bolts/PotTest.java | 45 +++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java index 4f8972c5..ea79b6d2 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java @@ -11,14 +11,22 @@ public Double getMoney() { } public void addToPot(Double money) { - this.money = money; + if (money>0) { + this.money += money; + } } public Double takeOutOfPot (Double money){ - return null; //check request < pot + if (money>0 && money<=this.money){ + this.money-=money; + return money; + } + return 0.0; } public Double takeAllOutOfPot(){ - return null; + double moneyHolder = this.money; + this.money=0.0; + return moneyHolder; } } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java index 6060f08e..a03620d3 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java @@ -1,4 +1,49 @@ package io.zipcoder.casino.nuts_n_bolts; +import org.junit.Test; +import org.junit.Assert; +import java.util.Random; + public class PotTest { + + private Random rando = new Random(); + + @Test + public void testAddToPotAndGetMoney(){ + Pot testPot = new Pot(); + Double amountToAdd = rando.nextDouble(); + Double actual; + testPot.addToPot(amountToAdd); + actual=testPot.getMoney(); + Assert.assertEquals(amountToAdd, actual, 0.0001); + } + + @Test + public void testTakeOutOfPot(){ + Pot testPot = new Pot(); + Double amountToRemove = rando.nextDouble(); + Double actual; + Double expected; + + testPot.addToPot(rando.nextDouble()); + if (amountToRemove Date: Mon, 20 Nov 2017 17:32:36 -0500 Subject: [PATCH 09/46] Craps beginning --- .../java/io/zipcoder/casino/games/craps/Craps.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 34c72f8f..86050920 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -14,15 +14,24 @@ public class Craps implements Game, Gamble { //roll to decide first, highest wins //both make a bet -> pot //decide if bet is pass or don't pass - //player throwin dice = shooter + //player throwing dice = shooter //roll 2 dice 7/11 on first roll -> win // 2/3/12 on first roll -> lose //come/don't come bets private ArrayList players; - private Dice dice = new Dice<>(1,2,3,4,5,6); + private Dice dice; private Pot pot; + public Craps(){ + ArrayList oneToSix = new ArrayList<>(); + for (int i=2; i<13; i++) + { + oneToSix.add(i); + } + dice=new Dice<>(oneToSix); + } + public void play() { } From 9c8fe993be37c66f593192af3f385b868964c7d8 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 18:52:29 -0500 Subject: [PATCH 10/46] "Changed pot to moneyContainer and put in user" --- .../io/zipcoder/casino/casino/Casino.java | 4 +-- .../casino/games/blackjack/BlackJack.java | 4 +-- .../io/zipcoder/casino/games/craps/Craps.java | 6 ++-- .../zipcoder/casino/games/gofish/GoFish.java | 14 +++++++--- .../{Pot.java => MoneyContainer.java} | 8 +++--- .../io/zipcoder/casino/nuts_n_bolts/User.java | 23 +++++---------- .../casino/nuts_n_bolts/cards/Hand.java | 27 ++++++++++++++++++ .../casino/nuts_n_bolts/DiceTest.java | 4 +-- .../{PotTest.java => MoneyContainerTest.java} | 24 ++++++++-------- .../casino/nuts_n_bolts/UserTest.java | 28 ++++++++----------- .../casino/nuts_n_bolts/cards/HandTest.java | 4 +++ 11 files changed, 84 insertions(+), 62 deletions(-) rename src/main/java/io/zipcoder/casino/nuts_n_bolts/{Pot.java => MoneyContainer.java} (76%) create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java rename src/test/java/io/zipcoder/casino/nuts_n_bolts/{PotTest.java => MoneyContainerTest.java} (60%) create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/HandTest.java diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index 88a8615b..f2ba5797 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -1,11 +1,11 @@ package io.zipcoder.casino.casino; -import io.zipcoder.casino.nuts_n_bolts.Player; +import io.zipcoder.casino.nuts_n_bolts.User; public class Casino { private static Casino INSTANCE = null; - private Player player; + private User user; private Casino(){} diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index a31097a4..3537a981 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -2,8 +2,8 @@ import io.zipcoder.casino.games.CardGame; import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; import io.zipcoder.casino.nuts_n_bolts.User; -import io.zipcoder.casino.nuts_n_bolts.Pot; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; @@ -11,7 +11,7 @@ public class BlackJack extends CardGame implements Gamble { - private Pot pot; + private MoneyContainer pot; private ArrayList users; @Override diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 34c72f8f..d76b51d5 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -3,7 +3,7 @@ import io.zipcoder.casino.games.Gamble; import io.zipcoder.casino.games.Game; import io.zipcoder.casino.nuts_n_bolts.Dice; -import io.zipcoder.casino.nuts_n_bolts.Pot; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; import io.zipcoder.casino.nuts_n_bolts.User; import java.util.ArrayList; @@ -20,8 +20,8 @@ public class Craps implements Game, Gamble { //come/don't come bets private ArrayList players; - private Dice dice = new Dice<>(1,2,3,4,5,6); - private Pot pot; + //private Dice dice = new Dice<>(1,2,3,4,5,6); + private MoneyContainer pot; public void play() { diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index 3684e08a..f24d99f2 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -2,7 +2,7 @@ import io.zipcoder.casino.games.CardGame; import io.zipcoder.casino.nuts_n_bolts.User; -import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.Hand; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; import java.util.ArrayList; @@ -25,12 +25,16 @@ private GoFishPlayer createCompPlayer(){ private void shufflePlayerOrder(){} - private void isHandEmpty(){} + private Boolean lastPlayerHandEmpty(){ + return null; + } + + private void declareWinner(){} private class GoFishPlayer { private User user; - private ArrayList hand = new ArrayList<>(); + private Hand hand = new Hand(); private PlayingValue askedValue = null; public GoFishPlayer(User user){ @@ -43,7 +47,9 @@ private void getCards(GoFishPlayer other, PlayingValue value){} private void drawCard(){} - private Boolean hasFourOfKind(){} + private Boolean hasFourOfKind(){ + return null; + } private void discardFourOfKind(){} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java similarity index 76% rename from src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java rename to src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java index ea79b6d2..1ec9ebd0 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java @@ -2,7 +2,7 @@ import io.zipcoder.casino.games.Gamble; -public class Pot { +public class MoneyContainer { private Double money = 0d; @@ -10,13 +10,13 @@ public Double getMoney() { return money; } - public void addToPot(Double money) { + public void addMoney(Double money) { if (money>0) { this.money += money; } } - public Double takeOutOfPot (Double money){ + public Double takeOutMoney (Double money){ if (money>0 && money<=this.money){ this.money-=money; return money; @@ -24,7 +24,7 @@ public Double takeOutOfPot (Double money){ return 0.0; } - public Double takeAllOutOfPot(){ + public Double takeAllMoney(){ double moneyHolder = this.money; this.money=0.0; return moneyHolder; diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java index 35f82077..029e695d 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java @@ -2,27 +2,20 @@ public class User { - protected String name; - protected Double money; + private String name; + private MoneyContainer wallet; public User(String name, Double money){ this.name = name; + this.wallet.addMoney(money); } public String getName() { - return name; + return this.name; } - public Double getMoney() { - return money; - } - - public void gainMoney(Double money){ - - } - - public void loseMoney(Double money){ - //check to see if money < this.money + public MoneyContainer getWallet() { + return this.wallet; } } @@ -69,9 +62,7 @@ public Integer getScore() { return score; } - public ArrayList getHand() { - return hand; - } + // blackjack hit public void addToHand(Card card) { diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java new file mode 100644 index 00000000..03cdb138 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java @@ -0,0 +1,27 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +import java.util.ArrayList; + +public class Hand { + + private ArrayList cards; + + public Hand(){} + + public ArrayList getHand() { + return cards; + } + + public Boolean isHandEmpty(){ + return null; + } + + public void addCard(PlayingCard card){} + + public void removeCard(){} + + public PlayingCard getCard(){ + return null; + } + +} diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java index a687a816..922185ce 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java @@ -11,7 +11,7 @@ public class DiceTest { @Test public void testDiceCreation(){ ArrayList oneToSix = new ArrayList<>(); - for (int i=1; i<7; i++){ + for (int i=1; i<=6; i++){ oneToSix.add(i); } Dice standardDice = new Dice<>(oneToSix); @@ -40,7 +40,7 @@ public void testDiceCreation(){ @Test public void testDiceRoll(){ ArrayList oneToSix = new ArrayList<>(); - for (int i=1; i<7; i++){ + for (int i=1; i<=6; i++){ oneToSix.add(i); } Dice standardDice = new Dice<>(oneToSix); diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java similarity index 60% rename from src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java rename to src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java index a03620d3..e945f7df 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java @@ -4,42 +4,42 @@ import org.junit.Assert; import java.util.Random; -public class PotTest { +public class MoneyContainerTest { private Random rando = new Random(); @Test - public void testAddToPotAndGetMoney(){ - Pot testPot = new Pot(); + public void testAddAndGetMoney(){ + MoneyContainer testPot = new MoneyContainer(); Double amountToAdd = rando.nextDouble(); Double actual; - testPot.addToPot(amountToAdd); + testPot.addMoney(amountToAdd); actual=testPot.getMoney(); Assert.assertEquals(amountToAdd, actual, 0.0001); } @Test - public void testTakeOutOfPot(){ - Pot testPot = new Pot(); + public void testTakeOutMoney(){ + MoneyContainer testPot = new MoneyContainer(); Double amountToRemove = rando.nextDouble(); Double actual; Double expected; - testPot.addToPot(rando.nextDouble()); + testPot.addMoney(rando.nextDouble()); if (amountToRemove Date: Mon, 20 Nov 2017 19:00:39 -0500 Subject: [PATCH 11/46] Update --- .../io/zipcoder/casino/games/craps/Craps.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 86050920..2a37a592 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -21,19 +21,36 @@ public class Craps implements Game, Gamble { private ArrayList players; private Dice dice; - private Pot pot; + private Pot mainPot; + private Pot sidePot; public Craps(){ - ArrayList oneToSix = new ArrayList<>(); + ArrayList twoToTwelve = new ArrayList<>(); for (int i=2; i<13; i++) { - oneToSix.add(i); + twoToTwelve.add(i); } - dice=new Dice<>(oneToSix); + dice=new Dice<>(twoToTwelve); } public void play() { - +/* + roll to determine who goes first (high/low) + Player makes a pass or dontPass bet into the mainPot + initialThrow (comeOutRoll) to win or point. + resolve if pass, dontPass, or point (7,11 is pass) (2,3,12 is dontPass). + //Player wins/loses their opponent's stake in the pot + //Opponent needs to bet again before next roll + //Same, inverse + if point, can make side bets on the point (6/8, 5/9, 10/4) + If roller gets his point, he wins mainPot and sidePot. + If roller rolls side number, he only wins sidePot. + Another sideBet can be made after the first sideBet is won + + If roller craps (7) out, nonRoller wins mainPot and sidePot + Next player gets the dice + + */ } @Override From 82a8828db092b21b9289abd84ecae7ba9acf25f4 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 19:09:18 -0500 Subject: [PATCH 12/46] "Added separate base hand" --- .../casino/nuts_n_bolts/cards/Hand.java | 19 +++++---- .../casino/nuts_n_bolts/cards/HandTest.java | 41 +++++++++++++++++++ 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java index 03cdb138..a7fd6534 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java @@ -4,24 +4,29 @@ public class Hand { - private ArrayList cards; + private ArrayList cards = new ArrayList<>(); public Hand(){} - public ArrayList getHand() { + public ArrayList getAllCards() { return cards; } public Boolean isHandEmpty(){ - return null; + return this.cards.size() == 0; } - public void addCard(PlayingCard card){} + public void addCard(PlayingCard card){ + this.cards.add(card); + } - public void removeCard(){} + public void removeCard(PlayingCard card){ + this.cards.remove(card); + } - public PlayingCard getCard(){ - return null; + public PlayingCard getCard(PlayingCard card) { + removeCard(card); + return card; } } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/HandTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/HandTest.java index 413443d8..773289ab 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/HandTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/HandTest.java @@ -1,4 +1,45 @@ package io.zipcoder.casino.nuts_n_bolts.cards; +import org.junit.Assert; +import org.junit.Test; + public class HandTest { + + @Test + public void handShouldBeEmptyTest(){ + Hand hand = new Hand(); + + Assert.assertTrue(hand.isHandEmpty()); + } + + @Test + public void addAndhandShouldNotBeEmptyTest(){ + Hand hand = new Hand(); + hand.addCard(new PlayingCard(PlayingSuit.HEART, PlayingValue.QUEEN)); + + Assert.assertFalse(hand.isHandEmpty()); + } + + @Test + public void addAndRemoveTest(){ + Hand hand = new Hand(); + hand.addCard(new PlayingCard(PlayingSuit.HEART, PlayingValue.QUEEN)); + Assert.assertFalse(hand.isHandEmpty()); + + hand.removeCard(hand.getAllCards().get(0)); + Assert.assertTrue(hand.isHandEmpty()); + } + + @Test + public void addAndGetTest(){ + Hand hand = new Hand(); + PlayingCard expectedCard = new PlayingCard(PlayingSuit.HEART, PlayingValue.QUEEN); + hand.addCard(expectedCard); + + PlayingCard actualCard = hand.getCard(expectedCard); + Assert.assertTrue(hand.isHandEmpty()); + + Assert.assertEquals(expectedCard, actualCard); + } + } From f30549fdfa8d95f103b26f5633f219174506aebf Mon Sep 17 00:00:00 2001 From: timothy Date: Mon, 20 Nov 2017 20:24:17 -0500 Subject: [PATCH 13/46] Various changes to integrate Console class --- .../java/io/zipcoder/casino/games/Gamble.java | 2 +- .../java/io/zipcoder/casino/games/Game.java | 2 +- .../io/zipcoder/casino/games/craps/Craps.java | 40 ++++++++-- .../zipcoder/casino/nuts_n_bolts/Console.java | 75 ++++++++++++++++++- 4 files changed, 110 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/Gamble.java b/src/main/java/io/zipcoder/casino/games/Gamble.java index 0fb26345..2d9d2fd5 100644 --- a/src/main/java/io/zipcoder/casino/games/Gamble.java +++ b/src/main/java/io/zipcoder/casino/games/Gamble.java @@ -3,6 +3,6 @@ public interface Gamble { public void takeBet(Double bet); - public void settleBet(); + public Double settleBet();//payout } diff --git a/src/main/java/io/zipcoder/casino/games/Game.java b/src/main/java/io/zipcoder/casino/games/Game.java index d7ce40fb..6b17d0f1 100644 --- a/src/main/java/io/zipcoder/casino/games/Game.java +++ b/src/main/java/io/zipcoder/casino/games/Game.java @@ -2,6 +2,6 @@ public interface Game { - public void play(); + boolean play(String userInput); } diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index ac8d00ec..9683b827 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -20,10 +20,11 @@ public class Craps implements Game, Gamble { //come/don't come bets private ArrayList players; - //private Dice dice = new Dice<>(1,2,3,4,5,6); private Dice dice; + private boolean isPointSet = false; + private boolean isPlayerTurn = false; + private int point=0; private MoneyContainer mainPot; - private MoneyContainer sidePot; public Craps(){ ArrayList twoToTwelve = new ArrayList<>(); @@ -34,7 +35,10 @@ public Craps(){ dice=new Dice<>(twoToTwelve); } - public void play() { + public boolean play(String userInput) { + return ("Y".equalsIgnoreCase(userInput)); + } + /* roll to determine who goes first (high/low) Player makes a pass or dontPass bet into the mainPot @@ -52,15 +56,41 @@ If roller craps (7) out, nonRoller wins mainPot and sidePot Next player gets the dice */ + + + private void rollHighLow(){ + int playerRoll; + int botRoll; + + do { + playerRoll = dice.rollDie(); + botRoll = dice.rollDie(); + }while (playerRoll==botRoll); + + isPlayerTurn=(playerRoll>botRoll); + + } + + private void crapsBetting(){ + if (!isPointSet){ + //do pass don'tPass betting to main pot + + } + else + { + //offer sideBet chance + } } + + @Override public void takeBet(Double bet) { - + mainPot.addMoney(bet*2); } @Override - public void settleBet() { + public Double settleBet() { } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java index f9173626..2ec74340 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -1,11 +1,83 @@ package io.zipcoder.casino.nuts_n_bolts; +import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.games.craps.Craps; import java.util.Scanner; +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; public class Console { -} + private Game game = new Craps(); + private User player; + private static Scanner scanner = new Scanner(System.in); + + public Console(Game game, User user) { + this.game = game; + this.player = user; + } + + public void setGame(Game game) { + this.game = game; + } + + public void setUser(User user) { + this.player = user; + } + + public void run() { + System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); + + if (game instanceof Gamble) { + do {//betting game logic + + + + + playerBets(); + + + + + + } while (game.play(continuePlaying())); + } else { + + do {//non betting game logic + } while (game.play(continuePlaying())); + } + + } + + + private String continuePlaying() { + return (getStringInput("Continue playing? ")); + } + + private void displayPlayerMoney(){ + System.out.println("You have $" + player.getWallet().getMoney()); + } + + private void playerBets(){ + double betAmount; + + do{ + displayPlayerMoney(); + betAmount=getBetAmount(); + }while (betAmount>player.getWallet().getMoney()); + + game.takeBet(betAmount); + + } + + private Double getBetAmount(){ + return (getPositiveDoubleInput("How much do you want to bet? ")); + + } + +} /* private static final double MIN_BET_ALLOWED=0.01; @@ -35,7 +107,6 @@ public static void run(){ System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); do { - game.start(); playerBets(userPlayer); displayPlayerHandAndScore(userPlayer); displayDealerCardShowing(); From 04251dd89a60e94be8f2005123e9a22d35b629c6 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 20:56:51 -0500 Subject: [PATCH 14/46] "Ported deck" --- .../casino/games/blackjack/BlackJack.java | 14 ++-- .../io/zipcoder/casino/games/craps/Craps.java | 2 +- .../zipcoder/casino/games/gofish/GoFish.java | 69 +++++++++++++------ .../casino/games/gofish/GoFishConsole.java | 15 ++++ .../zipcoder/casino/nuts_n_bolts/Console.java | 2 +- .../io/zipcoder/casino/nuts_n_bolts/User.java | 8 ++- .../nuts_n_bolts/cards/PlayingDeck.java | 59 +++++----------- .../casino/games/gofish/GoFishPlayerTest.java | 27 ++++++++ .../casino/games/gofish/GoFishTest.java | 32 +++++++++ .../nuts_n_bolts/cards/PlayingDeckTest.java | 31 +++++---- 10 files changed, 171 insertions(+), 88 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index 3537a981..b5c654bf 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -5,7 +5,6 @@ import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; import io.zipcoder.casino.nuts_n_bolts.User; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; -import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; import java.util.ArrayList; @@ -14,23 +13,22 @@ public class BlackJack extends CardGame implements Gamble { private MoneyContainer pot; private ArrayList users; - @Override - public void play() { - - } - @Override public void takeBet(Double bet) { //match biggest bet } @Override - public void settleBet() { - + public Double settleBet() { + return null; } public void evaluatePointsInHand(){} + @Override + public boolean play(String userInput) { + return false; + } //setup game: diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 9683b827..66cd0fc8 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -91,7 +91,7 @@ public void takeBet(Double bet) { @Override public Double settleBet() { - + return null; } private class CrapsPlayer { diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index f24d99f2..b18a606e 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -1,57 +1,82 @@ package io.zipcoder.casino.games.gofish; -import io.zipcoder.casino.games.CardGame; import io.zipcoder.casino.nuts_n_bolts.User; import io.zipcoder.casino.nuts_n_bolts.cards.Hand; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; -import java.util.ArrayList; +public class GoFish { -public class GoFish extends CardGame { + private GoFishPlayer player; - private ArrayList players; - - public GoFish(Integer numberOfCompPlayers){ + private GoFishPlayer dealer; + private PlayingDeck deck; + public GoFish(User user){ + this.player = new GoFishPlayer(user); + this.dealer = createCompPlayer(); + this.deck = new PlayingDeck(); } - public void play() { - + GoFishPlayer createCompPlayer(){ + return new GoFishPlayer(new User("Dealer")); } - private GoFishPlayer createCompPlayer(){ - return null; + Boolean lastPlayerHandEmpty(GoFishPlayer player){ + return this.getPlayer().hand.isHandEmpty(); } - private void shufflePlayerOrder(){} + public GoFishPlayer getPlayer() { + return player; + } - private Boolean lastPlayerHandEmpty(){ - return null; + public GoFishPlayer getDealer() { + return dealer; } - private void declareWinner(){} + public PlayingDeck getDeck() { + return deck; + } - private class GoFishPlayer { + class GoFishPlayer { private User user; - private Hand hand = new Hand(); + private Hand hand; private PlayingValue askedValue = null; - public GoFishPlayer(User user){ + GoFishPlayer(User user){ this.user = user; + this.hand = new Hand(); } - public void askForCards(GoFishPlayer other, PlayingValue value){} + User getUser() { + return user; + } - private void getCards(GoFishPlayer other, PlayingValue value){} + PlayingValue getAskedValue() { + return askedValue; + } - private void drawCard(){} + Boolean askForValue(GoFishPlayer other, PlayingValue value){ + return null; + } + + void getCards(GoFishPlayer other, PlayingValue value){} + + void nullAskedValue(){ + + } + + PlayingCard drawCard(){ + return null; + } - private Boolean hasFourOfKind(){ + Boolean hasFourOfKind(){ return null; } - private void discardFourOfKind(){} + void discardFourOfKind(){} } } diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java new file mode 100644 index 00000000..69930acb --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java @@ -0,0 +1,15 @@ +package io.zipcoder.casino.games.gofish; + +import io.zipcoder.casino.games.CardGame; + +public class GoFishConsole extends CardGame { + + public void play() { + + } + + @Override + public boolean play(String userInput) { + return false; + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java index 2ec74340..21d7bb9b 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -68,7 +68,7 @@ private void playerBets(){ betAmount=getBetAmount(); }while (betAmount>player.getWallet().getMoney()); - game.takeBet(betAmount); + //game.takeBet(betAmount); } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java index 029e695d..861c89e6 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java @@ -3,10 +3,14 @@ public class User { private String name; - private MoneyContainer wallet; + private MoneyContainer wallet = new MoneyContainer(); - public User(String name, Double money){ + public User(String name){ this.name = name; + } + + public User(String name, Double money){ + this(name); this.wallet.addMoney(money); } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java index 43906264..59b97213 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java @@ -7,63 +7,38 @@ public class PlayingDeck { private ArrayList cards; - public PlayingDeck(){} - - public void shuffle(){} - - public void reset(){} - - public void countLeft(){} - - public PlayingCard draw(){ - //remove the card you drew from the deck - return null; + public PlayingDeck(){ + populate(); } -} + public void shuffle(){ + Collections.shuffle(cards); + } -/* - private ArrayList cards; + public ArrayList getAllCards(){ + return cards; + } - public Deck(){ - populate(); + public Integer countLeft(){ + return cards.size(); } - public Card getCard(){ + public PlayingCard getAndRemoveCard(){ if(cards.size() == 0) { populate(); shuffle(); } - Card card = cards.get(0); + PlayingCard card = cards.get(0); cards.remove(0); return card; } - public ArrayList getAllCards(){ - return cards; - } - - private void populate() { - cards = new ArrayList(); - for (Suit suit: Suit.values()) { - for (int value = 1; value <= 13; value++) - { - if (value < 11) - { - if (value==1) - cards.add(new Card(suit, value, Card.suitSymbols[suit.ordinal()], Card.faceSymbols[0])); - else - cards.add(new Card(suit, value, Card.suitSymbols[suit.ordinal()], ""+value)); - } - else - cards.add(new Card(suit, 10, Card.suitSymbols[suit.ordinal()], Card.faceSymbols[value - 10])); - + cards = new ArrayList<>(); + for (PlayingSuit suit : PlayingSuit.values()) { + for (PlayingValue value: PlayingValue.values()) { + cards.add(new PlayingCard(suit, value)); } } } - - public void shuffle(){ - Collections.shuffle(cards); - } - */ \ No newline at end of file +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java index 19445e33..96de6266 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java @@ -1,4 +1,31 @@ package io.zipcoder.casino.games.gofish; +import io.zipcoder.casino.nuts_n_bolts.User; +import org.junit.Assert; +import org.junit.Test; + public class GoFishPlayerTest { + + + + @Test + public void creationAndGetterTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer player = goFish.getPlayer(); + + Assert.assertEquals(user, player.getUser()); + Assert.assertNull(player.getAskedValue()); + } + + @Test + public void drawCardTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer player = goFish.getPlayer(); + + + //player.drawCard() + } + } diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java index 033160ee..889c0790 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java @@ -1,4 +1,36 @@ package io.zipcoder.casino.games.gofish; +import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; +import org.junit.Assert; +import org.junit.Test; + public class GoFishTest { + + @Test + public void gameCreationAndGetterTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + Assert.assertEquals(user, goFish.getPlayer().getUser()); + Assert.assertEquals(goFish.getDealer().getUser().getName(), "Dealer"); + Assert.assertTrue(goFish.getDeck() instanceof PlayingDeck); + } + + @Test + public void createCompPlayerTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + Assert.assertNotNull(goFish.createCompPlayer()); + } + + @Test + public void playerHandIsEmptyTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + Assert.assertTrue(goFish.lastPlayerHandEmpty(goFish.getPlayer())); + } + } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java index e1835382..befa0f40 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeckTest.java @@ -8,24 +8,31 @@ import java.util.Arrays; public class PlayingDeckTest { -/* - Deck deck; + + PlayingDeck deck; @Before public void setUp() { - deck = new Deck(); + deck = new PlayingDeck(); } + @Test public void getAllCardsTest(){ - deck = new Deck(); - ArrayList cards; + ArrayList cards; cards = deck.getAllCards(); Assert.assertTrue((cards!=null)&&(cards.size()==52)); } + @Test public void getCardTest(){ - Assert.assertTrue(deck.getCard() != null); + Integer expectedRemaining = 51; + + Assert.assertTrue(deck.getAndRemoveCard() != null); + + Integer actualRemaining = deck.countLeft(); + + Assert.assertEquals(expectedRemaining, actualRemaining); } @Test @@ -34,20 +41,20 @@ public void populateTest() { Integer actualCount = deck.getAllCards().size(); Assert.assertEquals( expectedCount, actualCount); - Assert.assertTrue(deck.getCard() != null); + Assert.assertTrue(deck.getAndRemoveCard() != null); } @Test public void shuffleTest(){ - Card[] cardArray1 = new Card[52]; - Card[] cardArray2 = new Card[52]; + PlayingCard[] cardArray1 = new PlayingCard[52]; + PlayingCard[] cardArray2 = new PlayingCard[52]; - Card[] initialArray = deck.getAllCards().toArray(cardArray1); + PlayingCard[] initialArray = deck.getAllCards().toArray(cardArray1); deck.shuffle(); - Card[] shuffledArray = deck.getAllCards().toArray(cardArray2); + PlayingCard[] shuffledArray = deck.getAllCards().toArray(cardArray2); Assert.assertFalse(Arrays.equals(initialArray, shuffledArray)); } - */ + } From 67290a1eb2c55cac54062d91de4866073ff7f5e1 Mon Sep 17 00:00:00 2001 From: timothy Date: Mon, 20 Nov 2017 20:59:12 -0500 Subject: [PATCH 15/46] Craps and Console --- .../io/zipcoder/casino/games/craps/Craps.java | 49 +--- .../casino/games/craps/CrapsConsole.java | 272 ++++++++++++++++++ .../zipcoder/casino/nuts_n_bolts/Console.java | 2 +- 3 files changed, 286 insertions(+), 37 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 9683b827..86737b04 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -19,23 +19,26 @@ public class Craps implements Game, Gamble { // 2/3/12 on first roll -> lose //come/don't come bets - private ArrayList players; + private User player; private Dice dice; private boolean isPointSet = false; private boolean isPlayerTurn = false; private int point=0; private MoneyContainer mainPot; - public Craps(){ + public Craps(User user){ ArrayList twoToTwelve = new ArrayList<>(); for (int i=2; i<13; i++) { twoToTwelve.add(i); } dice=new Dice<>(twoToTwelve); + player = user; } public boolean play(String userInput) { + + return ("Y".equalsIgnoreCase(userInput)); } @@ -56,9 +59,14 @@ If roller craps (7) out, nonRoller wins mainPot and sidePot Next player gets the dice */ + private void initialRoll(){ + int rollResult = dice.rollDie(); + if ((rollResult==7 || rollResult==11) && isPlayerTurn){ + + } + } - - private void rollHighLow(){ + public void rollHighLow(){ int playerRoll; int botRoll; @@ -71,43 +79,12 @@ private void rollHighLow(){ } - private void crapsBetting(){ - if (!isPointSet){ - //do pass don'tPass betting to main pot - - } - else - { - //offer sideBet chance - } - } - - - - @Override public void takeBet(Double bet) { mainPot.addMoney(bet*2); } - @Override public Double settleBet() { - + return mainPot.takeAllMoney(); } - private class CrapsPlayer { - - private User user; - - - - public CrapsPlayer(User user) { - this.user = user; - } - - public void makeABet(Double money) { - } - - public void winABet(Double money) { - } - } } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java new file mode 100644 index 00000000..45ad170f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -0,0 +1,272 @@ +package io.zipcoder.casino.games.craps; + +import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.nuts_n_bolts.User; + +import java.util.Scanner; + +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; + +public class CrapsConsole { + + private Craps game = new Craps(); + private User player; + private static Scanner scanner = new Scanner(System.in); + + + public void setGame(Game game) { + this.game = game; + } + + public void setUser(User user) { + this.player = user; + } + + public void run() { + System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); + + if (game instanceof Gamble) { + do {//betting game logic + + + + + playerBets(); + + + + + + } while (game.play(continuePlaying())); + } else { + + do {//non betting game logic + + } while (game.play(continuePlaying())); + } + + } + + + private String continuePlaying() { + return (getStringInput("Continue playing? ")); + } + + private void displayPlayerMoney(){ + System.out.println("You have $" + player.getWallet().getMoney()); + } + + private void playerBets(){ + double betAmount; + + do{ + displayPlayerMoney(); + betAmount=getBetAmount(); + }while (betAmount>player.getWallet().getMoney()); + + game.takeBet(betAmount); + + } + + private Double getBetAmount(){ + return (getPositiveDoubleInput("How much do you want to bet? ")); + + } + +} +/* + private static final double MIN_BET_ALLOWED=0.01; + + private static Game game = new Game(); + private static Scanner scanner = new Scanner (System.in); + + public static void run(){ + + Player userPlayer = game.getPlayer(); + + System.out.print("" + + " ____ _ _ _ _ \n" + + "| __ ) | | __ _ ___| | __(_) __ _ ___| | __\n" + + "| \\ | |/ _` |/ __| |/ /| |/ ` |/ __| |/ / \n" + + "| |_) || | (_| | (__| | < | | (_| | (__| < \n" + + "|____/ |_|\\__,_|\\___|_|\\_\\| |\\__,_|\\___|_|\\_\\ \n" + + " |__/ \n" + + "+--------------------------------------------+" + + "\n\nWelcome to the table!" + + "\n\nWhat's your name? "); + + String userName = getInput(); + userPlayer.setName(userName); + + System.out.println("Hello, " + userName + "!"); + + System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); + + do { + playerBets(userPlayer); + displayPlayerHandAndScore(userPlayer); + displayDealerCardShowing(); + playerHitsOrStays(userPlayer); + game.dealerHitUntilFinished(); + determineWinOrLoss(userPlayer); + } while (playerStaysForAnotherRound(userPlayer)); + + System.out.println("\nThanks for playing! Goodbye!"); + } + + private static boolean playerStaysForAnotherRound(Player userPlayer) { + String input; + System.out.println("\nYou have $" + forceTwoDecimalDouble(userPlayer.getMoney().toString())); + if (userPlayer.getMoney() >= 0.01) { + do { + System.out.print("\nStay for another round? [Yes/No] "); + input = getInput(); + if (isInputYesOrNo(input)) + { + return ("yes".equalsIgnoreCase(input)); + } + } while (!isInputYesOrNo(input)); + + } + else { + System.out.println("\nYou are out of money."); + } + return false; + } + + private static void determineWinOrLoss(Player userPlayer){ + + if (game.playerWins()) { + System.out.println("\nPlayer wins!"); + } else { + System.out.println("\nHouse wins!"); + } + System.out.println("\nHouse has score: " + game.getDealer().getScore()); + resetPotAndDiscardHands(userPlayer); + } + + private static void resetPotAndDiscardHands(Player userPlayer){ + game.returnBet(); + userPlayer.getHand().clear(); + game.getDealer().getHand().clear(); + } + + private static void playerHitsOrStays(Player userPlayer){ + String input; + do { + input=forceHitOrStay(); + if ("hit".equalsIgnoreCase(input)) { + game.dealCard(userPlayer); + } + displayPlayerHandAndScore(userPlayer); + } while ("hit".equalsIgnoreCase(input) && (userPlayer.calculateScore() <= 21)); + } + + private static String forceHitOrStay(){ + String input; + do { + System.out.print("\nHit or stay? "); + input = getInput(); + } while (!isInputStayOrHit(input)); + return input; + } + + private static void displayDealerCardShowing(){ + System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); + } + + private static void displayPlayerHandAndScore(Player userPlayer){ + Card card; + for (int i=0; i=MIN_BET_ALLOWED; + } + + public static boolean isInputDouble(String passedString) + { + try { + Double output = Double.valueOf(passedString); + } catch (NumberFormatException e) { + return false; + } + return (true); + } + + public static boolean isInputStayOrHit(String passedString) + { + return ("hit".equalsIgnoreCase(passedString) || + "stay".equalsIgnoreCase(passedString)); + } + + public static boolean isInputYesOrNo(String passedString) + { + return ("yes".equalsIgnoreCase(passedString) || + "no".equalsIgnoreCase(passedString)); + } + + public static String forceTwoDecimalDouble(String input){ + if ( !(input.contains(".")) || + input.substring(input.indexOf("."), input.length()).length()==3) + { + return input; + } + else + { + if (input.substring(input.indexOf("."), input.length()).length()<3) { + do { + input = input + "0"; + } while (input.substring(input.indexOf("."), input.length()).length() < 3); + return input; + } + + input = input.substring(0,input.indexOf("."))+ + input.substring(input.indexOf("."), input.indexOf(".")+3); + return input; + } + + + }*/ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java index 2ec74340..9081ddb9 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -36,7 +36,7 @@ public void run() { playerBets(); - + From adcc9c3b9956d82fcd8ce56933124647ed97f440 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 21:03:38 -0500 Subject: [PATCH 16/46] "Ported card w/ tiny toString" --- .../casino/nuts_n_bolts/cards/PlayingCard.java | 5 +++++ .../nuts_n_bolts/cards/PlayingCardTest.java | 16 ++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java index 9c666dd7..64f6c68a 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java @@ -10,6 +10,11 @@ public PlayingCard(PlayingSuit suit, PlayingValue value){ this.value = value; } + @Override + public String toString(){ + return "" + this.value + this.suit; + } + public PlayingSuit getSuit() { return suit; } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java index bf7b4974..12b13d96 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCardTest.java @@ -5,26 +5,26 @@ public class PlayingCardTest { - /* + @Test public void testCardGetValue(){ - Card card = new Card(Suit.HEARTS, 2); + PlayingCard card = new PlayingCard(PlayingSuit.HEART, PlayingValue.SIX); - Integer expected=2; - Integer actual=card.getValue(); + PlayingValue expected = PlayingValue.SIX; + PlayingValue actual = card.getValue(); Assert.assertTrue(actual.equals(expected)); } @Test public void testCardGetSuit(){ - Card card = new Card(Suit.HEARTS, 2); + PlayingCard card = new PlayingCard(PlayingSuit.HEART, PlayingValue.SIX); - Suit expected = Suit.HEARTS; - Suit actual = card.getSuit(); + PlayingSuit expected = PlayingSuit.HEART; + PlayingSuit actual = card.getSuit(); Assert.assertTrue(expected.equals(actual)); } - */ + } \ No newline at end of file From 89f7ea6db94efd94d545fe4247fa4b70e58340e5 Mon Sep 17 00:00:00 2001 From: timothy Date: Mon, 20 Nov 2017 21:17:35 -0500 Subject: [PATCH 17/46] Craps update --- .../io/zipcoder/casino/games/craps/Craps.java | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 86737b04..961e7159 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -59,11 +59,45 @@ If roller craps (7) out, nonRoller wins mainPot and sidePot Next player gets the dice */ - private void initialRoll(){ + public String initialRoll(){ + String returnMe=""; int rollResult = dice.rollDie(); - if ((rollResult==7 || rollResult==11) && isPlayerTurn){ - + double initialStake=mainPot.getMoney() / 2.0; + + if (isPlayerTurn) { + returnMe += "You rolled a " + rollResult; + } + else{ + returnMe += "Your opponent rolled a "+rollResult; + } + + if (rollResult==7 || rollResult==11){ + if (isPlayerTurn) { + returnMe+=" and won "+initialStake; + player.getWallet().addMoney(mainPot.takeOutMoney(initialStake)); + } + else { + returnMe+=" and lost "+initialStake; + mainPot.takeOutMoney(initialStake); + } + } + else if (rollResult==2 || rollResult==3 || rollResult==12){ + if (isPlayerTurn) { + returnMe+=" and lost "+initialStake; + mainPot.takeOutMoney(initialStake); + } + else { + returnMe+=" and won "+initialStake; + player.getWallet().addMoney(mainPot.takeOutMoney(initialStake)); + } + } + else{ + point=rollResult; + isPointSet=true; + returnMe+=" which makes "+point+" the new point."; } + returnMe+=" There is "+mainPot.getMoney()+" in the pot."; + return returnMe; } public void rollHighLow(){ From 461382aa5fd40e1eb66fac051ededf55dc4d4492 Mon Sep 17 00:00:00 2001 From: pavel Date: Mon, 20 Nov 2017 21:36:15 -0500 Subject: [PATCH 18/46] "Plugging away at Go Fish" --- .../zipcoder/casino/games/gofish/GoFish.java | 25 ++++++++-- .../nuts_n_bolts/cards/PlayingSuit.java | 8 +++ .../nuts_n_bolts/cards/PlayingValue.java | 7 +++ .../casino/games/gofish/GoFishTest.java | 49 +++++++++++++++++++ 4 files changed, 85 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index b18a606e..f02f66a8 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -42,9 +42,10 @@ public PlayingDeck getDeck() { class GoFishPlayer { private User user; + private Hand hand; - private PlayingValue askedValue = null; + private PlayingValue askedValue = null; GoFishPlayer(User user){ this.user = user; this.hand = new Hand(); @@ -54,15 +55,31 @@ User getUser() { return user; } + public Hand getHand() { + return hand; + } + PlayingValue getAskedValue() { return askedValue; } - Boolean askForValue(GoFishPlayer other, PlayingValue value){ - return null; + Integer askForValue(GoFishPlayer other, PlayingValue value){ + this.askedValue = value; + return other.checkIfHandHasValue(value); + } + + Integer checkIfHandHasValue(PlayingValue value) { + Integer valueCount = 0; + for (PlayingCard card : + this.getHand().getAllCards()) { + if (value.equals(card.getValue())) { + valueCount++; + } + } + return valueCount; } - void getCards(GoFishPlayer other, PlayingValue value){} + void takeCards(GoFishPlayer other, PlayingValue value){} void nullAskedValue(){ diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java index 07d5956a..989d809a 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java @@ -7,7 +7,15 @@ public enum PlayingSuit { CLUB("♧"), SPADE("♤"); + String symbol; + PlayingSuit(String symbol) { + this.symbol = symbol; + } + @Override + public String toString(){ + return symbol; } + } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java index 9760cd4c..a884f9f5 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java @@ -16,7 +16,14 @@ public enum PlayingValue { KING("K"), ACE("A"); + String value; + PlayingValue(String value) { + this.value = value; + } + @Override + public String toString(){ + return value; } } diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java index 889c0790..68e7f852 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java @@ -1,7 +1,10 @@ package io.zipcoder.casino.games.gofish; import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingSuit; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; import org.junit.Assert; import org.junit.Test; @@ -33,4 +36,50 @@ public void playerHandIsEmptyTest(){ Assert.assertTrue(goFish.lastPlayerHandEmpty(goFish.getPlayer())); } + @Test + public void askingSetsValueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + + PlayingValue expected = PlayingValue.QUEEN; + PlayingValue actual = goFish.getPlayer().getAskedValue(); + + Assert.assertEquals(expected,actual); + } + + @Test + public void askingForValueTrueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 3; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); + } + for (int i = 0; i < 2; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + Integer actual = goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.ACE); + Integer expected = 3; + + Assert.assertEquals(expected, actual); + } + + @Test + public void askingForValueFalseTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 5; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + Integer actual = goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + Integer expected = 0; + + Assert.assertEquals(expected, actual); + } + } From 29d6bf5bffb2d538dcdd16961ec3bde38758e220 Mon Sep 17 00:00:00 2001 From: timothy Date: Tue, 21 Nov 2017 15:50:29 -0500 Subject: [PATCH 19/46] update on craps --- .../io/zipcoder/casino/games/craps/Craps.java | 141 +++++++++++++-- .../casino/games/craps/CrapsConsole.java | 162 ++++++++++++------ 2 files changed, 233 insertions(+), 70 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 961e7159..593ac168 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -19,26 +19,26 @@ public class Craps implements Game, Gamble { // 2/3/12 on first roll -> lose //come/don't come bets - private User player; private Dice dice; + private CrapPointPair pair; private boolean isPointSet = false; + private boolean playerWonBet = false; + private boolean sidePairRolled = false; + private boolean playerWonSide = false; private boolean isPlayerTurn = false; private int point=0; private MoneyContainer mainPot; - public Craps(User user){ + public Craps(){ ArrayList twoToTwelve = new ArrayList<>(); for (int i=2; i<13; i++) { twoToTwelve.add(i); } dice=new Dice<>(twoToTwelve); - player = user; } public boolean play(String userInput) { - - return ("Y".equalsIgnoreCase(userInput)); } @@ -59,10 +59,10 @@ If roller craps (7) out, nonRoller wins mainPot and sidePot Next player gets the dice */ - public String initialRoll(){ + + public String initialRoll(double mainStake){ String returnMe=""; int rollResult = dice.rollDie(); - double initialStake=mainPot.getMoney() / 2.0; if (isPlayerTurn) { returnMe += "You rolled a " + rollResult; @@ -73,26 +73,27 @@ public String initialRoll(){ if (rollResult==7 || rollResult==11){ if (isPlayerTurn) { - returnMe+=" and won "+initialStake; - player.getWallet().addMoney(mainPot.takeOutMoney(initialStake)); + returnMe+=" and you won "+mainStake; + playerWonBet=true; } else { - returnMe+=" and lost "+initialStake; - mainPot.takeOutMoney(initialStake); + returnMe+=" and you lost "+mainStake; + playerWonBet=false; } } else if (rollResult==2 || rollResult==3 || rollResult==12){ if (isPlayerTurn) { - returnMe+=" and lost "+initialStake; - mainPot.takeOutMoney(initialStake); + returnMe+=" and you lost "+mainStake; + playerWonBet=false; } else { - returnMe+=" and won "+initialStake; - player.getWallet().addMoney(mainPot.takeOutMoney(initialStake)); + returnMe+=" and you won "+mainStake; + playerWonBet=true; } } else{ point=rollResult; + assignPair(); isPointSet=true; returnMe+=" which makes "+point+" the new point."; } @@ -100,6 +101,65 @@ else if (rollResult==2 || rollResult==3 || rollResult==12){ return returnMe; } + public String subsequentRolls(double sideStake){ + String returnMe=""; + int rollResult = dice.rollDie(); + + if ((rollResult == point) && (isPlayerTurn)){ + returnMe+="You rolled "+rollResult+" and got the point! You won everything!"; + playerWonBet=true; + playerWonSide=true; + sidePairRolled=true; + } else + if ((rollResult == point) && (!isPlayerTurn)){ + returnMe+="Opponent rolled "+rollResult+" and got the point. You lost everything!"; + playerWonBet=false; + playerWonSide=false; + sidePairRolled=true; + } else + if ((rollResult==7) && (isPlayerTurn)){ + returnMe+="You crapped out. You lost everything!"; + playerWonBet=false; + playerWonSide=false; + sidePairRolled=true; + } else + if ((rollResult==7) && (!isPlayerTurn)){ + returnMe+="Your opponent crapped out! You won everything!"; + playerWonBet=true; + playerWonSide=true; + sidePairRolled=true; + } else{ + if (pair.isInPair(rollResult)){ + sidePairRolled=true; + if (isPlayerTurn){ + returnMe+="You rolled "+rollResult+" and won the side bet of "+sideStake+". "; + playerWonSide=true; + } + else { + returnMe+="Your opponent rolled "+rollResult+" and won the side bet of "+sideStake+". "; + playerWonSide=false; + } + } else{ + returnMe+=""+rollResult+" was rolled. Rolling again. "; + } + } + return returnMe; + } + + public String pairText(){ + return(pair.text); + } + + private CrapPointPair assignPair() { + + for(CrapPointPair p : CrapPointPair.values()) { + if (p.a==point || p.b==point) { + return p; + } + } + return null; + } + public void rollHighLow(){ int playerRoll; int botRoll; @@ -113,12 +173,61 @@ public void rollHighLow(){ } + public int getPoint(){ + return point; + } + + public boolean getIsPlayerTurn(){ + return isPlayerTurn; + } + + public boolean getIsPointSet(){ + return isPointSet; + } + + public boolean getPlayerWonSide() { + return playerWonSide; + } + + public boolean getSidePairRolled() { + return sidePairRolled; + } + public void takeBet(Double bet) { - mainPot.addMoney(bet*2); + mainPot.addMoney(bet); + } + + public boolean getPlayerWonBet(){ + return playerWonBet; } public Double settleBet() { + return mainPot.takeOutMoney(mainPot.getMoney()/2); + } + + public Double cashOutPot(){ return mainPot.takeAllMoney(); } + private enum CrapPointPair { + sixEight(6, 8, "6-8"), + fiveNine(5, 9, "5-9"), + tenFour(10, 4, "10-4"); + + int a; + int b; + String text; + + CrapPointPair(int a, int b, String text) { + this.a = a; + this.b = b; + this.text=text; + } + + boolean isInPair(int a) { + return (this.a==a || this.b==a); + } + + } + } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index 45ad170f..d180f6f8 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -2,6 +2,7 @@ import io.zipcoder.casino.games.Gamble; import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.nuts_n_bolts.Console; import io.zipcoder.casino.nuts_n_bolts.User; import java.util.Scanner; @@ -9,73 +10,125 @@ import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; -public class CrapsConsole { - - private Craps game = new Craps(); - private User player; - private static Scanner scanner = new Scanner(System.in); - - - public void setGame(Game game) { - this.game = game; - } - - public void setUser(User user) { - this.player = user; - } - - public void run() { - System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); - - if (game instanceof Gamble) { - do {//betting game logic - - - - - playerBets(); - +public class CrapsConsole{ + Craps game = new Craps(); + User player = new User(getStringInput("What is your name? "), + getPositiveDoubleInput("What's in your wallet? ")); + double currentBet=0; + String strResponse=""; + public void run(){ - } while (game.play(continuePlaying())); - } else { + System.out.println("Hello "+player.getName()+ ", and welcome to the " + +game.getClass().getSimpleName()+" table."); - do {//non betting game logic + game.rollHighLow(); +/////// + strResponse=getStringInput("I have to ask: are you sure you want to stay at the table? [Y/N] "); - } while (game.play(continuePlaying())); + if (game.getIsPlayerTurn()){ + currentBet=getPositiveDoubleInput("It's your turn to roll! Make a bet: "); + } else{ + currentBet=getPositiveDoubleInput("It's your opponent's turn to roll. Make a bet: "); } + game.takeBet(player.getWallet().takeOutMoney(currentBet)); + game.takeBet(currentBet);// Once for player, once for house +/////// + while (game.play(strResponse)){ - } - - - private String continuePlaying() { - return (getStringInput("Continue playing? ")); - } - - private void displayPlayerMoney(){ - System.out.println("You have $" + player.getWallet().getMoney()); - } + System.out.println(game.initialRoll()); - private void playerBets(){ - double betAmount; - - do{ - displayPlayerMoney(); - betAmount=getBetAmount(); - }while (betAmount>player.getWallet().getMoney()); + if(game.getPlayerWonBet()) { + player.getWallet().addMoney(game.settleBet()); + } else if (!game.getPlayerWonBet() && !game.getIsPointSet()) { + game.takeBet(player.getWallet().takeOutMoney(currentBet)); + } - game.takeBet(betAmount); + if (game.getIsPointSet()){ + currentBet=getPositiveDoubleInput("Current point is "+game.getPoint()+" and" + + " current pair is "+game.pairText()+". Your bet? "); + game.takeBet(player.getWallet().takeOutMoney(currentBet)); + game.takeBet(currentBet);// Once for player, once for house - } + while (game.getPoint()!=0){ + System.out.println(game.subsequentRolls(currentBet)); + if (game.getPlayerWonBet()){ + player.getWallet().addMoney(game.cashOutPot()); + } else if (game.getPlayerWonSide()){ + player.getWallet().addMoney(); + } - private Double getBetAmount(){ - return (getPositiveDoubleInput("How much do you want to bet? ")); + } + } - } -} +// private Craps game = new Craps(); +// private User player; +// private static Scanner scanner = new Scanner(System.in); +// +// +// public void setGame(Game game) { +// this.game = game; +// } +// +// public void setUser(User user) { +// this.player = user; +// } +// +// public void run() { +// System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); +// +// if (game instanceof Gamble) { +// do {//betting game logic +// +// +// +// +// playerBets(); +// +// +// +// +// +// } while (game.play(continuePlaying())); +// } else { +// +// do {//non betting game logic +// +// } while (game.play(continuePlaying())); +// } +// +// } +// +// +// private String continuePlaying() { +// return (getStringInput("Continue playing? ")); +// } +// +// private void displayPlayerMoney(){ +// System.out.println("You have $" + player.getWallet().getMoney()); +// } +// +// private void playerBets(){ +// double betAmount; +// +// do{ +// displayPlayerMoney(); +// betAmount=getBetAmount(); +// }while (betAmount>player.getWallet().getMoney()); +// +// game.takeBet(betAmount); +// +// } +// +// private Double getBetAmount(){ +// return (getPositiveDoubleInput("How much do you want to bet? ")); +// +// } +// +//} /* private static final double MIN_BET_ALLOWED=0.01; @@ -269,4 +322,5 @@ public static String forceTwoDecimalDouble(String input){ } - }*/ \ No newline at end of file + }*/ +} \ No newline at end of file From d03d19981724b2532a65e05c111057dab1a0942e Mon Sep 17 00:00:00 2001 From: timothy Date: Tue, 21 Nov 2017 17:03:13 -0500 Subject: [PATCH 20/46] Craps wip --- .../java/io/zipcoder/casino/games/Gamble.java | 2 +- .../zipcoder/casino/games/craps/CrapsWIP.java | 149 ++++++++++++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java diff --git a/src/main/java/io/zipcoder/casino/games/Gamble.java b/src/main/java/io/zipcoder/casino/games/Gamble.java index 2d9d2fd5..14c912c3 100644 --- a/src/main/java/io/zipcoder/casino/games/Gamble.java +++ b/src/main/java/io/zipcoder/casino/games/Gamble.java @@ -3,6 +3,6 @@ public interface Gamble { public void takeBet(Double bet); - public Double settleBet();//payout + public Double settleBet(Double winnings);//payout } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java new file mode 100644 index 00000000..22cfe213 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java @@ -0,0 +1,149 @@ +package io.zipcoder.casino.games.craps; + +import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.nuts_n_bolts.Dice; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; + +import java.util.ArrayList; + +public class CrapsWIP implements Gamble, Game { + + private CrapPointPair pair; + private Dice dice; + private MoneyContainer mainPot; + private MoneyContainer sidePot; + private boolean isPlayerTurn; + private int point; + + public CrapsWIP(){ + ArrayList twoToTwelve = new ArrayList<>(); + for (int i=2; i<13; i++){ + twoToTwelve.add(i); + } + dice = new Dice(twoToTwelve); + mainPot=new MoneyContainer(); + sidePot=new MoneyContainer(); + determineFirstRoller(); + } + +//Add to pot + @Override + public void takeBet(Double bet) { + takeBet(bet, mainPot); + } + private void takeBet(Double bet, MoneyContainer moneyContainer) { + moneyContainer.addMoney(bet); + } + public void takeSideBet(Double bet){ + takeBet(bet, sidePot); + } + +//remove some from pot + @Override + public Double settleBet(Double winnings) { + return (settleBet(winnings, mainPot)); + } + private Double settleBet(Double winnings, MoneyContainer moneyContainer){ + return (moneyContainer.takeOutMoney(winnings)); + } + public Double settleSideBet(Double winnings){ + return (settleBet(winnings, sidePot)); + } + +//Take all from pot + public Double emptyPot(){ + return emptyPot(mainPot); + } + private Double emptyPot(MoneyContainer moneyContainer){ + return moneyContainer.takeAllMoney(); + } + public Double emptySidePot(){ + return emptyPot(sidePot); + } + + + public void determineFirstRoller(){ + isPlayerTurn=(dice.rollDie()-dice.rollDie()>0);//Player vs House, highest goes first, house wins tie + } + public void changePlayerTurn(){ + isPlayerTurn=!isPlayerTurn; + } + + public int getPoint(){return point;} + + public Integer initialThrow(){ //returns -1 if 2/3/12 + // 1 if 7/11, + // 0 if point set + int numberRolled = dice.rollDie(); + + switch (numberRolled){ + case 2: + case 3: + case 12:{ + return -1; + } + case 7: + case 11:{ + return 1; + } + default:{ + point=numberRolled; + for (CrapPointPair p : CrapPointPair.values()){ + if (p.isInPair(point)){ + pair=p; + } + } + return 0; + } + } + + } + public Integer subsequentThrow(){//returns -1 if crapped out, + //returns 1 if point met + //returns 0 if nothing met + //returns any other number if pair met + int numberRolled=dice.rollDie(); + + if (numberRolled==point){//Won round + return 1; + } else if (numberRolled==7)//Lost round + { + return -1; + } else if (pair.isInPair(numberRolled)){//Won sideBet + return numberRolled; + } else{ + return 0;//Neutral. + } + + } + + @Override + public boolean play(String userInput) { + return ("Y".equalsIgnoreCase(userInput)); + } + + private enum CrapPointPair { + sixEight(6, 8, "6-8"), + fiveNine(5, 9, "5-9"), + tenFour(10, 4, "10-4"); + + int a; + int b; + String text; + + CrapPointPair(int a, int b, String text) { + this.a = a; + this.b = b; + this.text=text; + } + + boolean isInPair(int passed) { + return (this.a==passed || this.b==passed); + } + + } + + + +} From fa7addaf7070ab4512c3d1b9fa696f1b50b46088 Mon Sep 17 00:00:00 2001 From: pavel Date: Tue, 21 Nov 2017 17:52:36 -0500 Subject: [PATCH 21/46] "Done backend for Go Fish" --- .../zipcoder/casino/games/gofish/GoFish.java | 55 +++++++++---- .../java/io/zipcoder/casino/AllTests.java | 38 +++++++++ .../casino/games/gofish/GoFishPlayerTest.java | 77 ++++++++++++++++++- .../casino/games/gofish/GoFishTest.java | 39 ++++++++++ .../casino/nuts_n_bolts/UserTest.java | 10 +++ 5 files changed, 201 insertions(+), 18 deletions(-) create mode 100644 src/test/java/io/zipcoder/casino/AllTests.java diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index f02f66a8..41b56a57 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -6,6 +6,10 @@ import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class GoFish { private GoFishPlayer player; @@ -24,7 +28,7 @@ GoFishPlayer createCompPlayer(){ } Boolean lastPlayerHandEmpty(GoFishPlayer player){ - return this.getPlayer().hand.isHandEmpty(); + return player.hand.isHandEmpty(); } public GoFishPlayer getPlayer() { @@ -69,31 +73,50 @@ Integer askForValue(GoFishPlayer other, PlayingValue value){ } Integer checkIfHandHasValue(PlayingValue value) { - Integer valueCount = 0; - for (PlayingCard card : - this.getHand().getAllCards()) { - if (value.equals(card.getValue())) { - valueCount++; - } - } - return valueCount; + return getAllOfValue(value).size(); } - void takeCards(GoFishPlayer other, PlayingValue value){} + private ArrayList getAllOfValue(PlayingValue value) { + return (ArrayList) this.getHand().getAllCards().stream(). + filter(card -> value.equals(card.getValue())).collect(Collectors.toList()); + } - void nullAskedValue(){ + void takeCardsFromOther(GoFishPlayer other, PlayingValue value){ + ArrayList movingCards = other.getAllOfValue(value); + other.getHand().getAllCards().removeAll(movingCards); + this.getHand().getAllCards().addAll(movingCards); + } + void nullAskedValue(){ + this.askedValue = null; } PlayingCard drawCard(){ - return null; + PlayingCard drawnCard; + drawnCard = deck.getAndRemoveCard(); + hand.addCard(drawnCard); + return drawnCard; } - Boolean hasFourOfKind(){ - return null; - } + PlayingValue fourOfKindValue(){ + HashMap count = new HashMap<>(); + PlayingValue hasFour = null; + for (PlayingCard card : this.getHand().getAllCards()) { + if (count.containsKey(card.getValue())) { + count.put(card.getValue(), (count.get(card.getValue()) + 1)); + if (count.get(card.getValue()) == 4) { + hasFour = card.getValue(); + } + } else { + count.put(card.getValue(), 1); + } + } + return hasFour; + } - void discardFourOfKind(){} + void discardFourOfKind(PlayingValue value){ + this.getHand().getAllCards().removeIf(card -> card.getValue() == value); + } } } diff --git a/src/test/java/io/zipcoder/casino/AllTests.java b/src/test/java/io/zipcoder/casino/AllTests.java new file mode 100644 index 00000000..0c27b598 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/AllTests.java @@ -0,0 +1,38 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.casino.CasinoTest; +import io.zipcoder.casino.games.blackjack.BlackJackPlayerTest; +import io.zipcoder.casino.games.blackjack.BlackJackTest; +import io.zipcoder.casino.games.craps.CrapsPlayerTest; +import io.zipcoder.casino.games.craps.CrapsTest; +import io.zipcoder.casino.games.gofish.GoFishPlayerTest; +import io.zipcoder.casino.games.gofish.GoFishTest; +import io.zipcoder.casino.nuts_n_bolts.ConsoleTest; +import io.zipcoder.casino.nuts_n_bolts.DiceTest; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainerTest; +import io.zipcoder.casino.nuts_n_bolts.UserTest; +import io.zipcoder.casino.nuts_n_bolts.cards.HandTest; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCardTest; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeckTest; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + CasinoTest.class, + BlackJackTest.class, + BlackJackPlayerTest.class, + CrapsTest.class, + CrapsPlayerTest.class, + GoFishTest.class, + GoFishPlayerTest.class, + HandTest.class, + PlayingCardTest.class, + PlayingDeckTest.class, + ConsoleTest.class, + DiceTest.class, + MoneyContainerTest.class, + UserTest.class +}) +public class AllTests { +} diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java index 96de6266..b6e3b03c 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java @@ -1,6 +1,9 @@ package io.zipcoder.casino.games.gofish; import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingSuit; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; import org.junit.Assert; import org.junit.Test; @@ -19,13 +22,83 @@ public void creationAndGetterTest(){ } @Test - public void drawCardTest(){ + public void drawCardPutsInHandTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); GoFish.GoFishPlayer player = goFish.getPlayer(); + Assert.assertTrue(player.getHand().isHandEmpty()); + player.drawCard(); + Assert.assertFalse(player.getHand().isHandEmpty()); + } + + @Test + public void drawCardReturnsCorrectCardTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer player = goFish.getPlayer(); + + PlayingCard expectedCard = goFish.getDeck().getAllCards().get(0); + PlayingCard actualCard = player.drawCard(); + PlayingCard expectedHandCard = player.getHand().getAllCards().get(0); + + Assert.assertEquals(expectedCard, actualCard); + Assert.assertEquals(expectedCard, expectedHandCard); + } + + @Test + public void hasFourOfKindTrueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 4; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + PlayingValue actual = goFish.getDealer().fourOfKindValue(); + PlayingValue expected = PlayingValue.KING; + + Assert.assertEquals(expected, actual); + } + + @Test + public void hasFourOfKindFalseTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 3; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + PlayingValue actual = goFish.getDealer().fourOfKindValue(); + PlayingValue expected = null; + + Assert.assertEquals(expected, actual); + } + + @Test + public void discardFourOfKindTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer dealer = goFish.getDealer(); + + for (int i = 0; i < 4; i++) { + dealer.getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + for (int i = 0; i < 3; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); + } + + Assert.assertEquals(4, (int)dealer.checkIfHandHasValue(PlayingValue.KING)); + Assert.assertEquals(3, (int)dealer.checkIfHandHasValue(PlayingValue.ACE)); + + if(dealer.fourOfKindValue() != null){ + dealer.discardFourOfKind(dealer.fourOfKindValue()); + } + + Assert.assertEquals(0, (int)dealer.checkIfHandHasValue(PlayingValue.KING)); + Assert.assertEquals(3, (int)dealer.checkIfHandHasValue(PlayingValue.ACE)); - //player.drawCard() } } diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java index 68e7f852..53ccbd76 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java @@ -49,6 +49,19 @@ public void askingSetsValueTest(){ Assert.assertEquals(expected,actual); } + @Test + public void nullAskedValueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + + goFish.getPlayer().nullAskedValue(); + PlayingValue actual = goFish.getPlayer().getAskedValue(); + + Assert.assertNull(actual); + } + @Test public void askingForValueTrueTest(){ User user = new User("Uncle Bob", 1000000d); @@ -82,4 +95,30 @@ public void askingForValueFalseTest(){ Assert.assertEquals(expected, actual); } + @Test + public void takeCardsTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 5; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + int beforeDealer = goFish.getDealer().checkIfHandHasValue(PlayingValue.KING); + int beforePlayer = goFish.getPlayer().checkIfHandHasValue(PlayingValue.KING); + + Assert.assertEquals(5, beforeDealer); + Assert.assertEquals(0, beforePlayer); + + goFish.getPlayer().takeCardsFromOther(goFish.getDealer(), PlayingValue.KING); + + int afterDealer = goFish.getDealer().checkIfHandHasValue(PlayingValue.KING); + int afterPlayer = goFish.getPlayer().checkIfHandHasValue(PlayingValue.KING); + + Assert.assertEquals(0, afterDealer); + Assert.assertEquals(5, afterPlayer); + } + + + } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java index 9e69b8e0..9a775744 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/UserTest.java @@ -15,6 +15,16 @@ public void getNameTest() { Assert.assertEquals(expected, actual); } + @Test + public void getWalletTest(){ + User testUser = new User("Test Dummy", 1000d); + Double expected = 1000d; + + Double actual = testUser.getWallet().getMoney(); + + Assert.assertEquals(expected, actual); + } + } /* From 2544e2b1f370d73eb2bb4de87d9a5426e423d437 Mon Sep 17 00:00:00 2001 From: timothy Date: Tue, 21 Nov 2017 17:54:41 -0500 Subject: [PATCH 22/46] Craps and CrapsConsole WIP --- .../casino/games/craps/CrapsConsoleWIP.java | 50 +++++++++++++++++++ .../zipcoder/casino/games/craps/CrapsWIP.java | 3 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java new file mode 100644 index 00000000..5efba1a6 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java @@ -0,0 +1,50 @@ +package io.zipcoder.casino.games.craps; + +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; +import io.zipcoder.casino.nuts_n_bolts.User; + +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; + +public class CrapsConsoleWIP { + + private CrapsWIP game = new CrapsWIP(); + private User player; + private boolean isInitialThrow=true; + private double mainPotBet; + + + public CrapsConsoleWIP(){ + player=new User("Uncle Bob", 10_000.0); + } + + public CrapsConsoleWIP(User user){ + player=user; + } + + public void run(){ + welcomePlayer(); + game.determineFirstRoller(); + + } + + private void initialBet(){ + + playerBets(); + + } + + private void playerBets() { + do { + mainPotBet = getPositiveDoubleInput + ("How much would you like to bet? "); + }while (player.getWallet().getMoney() Date: Tue, 21 Nov 2017 19:45:27 -0500 Subject: [PATCH 23/46] Craps and CrapsConsole WIPs --- .../casino/games/craps/CrapsConsoleWIP.java | 104 ++++++++++++++++-- .../zipcoder/casino/games/craps/CrapsWIP.java | 4 +- .../games/craps/CrapsConsoleWIPTest.java | 11 ++ 3 files changed, 109 insertions(+), 10 deletions(-) create mode 100644 src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java index 5efba1a6..2b088016 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java @@ -1,17 +1,19 @@ package io.zipcoder.casino.games.craps; -import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; -import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.User; +import java.util.Random; import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; public class CrapsConsoleWIP { private CrapsWIP game = new CrapsWIP(); private User player; - private boolean isInitialThrow=true; private double mainPotBet; - + private double sidePotBet; + private boolean pointSet=false; + private boolean pointMet=false; + private Random rando=new Random(); public CrapsConsoleWIP(){ player=new User("Uncle Bob", 10_000.0); @@ -24,24 +26,108 @@ public CrapsConsoleWIP(User user){ public void run(){ welcomePlayer(); game.determineFirstRoller(); - + while (!pointSet) {//Continue to bet until the roller + //throws a point instead of a win/loss. + initialBet(); + pointSet=resolveInitialThrow(game.initialThrow()); + } + //Now we're on secondaryThrows + secondaryBet(); } private void initialBet(){ - playerBets(); + if (game.getPlayerTurn()) + { + playerInitialBets(); + } + else + { + playerInitialBets(generateBotBet()); + } } - - private void playerBets() { + private void playerInitialBets() { do { mainPotBet = getPositiveDoubleInput ("How much would you like to bet? "); }while (player.getWallet().getMoney() Date: Tue, 21 Nov 2017 20:50:37 -0500 Subject: [PATCH 24/46] Craps wip update --- .../casino/games/craps/CrapsConsoleWIP.java | 32 ++++++++++++++++++- .../zipcoder/casino/games/craps/CrapsWIP.java | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java index 2b088016..cd780592 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java @@ -32,7 +32,11 @@ public void run(){ pointSet=resolveInitialThrow(game.initialThrow()); } //Now we're on secondaryThrows - secondaryBet(); + while (!pointMet) {//Continue to bet until the roller + //meets their point or craps out + secondaryBet(); + pointMet=resolveSecondaryThrow(game.secondaryThrow()); + } } private void initialBet(){ @@ -129,6 +133,32 @@ private void resolveInitialThrowBet(int a){ } } + private boolean resolveSecondaryThrow(int resultOfThrownDice){ + switch (resultOfThrownDice) { + + case 0: {//Not a point, not a spread, not a crap. Roll again + return false; + } + case 1: {//Point met. Pay out to thrower, reset bools and betVars + resolveSecondaryThrowBet(resultOfThrownDice); + return true; + } + case -1: {//Crap. Pay out to non-thrower, reset bools and betVars + return true; + } + default: {//Pair made, pay sideBet to non-thrower. + return false; + } + }//end switch + } + private void resolveSecondaryThrowBet(int a){ + if (a==1){//Point met, pay out thrower from mainPot and sidePot + if (game.getPlayerTurn()) {//if player is the thrower + player.getWallet().addMoney(game.emptyPot()); + player.getWallet().addMoney(game.emptySidePot()); + } + } + } private void welcomePlayer(){ System.out.println("Hello, "+player.getName()+". Welcome to the "+game.getClass().getSimpleName()+" table."); } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java index c639b18e..a40002df 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java @@ -103,7 +103,7 @@ public Integer initialThrow(){ //returns -1 if 2/3/12 } } - public Integer subsequentThrow(){//returns -1 if crapped out, + public Integer secondaryThrow(){//returns -1 if crapped out, //returns 1 if point met //returns 0 if nothing met //returns any other number if pair met From 4e6165aa1e395509c2f6eefbcad892b7663c38ea Mon Sep 17 00:00:00 2001 From: timothy Date: Tue, 21 Nov 2017 21:28:05 -0500 Subject: [PATCH 25/46] Completed initial version of CrapsWIP and CrapsConsoleWIP --- .../casino/games/craps/CrapsConsoleWIP.java | 83 +++++++++++++++---- 1 file changed, 68 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java index cd780592..4e394006 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java @@ -4,6 +4,7 @@ import io.zipcoder.casino.nuts_n_bolts.User; import java.util.Random; import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; public class CrapsConsoleWIP { @@ -26,17 +27,19 @@ public CrapsConsoleWIP(User user){ public void run(){ welcomePlayer(); game.determineFirstRoller(); - while (!pointSet) {//Continue to bet until the roller - //throws a point instead of a win/loss. - initialBet(); - pointSet=resolveInitialThrow(game.initialThrow()); - } - //Now we're on secondaryThrows - while (!pointMet) {//Continue to bet until the roller - //meets their point or craps out - secondaryBet(); - pointMet=resolveSecondaryThrow(game.secondaryThrow()); - } + do { + while (!pointSet) {//Continue to bet until the roller + //throws a point instead of a win/loss. + initialBet(); + pointSet = resolveInitialThrow(game.initialThrow()); + } + while (!pointMet) {//Continue to bet until the roller + //meets their point or craps out + secondaryBet(); + pointMet = resolveSecondaryThrow(game.secondaryThrow()); + } + changeTurns();//Reset flags, change active player + }while(game.play(getStringInput("Continue playing? [Y/N] "))); } private void initialBet(){ @@ -153,14 +156,64 @@ private boolean resolveSecondaryThrow(int resultOfThrownDice){ } private void resolveSecondaryThrowBet(int a){ if (a==1){//Point met, pay out thrower from mainPot and sidePot - if (game.getPlayerTurn()) {//if player is the thrower - player.getWallet().addMoney(game.emptyPot()); - player.getWallet().addMoney(game.emptySidePot()); + if (game.getPlayerTurn()) + {//if player is the thrower, give them the pots and then reset bet vars + playerWinsBothPots(); } - } + else//if player is not the thrower, empty pot and reset bet vars + { + playerLosesBothPots(); + } + } else + if(a==-1)//Crapped out. Pay out the non-thrower from mainPot and sidePot + { + if (game.getPlayerTurn()) + { + playerLosesBothPots(); + } + else + { + playerWinsBothPots(); + } + } else//Won the pair, but not the point. Pay non-thrower the sidePot + { + if (game.getPlayerTurn()) + { + sidePotBet=game.emptySidePot(); + sidePotBet=0; + } + else + { + player.getWallet().addMoney(game.emptySidePot()); + sidePotBet=0; + } + } + } + + private void playerLosesBothPots() { + mainPotBet=game.emptyPot(); + sidePotBet=game.emptySidePot(); + + mainPotBet=0; + sidePotBet=0; } + private void playerWinsBothPots() { + player.getWallet().addMoney(game.emptyPot()); + player.getWallet().addMoney(game.emptySidePot()); + + mainPotBet=0; + sidePotBet=0; + } + private void welcomePlayer(){ System.out.println("Hello, "+player.getName()+". Welcome to the "+game.getClass().getSimpleName()+" table."); } + private void changeTurns(){ + mainPotBet=0; + sidePotBet=0; + pointSet=false; + pointMet=false; + game.changePlayerTurn(); + } } From fc91c26bf8f838893443afe7f9cacbb6891affcd Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 06:57:50 -0500 Subject: [PATCH 26/46] Craps update --- .../io/zipcoder/casino/games/craps/Craps.java | 466 +++++++------- .../casino/games/craps/CrapsConsole.java | 590 +++++++++--------- .../casino/games/craps/CrapsConsoleWIP.java | 5 + 3 files changed, 533 insertions(+), 528 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 593ac168..ccc264bb 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -1,233 +1,233 @@ -package io.zipcoder.casino.games.craps; - -import io.zipcoder.casino.games.Gamble; -import io.zipcoder.casino.games.Game; -import io.zipcoder.casino.nuts_n_bolts.Dice; -import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; -import io.zipcoder.casino.nuts_n_bolts.User; - -import java.util.ArrayList; - -public class Craps implements Game, Gamble { - - //2 players - //roll to decide first, highest wins - //both make a bet -> pot - //decide if bet is pass or don't pass - //player throwing dice = shooter - //roll 2 dice 7/11 on first roll -> win - // 2/3/12 on first roll -> lose - //come/don't come bets - - private Dice dice; - private CrapPointPair pair; - private boolean isPointSet = false; - private boolean playerWonBet = false; - private boolean sidePairRolled = false; - private boolean playerWonSide = false; - private boolean isPlayerTurn = false; - private int point=0; - private MoneyContainer mainPot; - - public Craps(){ - ArrayList twoToTwelve = new ArrayList<>(); - for (int i=2; i<13; i++) - { - twoToTwelve.add(i); - } - dice=new Dice<>(twoToTwelve); - } - - public boolean play(String userInput) { - return ("Y".equalsIgnoreCase(userInput)); - } - -/* - roll to determine who goes first (high/low) - Player makes a pass or dontPass bet into the mainPot - initialThrow (comeOutRoll) to win or point. - resolve if pass, dontPass, or point (7,11 is pass) (2,3,12 is dontPass). - //Player wins/loses their opponent's stake in the pot - //Opponent needs to bet again before next roll - //Same, inverse - if point, can make side bets on the point (6/8, 5/9, 10/4) - If roller gets his point, he wins mainPot and sidePot. - If roller rolls side number, he only wins sidePot. - Another sideBet can be made after the first sideBet is won - - If roller craps (7) out, nonRoller wins mainPot and sidePot - Next player gets the dice - - */ - - public String initialRoll(double mainStake){ - String returnMe=""; - int rollResult = dice.rollDie(); - - if (isPlayerTurn) { - returnMe += "You rolled a " + rollResult; - } - else{ - returnMe += "Your opponent rolled a "+rollResult; - } - - if (rollResult==7 || rollResult==11){ - if (isPlayerTurn) { - returnMe+=" and you won "+mainStake; - playerWonBet=true; - } - else { - returnMe+=" and you lost "+mainStake; - playerWonBet=false; - } - } - else if (rollResult==2 || rollResult==3 || rollResult==12){ - if (isPlayerTurn) { - returnMe+=" and you lost "+mainStake; - playerWonBet=false; - } - else { - returnMe+=" and you won "+mainStake; - playerWonBet=true; - } - } - else{ - point=rollResult; - assignPair(); - isPointSet=true; - returnMe+=" which makes "+point+" the new point."; - } - returnMe+=" There is "+mainPot.getMoney()+" in the pot."; - return returnMe; - } - - public String subsequentRolls(double sideStake){ - String returnMe=""; - int rollResult = dice.rollDie(); - - if ((rollResult == point) && (isPlayerTurn)){ - returnMe+="You rolled "+rollResult+" and got the point! You won everything!"; - playerWonBet=true; - playerWonSide=true; - sidePairRolled=true; - } else - if ((rollResult == point) && (!isPlayerTurn)){ - returnMe+="Opponent rolled "+rollResult+" and got the point. You lost everything!"; - playerWonBet=false; - playerWonSide=false; - sidePairRolled=true; - } else - if ((rollResult==7) && (isPlayerTurn)){ - returnMe+="You crapped out. You lost everything!"; - playerWonBet=false; - playerWonSide=false; - sidePairRolled=true; - } else - if ((rollResult==7) && (!isPlayerTurn)){ - returnMe+="Your opponent crapped out! You won everything!"; - playerWonBet=true; - playerWonSide=true; - sidePairRolled=true; - } else{ - if (pair.isInPair(rollResult)){ - sidePairRolled=true; - if (isPlayerTurn){ - returnMe+="You rolled "+rollResult+" and won the side bet of "+sideStake+". "; - playerWonSide=true; - } - else { - returnMe+="Your opponent rolled "+rollResult+" and won the side bet of "+sideStake+". "; - playerWonSide=false; - } - } else{ - returnMe+=""+rollResult+" was rolled. Rolling again. "; - } - } - return returnMe; - } - - public String pairText(){ - return(pair.text); - } - - private CrapPointPair assignPair() { - - for(CrapPointPair p : CrapPointPair.values()) { - if (p.a==point || p.b==point) { - return p; - } - } - return null; - } - - public void rollHighLow(){ - int playerRoll; - int botRoll; - - do { - playerRoll = dice.rollDie(); - botRoll = dice.rollDie(); - }while (playerRoll==botRoll); - - isPlayerTurn=(playerRoll>botRoll); - - } - - public int getPoint(){ - return point; - } - - public boolean getIsPlayerTurn(){ - return isPlayerTurn; - } - - public boolean getIsPointSet(){ - return isPointSet; - } - - public boolean getPlayerWonSide() { - return playerWonSide; - } - - public boolean getSidePairRolled() { - return sidePairRolled; - } - - public void takeBet(Double bet) { - mainPot.addMoney(bet); - } - - public boolean getPlayerWonBet(){ - return playerWonBet; - } - - public Double settleBet() { - return mainPot.takeOutMoney(mainPot.getMoney()/2); - } - - public Double cashOutPot(){ - return mainPot.takeAllMoney(); - } - - private enum CrapPointPair { - sixEight(6, 8, "6-8"), - fiveNine(5, 9, "5-9"), - tenFour(10, 4, "10-4"); - - int a; - int b; - String text; - - CrapPointPair(int a, int b, String text) { - this.a = a; - this.b = b; - this.text=text; - } - - boolean isInPair(int a) { - return (this.a==a || this.b==a); - } - - } - -} +//package io.zipcoder.casino.games.craps; +// +//import io.zipcoder.casino.games.Gamble; +//import io.zipcoder.casino.games.Game; +//import io.zipcoder.casino.nuts_n_bolts.Dice; +//import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; +//import io.zipcoder.casino.nuts_n_bolts.User; +// +//import java.util.ArrayList; +// +//public class Craps implements Game, Gamble { +// +// //2 players +// //roll to decide first, highest wins +// //both make a bet -> pot +// //decide if bet is pass or don't pass +// //player throwing dice = shooter +// //roll 2 dice 7/11 on first roll -> win +// // 2/3/12 on first roll -> lose +// //come/don't come bets +// +// private Dice dice; +// private CrapPointPair pair; +// private boolean isPointSet = false; +// private boolean playerWonBet = false; +// private boolean sidePairRolled = false; +// private boolean playerWonSide = false; +// private boolean isPlayerTurn = false; +// private int point=0; +// private MoneyContainer mainPot; +// +// public Craps(){ +// ArrayList twoToTwelve = new ArrayList<>(); +// for (int i=2; i<13; i++) +// { +// twoToTwelve.add(i); +// } +// dice=new Dice<>(twoToTwelve); +// } +// +// public boolean play(String userInput) { +// return ("Y".equalsIgnoreCase(userInput)); +// } +// +///* +// roll to determine who goes first (high/low) +// Player makes a pass or dontPass bet into the mainPot +// initialThrow (comeOutRoll) to win or point. +// resolve if pass, dontPass, or point (7,11 is pass) (2,3,12 is dontPass). +// //Player wins/loses their opponent's stake in the pot +// //Opponent needs to bet again before next roll +// //Same, inverse +// if point, can make side bets on the point (6/8, 5/9, 10/4) +// If roller gets his point, he wins mainPot and sidePot. +// If roller rolls side number, he only wins sidePot. +// Another sideBet can be made after the first sideBet is won +// +// If roller craps (7) out, nonRoller wins mainPot and sidePot +// Next player gets the dice +// +// */ +// +// public String initialRoll(double mainStake){ +// String returnMe=""; +// int rollResult = dice.rollDie(); +// +// if (isPlayerTurn) { +// returnMe += "You rolled a " + rollResult; +// } +// else{ +// returnMe += "Your opponent rolled a "+rollResult; +// } +// +// if (rollResult==7 || rollResult==11){ +// if (isPlayerTurn) { +// returnMe+=" and you won "+mainStake; +// playerWonBet=true; +// } +// else { +// returnMe+=" and you lost "+mainStake; +// playerWonBet=false; +// } +// } +// else if (rollResult==2 || rollResult==3 || rollResult==12){ +// if (isPlayerTurn) { +// returnMe+=" and you lost "+mainStake; +// playerWonBet=false; +// } +// else { +// returnMe+=" and you won "+mainStake; +// playerWonBet=true; +// } +// } +// else{ +// point=rollResult; +// assignPair(); +// isPointSet=true; +// returnMe+=" which makes "+point+" the new point."; +// } +// returnMe+=" There is "+mainPot.getMoney()+" in the pot."; +// return returnMe; +// } +// +// public String subsequentRolls(double sideStake){ +// String returnMe=""; +// int rollResult = dice.rollDie(); +// +// if ((rollResult == point) && (isPlayerTurn)){ +// returnMe+="You rolled "+rollResult+" and got the point! You won everything!"; +// playerWonBet=true; +// playerWonSide=true; +// sidePairRolled=true; +// } else +// if ((rollResult == point) && (!isPlayerTurn)){ +// returnMe+="Opponent rolled "+rollResult+" and got the point. You lost everything!"; +// playerWonBet=false; +// playerWonSide=false; +// sidePairRolled=true; +// } else +// if ((rollResult==7) && (isPlayerTurn)){ +// returnMe+="You crapped out. You lost everything!"; +// playerWonBet=false; +// playerWonSide=false; +// sidePairRolled=true; +// } else +// if ((rollResult==7) && (!isPlayerTurn)){ +// returnMe+="Your opponent crapped out! You won everything!"; +// playerWonBet=true; +// playerWonSide=true; +// sidePairRolled=true; +// } else{ +// if (pair.isInPair(rollResult)){ +// sidePairRolled=true; +// if (isPlayerTurn){ +// returnMe+="You rolled "+rollResult+" and won the side bet of "+sideStake+". "; +// playerWonSide=true; +// } +// else { +// returnMe+="Your opponent rolled "+rollResult+" and won the side bet of "+sideStake+". "; +// playerWonSide=false; +// } +// } else{ +// returnMe+=""+rollResult+" was rolled. Rolling again. "; +// } +// } +// return returnMe; +// } +// +// public String pairText(){ +// return(pair.text); +// } +// +// private CrapPointPair assignPair() { +// +// for(CrapPointPair p : CrapPointPair.values()) { +// if (p.a==point || p.b==point) { +// return p; +// } +// } +// return null; +// } +// +// public void rollHighLow(){ +// int playerRoll; +// int botRoll; +// +// do { +// playerRoll = dice.rollDie(); +// botRoll = dice.rollDie(); +// }while (playerRoll==botRoll); +// +// isPlayerTurn=(playerRoll>botRoll); +// +// } +// +// public int getPoint(){ +// return point; +// } +// +// public boolean getIsPlayerTurn(){ +// return isPlayerTurn; +// } +// +// public boolean getIsPointSet(){ +// return isPointSet; +// } +// +// public boolean getPlayerWonSide() { +// return playerWonSide; +// } +// +// public boolean getSidePairRolled() { +// return sidePairRolled; +// } +// +// public void takeBet(Double bet) { +// mainPot.addMoney(bet); +// } +// +// public boolean getPlayerWonBet(){ +// return playerWonBet; +// } +// +// public Double settleBet() { +// return mainPot.takeOutMoney(mainPot.getMoney()/2); +// } +// +// public Double cashOutPot(){ +// return mainPot.takeAllMoney(); +// } +// +// private enum CrapPointPair { +// sixEight(6, 8, "6-8"), +// fiveNine(5, 9, "5-9"), +// tenFour(10, 4, "10-4"); +// +// int a; +// int b; +// String text; +// +// CrapPointPair(int a, int b, String text) { +// this.a = a; +// this.b = b; +// this.text=text; +// } +// +// boolean isInPair(int a) { +// return (this.a==a || this.b==a); +// } +// +// } +// +//} diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index d180f6f8..f91c6b67 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -1,326 +1,326 @@ -package io.zipcoder.casino.games.craps; - -import io.zipcoder.casino.games.Gamble; -import io.zipcoder.casino.games.Game; -import io.zipcoder.casino.nuts_n_bolts.Console; -import io.zipcoder.casino.nuts_n_bolts.User; - -import java.util.Scanner; - -import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; -import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; - -public class CrapsConsole{ - - Craps game = new Craps(); - - User player = new User(getStringInput("What is your name? "), - getPositiveDoubleInput("What's in your wallet? ")); - double currentBet=0; - String strResponse=""; - - public void run(){ - - System.out.println("Hello "+player.getName()+ ", and welcome to the " - +game.getClass().getSimpleName()+" table."); - - game.rollHighLow(); -/////// - strResponse=getStringInput("I have to ask: are you sure you want to stay at the table? [Y/N] "); - - if (game.getIsPlayerTurn()){ - currentBet=getPositiveDoubleInput("It's your turn to roll! Make a bet: "); - } else{ - currentBet=getPositiveDoubleInput("It's your opponent's turn to roll. Make a bet: "); - } - game.takeBet(player.getWallet().takeOutMoney(currentBet)); - game.takeBet(currentBet);// Once for player, once for house -/////// - while (game.play(strResponse)){ - - System.out.println(game.initialRoll()); - - if(game.getPlayerWonBet()) { - player.getWallet().addMoney(game.settleBet()); - } else if (!game.getPlayerWonBet() && !game.getIsPointSet()) { - game.takeBet(player.getWallet().takeOutMoney(currentBet)); - } - - if (game.getIsPointSet()){ - currentBet=getPositiveDoubleInput("Current point is "+game.getPoint()+" and" + - " current pair is "+game.pairText()+". Your bet? "); - game.takeBet(player.getWallet().takeOutMoney(currentBet)); - game.takeBet(currentBet);// Once for player, once for house - - while (game.getPoint()!=0){ - System.out.println(game.subsequentRolls(currentBet)); - if (game.getPlayerWonBet()){ - player.getWallet().addMoney(game.cashOutPot()); - } else if (game.getPlayerWonSide()){ - player.getWallet().addMoney(); - } - - } - } - - -// private Craps game = new Craps(); -// private User player; -// private static Scanner scanner = new Scanner(System.in); -// -// -// public void setGame(Game game) { -// this.game = game; -// } +//package io.zipcoder.casino.games.craps; // -// public void setUser(User user) { -// this.player = user; -// } +//import io.zipcoder.casino.games.Gamble; +//import io.zipcoder.casino.games.Game; +//import io.zipcoder.casino.nuts_n_bolts.Console; +//import io.zipcoder.casino.nuts_n_bolts.User; +// +//import java.util.Scanner; // -// public void run() { -// System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); +//import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +//import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; // -// if (game instanceof Gamble) { -// do {//betting game logic +//public class CrapsConsole{ // +// Craps game = new Craps(); // +// User player = new User(getStringInput("What is your name? "), +// getPositiveDoubleInput("What's in your wallet? ")); +// double currentBet=0; +// String strResponse=""; // +// public void run(){ // -// playerBets(); +// System.out.println("Hello "+player.getName()+ ", and welcome to the " +// +game.getClass().getSimpleName()+" table."); // +// game.rollHighLow(); +///////// +// strResponse=getStringInput("I have to ask: are you sure you want to stay at the table? [Y/N] "); // +// if (game.getIsPlayerTurn()){ +// currentBet=getPositiveDoubleInput("It's your turn to roll! Make a bet: "); +// } else{ +// currentBet=getPositiveDoubleInput("It's your opponent's turn to roll. Make a bet: "); +// } +// game.takeBet(player.getWallet().takeOutMoney(currentBet)); +// game.takeBet(currentBet);// Once for player, once for house +///////// +// while (game.play(strResponse)){ // +// System.out.println(game.initialRoll()); // +// if(game.getPlayerWonBet()) { +// player.getWallet().addMoney(game.settleBet()); +// } else if (!game.getPlayerWonBet() && !game.getIsPointSet()) { +// game.takeBet(player.getWallet().takeOutMoney(currentBet)); +// } // -// } while (game.play(continuePlaying())); -// } else { +// if (game.getIsPointSet()){ +// currentBet=getPositiveDoubleInput("Current point is "+game.getPoint()+" and" + +// " current pair is "+game.pairText()+". Your bet? "); +// game.takeBet(player.getWallet().takeOutMoney(currentBet)); +// game.takeBet(currentBet);// Once for player, once for house +// +// while (game.getPoint()!=0){ +// System.out.println(game.subsequentRolls(currentBet)); +// if (game.getPlayerWonBet()){ +// player.getWallet().addMoney(game.cashOutPot()); +// } else if (game.getPlayerWonSide()){ +// player.getWallet().addMoney(); +// } +// +// } +// } +// +// +//// private Craps game = new Craps(); +//// private User player; +//// private static Scanner scanner = new Scanner(System.in); +//// +//// +//// public void setGame(Game game) { +//// this.game = game; +//// } +//// +//// public void setUser(User user) { +//// this.player = user; +//// } +//// +//// public void run() { +//// System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); +//// +//// if (game instanceof Gamble) { +//// do {//betting game logic +//// +//// +//// +//// +//// playerBets(); +//// +//// +//// +//// +//// +//// } while (game.play(continuePlaying())); +//// } else { +//// +//// do {//non betting game logic +//// +//// } while (game.play(continuePlaying())); +//// } +//// +//// } +//// +//// +//// private String continuePlaying() { +//// return (getStringInput("Continue playing? ")); +//// } +//// +//// private void displayPlayerMoney(){ +//// System.out.println("You have $" + player.getWallet().getMoney()); +//// } +//// +//// private void playerBets(){ +//// double betAmount; +//// +//// do{ +//// displayPlayerMoney(); +//// betAmount=getBetAmount(); +//// }while (betAmount>player.getWallet().getMoney()); +//// +//// game.takeBet(betAmount); +//// +//// } +//// +//// private Double getBetAmount(){ +//// return (getPositiveDoubleInput("How much do you want to bet? ")); +//// +//// } +//// +////} +///* +// private static final double MIN_BET_ALLOWED=0.01; +// +// private static Game game = new Game(); +// private static Scanner scanner = new Scanner (System.in); +// +// public static void run(){ +// +// Player userPlayer = game.getPlayer(); // -// do {//non betting game logic +// System.out.print("" + +// " ____ _ _ _ _ \n" + +// "| __ ) | | __ _ ___| | __(_) __ _ ___| | __\n" + +// "| \\ | |/ _` |/ __| |/ /| |/ ` |/ __| |/ / \n" + +// "| |_) || | (_| | (__| | < | | (_| | (__| < \n" + +// "|____/ |_|\\__,_|\\___|_|\\_\\| |\\__,_|\\___|_|\\_\\ \n" + +// " |__/ \n" + +// "+--------------------------------------------+" + +// "\n\nWelcome to the table!" + +// "\n\nWhat's your name? "); // -// } while (game.play(continuePlaying())); +// String userName = getInput(); +// userPlayer.setName(userName); +// +// System.out.println("Hello, " + userName + "!"); +// +// System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); +// +// do { +// playerBets(userPlayer); +// displayPlayerHandAndScore(userPlayer); +// displayDealerCardShowing(); +// playerHitsOrStays(userPlayer); +// game.dealerHitUntilFinished(); +// determineWinOrLoss(userPlayer); +// } while (playerStaysForAnotherRound(userPlayer)); +// +// System.out.println("\nThanks for playing! Goodbye!"); +// } +// +// private static boolean playerStaysForAnotherRound(Player userPlayer) { +// String input; +// System.out.println("\nYou have $" + forceTwoDecimalDouble(userPlayer.getMoney().toString())); +// if (userPlayer.getMoney() >= 0.01) { +// do { +// System.out.print("\nStay for another round? [Yes/No] "); +// input = getInput(); +// if (isInputYesOrNo(input)) +// { +// return ("yes".equalsIgnoreCase(input)); +// } +// } while (!isInputYesOrNo(input)); +// +// } +// else { +// System.out.println("\nYou are out of money."); // } +// return false; +// } // +// private static void determineWinOrLoss(Player userPlayer){ +// +// if (game.playerWins()) { +// System.out.println("\nPlayer wins!"); +// } else { +// System.out.println("\nHouse wins!"); +// } +// System.out.println("\nHouse has score: " + game.getDealer().getScore()); +// resetPotAndDiscardHands(userPlayer); +// } +// +// private static void resetPotAndDiscardHands(Player userPlayer){ +// game.returnBet(); +// userPlayer.getHand().clear(); +// game.getDealer().getHand().clear(); // } // +// private static void playerHitsOrStays(Player userPlayer){ +// String input; +// do { +// input=forceHitOrStay(); +// if ("hit".equalsIgnoreCase(input)) { +// game.dealCard(userPlayer); +// } +// displayPlayerHandAndScore(userPlayer); +// } while ("hit".equalsIgnoreCase(input) && (userPlayer.calculateScore() <= 21)); +// } +// +// private static String forceHitOrStay(){ +// String input; +// do { +// System.out.print("\nHit or stay? "); +// input = getInput(); +// } while (!isInputStayOrHit(input)); +// return input; +// } +// +// private static void displayDealerCardShowing(){ +// System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); +// } +// +// private static void displayPlayerHandAndScore(Player userPlayer){ +// Card card; +// for (int i=0; iplayer.getWallet().getMoney()); +// private static String getInput() +// { +// return scanner.nextLine(); +// } // -// game.takeBet(betAmount); +// public static boolean isInputPositive(String passedString){ +// return Double.valueOf(passedString)>=MIN_BET_ALLOWED; +// } // +// public static boolean isInputDouble(String passedString) +// { +// try { +// Double output = Double.valueOf(passedString); +// } catch (NumberFormatException e) { +// return false; +// } +// return (true); // } // -// private Double getBetAmount(){ -// return (getPositiveDoubleInput("How much do you want to bet? ")); +// public static boolean isInputStayOrHit(String passedString) +// { +// return ("hit".equalsIgnoreCase(passedString) || +// "stay".equalsIgnoreCase(passedString)); +// } // +// public static boolean isInputYesOrNo(String passedString) +// { +// return ("yes".equalsIgnoreCase(passedString) || +// "no".equalsIgnoreCase(passedString)); // } // -//} -/* - private static final double MIN_BET_ALLOWED=0.01; - - private static Game game = new Game(); - private static Scanner scanner = new Scanner (System.in); - - public static void run(){ - - Player userPlayer = game.getPlayer(); - - System.out.print("" + - " ____ _ _ _ _ \n" + - "| __ ) | | __ _ ___| | __(_) __ _ ___| | __\n" + - "| \\ | |/ _` |/ __| |/ /| |/ ` |/ __| |/ / \n" + - "| |_) || | (_| | (__| | < | | (_| | (__| < \n" + - "|____/ |_|\\__,_|\\___|_|\\_\\| |\\__,_|\\___|_|\\_\\ \n" + - " |__/ \n" + - "+--------------------------------------------+" + - "\n\nWelcome to the table!" + - "\n\nWhat's your name? "); - - String userName = getInput(); - userPlayer.setName(userName); - - System.out.println("Hello, " + userName + "!"); - - System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); - - do { - playerBets(userPlayer); - displayPlayerHandAndScore(userPlayer); - displayDealerCardShowing(); - playerHitsOrStays(userPlayer); - game.dealerHitUntilFinished(); - determineWinOrLoss(userPlayer); - } while (playerStaysForAnotherRound(userPlayer)); - - System.out.println("\nThanks for playing! Goodbye!"); - } - - private static boolean playerStaysForAnotherRound(Player userPlayer) { - String input; - System.out.println("\nYou have $" + forceTwoDecimalDouble(userPlayer.getMoney().toString())); - if (userPlayer.getMoney() >= 0.01) { - do { - System.out.print("\nStay for another round? [Yes/No] "); - input = getInput(); - if (isInputYesOrNo(input)) - { - return ("yes".equalsIgnoreCase(input)); - } - } while (!isInputYesOrNo(input)); - - } - else { - System.out.println("\nYou are out of money."); - } - return false; - } - - private static void determineWinOrLoss(Player userPlayer){ - - if (game.playerWins()) { - System.out.println("\nPlayer wins!"); - } else { - System.out.println("\nHouse wins!"); - } - System.out.println("\nHouse has score: " + game.getDealer().getScore()); - resetPotAndDiscardHands(userPlayer); - } - - private static void resetPotAndDiscardHands(Player userPlayer){ - game.returnBet(); - userPlayer.getHand().clear(); - game.getDealer().getHand().clear(); - } - - private static void playerHitsOrStays(Player userPlayer){ - String input; - do { - input=forceHitOrStay(); - if ("hit".equalsIgnoreCase(input)) { - game.dealCard(userPlayer); - } - displayPlayerHandAndScore(userPlayer); - } while ("hit".equalsIgnoreCase(input) && (userPlayer.calculateScore() <= 21)); - } - - private static String forceHitOrStay(){ - String input; - do { - System.out.print("\nHit or stay? "); - input = getInput(); - } while (!isInputStayOrHit(input)); - return input; - } - - private static void displayDealerCardShowing(){ - System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); - } - - private static void displayPlayerHandAndScore(Player userPlayer){ - Card card; - for (int i=0; i=MIN_BET_ALLOWED; - } - - public static boolean isInputDouble(String passedString) - { - try { - Double output = Double.valueOf(passedString); - } catch (NumberFormatException e) { - return false; - } - return (true); - } - - public static boolean isInputStayOrHit(String passedString) - { - return ("hit".equalsIgnoreCase(passedString) || - "stay".equalsIgnoreCase(passedString)); - } - - public static boolean isInputYesOrNo(String passedString) - { - return ("yes".equalsIgnoreCase(passedString) || - "no".equalsIgnoreCase(passedString)); - } - - public static String forceTwoDecimalDouble(String input){ - if ( !(input.contains(".")) || - input.substring(input.indexOf("."), input.length()).length()==3) - { - return input; - } - else - { - if (input.substring(input.indexOf("."), input.length()).length()<3) { - do { - input = input + "0"; - } while (input.substring(input.indexOf("."), input.length()).length() < 3); - return input; - } - - input = input.substring(0,input.indexOf("."))+ - input.substring(input.indexOf("."), input.indexOf(".")+3); - return input; - } - - - }*/ -} \ No newline at end of file +// public static String forceTwoDecimalDouble(String input){ +// if ( !(input.contains(".")) || +// input.substring(input.indexOf("."), input.length()).length()==3) +// { +// return input; +// } +// else +// { +// if (input.substring(input.indexOf("."), input.length()).length()<3) { +// do { +// input = input + "0"; +// } while (input.substring(input.indexOf("."), input.length()).length() < 3); +// return input; +// } +// +// input = input.substring(0,input.indexOf("."))+ +// input.substring(input.indexOf("."), input.indexOf(".")+3); +// return input; +// } +// +// +// }*/ +//} \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java index 4e394006..8290424c 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java @@ -8,6 +8,11 @@ public class CrapsConsoleWIP { + public static void main(String[] args){ + CrapsConsoleWIP console = new CrapsConsoleWIP(); + console.run(); + } + private CrapsWIP game = new CrapsWIP(); private User player; private double mainPotBet; From 37096411bf85ae17e0f9ccb54854236221eb46a6 Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 07:03:55 -0500 Subject: [PATCH 27/46] Changes wip names to Craps and CrapsConsole --- .../io/zipcoder/casino/games/craps/Craps.java | 385 +++++------- .../casino/games/craps/CrapsConsole.java | 550 +++++++----------- .../casino/games/craps/CrapsConsoleWIP.java | 224 ------- .../zipcoder/casino/games/craps/CrapsWIP.java | 152 ----- 4 files changed, 376 insertions(+), 935 deletions(-) delete mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsConsoleWIP.java delete mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsWIP.java diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index ccc264bb..5a45b91c 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -1,233 +1,152 @@ -//package io.zipcoder.casino.games.craps; -// -//import io.zipcoder.casino.games.Gamble; -//import io.zipcoder.casino.games.Game; -//import io.zipcoder.casino.nuts_n_bolts.Dice; -//import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; -//import io.zipcoder.casino.nuts_n_bolts.User; -// -//import java.util.ArrayList; -// -//public class Craps implements Game, Gamble { -// -// //2 players -// //roll to decide first, highest wins -// //both make a bet -> pot -// //decide if bet is pass or don't pass -// //player throwing dice = shooter -// //roll 2 dice 7/11 on first roll -> win -// // 2/3/12 on first roll -> lose -// //come/don't come bets -// -// private Dice dice; -// private CrapPointPair pair; -// private boolean isPointSet = false; -// private boolean playerWonBet = false; -// private boolean sidePairRolled = false; -// private boolean playerWonSide = false; -// private boolean isPlayerTurn = false; -// private int point=0; -// private MoneyContainer mainPot; -// -// public Craps(){ -// ArrayList twoToTwelve = new ArrayList<>(); -// for (int i=2; i<13; i++) -// { -// twoToTwelve.add(i); -// } -// dice=new Dice<>(twoToTwelve); -// } -// -// public boolean play(String userInput) { -// return ("Y".equalsIgnoreCase(userInput)); -// } -// -///* -// roll to determine who goes first (high/low) -// Player makes a pass or dontPass bet into the mainPot -// initialThrow (comeOutRoll) to win or point. -// resolve if pass, dontPass, or point (7,11 is pass) (2,3,12 is dontPass). -// //Player wins/loses their opponent's stake in the pot -// //Opponent needs to bet again before next roll -// //Same, inverse -// if point, can make side bets on the point (6/8, 5/9, 10/4) -// If roller gets his point, he wins mainPot and sidePot. -// If roller rolls side number, he only wins sidePot. -// Another sideBet can be made after the first sideBet is won -// -// If roller craps (7) out, nonRoller wins mainPot and sidePot -// Next player gets the dice -// -// */ -// -// public String initialRoll(double mainStake){ -// String returnMe=""; -// int rollResult = dice.rollDie(); -// -// if (isPlayerTurn) { -// returnMe += "You rolled a " + rollResult; -// } -// else{ -// returnMe += "Your opponent rolled a "+rollResult; -// } -// -// if (rollResult==7 || rollResult==11){ -// if (isPlayerTurn) { -// returnMe+=" and you won "+mainStake; -// playerWonBet=true; -// } -// else { -// returnMe+=" and you lost "+mainStake; -// playerWonBet=false; -// } -// } -// else if (rollResult==2 || rollResult==3 || rollResult==12){ -// if (isPlayerTurn) { -// returnMe+=" and you lost "+mainStake; -// playerWonBet=false; -// } -// else { -// returnMe+=" and you won "+mainStake; -// playerWonBet=true; -// } -// } -// else{ -// point=rollResult; -// assignPair(); -// isPointSet=true; -// returnMe+=" which makes "+point+" the new point."; -// } -// returnMe+=" There is "+mainPot.getMoney()+" in the pot."; -// return returnMe; -// } -// -// public String subsequentRolls(double sideStake){ -// String returnMe=""; -// int rollResult = dice.rollDie(); -// -// if ((rollResult == point) && (isPlayerTurn)){ -// returnMe+="You rolled "+rollResult+" and got the point! You won everything!"; -// playerWonBet=true; -// playerWonSide=true; -// sidePairRolled=true; -// } else -// if ((rollResult == point) && (!isPlayerTurn)){ -// returnMe+="Opponent rolled "+rollResult+" and got the point. You lost everything!"; -// playerWonBet=false; -// playerWonSide=false; -// sidePairRolled=true; -// } else -// if ((rollResult==7) && (isPlayerTurn)){ -// returnMe+="You crapped out. You lost everything!"; -// playerWonBet=false; -// playerWonSide=false; -// sidePairRolled=true; -// } else -// if ((rollResult==7) && (!isPlayerTurn)){ -// returnMe+="Your opponent crapped out! You won everything!"; -// playerWonBet=true; -// playerWonSide=true; -// sidePairRolled=true; -// } else{ -// if (pair.isInPair(rollResult)){ -// sidePairRolled=true; -// if (isPlayerTurn){ -// returnMe+="You rolled "+rollResult+" and won the side bet of "+sideStake+". "; -// playerWonSide=true; -// } -// else { -// returnMe+="Your opponent rolled "+rollResult+" and won the side bet of "+sideStake+". "; -// playerWonSide=false; -// } -// } else{ -// returnMe+=""+rollResult+" was rolled. Rolling again. "; -// } -// } -// return returnMe; -// } -// -// public String pairText(){ -// return(pair.text); -// } -// -// private CrapPointPair assignPair() { -// -// for(CrapPointPair p : CrapPointPair.values()) { -// if (p.a==point || p.b==point) { -// return p; -// } -// } -// return null; -// } -// -// public void rollHighLow(){ -// int playerRoll; -// int botRoll; -// -// do { -// playerRoll = dice.rollDie(); -// botRoll = dice.rollDie(); -// }while (playerRoll==botRoll); -// -// isPlayerTurn=(playerRoll>botRoll); -// -// } -// -// public int getPoint(){ -// return point; -// } -// -// public boolean getIsPlayerTurn(){ -// return isPlayerTurn; -// } -// -// public boolean getIsPointSet(){ -// return isPointSet; -// } -// -// public boolean getPlayerWonSide() { -// return playerWonSide; -// } -// -// public boolean getSidePairRolled() { -// return sidePairRolled; -// } -// -// public void takeBet(Double bet) { -// mainPot.addMoney(bet); -// } -// -// public boolean getPlayerWonBet(){ -// return playerWonBet; -// } -// -// public Double settleBet() { -// return mainPot.takeOutMoney(mainPot.getMoney()/2); -// } -// -// public Double cashOutPot(){ -// return mainPot.takeAllMoney(); -// } -// -// private enum CrapPointPair { -// sixEight(6, 8, "6-8"), -// fiveNine(5, 9, "5-9"), -// tenFour(10, 4, "10-4"); -// -// int a; -// int b; -// String text; -// -// CrapPointPair(int a, int b, String text) { -// this.a = a; -// this.b = b; -// this.text=text; -// } -// -// boolean isInPair(int a) { -// return (this.a==a || this.b==a); -// } -// -// } -// -//} +package io.zipcoder.casino.games.craps; + +import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.nuts_n_bolts.Dice; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; + +import java.util.ArrayList; + +public class Craps implements Gamble, Game { + + private CrapPointPair pair; + private Dice dice; + private MoneyContainer mainPot; + private MoneyContainer sidePot; + private boolean isPlayerTurn; + private int point; + + public Craps(){ + ArrayList twoToTwelve = new ArrayList<>(); + for (int i=2; i<13; i++){ + twoToTwelve.add(i); + } + dice = new Dice(twoToTwelve); + mainPot=new MoneyContainer(); + sidePot=new MoneyContainer(); + determineFirstRoller(); + } + +//Add to pot + @Override + public void takeBet(Double bet) { + takeBet(bet, mainPot); + } + private void takeBet(Double bet, MoneyContainer moneyContainer) { + moneyContainer.addMoney(bet); + } + public void takeSideBet(Double bet){ + takeBet(bet, sidePot); + } + +//remove some from pot + @Override + public Double settleBet(Double winnings) { + return (settleBet(winnings, mainPot)); + } + private Double settleBet(Double winnings, MoneyContainer moneyContainer){ + return (moneyContainer.takeOutMoney(winnings)); + } + public Double settleSideBet(Double winnings){ + return (settleBet(winnings, sidePot)); + } + +//Take all from pot + public Double emptyPot(){ + return emptyPot(mainPot); + } + private Double emptyPot(MoneyContainer moneyContainer){ + return moneyContainer.takeAllMoney(); + } + public Double emptySidePot(){ + return emptyPot(sidePot); + } + + + public void determineFirstRoller(){ + isPlayerTurn=(dice.rollDie()-dice.rollDie()>0);//Player vs House, highest goes first, house wins tie + } + public void changePlayerTurn(){ + isPlayerTurn=!isPlayerTurn; + } + public boolean getPlayerTurn(){return isPlayerTurn;} + + public int getPoint(){return point;} + public String getPair(){ + return(pair.text); + } + + public Integer initialThrow(){ //returns -1 if 2/3/12 + // 1 if 7/11, + // 0 if point set + int numberRolled = dice.rollDie(); + + switch (numberRolled){ + case 2: + case 3: + case 12:{ + return -1; + } + case 7: + case 11:{ + return 1; + } + default:{ + point=numberRolled; + for (CrapPointPair p : CrapPointPair.values()){ + if (p.isInPair(point)){ + pair=p; + } + } + return 0; + } + } + + } + public Integer secondaryThrow(){//returns -1 if crapped out, + //returns 1 if point met + //returns 0 if nothing met + //returns any other number if pair met + int numberRolled=dice.rollDie(); + + if (numberRolled==point){//Won round + return 1; + } else if (numberRolled==7)//Lost round + { + return -1; + } else if (pair.isInPair(numberRolled)){//Won sideBet + return numberRolled; + } else{ + return 0;//Neutral. + } + } + + @Override + public boolean play(String userInput) { + return ("Y".equalsIgnoreCase(userInput)); + } + + private enum CrapPointPair { + sixEight(6, 8, "6-8"), + fiveNine(5, 9, "5-9"), + tenFour(10, 4, "10-4"); + + int a; + int b; + String text; + + CrapPointPair(int a, int b, String text) { + this.a = a; + this.b = b; + this.text=text; + } + + boolean isInPair(int passed) { + return (this.a==passed || this.b==passed); + } + + } + + + +} diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index f91c6b67..391ec7c9 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -1,326 +1,224 @@ -//package io.zipcoder.casino.games.craps; -// -//import io.zipcoder.casino.games.Gamble; -//import io.zipcoder.casino.games.Game; -//import io.zipcoder.casino.nuts_n_bolts.Console; -//import io.zipcoder.casino.nuts_n_bolts.User; -// -//import java.util.Scanner; -// -//import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; -//import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; -// -//public class CrapsConsole{ -// -// Craps game = new Craps(); -// -// User player = new User(getStringInput("What is your name? "), -// getPositiveDoubleInput("What's in your wallet? ")); -// double currentBet=0; -// String strResponse=""; -// -// public void run(){ -// -// System.out.println("Hello "+player.getName()+ ", and welcome to the " -// +game.getClass().getSimpleName()+" table."); -// -// game.rollHighLow(); -///////// -// strResponse=getStringInput("I have to ask: are you sure you want to stay at the table? [Y/N] "); -// -// if (game.getIsPlayerTurn()){ -// currentBet=getPositiveDoubleInput("It's your turn to roll! Make a bet: "); -// } else{ -// currentBet=getPositiveDoubleInput("It's your opponent's turn to roll. Make a bet: "); -// } -// game.takeBet(player.getWallet().takeOutMoney(currentBet)); -// game.takeBet(currentBet);// Once for player, once for house -///////// -// while (game.play(strResponse)){ -// -// System.out.println(game.initialRoll()); -// -// if(game.getPlayerWonBet()) { -// player.getWallet().addMoney(game.settleBet()); -// } else if (!game.getPlayerWonBet() && !game.getIsPointSet()) { -// game.takeBet(player.getWallet().takeOutMoney(currentBet)); -// } -// -// if (game.getIsPointSet()){ -// currentBet=getPositiveDoubleInput("Current point is "+game.getPoint()+" and" + -// " current pair is "+game.pairText()+". Your bet? "); -// game.takeBet(player.getWallet().takeOutMoney(currentBet)); -// game.takeBet(currentBet);// Once for player, once for house -// -// while (game.getPoint()!=0){ -// System.out.println(game.subsequentRolls(currentBet)); -// if (game.getPlayerWonBet()){ -// player.getWallet().addMoney(game.cashOutPot()); -// } else if (game.getPlayerWonSide()){ -// player.getWallet().addMoney(); -// } -// -// } -// } -// -// -//// private Craps game = new Craps(); -//// private User player; -//// private static Scanner scanner = new Scanner(System.in); -//// -//// -//// public void setGame(Game game) { -//// this.game = game; -//// } -//// -//// public void setUser(User user) { -//// this.player = user; -//// } -//// -//// public void run() { -//// System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); -//// -//// if (game instanceof Gamble) { -//// do {//betting game logic -//// -//// -//// -//// -//// playerBets(); -//// -//// -//// -//// -//// -//// } while (game.play(continuePlaying())); -//// } else { -//// -//// do {//non betting game logic -//// -//// } while (game.play(continuePlaying())); -//// } -//// -//// } -//// -//// -//// private String continuePlaying() { -//// return (getStringInput("Continue playing? ")); -//// } -//// -//// private void displayPlayerMoney(){ -//// System.out.println("You have $" + player.getWallet().getMoney()); -//// } -//// -//// private void playerBets(){ -//// double betAmount; -//// -//// do{ -//// displayPlayerMoney(); -//// betAmount=getBetAmount(); -//// }while (betAmount>player.getWallet().getMoney()); -//// -//// game.takeBet(betAmount); -//// -//// } -//// -//// private Double getBetAmount(){ -//// return (getPositiveDoubleInput("How much do you want to bet? ")); -//// -//// } -//// -////} -///* -// private static final double MIN_BET_ALLOWED=0.01; -// -// private static Game game = new Game(); -// private static Scanner scanner = new Scanner (System.in); -// -// public static void run(){ -// -// Player userPlayer = game.getPlayer(); -// -// System.out.print("" + -// " ____ _ _ _ _ \n" + -// "| __ ) | | __ _ ___| | __(_) __ _ ___| | __\n" + -// "| \\ | |/ _` |/ __| |/ /| |/ ` |/ __| |/ / \n" + -// "| |_) || | (_| | (__| | < | | (_| | (__| < \n" + -// "|____/ |_|\\__,_|\\___|_|\\_\\| |\\__,_|\\___|_|\\_\\ \n" + -// " |__/ \n" + -// "+--------------------------------------------+" + -// "\n\nWelcome to the table!" + -// "\n\nWhat's your name? "); -// -// String userName = getInput(); -// userPlayer.setName(userName); -// -// System.out.println("Hello, " + userName + "!"); -// -// System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); -// -// do { -// playerBets(userPlayer); -// displayPlayerHandAndScore(userPlayer); -// displayDealerCardShowing(); -// playerHitsOrStays(userPlayer); -// game.dealerHitUntilFinished(); -// determineWinOrLoss(userPlayer); -// } while (playerStaysForAnotherRound(userPlayer)); -// -// System.out.println("\nThanks for playing! Goodbye!"); -// } -// -// private static boolean playerStaysForAnotherRound(Player userPlayer) { -// String input; -// System.out.println("\nYou have $" + forceTwoDecimalDouble(userPlayer.getMoney().toString())); -// if (userPlayer.getMoney() >= 0.01) { -// do { -// System.out.print("\nStay for another round? [Yes/No] "); -// input = getInput(); -// if (isInputYesOrNo(input)) -// { -// return ("yes".equalsIgnoreCase(input)); -// } -// } while (!isInputYesOrNo(input)); -// -// } -// else { -// System.out.println("\nYou are out of money."); -// } -// return false; -// } -// -// private static void determineWinOrLoss(Player userPlayer){ -// -// if (game.playerWins()) { -// System.out.println("\nPlayer wins!"); -// } else { -// System.out.println("\nHouse wins!"); -// } -// System.out.println("\nHouse has score: " + game.getDealer().getScore()); -// resetPotAndDiscardHands(userPlayer); -// } -// -// private static void resetPotAndDiscardHands(Player userPlayer){ -// game.returnBet(); -// userPlayer.getHand().clear(); -// game.getDealer().getHand().clear(); -// } -// -// private static void playerHitsOrStays(Player userPlayer){ -// String input; -// do { -// input=forceHitOrStay(); -// if ("hit".equalsIgnoreCase(input)) { -// game.dealCard(userPlayer); -// } -// displayPlayerHandAndScore(userPlayer); -// } while ("hit".equalsIgnoreCase(input) && (userPlayer.calculateScore() <= 21)); -// } -// -// private static String forceHitOrStay(){ -// String input; -// do { -// System.out.print("\nHit or stay? "); -// input = getInput(); -// } while (!isInputStayOrHit(input)); -// return input; -// } -// -// private static void displayDealerCardShowing(){ -// System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); -// } -// -// private static void displayPlayerHandAndScore(Player userPlayer){ -// Card card; -// for (int i=0; i=MIN_BET_ALLOWED; -// } -// -// public static boolean isInputDouble(String passedString) -// { -// try { -// Double output = Double.valueOf(passedString); -// } catch (NumberFormatException e) { -// return false; -// } -// return (true); -// } -// -// public static boolean isInputStayOrHit(String passedString) -// { -// return ("hit".equalsIgnoreCase(passedString) || -// "stay".equalsIgnoreCase(passedString)); -// } -// -// public static boolean isInputYesOrNo(String passedString) -// { -// return ("yes".equalsIgnoreCase(passedString) || -// "no".equalsIgnoreCase(passedString)); -// } -// -// public static String forceTwoDecimalDouble(String input){ -// if ( !(input.contains(".")) || -// input.substring(input.indexOf("."), input.length()).length()==3) -// { -// return input; -// } -// else -// { -// if (input.substring(input.indexOf("."), input.length()).length()<3) { -// do { -// input = input + "0"; -// } while (input.substring(input.indexOf("."), input.length()).length() < 3); -// return input; -// } -// -// input = input.substring(0,input.indexOf("."))+ -// input.substring(input.indexOf("."), input.indexOf(".")+3); -// return input; -// } -// -// -// }*/ -//} \ No newline at end of file +package io.zipcoder.casino.games.craps; + + +import io.zipcoder.casino.nuts_n_bolts.User; +import java.util.Random; +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; + +public class CrapsConsole { + + public static void main(String[] args){ + CrapsConsole console = new CrapsConsole(); + console.run(); + } + + private Craps game = new Craps(); + private User player; + private double mainPotBet; + private double sidePotBet; + private boolean pointSet=false; + private boolean pointMet=false; + private Random rando=new Random(); + + public CrapsConsole(){ + player=new User("Uncle Bob", 10_000.0); + } + + public CrapsConsole(User user){ + player=user; + } + + public void run(){ + welcomePlayer(); + game.determineFirstRoller(); + do { + while (!pointSet) {//Continue to bet until the roller + //throws a point instead of a win/loss. + initialBet(); + pointSet = resolveInitialThrow(game.initialThrow()); + } + while (!pointMet) {//Continue to bet until the roller + //meets their point or craps out + secondaryBet(); + pointMet = resolveSecondaryThrow(game.secondaryThrow()); + } + changeTurns();//Reset flags, change active player + }while(game.play(getStringInput("Continue playing? [Y/N] "))); + } + + private void initialBet(){ + + if (game.getPlayerTurn()) + { + playerInitialBets(); + } + else + { + playerInitialBets(generateBotBet()); + } + + } + private void playerInitialBets() { + do { + mainPotBet = getPositiveDoubleInput + ("How much would you like to bet? "); + }while (player.getWallet().getMoney() dice; - private MoneyContainer mainPot; - private MoneyContainer sidePot; - private boolean isPlayerTurn; - private int point; - - public CrapsWIP(){ - ArrayList twoToTwelve = new ArrayList<>(); - for (int i=2; i<13; i++){ - twoToTwelve.add(i); - } - dice = new Dice(twoToTwelve); - mainPot=new MoneyContainer(); - sidePot=new MoneyContainer(); - determineFirstRoller(); - } - -//Add to pot - @Override - public void takeBet(Double bet) { - takeBet(bet, mainPot); - } - private void takeBet(Double bet, MoneyContainer moneyContainer) { - moneyContainer.addMoney(bet); - } - public void takeSideBet(Double bet){ - takeBet(bet, sidePot); - } - -//remove some from pot - @Override - public Double settleBet(Double winnings) { - return (settleBet(winnings, mainPot)); - } - private Double settleBet(Double winnings, MoneyContainer moneyContainer){ - return (moneyContainer.takeOutMoney(winnings)); - } - public Double settleSideBet(Double winnings){ - return (settleBet(winnings, sidePot)); - } - -//Take all from pot - public Double emptyPot(){ - return emptyPot(mainPot); - } - private Double emptyPot(MoneyContainer moneyContainer){ - return moneyContainer.takeAllMoney(); - } - public Double emptySidePot(){ - return emptyPot(sidePot); - } - - - public void determineFirstRoller(){ - isPlayerTurn=(dice.rollDie()-dice.rollDie()>0);//Player vs House, highest goes first, house wins tie - } - public void changePlayerTurn(){ - isPlayerTurn=!isPlayerTurn; - } - public boolean getPlayerTurn(){return isPlayerTurn;} - - public int getPoint(){return point;} - public String getPair(){ - return(pair.text); - } - - public Integer initialThrow(){ //returns -1 if 2/3/12 - // 1 if 7/11, - // 0 if point set - int numberRolled = dice.rollDie(); - - switch (numberRolled){ - case 2: - case 3: - case 12:{ - return -1; - } - case 7: - case 11:{ - return 1; - } - default:{ - point=numberRolled; - for (CrapPointPair p : CrapPointPair.values()){ - if (p.isInPair(point)){ - pair=p; - } - } - return 0; - } - } - - } - public Integer secondaryThrow(){//returns -1 if crapped out, - //returns 1 if point met - //returns 0 if nothing met - //returns any other number if pair met - int numberRolled=dice.rollDie(); - - if (numberRolled==point){//Won round - return 1; - } else if (numberRolled==7)//Lost round - { - return -1; - } else if (pair.isInPair(numberRolled)){//Won sideBet - return numberRolled; - } else{ - return 0;//Neutral. - } - } - - @Override - public boolean play(String userInput) { - return ("Y".equalsIgnoreCase(userInput)); - } - - private enum CrapPointPair { - sixEight(6, 8, "6-8"), - fiveNine(5, 9, "5-9"), - tenFour(10, 4, "10-4"); - - int a; - int b; - String text; - - CrapPointPair(int a, int b, String text) { - this.a = a; - this.b = b; - this.text=text; - } - - boolean isInPair(int passed) { - return (this.a==passed || this.b==passed); - } - - } - - - -} From b3bc4ecce2d9aba04273b6db258c76aba45dbb89 Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 07:45:19 -0500 Subject: [PATCH 28/46] Adding Currency formatting --- .../casino/games/blackjack/BlackJack.java | 298 +++++++++--------- .../io/zipcoder/casino/games/craps/Craps.java | 33 +- .../casino/games/craps/CrapsConsole.java | 20 +- .../games/craps/CrapsConsoleWIPTest.java | 2 +- 4 files changed, 196 insertions(+), 157 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index b5c654bf..29ffd9b4 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -1,149 +1,149 @@ -package io.zipcoder.casino.games.blackjack; - -import io.zipcoder.casino.games.CardGame; -import io.zipcoder.casino.games.Gamble; -import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; -import io.zipcoder.casino.nuts_n_bolts.User; -import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; - -import java.util.ArrayList; - -public class BlackJack extends CardGame implements Gamble { - - private MoneyContainer pot; - private ArrayList users; - - @Override - public void takeBet(Double bet) { - //match biggest bet - } - - @Override - public Double settleBet() { - return null; - } - - public void evaluatePointsInHand(){} - - @Override - public boolean play(String userInput) { - return false; - } - - - //setup game: - //enter user, enter dealer, get fresh deck - //start game - //make bet - //deal 2 cards each, dealer shows one - //hit or stay? - //dealer hits or stays - //resolve winner - //resolve bets - //would you like to go another round? - - private class BlackJackPlayer{ - - private ArrayList hand = new ArrayList<>(); - private User user; - - public BlackJackPlayer(User user) { - this.user = user; - } - - public void makeABet(Double money){} - - public void winABet(Double money){} - - public void hit(){} - - public void stay(){} - - - - } - -} - - - -/* -* private Player player; - private Deck deck; - private Player dealer; - private Double pot; - - public Game(){ - player = new Player(); - deck = new Deck(); - dealer = new Player("Dealer"); - deck.shuffle(); - pot = 0.0; - } - - public Double getPot() { - return pot; - } - - public void addToPot(Double amount) { - this.pot += amount; - } - - public Player getPlayer() { - return player; - } - - public Player getDealer() { - return dealer; - } - - public void start() { - - //Deal two cards to the player and the dealer - for (int i = 0; i < 2; i++) - { - dealCard(player); - dealCard(dealer); - } - - } - - public boolean playerWins() { - // if both player and dealer scores are = to 21 dealer wins - // if both player and dealer score are over 21 then dealer wins - // if player's score is <= 21 and players score is greater than dealers score then player wins. - //if dealer's score is > 21 and player's score is <= 21 then players wins. - player.calculateScore(); - dealer.calculateScore(); - - if( (player.getScore().equals(21) && !dealer.getScore().equals(21)) || - (player.getScore()<21 && dealer.getScore() < player.getScore()) || - (player.getScore() < 21 && dealer.getScore() > 21)) { - //Player wins - return true; - } - //Dealer wins - return false; - } - - public void dealCard(Player playerToReceiveCard){ - Card card = deck.getCard(); - playerToReceiveCard.addToHand(card); - } - - public void dealerHitUntilFinished() { - while (dealer.calculateScore() <= 17) - { - dealCard(dealer); - } - } - - public void returnBet() { - if (playerWins()) { - player.receiveWinnings(pot * 2); - } - else { - this.pot = 0.0; - } - } -* */ +//package io.zipcoder.casino.games.blackjack; +// +//import io.zipcoder.casino.games.CardGame; +//import io.zipcoder.casino.games.Gamble; +//import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; +//import io.zipcoder.casino.nuts_n_bolts.User; +//import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +// +//import java.util.ArrayList; +// +//public class BlackJack extends CardGame implements Gamble { +// +// private MoneyContainer pot; +// private ArrayList users; +// +// @Override +// public void takeBet(Double bet) { +// //match biggest bet +// } +// +// @Override +// public Double settleBet() { +// return null; +// } +// +// public void evaluatePointsInHand(){} +// +// @Override +// public boolean play(String userInput) { +// return false; +// } +// +// +// //setup game: +// //enter user, enter dealer, get fresh deck +// //start game +// //make bet +// //deal 2 cards each, dealer shows one +// //hit or stay? +// //dealer hits or stays +// //resolve winner +// //resolve bets +// //would you like to go another round? +// +// private class BlackJackPlayer{ +// +// private ArrayList hand = new ArrayList<>(); +// private User user; +// +// public BlackJackPlayer(User user) { +// this.user = user; +// } +// +// public void makeABet(Double money){} +// +// public void winABet(Double money){} +// +// public void hit(){} +// +// public void stay(){} +// +// +// +// } +// +//} +// +// +// +///* +//* private Player player; +// private Deck deck; +// private Player dealer; +// private Double pot; +// +// public Game(){ +// player = new Player(); +// deck = new Deck(); +// dealer = new Player("Dealer"); +// deck.shuffle(); +// pot = 0.0; +// } +// +// public Double getPot() { +// return pot; +// } +// +// public void addToPot(Double amount) { +// this.pot += amount; +// } +// +// public Player getPlayer() { +// return player; +// } +// +// public Player getDealer() { +// return dealer; +// } +// +// public void start() { +// +// //Deal two cards to the player and the dealer +// for (int i = 0; i < 2; i++) +// { +// dealCard(player); +// dealCard(dealer); +// } +// +// } +// +// public boolean playerWins() { +// // if both player and dealer scores are = to 21 dealer wins +// // if both player and dealer score are over 21 then dealer wins +// // if player's score is <= 21 and players score is greater than dealers score then player wins. +// //if dealer's score is > 21 and player's score is <= 21 then players wins. +// player.calculateScore(); +// dealer.calculateScore(); +// +// if( (player.getScore().equals(21) && !dealer.getScore().equals(21)) || +// (player.getScore()<21 && dealer.getScore() < player.getScore()) || +// (player.getScore() < 21 && dealer.getScore() > 21)) { +// //Player wins +// return true; +// } +// //Dealer wins +// return false; +// } +// +// public void dealCard(Player playerToReceiveCard){ +// Card card = deck.getCard(); +// playerToReceiveCard.addToHand(card); +// } +// +// public void dealerHitUntilFinished() { +// while (dealer.calculateScore() <= 17) +// { +// dealCard(dealer); +// } +// } +// +// public void returnBet() { +// if (playerWins()) { +// player.receiveWinnings(pot * 2); +// } +// else { +// this.pot = 0.0; +// } +// } +//* */ diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 5a45b91c..802d449d 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -5,12 +5,15 @@ import io.zipcoder.casino.nuts_n_bolts.Dice; import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; +import java.text.NumberFormat; import java.util.ArrayList; public class Craps implements Gamble, Game { + private NumberFormat defaultFormat; private CrapPointPair pair; private Dice dice; + private int numberRolled; private MoneyContainer mainPot; private MoneyContainer sidePot; private boolean isPlayerTurn; @@ -21,9 +24,12 @@ public Craps(){ for (int i=2; i<13; i++){ twoToTwelve.add(i); } + defaultFormat=NumberFormat.getCurrencyInstance(); dice = new Dice(twoToTwelve); mainPot=new MoneyContainer(); sidePot=new MoneyContainer(); + numberRolled=0; + point=0; determineFirstRoller(); } @@ -79,7 +85,7 @@ public String getPair(){ public Integer initialThrow(){ //returns -1 if 2/3/12 // 1 if 7/11, // 0 if point set - int numberRolled = dice.rollDie(); + numberRolled = dice.rollDie(); switch (numberRolled){ case 2: @@ -107,7 +113,7 @@ public Integer secondaryThrow(){//returns -1 if crapped out, //returns 1 if point met //returns 0 if nothing met //returns any other number if pair met - int numberRolled=dice.rollDie(); + numberRolled=dice.rollDie(); if (numberRolled==point){//Won round return 1; @@ -121,6 +127,29 @@ public Integer secondaryThrow(){//returns -1 if crapped out, } } + @Override + public String toString(){ + String returnMe=""; + + if (isPlayerTurn){ + returnMe+="It is your turn\n"; + } else{ + returnMe+="It is your opponent's turn\n"; + } + + if (point==0){ + returnMe+="Point has not been set, and so we do not have a pair to side bet on\n"; + } else{ + returnMe+="Point is "+point+" and we are making side bets on "+pair.text+"\n"; + } + + returnMe+="Main pot is "+defaultFormat.format(mainPot.getMoney())+"\n"; + returnMe+="Side pot is "+defaultFormat.format(sidePot.getMoney())+"\n"; + + returnMe+="Last roll was "+numberRolled+"\n"; + + return returnMe; + } @Override public boolean play(String userInput) { return ("Y".equalsIgnoreCase(userInput)); diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index 391ec7c9..b9a9f98a 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -61,6 +61,7 @@ private void initialBet(){ } private void playerInitialBets() { do { + System.out.println(game.toString()); mainPotBet = getPositiveDoubleInput ("How much would you like to bet? "); }while (player.getWallet().getMoney() Date: Wed, 22 Nov 2017 10:14:41 -0500 Subject: [PATCH 29/46] Craps and console update --- .../io/zipcoder/casino/games/craps/Craps.java | 15 ++- .../casino/games/craps/CrapsConsole.java | 112 ++++++++++++++---- 2 files changed, 103 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 802d449d..56e2a819 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -81,6 +81,13 @@ public void changePlayerTurn(){ public String getPair(){ return(pair.text); } + public int getNumberRolled(){return numberRolled;} + public MoneyContainer getSidePot() { + return sidePot; + } + public MoneyContainer getMainPot() { + return mainPot; + } public Integer initialThrow(){ //returns -1 if 2/3/12 // 1 if 7/11, @@ -143,10 +150,16 @@ public String toString(){ returnMe+="Point is "+point+" and we are making side bets on "+pair.text+"\n"; } + if (numberRolled!=0){ + returnMe+="Last roll was "+numberRolled+"\n"; + } + else{ + returnMe+="Nobody has rolled yet\n"; + } + returnMe+="Main pot is "+defaultFormat.format(mainPot.getMoney())+"\n"; returnMe+="Side pot is "+defaultFormat.format(sidePot.getMoney())+"\n"; - returnMe+="Last roll was "+numberRolled+"\n"; return returnMe; } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index b9a9f98a..eea8b175 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -2,6 +2,8 @@ import io.zipcoder.casino.nuts_n_bolts.User; + +import java.text.NumberFormat; import java.util.Random; import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; @@ -20,13 +22,15 @@ public static void main(String[] args){ private boolean pointSet=false; private boolean pointMet=false; private Random rando=new Random(); + private NumberFormat defaultFormat; public CrapsConsole(){ - player=new User("Uncle Bob", 10_000.0); + this(new User("Uncle Bob", 10_000.0)); } public CrapsConsole(User user){ player=user; + defaultFormat=NumberFormat.getCurrencyInstance(); } public void run(){ @@ -51,19 +55,21 @@ private void initialBet(){ if (game.getPlayerTurn()) { - playerInitialBets(); + playerInitialBets(generateBotBet()); } else { - playerInitialBets(generateBotBet()); + playerInitialBets(); } } private void playerInitialBets() { do { +/////////////// System.out.println(game.toString()); mainPotBet = getPositiveDoubleInput ("How much would you like to bet? "); +/////////////// }while (player.getWallet().getMoney() Date: Wed, 22 Nov 2017 11:26:13 -0500 Subject: [PATCH 30/46] Updating displays in CrapsConsole --- .../casino/games/craps/CrapsConsole.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index eea8b175..9cd10d71 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -212,11 +212,18 @@ private void resolveSecondaryThrowBet(int a){ } + private void displayOpponentBetting(){ + + } + private void displayPlayerBetting(){ + + } + private void neitherWinsAnyPot(){ System.out.println("A "+game.getNumberRolled()+" was rolled... nothing special."); System.out.println("You have "+player.getWallet().getMoney()+" in your wallet now."); printPots(); - enterToContinue(); + enterAnyKeyToContinue(); } private void playerWinsSidePot(){ @@ -228,7 +235,7 @@ private void playerWinsSidePot(){ System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" in your wallet now"); printPots(); - enterToContinue(); + enterAnyKeyToContinue(); sidePotBet=0; } @@ -242,7 +249,7 @@ private void opponentWinsSidePot(){ System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" in your wallet now"); printPots(); - enterToContinue(); + enterAnyKeyToContinue(); sidePotBet=0; } @@ -257,7 +264,7 @@ private void opponentWinsBothPots() { System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" in your wallet now"); printPots(); - enterToContinue(); + enterAnyKeyToContinue(); mainPotBet=0; sidePotBet=0; @@ -274,7 +281,7 @@ private void playerWinsBothPots() { System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" in your wallet now"); printPots(); - enterToContinue(); + enterAnyKeyToContinue(); mainPotBet=0; sidePotBet=0; } @@ -293,8 +300,8 @@ private void printPots() { System.out.println(defaultFormat.format(game.getMainPot().getMoney())+" now in Main Pot"); System.out.println(defaultFormat.format(game.getSidePot().getMoney())+" now in Side Pot"); } - private void enterToContinue(){ - String dumped = getStringInput("Press [Enter/Return] to continue: "); + private void enterAnyKeyToContinue(){ + String dump = getStringInput("Enter any key to continue: "); } } From 76b6abdecff1e3ba5b73039a67334bfcb4e93fd2 Mon Sep 17 00:00:00 2001 From: pavel Date: Wed, 22 Nov 2017 12:21:33 -0500 Subject: [PATCH 31/46] "Done backend for Go Fish" --- src/main/java/io/zipcoder/casino/Main.java | 13 +++++ .../io/zipcoder/casino/casino/Casino.java | 55 +++++++++++++++++-- .../zipcoder/casino/casino/CasinoConsole.java | 13 +++++ .../{Games.java => CasinoMenuChoices.java} | 5 +- .../zipcoder/casino/games/gofish/GoFish.java | 4 ++ .../casino/nuts_n_bolts/cards/Hand.java | 14 +++++ .../java/io/zipcoder/casino/AllTests.java | 4 +- 7 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/Main.java create mode 100644 src/main/java/io/zipcoder/casino/casino/CasinoConsole.java rename src/main/java/io/zipcoder/casino/casino/{Games.java => CasinoMenuChoices.java} (52%) 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 00000000..214065d8 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -0,0 +1,13 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.casino.Casino; + +public class Main { + + public static void main(String[] args) { + + Casino casino = Casino.getInstance(); + + } + +} diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index f2ba5797..68b3e647 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -1,11 +1,15 @@ package io.zipcoder.casino.casino; +import io.zipcoder.casino.games.blackjack.BlackJack; +import io.zipcoder.casino.games.gofish.GoFish; +import io.zipcoder.casino.nuts_n_bolts.Input; import io.zipcoder.casino.nuts_n_bolts.User; public class Casino { private static Casino INSTANCE = null; private User user; + CasinoConsole casinoConsole = new CasinoConsole(); private Casino(){} @@ -16,12 +20,55 @@ public static Casino getInstance(){ return INSTANCE; } - public void startCasino(){} + public void startCasino(){ + casinoWelcome(); + this.user = casinoConsole.createUser(); + do { + playGameOrExit(Input.getStringInput("prompt")); + } while(true); + } + + private void casinoWelcome() { + System.out.println("Welcome to Uncle Bob's Backyard Casinooooooooo!"); + } - private void pickGame(Games game){ - //switch case to game of choice + private void playGameOrExit(String input){ + switch(CasinoMenuChoices.valueOf(input)){ + case EXIT: + + break; + case CRAPS: +// if(enoughMoney()){ +// Craps craps = new Craps(); +// craps.play(); +// } else { +// System.out.println("This is a big boy game, come back with a fuller wallet!"); +// } + break; + case GOFISH: + GoFish goFish = new GoFish(user); + goFish.start(); + break; + case BLACKJACK: +// if(enoughMoney()){ +// BlackJack blackJack = new BlackJack(); +// blackjack.play(); +// } else { +// System.out.println("This is a big boy game, come back with a fuller wallet!"); +// } + break; + } } - private void exitCasino(){} + private void exitCasino(){ + if(user.getWallet().getMoney() < 10d){ + System.out.println("You's broke, see ya next paycheck!"); + } else { + System.out.println("Hope to see ya again soon!"); + } + System.exit(0); + } + + } diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoConsole.java b/src/main/java/io/zipcoder/casino/casino/CasinoConsole.java new file mode 100644 index 00000000..07ae8117 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/casino/CasinoConsole.java @@ -0,0 +1,13 @@ +package io.zipcoder.casino.casino; + +import io.zipcoder.casino.nuts_n_bolts.User; + +public class CasinoConsole { + public User createUser() { + + } + + public Games pickGame() { + return null; + } +} diff --git a/src/main/java/io/zipcoder/casino/casino/Games.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java similarity index 52% rename from src/main/java/io/zipcoder/casino/casino/Games.java rename to src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java index cc17c4ae..74ffc1eb 100644 --- a/src/main/java/io/zipcoder/casino/casino/Games.java +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java @@ -1,9 +1,10 @@ package io.zipcoder.casino.casino; -public enum Games { +public enum CasinoMenuChoices { CRAPS, GOFISH, - BLACKJACK + BLACKJACK, + EXIT } diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index 41b56a57..2ed203d5 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -43,6 +43,10 @@ public PlayingDeck getDeck() { return deck; } + public void start() { + + } + class GoFishPlayer { private User user; diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java index a7fd6534..137a15df 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java @@ -8,6 +8,20 @@ public class Hand { public Hand(){} + @Override + public String toString(){ + if(isHandEmpty()){ + return "If there's nothing in your hand, is it a hand?"; + } else { + String output = ""; + for (PlayingCard card : + cards) { + output += " ["+card+"] "; + } + return output; + } + } + public ArrayList getAllCards() { return cards; } diff --git a/src/test/java/io/zipcoder/casino/AllTests.java b/src/test/java/io/zipcoder/casino/AllTests.java index 0c27b598..c7dbc64d 100644 --- a/src/test/java/io/zipcoder/casino/AllTests.java +++ b/src/test/java/io/zipcoder/casino/AllTests.java @@ -19,7 +19,7 @@ @RunWith(Suite.class) @Suite.SuiteClasses({ - CasinoTest.class, + //CasinoTest.class, BlackJackTest.class, BlackJackPlayerTest.class, CrapsTest.class, @@ -29,7 +29,7 @@ HandTest.class, PlayingCardTest.class, PlayingDeckTest.class, - ConsoleTest.class, + //ConsoleTest.class, DiceTest.class, MoneyContainerTest.class, UserTest.class From 011384bba0b7d978b2b4326e05f910033757af2a Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 12:56:21 -0500 Subject: [PATCH 32/46] Update to change rollers only upon a crapshoot --- .../io/zipcoder/casino/games/craps/Craps.java | 1 + .../casino/games/craps/CrapsConsole.java | 97 +++++++++++-------- 2 files changed, 59 insertions(+), 39 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 56e2a819..17b8f7d7 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -74,6 +74,7 @@ public void determineFirstRoller(){ } public void changePlayerTurn(){ isPlayerTurn=!isPlayerTurn; + numberRolled=0; } public boolean getPlayerTurn(){return isPlayerTurn;} diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index 9cd10d71..ee25d47d 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -21,6 +21,7 @@ public static void main(String[] args){ private double sidePotBet; private boolean pointSet=false; private boolean pointMet=false; + private boolean crappedOut=false; private Random rando=new Random(); private NumberFormat defaultFormat; @@ -47,15 +48,21 @@ public void run(){ secondaryBet(); pointMet = resolveSecondaryThrow(game.secondaryThrow()); } - changeTurns();//Reset flags, change active player + if (crappedOut) { + changeTurns();//Reset flags, change active player + } else{ + resetFlags(); + } }while(game.play(getStringInput("Continue playing? [Y/N] "))); } private void initialBet(){ + System.out.println(game.toString()); + if (game.getPlayerTurn()) { - playerInitialBets(generateBotBet()); + opponentInitialBets(generateBotBet()); } else { @@ -65,24 +72,22 @@ private void initialBet(){ } private void playerInitialBets() { do { -/////////////// - System.out.println(game.toString()); mainPotBet = getPositiveDoubleInput ("How much would you like to bet? "); -/////////////// }while (player.getWallet().getMoney() Date: Wed, 22 Nov 2017 13:45:44 -0500 Subject: [PATCH 33/46] Craps and Console, second working version --- .../io/zipcoder/casino/games/craps/Craps.java | 5 +++++ .../casino/games/craps/CrapsConsole.java | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 17b8f7d7..d2e444c1 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -74,8 +74,13 @@ public void determineFirstRoller(){ } public void changePlayerTurn(){ isPlayerTurn=!isPlayerTurn; + resetTurn(); + } + public void resetTurn() { numberRolled=0; + point=0; } + public boolean getPlayerTurn(){return isPlayerTurn;} public int getPoint(){return point;} diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index ee25d47d..3a226208 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -135,8 +135,8 @@ private boolean resolveInitialThrow(int resultOfThrownDice){ resolveInitialThrowBet(resultOfThrownDice); return false; } - //point was set and we move onto the - // next step in the game + //Point for the first time + firstPointRolled(); return true; } private void resolveInitialThrowBet(int a){ @@ -164,7 +164,7 @@ private void resolveInitialThrowBet(int a){ private boolean resolveSecondaryThrow(int resultOfThrownDice){ switch (resultOfThrownDice) { - case 0: {//Not a point, not a spread, not a crap. Roll again + case 0: {//Not a point, not a pair, not a crap. Roll again neitherWinsAnyPot(); return false; } @@ -176,6 +176,7 @@ private boolean resolveSecondaryThrow(int resultOfThrownDice){ return true; } default: {//Pair made, pay sideBet to non-thrower. + resolveSecondaryThrowBet(resultOfThrownDice); return false; } }//end switch @@ -232,6 +233,13 @@ private void displayPlayerBetting(double passedPlayerBet){//Called _AFTER_ the m enterAnyKeyToContinue(); } + private void firstPointRolled(){ + System.out.println(game.getNumberRolled()+" was rolled... that's our new point."); + System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" in your wallet now."); + printPots(); + enterAnyKeyToContinue(); + + } private void neitherWinsAnyPot(){ System.out.println("A "+game.getNumberRolled()+" was rolled... nothing special."); System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" in your wallet now."); @@ -306,13 +314,13 @@ private void changeTurns(){ resetFlags(); game.changePlayerTurn(); } - private void resetFlags() { mainPotBet=0; sidePotBet=0; pointSet=false; pointMet=false; crappedOut=false; + game.resetTurn(); } private void printPots() { From 8e0cc8459b002b48a97d63c30db8888a1855bb72 Mon Sep 17 00:00:00 2001 From: Pavel Date: Wed, 22 Nov 2017 13:45:59 -0500 Subject: [PATCH 34/46] "Casino menu ported" --- src/main/java/io/zipcoder/casino/Main.java | 4 ++ .../io/zipcoder/casino/casino/Casino.java | 41 +++--------- .../zipcoder/casino/casino/CasinoConsole.java | 13 ---- .../io/zipcoder/casino/casino/CasinoMenu.java | 50 +++++++++++++++ .../casino/casino/CasinoMenuChoices.java | 10 --- .../casino/games/blackjack/BlackJack.java | 4 +- .../zipcoder/casino/games/gofish/GoFish.java | 2 +- .../io/zipcoder/casino/nuts_n_bolts/Menu.java | 62 +++++++++++++++++++ 8 files changed, 126 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/io/zipcoder/casino/casino/CasinoConsole.java create mode 100644 src/main/java/io/zipcoder/casino/casino/CasinoMenu.java delete mode 100644 src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java diff --git a/src/main/java/io/zipcoder/casino/Main.java b/src/main/java/io/zipcoder/casino/Main.java index 214065d8..fdde3589 100644 --- a/src/main/java/io/zipcoder/casino/Main.java +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -1,6 +1,7 @@ package io.zipcoder.casino; import io.zipcoder.casino.casino.Casino; +import io.zipcoder.casino.casino.CasinoMenu; public class Main { @@ -8,6 +9,9 @@ public static void main(String[] args) { Casino casino = Casino.getInstance(); + while (true) { + casino.startCasino(); + } } } diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index 68b3e647..6ac309e9 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -1,6 +1,5 @@ package io.zipcoder.casino.casino; -import io.zipcoder.casino.games.blackjack.BlackJack; import io.zipcoder.casino.games.gofish.GoFish; import io.zipcoder.casino.nuts_n_bolts.Input; import io.zipcoder.casino.nuts_n_bolts.User; @@ -9,7 +8,6 @@ public class Casino { private static Casino INSTANCE = null; private User user; - CasinoConsole casinoConsole = new CasinoConsole(); private Casino(){} @@ -22,9 +20,10 @@ public static Casino getInstance(){ public void startCasino(){ casinoWelcome(); - this.user = casinoConsole.createUser(); + this.user = createUser(Input.getStringInput("What's yo name, good lookin'?"), + Input.getPositiveDoubleInput("How much you puttin' up?")); do { - playGameOrExit(Input.getStringInput("prompt")); + CasinoMenu.INSTANCE.display(); } while(true); } @@ -32,35 +31,7 @@ private void casinoWelcome() { System.out.println("Welcome to Uncle Bob's Backyard Casinooooooooo!"); } - private void playGameOrExit(String input){ - switch(CasinoMenuChoices.valueOf(input)){ - case EXIT: - - break; - case CRAPS: -// if(enoughMoney()){ -// Craps craps = new Craps(); -// craps.play(); -// } else { -// System.out.println("This is a big boy game, come back with a fuller wallet!"); -// } - break; - case GOFISH: - GoFish goFish = new GoFish(user); - goFish.start(); - break; - case BLACKJACK: -// if(enoughMoney()){ -// BlackJack blackJack = new BlackJack(); -// blackjack.play(); -// } else { -// System.out.println("This is a big boy game, come back with a fuller wallet!"); -// } - break; - } - } - - private void exitCasino(){ + void exitCasino(){ if(user.getWallet().getMoney() < 10d){ System.out.println("You's broke, see ya next paycheck!"); } else { @@ -69,6 +40,8 @@ private void exitCasino(){ System.exit(0); } - + User createUser(String name, Double money) { + return new User(name, money); + } } diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoConsole.java b/src/main/java/io/zipcoder/casino/casino/CasinoConsole.java deleted file mode 100644 index 07ae8117..00000000 --- a/src/main/java/io/zipcoder/casino/casino/CasinoConsole.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.zipcoder.casino.casino; - -import io.zipcoder.casino.nuts_n_bolts.User; - -public class CasinoConsole { - public User createUser() { - - } - - public Games pickGame() { - return null; - } -} diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java new file mode 100644 index 00000000..43efa959 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java @@ -0,0 +1,50 @@ +package io.zipcoder.casino.casino; + +import io.zipcoder.casino.nuts_n_bolts.Menu; + +public class CasinoMenu extends Menu{ + + public static final CasinoMenu INSTANCE = new CasinoMenu(); + + enum CasinoMenuOptions {CRAPS, GOFISH, BLACKJACK, EXIT} + + public CasinoMenu(){ + super(CasinoMenuOptions.values()); + } + + @Override + public void selectOption(String userInput) { + switch(CasinoMenuOptions.valueOf(userInput)){ + case EXIT: + Casino.getInstance().exitCasino(); + case CRAPS: +// crapsMenu(); + break; + case GOFISH: +// goFishMenu(); + break; + case BLACKJACK: +// blackJackMenu(); + break; + } + } + + /* + private void crapsMenu() { + CrapsMenu crapsMenu = CrapsMenu.INSTANCE; + crapsMenu.display(); + } + + private void goFishMenu() { + GoFishMenu goFishMenu = GoFishMenu.INSTANCE; + goFishMenu.display(); + } + + private void blackJackMenu() { + BlackJackMenu blackJackMenu = BlackJackMenu.INSTANCE; + blackJackMenu.display(); + } +*/ + + +} diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java deleted file mode 100644 index 74ffc1eb..00000000 --- a/src/main/java/io/zipcoder/casino/casino/CasinoMenuChoices.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.zipcoder.casino.casino; - -public enum CasinoMenuChoices { - - CRAPS, - GOFISH, - BLACKJACK, - EXIT - -} diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index b5c654bf..e072c16b 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -33,7 +33,7 @@ public boolean play(String userInput) { //setup game: //enter user, enter dealer, get fresh deck - //start game + //run game //make bet //deal 2 cards each, dealer shows one //hit or stay? @@ -97,7 +97,7 @@ public Player getDealer() { return dealer; } - public void start() { + public void run() { //Deal two cards to the player and the dealer for (int i = 0; i < 2; i++) diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index 2ed203d5..e9e8ba74 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -43,7 +43,7 @@ public PlayingDeck getDeck() { return deck; } - public void start() { + public void run() { } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java new file mode 100644 index 00000000..83cf4439 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java @@ -0,0 +1,62 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import java.util.ArrayList; +import java.util.Scanner; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Scanner; + +/** + * Created by leon on 10/24/17. + * Yup, totally stole most of this from Leon, he makes good stuff. + */ + +public abstract class Menu { + + private final Enum[] menuOptions; + + public Menu(Enum[] menuOptions) { + this.menuOptions = menuOptions; + } + + abstract public void selectOption(String userInput); + + public void display() { + String userInput; + do { + System.out.printf("\n\n===== %s =====\n", getClass().getSimpleName()); + userInput = this.getMenuInput().toUpperCase(); + try { + selectOption(userInput); + } catch (IllegalArgumentException iae) { + handleIllegalArgumentException(userInput, iae); + } catch (NullPointerException npe) { + handleNullPointerException(npe); + } + } while (!"Home".equalsIgnoreCase(userInput)); + } + + protected void handleIllegalArgumentException(String illegalArgument, IllegalArgumentException iae) { + handleException("What's this [ %s ]?\n", illegalArgument); + } + + protected void handleNullPointerException(NullPointerException npe) { + handleException("Unable to retrieve data with input value.\n"); + } + + private void handleException(String message, Object... args) { + System.out.printf(message, args); + } + + protected String getMenuInput() { + System.out.println("Type in your selection to proceed:"); + for (Enum e : menuOptions) { + System.out.printf("[ %s ] ", e.name()); + } + return Input.getStringInput("\n"); + } + +} + + From 20e13fa6dde67a57e471d179835fe7dcc164efcf Mon Sep 17 00:00:00 2001 From: linda Date: Wed, 22 Nov 2017 14:50:14 -0500 Subject: [PATCH 35/46] saving to CrapsTest branch --- src/main/java/io/zipcoder/casino/Main.java | 17 + .../io/zipcoder/casino/casino/Casino.java | 32 +- .../io/zipcoder/casino/casino/CasinoMenu.java | 50 +++ .../java/io/zipcoder/casino/casino/Games.java | 9 - .../java/io/zipcoder/casino/games/Gamble.java | 2 +- .../java/io/zipcoder/casino/games/Game.java | 2 +- .../casino/games/blackjack/BlackJack.java | 103 +++++- .../io/zipcoder/casino/games/craps/Craps.java | 196 ++++++++-- .../casino/games/craps/CrapsConsole.java | 334 ++++++++++++++++++ .../zipcoder/casino/games/gofish/GoFish.java | 113 +++++- .../casino/games/gofish/GoFishConsole.java | 15 + .../zipcoder/casino/nuts_n_bolts/Console.java | 274 ++++++++++++++ .../io/zipcoder/casino/nuts_n_bolts/Dice.java | 19 +- .../zipcoder/casino/nuts_n_bolts/Input.java | 41 +++ .../io/zipcoder/casino/nuts_n_bolts/Menu.java | 62 ++++ .../casino/nuts_n_bolts/MoneyContainer.java | 32 ++ .../io/zipcoder/casino/nuts_n_bolts/Pot.java | 24 -- .../io/zipcoder/casino/nuts_n_bolts/User.java | 95 ++++- .../casino/nuts_n_bolts/cards/Hand.java | 46 +++ .../nuts_n_bolts/cards/PlayingCard.java | 39 ++ .../nuts_n_bolts/cards/PlayingDeck.java | 38 +- .../nuts_n_bolts/cards/PlayingSuit.java | 16 +- .../nuts_n_bolts/cards/PlayingValue.java | 36 +- .../java/io/zipcoder/casino/AllTests.java | 38 ++ .../casino/games/blackjack/BlackJackTest.java | 191 ++++++++++ .../games/craps/CrapsConsoleWIPTest.java | 11 + .../casino/games/gofish/GoFishPlayerTest.java | 100 ++++++ .../casino/games/gofish/GoFishTest.java | 120 +++++++ .../casino/nuts_n_bolts/ConsoleTest.java | 97 +++++ .../casino/nuts_n_bolts/DiceTest.java | 61 ++++ .../nuts_n_bolts/MoneyContainerTest.java | 49 +++ .../zipcoder/casino/nuts_n_bolts/PotTest.java | 4 - .../casino/nuts_n_bolts/UserTest.java | 141 ++++++++ .../casino/nuts_n_bolts/cards/HandTest.java | 45 +++ .../nuts_n_bolts/cards/PlayingCardTest.java | 27 +- .../nuts_n_bolts/cards/PlayingDeckTest.java | 56 +++ 36 files changed, 2391 insertions(+), 144 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/Main.java create mode 100644 src/main/java/io/zipcoder/casino/casino/CasinoMenu.java delete mode 100644 src/main/java/io/zipcoder/casino/casino/Games.java create mode 100644 src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java create mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java delete mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java create mode 100644 src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java create mode 100644 src/test/java/io/zipcoder/casino/AllTests.java create mode 100644 src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java delete mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/PotTest.java create mode 100644 src/test/java/io/zipcoder/casino/nuts_n_bolts/cards/HandTest.java 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 00000000..fdde3589 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/Main.java @@ -0,0 +1,17 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.casino.Casino; +import io.zipcoder.casino.casino.CasinoMenu; + +public class Main { + + public static void main(String[] args) { + + Casino casino = Casino.getInstance(); + + while (true) { + casino.startCasino(); + } + } + +} diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index 7d9dd225..6ac309e9 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -1,11 +1,13 @@ package io.zipcoder.casino.casino; - +import io.zipcoder.casino.games.gofish.GoFish; +import io.zipcoder.casino.nuts_n_bolts.Input; +import io.zipcoder.casino.nuts_n_bolts.User; public class Casino { private static Casino INSTANCE = null; - private Player player; + private User user; private Casino(){} @@ -16,12 +18,30 @@ public static Casino getInstance(){ return INSTANCE; } - public void startCasino(){} + public void startCasino(){ + casinoWelcome(); + this.user = createUser(Input.getStringInput("What's yo name, good lookin'?"), + Input.getPositiveDoubleInput("How much you puttin' up?")); + do { + CasinoMenu.INSTANCE.display(); + } while(true); + } + + private void casinoWelcome() { + System.out.println("Welcome to Uncle Bob's Backyard Casinooooooooo!"); + } - private void pickGame(Games game){ - //switch case to game of choice + void exitCasino(){ + if(user.getWallet().getMoney() < 10d){ + System.out.println("You's broke, see ya next paycheck!"); + } else { + System.out.println("Hope to see ya again soon!"); + } + System.exit(0); } - private void exitCasino(){} + User createUser(String name, Double money) { + return new User(name, money); + } } diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java new file mode 100644 index 00000000..43efa959 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java @@ -0,0 +1,50 @@ +package io.zipcoder.casino.casino; + +import io.zipcoder.casino.nuts_n_bolts.Menu; + +public class CasinoMenu extends Menu{ + + public static final CasinoMenu INSTANCE = new CasinoMenu(); + + enum CasinoMenuOptions {CRAPS, GOFISH, BLACKJACK, EXIT} + + public CasinoMenu(){ + super(CasinoMenuOptions.values()); + } + + @Override + public void selectOption(String userInput) { + switch(CasinoMenuOptions.valueOf(userInput)){ + case EXIT: + Casino.getInstance().exitCasino(); + case CRAPS: +// crapsMenu(); + break; + case GOFISH: +// goFishMenu(); + break; + case BLACKJACK: +// blackJackMenu(); + break; + } + } + + /* + private void crapsMenu() { + CrapsMenu crapsMenu = CrapsMenu.INSTANCE; + crapsMenu.display(); + } + + private void goFishMenu() { + GoFishMenu goFishMenu = GoFishMenu.INSTANCE; + goFishMenu.display(); + } + + private void blackJackMenu() { + BlackJackMenu blackJackMenu = BlackJackMenu.INSTANCE; + blackJackMenu.display(); + } +*/ + + +} diff --git a/src/main/java/io/zipcoder/casino/casino/Games.java b/src/main/java/io/zipcoder/casino/casino/Games.java deleted file mode 100644 index cc17c4ae..00000000 --- a/src/main/java/io/zipcoder/casino/casino/Games.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.zipcoder.casino.casino; - -public enum Games { - - CRAPS, - GOFISH, - BLACKJACK - -} diff --git a/src/main/java/io/zipcoder/casino/games/Gamble.java b/src/main/java/io/zipcoder/casino/games/Gamble.java index 0fb26345..14c912c3 100644 --- a/src/main/java/io/zipcoder/casino/games/Gamble.java +++ b/src/main/java/io/zipcoder/casino/games/Gamble.java @@ -3,6 +3,6 @@ public interface Gamble { public void takeBet(Double bet); - public void settleBet(); + public Double settleBet(Double winnings);//payout } diff --git a/src/main/java/io/zipcoder/casino/games/Game.java b/src/main/java/io/zipcoder/casino/games/Game.java index d7ce40fb..6b17d0f1 100644 --- a/src/main/java/io/zipcoder/casino/games/Game.java +++ b/src/main/java/io/zipcoder/casino/games/Game.java @@ -2,6 +2,6 @@ public interface Game { - public void play(); + boolean play(String userInput); } diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index 4c59beaa..e072c16b 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -2,40 +2,38 @@ import io.zipcoder.casino.games.CardGame; import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; import io.zipcoder.casino.nuts_n_bolts.User; -import io.zipcoder.casino.nuts_n_bolts.Pot; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; -import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; import java.util.ArrayList; public class BlackJack extends CardGame implements Gamble { - private Pot pot; + private MoneyContainer pot; private ArrayList users; - @Override - public void play() { - - } - @Override public void takeBet(Double bet) { //match biggest bet } @Override - public void settleBet() { - + public Double settleBet() { + return null; } public void evaluatePointsInHand(){} + @Override + public boolean play(String userInput) { + return false; + } //setup game: //enter user, enter dealer, get fresh deck - //start game + //run game //make bet //deal 2 cards each, dealer shows one //hit or stay? @@ -66,3 +64,86 @@ public void stay(){} } } + + + +/* +* private Player player; + private Deck deck; + private Player dealer; + private Double pot; + + public Game(){ + player = new Player(); + deck = new Deck(); + dealer = new Player("Dealer"); + deck.shuffle(); + pot = 0.0; + } + + public Double getPot() { + return pot; + } + + public void addToPot(Double amount) { + this.pot += amount; + } + + public Player getPlayer() { + return player; + } + + public Player getDealer() { + return dealer; + } + + public void run() { + + //Deal two cards to the player and the dealer + for (int i = 0; i < 2; i++) + { + dealCard(player); + dealCard(dealer); + } + + } + + public boolean playerWins() { + // if both player and dealer scores are = to 21 dealer wins + // if both player and dealer score are over 21 then dealer wins + // if player's score is <= 21 and players score is greater than dealers score then player wins. + //if dealer's score is > 21 and player's score is <= 21 then players wins. + player.calculateScore(); + dealer.calculateScore(); + + if( (player.getScore().equals(21) && !dealer.getScore().equals(21)) || + (player.getScore()<21 && dealer.getScore() < player.getScore()) || + (player.getScore() < 21 && dealer.getScore() > 21)) { + //Player wins + return true; + } + //Dealer wins + return false; + } + + public void dealCard(Player playerToReceiveCard){ + Card card = deck.getCard(); + playerToReceiveCard.addToHand(card); + } + + public void dealerHitUntilFinished() { + while (dealer.calculateScore() <= 17) + { + dealCard(dealer); + } + } + + public void returnBet() { + if (playerWins()) { + player.receiveWinnings(pot * 2); + } + else { + this.pot = 0.0; + } + } +* */ diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index 579e6aaf..d2e444c1 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -3,52 +3,198 @@ import io.zipcoder.casino.games.Gamble; import io.zipcoder.casino.games.Game; import io.zipcoder.casino.nuts_n_bolts.Dice; -import io.zipcoder.casino.nuts_n_bolts.Pot; -import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; +import java.text.NumberFormat; import java.util.ArrayList; -public class Craps implements Game, Gamble { +public class Craps implements Gamble, Game { + + private NumberFormat defaultFormat; + private CrapPointPair pair; + private Dice dice; + private int numberRolled; + private MoneyContainer mainPot; + private MoneyContainer sidePot; + private boolean isPlayerTurn; + private int point; + + public Craps(){ + ArrayList twoToTwelve = new ArrayList<>(); + for (int i=2; i<13; i++){ + twoToTwelve.add(i); + } + defaultFormat=NumberFormat.getCurrencyInstance(); + dice = new Dice(twoToTwelve); + mainPot=new MoneyContainer(); + sidePot=new MoneyContainer(); + numberRolled=0; + point=0; + determineFirstRoller(); + } - //2 players - //roll to decide first, highest wins - //both make a bet -> pot - //decide if bet is pass or don't pass - //player throwin dice = shooter - //roll 2 dice 7/11 on first roll -> win - // 2/3/12 on first roll -> lose - //come/don't come bets +//Add to pot + @Override + public void takeBet(Double bet) { + takeBet(bet, mainPot); + } + private void takeBet(Double bet, MoneyContainer moneyContainer) { + moneyContainer.addMoney(bet); + } + public void takeSideBet(Double bet){ + takeBet(bet, sidePot); + } - private ArrayList players; - private Dice dice = new Dice<>(1,2,3,4,5,6); - private Pot pot; +//remove some from pot + @Override + public Double settleBet(Double winnings) { + return (settleBet(winnings, mainPot)); + } + private Double settleBet(Double winnings, MoneyContainer moneyContainer){ + return (moneyContainer.takeOutMoney(winnings)); + } + public Double settleSideBet(Double winnings){ + return (settleBet(winnings, sidePot)); + } - public void play() { +//Take all from pot + public Double emptyPot(){ + return emptyPot(mainPot); + } + private Double emptyPot(MoneyContainer moneyContainer){ + return moneyContainer.takeAllMoney(); + } + public Double emptySidePot(){ + return emptyPot(sidePot); + } + + public void determineFirstRoller(){ + isPlayerTurn=(dice.rollDie()-dice.rollDie()>0);//Player vs House, highest goes first, house wins tie + } + public void changePlayerTurn(){ + isPlayerTurn=!isPlayerTurn; + resetTurn(); + } + public void resetTurn() { + numberRolled=0; + point=0; } - @Override - public void takeBet(Double bet) { + public boolean getPlayerTurn(){return isPlayerTurn;} + public int getPoint(){return point;} + public String getPair(){ + return(pair.text); + } + public int getNumberRolled(){return numberRolled;} + public MoneyContainer getSidePot() { + return sidePot; + } + public MoneyContainer getMainPot() { + return mainPot; } - @Override - public void settleBet() { + public Integer initialThrow(){ //returns -1 if 2/3/12 + // 1 if 7/11, + // 0 if point set + numberRolled = dice.rollDie(); + + switch (numberRolled){ + case 2: + case 3: + case 12:{ + return -1; + } + case 7: + case 11:{ + return 1; + } + default:{ + point=numberRolled; + for (CrapPointPair p : CrapPointPair.values()){ + if (p.isInPair(point)){ + pair=p; + } + } + return 0; + } + } } + public Integer secondaryThrow(){//returns -1 if crapped out, + //returns 1 if point met + //returns 0 if nothing met + //returns any other number if pair met + numberRolled=dice.rollDie(); + + if (numberRolled==point){//Won round + return 1; + } else if (numberRolled==7)//Lost round + { + return -1; + } else if (pair.isInPair(numberRolled)){//Won sideBet + return numberRolled; + } else{ + return 0;//Neutral. + } + } + + @Override + public String toString(){ + String returnMe=""; - private class CrapsPlayer { + if (isPlayerTurn){ + returnMe+="It is your turn\n"; + } else{ + returnMe+="It is your opponent's turn\n"; + } - private User user; + if (point==0){ + returnMe+="Point has not been set, and so we do not have a pair to side bet on\n"; + } else{ + returnMe+="Point is "+point+" and we are making side bets on "+pair.text+"\n"; + } - public CrapsPlayer(User user) { - this.user = user; + if (numberRolled!=0){ + returnMe+="Last roll was "+numberRolled+"\n"; + } + else{ + returnMe+="Nobody has rolled yet\n"; } - public void makeABet(Double money) { + returnMe+="Main pot is "+defaultFormat.format(mainPot.getMoney())+"\n"; + returnMe+="Side pot is "+defaultFormat.format(sidePot.getMoney())+"\n"; + + + return returnMe; + } + @Override + public boolean play(String userInput) { + return ("Y".equalsIgnoreCase(userInput)); + } + + private enum CrapPointPair { + sixEight(6, 8, "6-8"), + fiveNine(5, 9, "5-9"), + tenFour(10, 4, "10-4"); + + int a; + int b; + String text; + + CrapPointPair(int a, int b, String text) { + this.a = a; + this.b = b; + this.text=text; } - public void winABet(Double money) { + boolean isInPair(int passed) { + return (this.a==passed || this.b==passed); } + } + + + } diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java new file mode 100644 index 00000000..3a226208 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -0,0 +1,334 @@ +package io.zipcoder.casino.games.craps; + + +import io.zipcoder.casino.nuts_n_bolts.User; + +import java.text.NumberFormat; +import java.util.Random; +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; + +public class CrapsConsole { + + public static void main(String[] args){ + CrapsConsole console = new CrapsConsole(); + console.run(); + } + + private Craps game = new Craps(); + private User player; + private double mainPotBet; + private double sidePotBet; + private boolean pointSet=false; + private boolean pointMet=false; + private boolean crappedOut=false; + private Random rando=new Random(); + private NumberFormat defaultFormat; + + public CrapsConsole(){ + this(new User("Uncle Bob", 10_000.0)); + } + + public CrapsConsole(User user){ + player=user; + defaultFormat=NumberFormat.getCurrencyInstance(); + } + + public void run(){ + welcomePlayer(); + game.determineFirstRoller(); + do { + while (!pointSet) {//Continue to bet until the roller + //throws a point instead of a win/loss. + initialBet(); + pointSet = resolveInitialThrow(game.initialThrow()); + } + while (!pointMet) {//Continue to bet until the roller + //meets their point or craps out + secondaryBet(); + pointMet = resolveSecondaryThrow(game.secondaryThrow()); + } + if (crappedOut) { + changeTurns();//Reset flags, change active player + } else{ + resetFlags(); + } + }while(game.play(getStringInput("Continue playing? [Y/N] "))); + } + + private void initialBet(){ + + System.out.println(game.toString()); + + if (game.getPlayerTurn()) + { + opponentInitialBets(generateBotBet()); + } + else + { + playerInitialBets(); + } + + } + private void playerInitialBets() { + do { + mainPotBet = getPositiveDoubleInput + ("How much would you like to bet? "); + }while (player.getWallet().getMoney() players; + private GoFishPlayer player; - public GoFish(Integer numberOfCompPlayers){ + private GoFishPlayer dealer; + private PlayingDeck deck; + public GoFish(User user){ + this.player = new GoFishPlayer(user); + this.dealer = createCompPlayer(); + this.deck = new PlayingDeck(); } - public void play() { + GoFishPlayer createCompPlayer(){ + return new GoFishPlayer(new User("Dealer")); + } + + Boolean lastPlayerHandEmpty(GoFishPlayer player){ + return player.hand.isHandEmpty(); + } + public GoFishPlayer getPlayer() { + return player; } - private GoFishPlayer createCompPlayer(){ - return null; + public GoFishPlayer getDealer() { + return dealer; } - private void shufflePlayerOrder(){} + public PlayingDeck getDeck() { + return deck; + } + + public void run() { - private void isHandEmpty(){} + } - private class GoFishPlayer { + class GoFishPlayer { private User user; - private ArrayList hand = new ArrayList<>(); - private PlayingValue askedValue = null; - public GoFishPlayer(User user){ + private Hand hand; + + private PlayingValue askedValue = null; + GoFishPlayer(User user){ this.user = user; + this.hand = new Hand(); + } + + User getUser() { + return user; + } + + public Hand getHand() { + return hand; + } + + PlayingValue getAskedValue() { + return askedValue; + } + + Integer askForValue(GoFishPlayer other, PlayingValue value){ + this.askedValue = value; + return other.checkIfHandHasValue(value); + } + + Integer checkIfHandHasValue(PlayingValue value) { + return getAllOfValue(value).size(); } - public void askForCards(GoFishPlayer other, PlayingValue value){} + private ArrayList getAllOfValue(PlayingValue value) { + return (ArrayList) this.getHand().getAllCards().stream(). + filter(card -> value.equals(card.getValue())).collect(Collectors.toList()); + } - private void getCards(GoFishPlayer other, PlayingValue value){} + void takeCardsFromOther(GoFishPlayer other, PlayingValue value){ + ArrayList movingCards = other.getAllOfValue(value); + other.getHand().getAllCards().removeAll(movingCards); + this.getHand().getAllCards().addAll(movingCards); + } - private void drawCard(){} + void nullAskedValue(){ + this.askedValue = null; + } - private Boolean hasFourOfKind(){} + PlayingCard drawCard(){ + PlayingCard drawnCard; + drawnCard = deck.getAndRemoveCard(); + hand.addCard(drawnCard); + return drawnCard; + } - private void discardFourOfKind(){} + PlayingValue fourOfKindValue(){ + HashMap count = new HashMap<>(); + PlayingValue hasFour = null; + for (PlayingCard card : this.getHand().getAllCards()) { + if (count.containsKey(card.getValue())) { + count.put(card.getValue(), (count.get(card.getValue()) + 1)); + if (count.get(card.getValue()) == 4) { + hasFour = card.getValue(); + } + } else { + count.put(card.getValue(), 1); + } + } + return hasFour; + } + + void discardFourOfKind(PlayingValue value){ + this.getHand().getAllCards().removeIf(card -> card.getValue() == value); + } } } diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java new file mode 100644 index 00000000..69930acb --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java @@ -0,0 +1,15 @@ +package io.zipcoder.casino.games.gofish; + +import io.zipcoder.casino.games.CardGame; + +public class GoFishConsole extends CardGame { + + public void play() { + + } + + @Override + public boolean play(String userInput) { + return false; + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java new file mode 100644 index 00000000..85d3c2cb --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -0,0 +1,274 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import io.zipcoder.casino.games.Gamble; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.games.craps.Craps; +import java.util.Scanner; +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; + +public class Console { + + private Game game = new Craps(); + private User player; + private static Scanner scanner = new Scanner(System.in); + + public Console(Game game, User user) { + this.game = game; + this.player = user; + } + + public void setGame(Game game) { + this.game = game; + } + + public void setUser(User user) { + this.player = user; + } + + public void run() { + System.out.println("Welcome to the " + game.getClass().getSimpleName() + " table!"); + + if (game instanceof Gamble) { + do {//betting game logic + + + + + playerBets(); + + + + + + } while (game.play(continuePlaying())); + } else { + + do {//non betting game logic + + } while (game.play(continuePlaying())); + } + + } + + + private String continuePlaying() { + return (getStringInput("Continue playing? ")); + } + + private void displayPlayerMoney(){ + System.out.println("You have $" + player.getWallet().getMoney()); + } + + private void playerBets(){ + double betAmount; + + do{ + displayPlayerMoney(); + betAmount=getBetAmount(); + }while (betAmount>player.getWallet().getMoney()); + + //game.takeBet(betAmount); + + } + + private Double getBetAmount(){ + return (getPositiveDoubleInput("How much do you want to bet? ")); + + } + +} +/* + private static final double MIN_BET_ALLOWED=0.01; + + private static Game game = new Game(); + private static Scanner scanner = new Scanner (System.in); + + public static void run(){ + + Player userPlayer = game.getPlayer(); + + System.out.print("" + + " ____ _ _ _ _ \n" + + "| __ ) | | __ _ ___| | __(_) __ _ ___| | __\n" + + "| \\ | |/ _` |/ __| |/ /| |/ ` |/ __| |/ / \n" + + "| |_) || | (_| | (__| | < | | (_| | (__| < \n" + + "|____/ |_|\\__,_|\\___|_|\\_\\| |\\__,_|\\___|_|\\_\\ \n" + + " |__/ \n" + + "+--------------------------------------------+" + + "\n\nWelcome to the table!" + + "\n\nWhat's your name? "); + + String userName = getInput(); + userPlayer.setName(userName); + + System.out.println("Hello, " + userName + "!"); + + System.out.println("\nYou have $"+forceTwoDecimalDouble(userPlayer.getMoney().toString())); + + do { + playerBets(userPlayer); + displayPlayerHandAndScore(userPlayer); + displayDealerCardShowing(); + playerHitsOrStays(userPlayer); + game.dealerHitUntilFinished(); + determineWinOrLoss(userPlayer); + } while (playerStaysForAnotherRound(userPlayer)); + + System.out.println("\nThanks for playing! Goodbye!"); + } + + private static boolean playerStaysForAnotherRound(Player userPlayer) { + String input; + System.out.println("\nYou have $" + forceTwoDecimalDouble(userPlayer.getMoney().toString())); + if (userPlayer.getMoney() >= 0.01) { + do { + System.out.print("\nStay for another round? [Yes/No] "); + input = getInput(); + if (isInputYesOrNo(input)) + { + return ("yes".equalsIgnoreCase(input)); + } + } while (!isInputYesOrNo(input)); + + } + else { + System.out.println("\nYou are out of money."); + } + return false; + } + + private static void determineWinOrLoss(Player userPlayer){ + + if (game.playerWins()) { + System.out.println("\nPlayer wins!"); + } else { + System.out.println("\nHouse wins!"); + } + System.out.println("\nHouse has score: " + game.getDealer().getScore()); + resetPotAndDiscardHands(userPlayer); + } + + private static void resetPotAndDiscardHands(Player userPlayer){ + game.returnBet(); + userPlayer.getHand().clear(); + game.getDealer().getHand().clear(); + } + + private static void playerHitsOrStays(Player userPlayer){ + String input; + do { + input=forceHitOrStay(); + if ("hit".equalsIgnoreCase(input)) { + game.dealCard(userPlayer); + } + displayPlayerHandAndScore(userPlayer); + } while ("hit".equalsIgnoreCase(input) && (userPlayer.calculateScore() <= 21)); + } + + private static String forceHitOrStay(){ + String input; + do { + System.out.print("\nHit or stay? "); + input = getInput(); + } while (!isInputStayOrHit(input)); + return input; + } + + private static void displayDealerCardShowing(){ + System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); + } + + private static void displayPlayerHandAndScore(Player userPlayer){ + Card card; + for (int i=0; i=MIN_BET_ALLOWED; + } + + public static boolean isInputDouble(String passedString) + { + try { + Double output = Double.valueOf(passedString); + } catch (NumberFormatException e) { + return false; + } + return (true); + } + + public static boolean isInputStayOrHit(String passedString) + { + return ("hit".equalsIgnoreCase(passedString) || + "stay".equalsIgnoreCase(passedString)); + } + + public static boolean isInputYesOrNo(String passedString) + { + return ("yes".equalsIgnoreCase(passedString) || + "no".equalsIgnoreCase(passedString)); + } + + public static String forceTwoDecimalDouble(String input){ + if ( !(input.contains(".")) || + input.substring(input.indexOf("."), input.length()).length()==3) + { + return input; + } + else + { + if (input.substring(input.indexOf("."), input.length()).length()<3) { + do { + input = input + "0"; + } while (input.substring(input.indexOf("."), input.length()).length() < 3); + return input; + } + + input = input.substring(0,input.indexOf("."))+ + input.substring(input.indexOf("."), input.indexOf(".")+3); + return input; + } + + + }*/ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java index a64b4fd3..718eca5d 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Dice.java @@ -1,21 +1,28 @@ package io.zipcoder.casino.nuts_n_bolts; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; public class Dice { - private E[] sides; + private ArrayList sides; - public Dice(E... sides){ - this.sides = sides; + + public Dice(ArrayList sides){ + this.sides=sides; } - public E[] getAllSides(){ - return null; + public ArrayList getAllSides(){ + return sides; } public E rollDie(){ - return null; + + Random rando = new Random(); + int numOfSides = sides.size(); + + return sides.get(rando.nextInt(numOfSides)); } } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java new file mode 100644 index 00000000..60bcb482 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java @@ -0,0 +1,41 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import java.util.Scanner; + +public class Input { + + public static String getStringInput(String prompt){ + System.out.println(prompt); + Scanner scanner = new Scanner(System.in); + return scanner.nextLine(); + } + + public static Double getDoubleInput(String prompt){ + String stringInput = ""; + Double doubleInput = null; + do { + stringInput = getStringInput(prompt); + try { + doubleInput = Double.parseDouble(stringInput); + return doubleInput; + } catch (IllegalArgumentException iae) { + System.out.println("Not a valid amount."); + continue; + } + } while (true); + } + + public static Double getPositiveDoubleInput(String prompt){ + Double doubleInput = null; + do { + doubleInput = getDoubleInput(prompt); + if (doubleInput >= 0){ + return doubleInput; + } else { + System.out.println("Please input a positive amount."); + continue; + } + } while (true); + } + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java new file mode 100644 index 00000000..83cf4439 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java @@ -0,0 +1,62 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import java.util.ArrayList; +import java.util.Scanner; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Scanner; + +/** + * Created by leon on 10/24/17. + * Yup, totally stole most of this from Leon, he makes good stuff. + */ + +public abstract class Menu { + + private final Enum[] menuOptions; + + public Menu(Enum[] menuOptions) { + this.menuOptions = menuOptions; + } + + abstract public void selectOption(String userInput); + + public void display() { + String userInput; + do { + System.out.printf("\n\n===== %s =====\n", getClass().getSimpleName()); + userInput = this.getMenuInput().toUpperCase(); + try { + selectOption(userInput); + } catch (IllegalArgumentException iae) { + handleIllegalArgumentException(userInput, iae); + } catch (NullPointerException npe) { + handleNullPointerException(npe); + } + } while (!"Home".equalsIgnoreCase(userInput)); + } + + protected void handleIllegalArgumentException(String illegalArgument, IllegalArgumentException iae) { + handleException("What's this [ %s ]?\n", illegalArgument); + } + + protected void handleNullPointerException(NullPointerException npe) { + handleException("Unable to retrieve data with input value.\n"); + } + + private void handleException(String message, Object... args) { + System.out.printf(message, args); + } + + protected String getMenuInput() { + System.out.println("Type in your selection to proceed:"); + for (Enum e : menuOptions) { + System.out.printf("[ %s ] ", e.name()); + } + return Input.getStringInput("\n"); + } + +} + + diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java new file mode 100644 index 00000000..1ec9ebd0 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainer.java @@ -0,0 +1,32 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import io.zipcoder.casino.games.Gamble; + +public class MoneyContainer { + + private Double money = 0d; + + public Double getMoney() { + return money; + } + + public void addMoney(Double money) { + if (money>0) { + this.money += money; + } + } + + public Double takeOutMoney (Double money){ + if (money>0 && money<=this.money){ + this.money-=money; + return money; + } + return 0.0; + } + + public Double takeAllMoney(){ + double moneyHolder = this.money; + this.money=0.0; + return moneyHolder; + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java deleted file mode 100644 index 4f8972c5..00000000 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Pot.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.zipcoder.casino.nuts_n_bolts; - -import io.zipcoder.casino.games.Gamble; - -public class Pot { - - private Double money = 0d; - - public Double getMoney() { - return money; - } - - public void addToPot(Double money) { - this.money = money; - } - - public Double takeOutOfPot (Double money){ - return null; //check request < pot - } - - public Double takeAllOutOfPot(){ - return null; - } -} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java index 0ef1cc9f..861c89e6 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/User.java @@ -2,10 +2,51 @@ public class User { - protected String name; - protected Double money; + private String name; + private MoneyContainer wallet = new MoneyContainer(); + + public User(String name){ + this.name = name; + } public User(String name, Double money){ + this(name); + this.wallet.addMoney(money); + } + + public String getName() { + return this.name; + } + + public MoneyContainer getWallet() { + return this.wallet; + } +} + + +/* +* private ArrayList hand; + private String name; + private Double money; + private Integer score; + + public Player(){ + hand = new ArrayList(2); + name="Player"; + money = 500.0; + score = 0; + } + public Player(Double passedMoney){ + this(); + money=passedMoney; + } + public Player(String name, Double passedMoney){ + this(); + money=passedMoney; + this.name=name; + } + public Player(String name) { + this(); this.name = name; } @@ -13,15 +54,57 @@ public String getName() { return name; } + public void setName(String name){ + this.name = name; + } + public Double getMoney() { return money; } - public void gainMoney(Double money){ + public Integer getScore() { + return score; + } + + + // blackjack hit + public void addToHand(Card card) { + hand.add(card); } - public void loseMoney(Double money){ - //check to see if money < this.money + public boolean hasMoneyToMakeBet(Double amount) { + return (amount <= money); } -} + + public void makeBet(Double amount) { + money -= amount; + } + + public boolean isAceInHand() { + for(Card card: hand) { + if(card.getValue() == 1) { + return true; + } + } + return false; + } + + public Integer calculateScore() { + int sum = 0; + for(Card card: hand) { + sum += card.getValue(); + } + + if(isAceInHand() && sum <= 11) { + sum += 10; + } + score = sum; + + return sum; + } + + public void receiveWinnings(Double amount) { + money += amount; + } +* */ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java new file mode 100644 index 00000000..137a15df --- /dev/null +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java @@ -0,0 +1,46 @@ +package io.zipcoder.casino.nuts_n_bolts.cards; + +import java.util.ArrayList; + +public class Hand { + + private ArrayList cards = new ArrayList<>(); + + public Hand(){} + + @Override + public String toString(){ + if(isHandEmpty()){ + return "If there's nothing in your hand, is it a hand?"; + } else { + String output = ""; + for (PlayingCard card : + cards) { + output += " ["+card+"] "; + } + return output; + } + } + + public ArrayList getAllCards() { + return cards; + } + + public Boolean isHandEmpty(){ + return this.cards.size() == 0; + } + + public void addCard(PlayingCard card){ + this.cards.add(card); + } + + public void removeCard(PlayingCard card){ + this.cards.remove(card); + } + + public PlayingCard getCard(PlayingCard card) { + removeCard(card); + return card; + } + +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java index 0b61175a..64f6c68a 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingCard.java @@ -10,6 +10,11 @@ public PlayingCard(PlayingSuit suit, PlayingValue value){ this.value = value; } + @Override + public String toString(){ + return "" + this.value + this.suit; + } + public PlayingSuit getSuit() { return suit; } @@ -19,3 +24,37 @@ public PlayingValue getValue() { } } + +/* + //From BlackJack + private String topCardRepresentation; + private String bottomCardRepresentation; + private static String middleCardRepresentation="| |\n"; + + private Card(){ + } + + @Override + public String toString(){ + return topCardRepresentation+middleCardRepresentation+bottomCardRepresentation; + } + public String getTopCardRepresentation(){ + return topCardRepresentation; + } + + + public Card(Suit passedSuit, Integer passedValue){ + this(passedSuit, passedValue, "X"); + } + public Card(Suit passedSuit, Integer passedValue, String passedSuitRepresentation){ + this(passedSuit, passedValue, passedSuitRepresentation, "Y"); + } + public Card(Suit passedSuit, Integer passedValue, String passedSuitRepresentation, String passedFaceRepresentation){ + suit=passedSuit; + value=passedValue; + topCardRepresentation=" ----- \n"+ + "|"+String.format("%2s%-3s", passedFaceRepresentation, passedSuitRepresentation)+"|\n"; + bottomCardRepresentation="|"+String.format("%4s%s", passedFaceRepresentation, passedSuitRepresentation)+"|\n"+ + " ----- \n"; + } + //*/ \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java index b87bd367..59b97213 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingDeck.java @@ -1,22 +1,44 @@ package io.zipcoder.casino.nuts_n_bolts.cards; import java.util.ArrayList; +import java.util.Collections; public class PlayingDeck { private ArrayList cards; - public PlayingDeck(){} + public PlayingDeck(){ + populate(); + } - public void shuffle(){} + public void shuffle(){ + Collections.shuffle(cards); + } - public void reset(){} + public ArrayList getAllCards(){ + return cards; + } - public void countLeft(){} + public Integer countLeft(){ + return cards.size(); + } - public PlayingCard draw(){ - //remove the card you drew from the deck - return null; + public PlayingCard getAndRemoveCard(){ + if(cards.size() == 0) { + populate(); + shuffle(); + } + PlayingCard card = cards.get(0); + cards.remove(0); + return card; } -} + private void populate() { + cards = new ArrayList<>(); + for (PlayingSuit suit : PlayingSuit.values()) { + for (PlayingValue value: PlayingValue.values()) { + cards.add(new PlayingCard(suit, value)); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java index e437508f..989d809a 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingSuit.java @@ -2,6 +2,20 @@ public enum PlayingSuit { - CLUB, DIAMOND, HEART, SPADE + HEART("♡"), + DIAMOND("♢"), + CLUB("♧"), + SPADE("♤"); + + String symbol; + + PlayingSuit(String symbol) { + this.symbol = symbol; + } + + @Override + public String toString(){ + return symbol; + } } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java index a4eec64f..a884f9f5 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java @@ -2,18 +2,28 @@ public enum PlayingValue { - TWO, - THREE, - FOUR, - FIVE, - SIX, - SEVEN, - EIGHT, - NINE, - TEN, - JACK, - QUEEN, - KING, - ACE + TWO("2"), + THREE("3"), + FOUR("4"), + FIVE("5"), + SIX("6"), + SEVEN("7"), + EIGHT("8"), + NINE("9"), + TEN("10"), + JACK("J"), + QUEEN("Q"), + KING("K"), + ACE("A"); + String value; + + PlayingValue(String value) { + this.value = value; + } + + @Override + public String toString(){ + return value; + } } diff --git a/src/test/java/io/zipcoder/casino/AllTests.java b/src/test/java/io/zipcoder/casino/AllTests.java new file mode 100644 index 00000000..c7dbc64d --- /dev/null +++ b/src/test/java/io/zipcoder/casino/AllTests.java @@ -0,0 +1,38 @@ +package io.zipcoder.casino; + +import io.zipcoder.casino.casino.CasinoTest; +import io.zipcoder.casino.games.blackjack.BlackJackPlayerTest; +import io.zipcoder.casino.games.blackjack.BlackJackTest; +import io.zipcoder.casino.games.craps.CrapsPlayerTest; +import io.zipcoder.casino.games.craps.CrapsTest; +import io.zipcoder.casino.games.gofish.GoFishPlayerTest; +import io.zipcoder.casino.games.gofish.GoFishTest; +import io.zipcoder.casino.nuts_n_bolts.ConsoleTest; +import io.zipcoder.casino.nuts_n_bolts.DiceTest; +import io.zipcoder.casino.nuts_n_bolts.MoneyContainerTest; +import io.zipcoder.casino.nuts_n_bolts.UserTest; +import io.zipcoder.casino.nuts_n_bolts.cards.HandTest; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCardTest; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeckTest; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + //CasinoTest.class, + BlackJackTest.class, + BlackJackPlayerTest.class, + CrapsTest.class, + CrapsPlayerTest.class, + GoFishTest.class, + GoFishPlayerTest.class, + HandTest.class, + PlayingCardTest.class, + PlayingDeckTest.class, + //ConsoleTest.class, + DiceTest.class, + MoneyContainerTest.class, + UserTest.class +}) +public class AllTests { +} diff --git a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java index 590ebb8c..672a6017 100644 --- a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java +++ b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java @@ -2,3 +2,194 @@ public class BlackJackTest { } + +/* +* @Test + public void getPot() { + Game game = new Game(); + Player player = game.getPlayer(); + Double expectedPot = 50.0; + player.makeBet(50.0); + game.addToPot(50.0); + Double actualPot = game.getPot(); + Assert.assertEquals(expectedPot, actualPot); + } + + @Test + public void startTest() { + Game game = new Game(); + game.start(); + int expectedNumberOfPlayerCards = 2; + int expectedNumberOfDealerCards = 2; + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + int actualNumberOfPlayerCards = player.getHand().size(); + int actualNumberOfDealerCards = dealer.getHand().size(); + + Assert.assertEquals(expectedNumberOfPlayerCards, actualNumberOfPlayerCards); + Assert.assertEquals(expectedNumberOfDealerCards, actualNumberOfDealerCards); + } + + @Test + public void playerWinsTest_True1() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(nine); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + + boolean expected = true; + + boolean actual = game.playerWins(); + + Assert.assertEquals(expected, actual); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + } + + @Test + public void playerWinsTest_True2() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(nine); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + dealer.addToHand(nine); + + boolean expected = true; + + boolean actual = game.playerWins(); + + Assert.assertEquals(expected, actual); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + } + + @Test + public void playerWinsTest_True3() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + + boolean expected = true; + + boolean actual = game.playerWins(); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + + Assert.assertEquals(expected, actual); + } + + @Test + public void playerWinsTest_False() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(ace); + + boolean expected = false; + + boolean actual = game.playerWins(); + + System.out.println(player.getScore()); + System.out.println(dealer.getScore()); + + Assert.assertEquals(expected, actual); + } + +// +// @Test +// public void hitPlayer() { +// Game game = new Game(); +// Player player = game.getPlayer(); +// int expectedHandSize = 1; +// game.askPlayerForHit(player); +// int actualHandSize = player.getHandSize(); +// Assert.assertEquals(expectedHandSize, actualHandSize); +// +// } + + @Test + public void dealerHitUntilFinished() { + Game game = new Game(); + Player dealer = game.getDealer(); + + boolean expected = true; + + game.dealerHitUntilFinished(); + boolean actual = (dealer.getHand().size() >= 2); + + Assert.assertEquals(expected, actual); + } + + @Test + public void returnBet() { + Game game = new Game(); + + Player player = game.getPlayer(); + Player dealer = game.getDealer(); + + Card ace = new Card(Suit.HEARTS, 1); + Card nine = new Card(Suit.CLUBS, 9); + Card ten = new Card(Suit.HEARTS, 10); + + player.addToHand(ace); + player.addToHand(ten); + + dealer.addToHand(ten); + dealer.addToHand(nine); + + Double expected = 550.0; + player.makeBet(50.0); + game.addToPot(50.0); + game.returnBet(); + Double actual = player.getMoney(); + Assert.assertEquals(expected, actual, .001); + } +* */ \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java b/src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java new file mode 100644 index 00000000..b64eb8a0 --- /dev/null +++ b/src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java @@ -0,0 +1,11 @@ +package io.zipcoder.casino.games.craps; + +import org.junit.Assert; +import org.junit.Test; + +public class CrapsConsoleWIPTest { + + + + +} diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java index 19445e33..b6e3b03c 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java @@ -1,4 +1,104 @@ package io.zipcoder.casino.games.gofish; +import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingSuit; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; +import org.junit.Assert; +import org.junit.Test; + public class GoFishPlayerTest { + + + + @Test + public void creationAndGetterTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer player = goFish.getPlayer(); + + Assert.assertEquals(user, player.getUser()); + Assert.assertNull(player.getAskedValue()); + } + + @Test + public void drawCardPutsInHandTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer player = goFish.getPlayer(); + + Assert.assertTrue(player.getHand().isHandEmpty()); + player.drawCard(); + Assert.assertFalse(player.getHand().isHandEmpty()); + } + + @Test + public void drawCardReturnsCorrectCardTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer player = goFish.getPlayer(); + + PlayingCard expectedCard = goFish.getDeck().getAllCards().get(0); + PlayingCard actualCard = player.drawCard(); + PlayingCard expectedHandCard = player.getHand().getAllCards().get(0); + + Assert.assertEquals(expectedCard, actualCard); + Assert.assertEquals(expectedCard, expectedHandCard); + } + + @Test + public void hasFourOfKindTrueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 4; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + PlayingValue actual = goFish.getDealer().fourOfKindValue(); + PlayingValue expected = PlayingValue.KING; + + Assert.assertEquals(expected, actual); + } + + @Test + public void hasFourOfKindFalseTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 3; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + PlayingValue actual = goFish.getDealer().fourOfKindValue(); + PlayingValue expected = null; + + Assert.assertEquals(expected, actual); + } + + @Test + public void discardFourOfKindTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + GoFish.GoFishPlayer dealer = goFish.getDealer(); + + for (int i = 0; i < 4; i++) { + dealer.getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + for (int i = 0; i < 3; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); + } + + Assert.assertEquals(4, (int)dealer.checkIfHandHasValue(PlayingValue.KING)); + Assert.assertEquals(3, (int)dealer.checkIfHandHasValue(PlayingValue.ACE)); + + if(dealer.fourOfKindValue() != null){ + dealer.discardFourOfKind(dealer.fourOfKindValue()); + } + + Assert.assertEquals(0, (int)dealer.checkIfHandHasValue(PlayingValue.KING)); + Assert.assertEquals(3, (int)dealer.checkIfHandHasValue(PlayingValue.ACE)); + + } + } diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java index 033160ee..53ccbd76 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java @@ -1,4 +1,124 @@ package io.zipcoder.casino.games.gofish; +import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingSuit; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; +import org.junit.Assert; +import org.junit.Test; + public class GoFishTest { + + @Test + public void gameCreationAndGetterTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + Assert.assertEquals(user, goFish.getPlayer().getUser()); + Assert.assertEquals(goFish.getDealer().getUser().getName(), "Dealer"); + Assert.assertTrue(goFish.getDeck() instanceof PlayingDeck); + } + + @Test + public void createCompPlayerTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + Assert.assertNotNull(goFish.createCompPlayer()); + } + + @Test + public void playerHandIsEmptyTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + Assert.assertTrue(goFish.lastPlayerHandEmpty(goFish.getPlayer())); + } + + @Test + public void askingSetsValueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + + PlayingValue expected = PlayingValue.QUEEN; + PlayingValue actual = goFish.getPlayer().getAskedValue(); + + Assert.assertEquals(expected,actual); + } + + @Test + public void nullAskedValueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + + goFish.getPlayer().nullAskedValue(); + PlayingValue actual = goFish.getPlayer().getAskedValue(); + + Assert.assertNull(actual); + } + + @Test + public void askingForValueTrueTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 3; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); + } + for (int i = 0; i < 2; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + Integer actual = goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.ACE); + Integer expected = 3; + + Assert.assertEquals(expected, actual); + } + + @Test + public void askingForValueFalseTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 5; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + Integer actual = goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + Integer expected = 0; + + Assert.assertEquals(expected, actual); + } + + @Test + public void takeCardsTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + + for (int i = 0; i < 5; i++) { + goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + } + + int beforeDealer = goFish.getDealer().checkIfHandHasValue(PlayingValue.KING); + int beforePlayer = goFish.getPlayer().checkIfHandHasValue(PlayingValue.KING); + + Assert.assertEquals(5, beforeDealer); + Assert.assertEquals(0, beforePlayer); + + goFish.getPlayer().takeCardsFromOther(goFish.getDealer(), PlayingValue.KING); + + int afterDealer = goFish.getDealer().checkIfHandHasValue(PlayingValue.KING); + int afterPlayer = goFish.getPlayer().checkIfHandHasValue(PlayingValue.KING); + + Assert.assertEquals(0, afterDealer); + Assert.assertEquals(5, afterPlayer); + } + + + } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java new file mode 100644 index 00000000..4e40c2bb --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/ConsoleTest.java @@ -0,0 +1,97 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class ConsoleTest { + + /*@Before + public void setUp(){ + } + + @Test + public void isInputDouble_PassTest(){ + + String input="50."; + boolean actual=Console.isInputDouble(input); + Assert.assertTrue(actual); + + } + + @Test + public void isInputDouble_FailTest(){ + + String input="asdasda"; + boolean actual=Console.isInputDouble(input); + Assert.assertFalse(actual); + + } + + @Test + public void issInputStayOrHit_PassTest(){ + String stay = "stay"; + String hit = "hit"; + + Assert.assertTrue(Console.isInputStayOrHit(stay)); + Assert.assertTrue(Console.isInputStayOrHit(hit)); + } + + @Test + public void isInputStayOrHit_FailTest(){ + String fail = "fail"; + + Assert.assertFalse(Console.isInputStayOrHit(fail)); + } + + @Test + public void isInputDoublePositive_PassTest(){ + String input = "50"; + + Assert.assertTrue(Console.isInputPositive(input)); + } + + @Test + public void isInputDoublePositive_FailTest(){ + String input = "-50"; + + Assert.assertFalse(Console.isInputPositive(input)); + } + + @Test + public void issInputYesOrNo_PassTest(){ + String stay = "yes"; + String hit = "no"; + + Assert.assertTrue(Console.isInputYesOrNo(stay)); + Assert.assertTrue(Console.isInputYesOrNo(hit)); + } + + @Test + public void isInputYesOrNo_FailTest(){ + String fail = "fail"; + + Assert.assertFalse(Console.isInputStayOrHit(fail)); + } + + @Test + public void forceTwoDecimalDoubleTest_PassTooMany(){ + String input="50.00000209"; + String expected="50.00"; + String actual=Console.forceTwoDecimalDouble(input); + + + Assert.assertTrue(expected.equals(actual)); + } + + @Test + public void forceTwoDecimalDoubleTest_PassTooFew(){ + String input="50."; + String expected="50.00"; + String actual=Console.forceTwoDecimalDouble(input); + + Assert.assertTrue(expected.equals(actual)); + } + */ + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java index 342c6484..922185ce 100644 --- a/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/DiceTest.java @@ -1,4 +1,65 @@ package io.zipcoder.casino.nuts_n_bolts; +import org.junit.Test; +import org.junit.Assert; + +import java.util.ArrayList; +import java.util.Random; + public class DiceTest { + + @Test + public void testDiceCreation(){ + ArrayList oneToSix = new ArrayList<>(); + for (int i=1; i<=6; i++){ + oneToSix.add(i); + } + Dice standardDice = new Dice<>(oneToSix); + ArrayList standardFaces = standardDice.getAllSides(); + int j=1; + + for (Integer i : standardFaces){ + Assert.assertEquals(i.intValue(),j); + j++; + } + + Random rando = new Random(); + ArrayList stringList = new ArrayList<>(); + + for (int i = 0; i stringDice = new Dice<>(stringList); + for (String s : stringDice.getAllSides()){ + Assert.assertEquals(""+j, s); + j++; + } + } + + @Test + public void testDiceRoll(){ + ArrayList oneToSix = new ArrayList<>(); + for (int i=1; i<=6; i++){ + oneToSix.add(i); + } + Dice standardDice = new Dice<>(oneToSix); + int totalRolls=0; + int desiredRolls=0; + double percentage=0; + double expected=16.7; + Random rando = new Random(); + + for (int i=0; i<1000000; i++){ + if (standardDice.rollDie()==1){ + desiredRolls++; + } + totalRolls++; + } + + percentage=(double)desiredRolls/(double)totalRolls; + Assert.assertEquals(expected, percentage*100, 0.1); + + } + } diff --git a/src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java b/src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java new file mode 100644 index 00000000..e945f7df --- /dev/null +++ b/src/test/java/io/zipcoder/casino/nuts_n_bolts/MoneyContainerTest.java @@ -0,0 +1,49 @@ +package io.zipcoder.casino.nuts_n_bolts; + +import org.junit.Test; +import org.junit.Assert; +import java.util.Random; + +public class MoneyContainerTest { + + private Random rando = new Random(); + + @Test + public void testAddAndGetMoney(){ + MoneyContainer testPot = new MoneyContainer(); + Double amountToAdd = rando.nextDouble(); + Double actual; + testPot.addMoney(amountToAdd); + actual=testPot.getMoney(); + Assert.assertEquals(amountToAdd, actual, 0.0001); + } + + @Test + public void testTakeOutMoney(){ + MoneyContainer testPot = new MoneyContainer(); + Double amountToRemove = rando.nextDouble(); + Double actual; + Double expected; + + testPot.addMoney(rando.nextDouble()); + if (amountToRemove cards; + cards = deck.getAllCards(); + + Assert.assertTrue((cards!=null)&&(cards.size()==52)); + } + + @Test + public void getCardTest(){ + Integer expectedRemaining = 51; + + Assert.assertTrue(deck.getAndRemoveCard() != null); + + Integer actualRemaining = deck.countLeft(); + + Assert.assertEquals(expectedRemaining, actualRemaining); + } + + @Test + public void populateTest() { + Integer expectedCount = 52; + Integer actualCount = deck.getAllCards().size(); + + Assert.assertEquals( expectedCount, actualCount); + Assert.assertTrue(deck.getAndRemoveCard() != null); + } + + @Test + public void shuffleTest(){ + PlayingCard[] cardArray1 = new PlayingCard[52]; + PlayingCard[] cardArray2 = new PlayingCard[52]; + + PlayingCard[] initialArray = deck.getAllCards().toArray(cardArray1); + deck.shuffle(); + + PlayingCard[] shuffledArray = deck.getAllCards().toArray(cardArray2); + + Assert.assertFalse(Arrays.equals(initialArray, shuffledArray)); + } + } From 2d08727cd3d7aeacbf88842cb19b177ba49a919e Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 17:34:43 -0500 Subject: [PATCH 36/46] Began work on BlackJack class --- .../casino/games/blackjack/BlackJack.java | 280 +++++++++++------- 1 file changed, 175 insertions(+), 105 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index e072c16b..4ef95207 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -4,146 +4,216 @@ import io.zipcoder.casino.games.Gamble; import io.zipcoder.casino.nuts_n_bolts.MoneyContainer; import io.zipcoder.casino.nuts_n_bolts.User; +import io.zipcoder.casino.nuts_n_bolts.cards.Hand; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingDeck; import java.util.ArrayList; public class BlackJack extends CardGame implements Gamble { private MoneyContainer pot; - private ArrayList users; + private PlayingDeck deck; + private int playerScore; + private int dealerScore; + private Hand player; + private Hand dealer; - @Override - public void takeBet(Double bet) { - //match biggest bet - } + public BlackJack() { - @Override - public Double settleBet() { - return null; + pot = new MoneyContainer(); + deck = new PlayingDeck(); + deck.shuffle(); + playerScore = 0; + dealerScore = 0; + player = new Hand(); + dealer = new Hand(); + + for (int i = 0; i < 2; i++) { + player.addCard(deck.getAndRemoveCard()); + dealer.addCard(deck.getAndRemoveCard()); + } } - public void evaluatePointsInHand(){} - - @Override - public boolean play(String userInput) { - return false; + public void takeBet(Double bet) { + pot.addMoney(bet); } + public Double settleBet(Double winnings) { + return (pot.takeOutMoney(winnings)); + } - //setup game: - //enter user, enter dealer, get fresh deck - //run game - //make bet - //deal 2 cards each, dealer shows one - //hit or stay? - //dealer hits or stays - //resolve winner - //resolve bets - //would you like to go another round? + public Double emptyPot() { + return pot.takeAllMoney(); + } - private class BlackJackPlayer{ + public Double showPot() { + return pot.getMoney(); + } - private ArrayList hand = new ArrayList<>(); - private User user; + public Integer getPlayerScore() { + playerScore = 0; + ArrayList handArray = player.getAllCards(); - public BlackJackPlayer(User user) { - this.user = user; + for (PlayingCard c : handArray) { + playerScore += cardScore(c, playerScore); } - public void makeABet(Double money){} - - public void winABet(Double money){} - - public void hit(){} - - public void stay(){} - - - + return playerScore; } -} - + public Integer getDealerScore() { + dealerScore = 0; + ArrayList handArray = dealer.getAllCards(); + for (PlayingCard c : handArray) { + dealerScore += cardScore(c, dealerScore); + } -/* -* private Player player; - private Deck deck; - private Player dealer; - private Double pot; - - public Game(){ - player = new Player(); - deck = new Deck(); - dealer = new Player("Dealer"); - deck.shuffle(); - pot = 0.0; + return dealerScore; } - public Double getPot() { - return pot; + private Integer cardScore(PlayingCard c, int score) { + + switch (c.getValue().toString()) { + case "2": + return 2; + case "3": + return 3; + case "4": + return 4; + case "5": + return 5; + case "6": + return 6; + case "7": + return 7; + case "8": + return 8; + case "9": + return 9; + case "10": + case "J": + case "Q": + case "K": + return 10; + default: { + if (score + 11 > 21) { + return 1; + } + } + } + return 11; } - public void addToPot(Double amount) { - this.pot += amount; + public void playerHit() { + player.addCard(deck.getAndRemoveCard()); + playerScore = getPlayerScore(); } - public Player getPlayer() { - return player; + public void dealerHit() { + dealer.addCard(deck.getAndRemoveCard()); + dealerScore = getDealerScore(); } - public Player getDealer() { - return dealer; + public boolean playerWon() { + return ( ((playerScore > dealerScore) && + (playerScore <= 21)) && + dealerScore>21); } - public void run() { - //Deal two cards to the player and the dealer - for (int i = 0; i < 2; i++) - { - dealCard(player); - dealCard(dealer); - } + public boolean play(String userInput) { + return ("Y".equalsIgnoreCase(userInput)); } - public boolean playerWins() { - // if both player and dealer scores are = to 21 dealer wins - // if both player and dealer score are over 21 then dealer wins - // if player's score is <= 21 and players score is greater than dealers score then player wins. - //if dealer's score is > 21 and player's score is <= 21 then players wins. - player.calculateScore(); - dealer.calculateScore(); - - if( (player.getScore().equals(21) && !dealer.getScore().equals(21)) || - (player.getScore()<21 && dealer.getScore() < player.getScore()) || - (player.getScore() < 21 && dealer.getScore() > 21)) { - //Player wins - return true; - } - //Dealer wins - return false; - } - - public void dealCard(Player playerToReceiveCard){ - Card card = deck.getCard(); - playerToReceiveCard.addToHand(card); - } - - public void dealerHitUntilFinished() { - while (dealer.calculateScore() <= 17) - { - dealCard(dealer); - } - } +} - public void returnBet() { - if (playerWins()) { - player.receiveWinnings(pot * 2); - } - else { - this.pot = 0.0; - } - } -* */ + ///////////// + ///////////// + ///////////// + //BlackJack unaltered Below + ///////////// + ///////////// +///////////// + +// private Player player; +// private Deck deck; +// private Player dealer; +// private Double pot; +// +// public Game(){ +// player = new Player(); +// deck = new Deck(); +// dealer = new Player("Dealer"); +// deck.shuffle(); +// pot = 0.0; +// } +// +// public Double getPot() { +// return pot; +// } +// +// public void addToPot(Double amount) { +// this.pot += amount; +// } +// +// public Player getPlayer() { +// return player; +// } +// +// public Player getDealer() { +// return dealer; +// } +// +// public void run() { +// +// //Deal two cards to the player and the dealer +// for (int i = 0; i < 2; i++) +// { +// dealCard(player); +// dealCard(dealer); +// } +// +// } +// +// public boolean playerWins() { +// // if both player and dealer scores are = to 21 dealer wins +// // if both player and dealer score are over 21 then dealer wins +// // if player's score is <= 21 and players score is greater than dealers score then player wins. +// //if dealer's score is > 21 and player's score is <= 21 then players wins. +// player.calculateScore(); +// dealer.calculateScore(); +// +// if( (player.getScore().equals(21) && !dealer.getScore().equals(21)) || +// (player.getScore()<21 && dealer.getScore() < player.getScore()) || +// (player.getScore() < 21 && dealer.getScore() > 21)) { +// //Player wins +// return true; +// } +// //Dealer wins +// return false; +// } +// +// public void dealCard(Player playerToReceiveCard){ +// Card card = deck.getCard(); +// playerToReceiveCard.addToHand(card); +// } +// +// public void dealerHitUntilFinished() { +// while (dealer.calculateScore() <= 17) +// { +// dealCard(dealer); +// } +// } +// +// public void returnBet() { +// if (playerWins()) { +// player.receiveWinnings(pot * 2); +// } +// else { +// this.pot = 0.0; +// } +// } +// From d130e7968b36af47312bf4181d3de226ade40c42 Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 19:19:40 -0500 Subject: [PATCH 37/46] Finished v1 Blackjack and started BlackJack console. Updated pom to JDK8 --- pom.xml | 4 +- .../casino/games/blackjack/BlackJack.java | 38 ++++++++++++++++--- .../games/blackjack/BlackJackConsole.java | 29 ++++++++++++++ 3 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java diff --git a/pom.xml b/pom.xml index d527a141..b89755f2 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ org.apache.maven.plugins maven-compiler-plugin - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index 4ef95207..f3d99c2d 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -62,7 +62,7 @@ public Integer getPlayerScore() { return playerScore; } - public Integer getDealerScore() { + private Integer getDealerScore() { dealerScore = 0; ArrayList handArray = dealer.getAllCards(); @@ -73,6 +73,10 @@ public Integer getDealerScore() { return dealerScore; } + public Integer getDealerScoreShowing(){ + return (cardScore(dealer.getAllCards().get(0), 0)); + } + private Integer cardScore(PlayingCard c, int score) { switch (c.getValue().toString()) { @@ -116,13 +120,37 @@ public void dealerHit() { dealerScore = getDealerScore(); } - public boolean playerWon() { - return ( ((playerScore > dealerScore) && - (playerScore <= 21)) && - dealerScore>21); + public void dealerHitUntilFinished(){ + while (getDealerScore()<=17){ + dealer.addCard(deck.getAndRemoveCard()); + } } + public boolean playerWins(){ + return (((getPlayerScore()>getDealerScore())&&(getPlayerScore()<=21)) || + (getDealerScore()>21 && getPlayerScore()<=21)); + } + + @Override + public String toString(){ + String returnMe=""; + returnMe+="---\nOpponent\n---\n"+getDealerScore()+"---\n"; + for (PlayingCard c : player.getAllCards()){ + returnMe+=c.toString()+"\n"; + } + + returnMe+="\n\n\nPot: "+pot.getMoney()+"\n\n\n\n"; + + returnMe+="---\nYou\n---\n"+getPlayerScore()+"---\n"; + for (PlayingCard c : player.getAllCards()){ + returnMe+=c.toString()+"\n"; + } + + returnMe+="\n\n"; + + return returnMe; + } public boolean play(String userInput) { return ("Y".equalsIgnoreCase(userInput)); diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java new file mode 100644 index 00000000..8a71211f --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java @@ -0,0 +1,29 @@ +package io.zipcoder.casino.games.blackjack; + +import io.zipcoder.casino.nuts_n_bolts.User; +import java.text.NumberFormat; +import java.util.Random; + +public class BlackJackConsole { + + private BlackJack game = new BlackJack(); + private User player; + private double potBet; + private Random rando=new Random(); + private NumberFormat defaultFormat; + + public BlackJackConsole(){ + this(new User("Uncle Bob", 10_000.0)); + } + + public BlackJackConsole(User user){ + player=user; + defaultFormat=NumberFormat.getCurrencyInstance(); + } + + + + private void welcomePlayer(){ + System.out.println("Hello, "+player.getName()+". Welcome to the "+game.getClass().getSimpleName()+" table."); + } +} From 5f2991385718217573ddcc0ae97d26a3b8f42f7a Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 20:17:37 -0500 Subject: [PATCH 38/46] Version1 of BlackJack and Console --- .../casino/games/blackjack/BlackJack.java | 33 ++++++++-- .../games/blackjack/BlackJackConsole.java | 60 +++++++++++++++++++ .../casino/games/craps/CrapsConsole.java | 5 -- 3 files changed, 87 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java index f3d99c2d..0f95a02d 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJack.java @@ -121,7 +121,7 @@ public void dealerHit() { } public void dealerHitUntilFinished(){ - while (getDealerScore()<=17){ + while (getDealerScore()<=17 && getPlayerScore()<=21){ dealer.addCard(deck.getAndRemoveCard()); } } @@ -131,18 +131,39 @@ public boolean playerWins(){ (getDealerScore()>21 && getPlayerScore()<=21)); } - @Override - public String toString(){ + public String finalTableDisplay(){ String returnMe=""; - returnMe+="---\nOpponent\n---\n"+getDealerScore()+"---\n"; + returnMe+="---\nOpponent\n---\n"+getDealerScore()+" Showing\n---\n"; + for (PlayingCard c : dealer.getAllCards()){ + returnMe+=c.toString()+"\n"; + } + + + returnMe+="\nPot: "+pot.getMoney()+"\n\n"; + + returnMe+="---\nYou\n---\n"+getPlayerScore()+"\n---\n"; for (PlayingCard c : player.getAllCards()){ returnMe+=c.toString()+"\n"; } - returnMe+="\n\n\nPot: "+pot.getMoney()+"\n\n\n\n"; + returnMe+="\n\n"; + + return returnMe; + } + + @Override + public String toString(){ + String returnMe=""; + + returnMe+="---\nOpponent\n---\n"+getDealerScoreShowing()+" Showing\n---\n"; + returnMe+=dealer.getAllCards().get(0).toString()+"\n"; + returnMe+="[]\n"; + + + returnMe+="\nPot: "+pot.getMoney()+"\n\n"; - returnMe+="---\nYou\n---\n"+getPlayerScore()+"---\n"; + returnMe+="---\nYou\n---\n"+getPlayerScore()+"\n---\n"; for (PlayingCard c : player.getAllCards()){ returnMe+=c.toString()+"\n"; } diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java index 8a71211f..497d98e9 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java @@ -4,8 +4,16 @@ import java.text.NumberFormat; import java.util.Random; +import static io.zipcoder.casino.nuts_n_bolts.Input.getPositiveDoubleInput; +import static io.zipcoder.casino.nuts_n_bolts.Input.getStringInput; + public class BlackJackConsole { + public static void main(String[] args){ + BlackJackConsole console = new BlackJackConsole(); + console.run(); + } + private BlackJack game = new BlackJack(); private User player; private double potBet; @@ -21,7 +29,59 @@ public BlackJackConsole(User user){ defaultFormat=NumberFormat.getCurrencyInstance(); } + public void run(){ + welcomePlayer(); + do { + game = new BlackJack(); + playerBets(); + System.out.println(game.toString()); + playerHitOrStayCycle(); + game.dealerHitUntilFinished(); + System.out.println(game.toString()); + determineWinOrLoss(); + }while(game.play(getStringInput("Continue playing? [Y/N] "))); + + } + + private void determineWinOrLoss(){ + if (game.playerWins()){ + System.out.println("You win! "); + System.out.println(game.finalTableDisplay()); + settlePlayerWon(); + } + else{ + System.out.println("You lose. "); + System.out.println(game.finalTableDisplay()); + settlePlayerLost(); + } + } + private void settlePlayerLost(){ + potBet=game.emptyPot(); + System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" " + + "in your wallet."); + } + private void settlePlayerWon(){ + player.getWallet().addMoney(game.emptyPot()); + System.out.println("You have "+defaultFormat.format(player.getWallet().getMoney())+" " + + "in your wallet."); + } + + private void playerHitOrStayCycle(){ + while (game.getPlayerScore()<21 && + "Y".equalsIgnoreCase(getStringInput("Hit? [Y/N] "))){ + game.playerHit(); + System.out.println(game.toString()); + } + } + + private void playerBets(){ + potBet=getPositiveDoubleInput("You have "+defaultFormat.format(player.getWallet().getMoney())+". " + + " How much do you wish to bet? "); + game.takeBet(player.getWallet().takeOutMoney(potBet)); + System.out.println("Your opponent matches your bet of "+defaultFormat.format(potBet)+". "); + game.takeBet(potBet); + } private void welcomePlayer(){ System.out.println("Hello, "+player.getName()+". Welcome to the "+game.getClass().getSimpleName()+" table."); diff --git a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java index 3a226208..068c0451 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java +++ b/src/main/java/io/zipcoder/casino/games/craps/CrapsConsole.java @@ -10,11 +10,6 @@ public class CrapsConsole { - public static void main(String[] args){ - CrapsConsole console = new CrapsConsole(); - console.run(); - } - private Craps game = new Craps(); private User player; private double mainPotBet; From 4d292a136ad180a7215b690bc96881f0508804b3 Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 20:21:06 -0500 Subject: [PATCH 39/46] Removed main from BlackJack console --- .../io/zipcoder/casino/games/blackjack/BlackJackConsole.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java index 497d98e9..d5a6cdcc 100644 --- a/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java +++ b/src/main/java/io/zipcoder/casino/games/blackjack/BlackJackConsole.java @@ -9,11 +9,6 @@ public class BlackJackConsole { - public static void main(String[] args){ - BlackJackConsole console = new BlackJackConsole(); - console.run(); - } - private BlackJack game = new BlackJack(); private User player; private double potBet; From 2d977d4139f058af8c0af44c0f5aa03e736957b8 Mon Sep 17 00:00:00 2001 From: timothy Date: Wed, 22 Nov 2017 21:43:08 -0500 Subject: [PATCH 40/46] some test stubbing --- .../java/io/zipcoder/casino/AllTests.java | 4 - .../games/blackjack/BlackJackPlayerTest.java | 4 - .../casino/games/blackjack/BlackJackTest.java | 194 +----------------- 3 files changed, 4 insertions(+), 198 deletions(-) delete mode 100644 src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java diff --git a/src/test/java/io/zipcoder/casino/AllTests.java b/src/test/java/io/zipcoder/casino/AllTests.java index c7dbc64d..5a08b2f5 100644 --- a/src/test/java/io/zipcoder/casino/AllTests.java +++ b/src/test/java/io/zipcoder/casino/AllTests.java @@ -1,13 +1,10 @@ package io.zipcoder.casino; -import io.zipcoder.casino.casino.CasinoTest; -import io.zipcoder.casino.games.blackjack.BlackJackPlayerTest; import io.zipcoder.casino.games.blackjack.BlackJackTest; import io.zipcoder.casino.games.craps.CrapsPlayerTest; import io.zipcoder.casino.games.craps.CrapsTest; import io.zipcoder.casino.games.gofish.GoFishPlayerTest; import io.zipcoder.casino.games.gofish.GoFishTest; -import io.zipcoder.casino.nuts_n_bolts.ConsoleTest; import io.zipcoder.casino.nuts_n_bolts.DiceTest; import io.zipcoder.casino.nuts_n_bolts.MoneyContainerTest; import io.zipcoder.casino.nuts_n_bolts.UserTest; @@ -21,7 +18,6 @@ @Suite.SuiteClasses({ //CasinoTest.class, BlackJackTest.class, - BlackJackPlayerTest.class, CrapsTest.class, CrapsPlayerTest.class, GoFishTest.class, diff --git a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java deleted file mode 100644 index f05e2dd9..00000000 --- a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackPlayerTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.zipcoder.casino.games.blackjack; - -public class BlackJackPlayerTest { -} diff --git a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java index 672a6017..4dbbaf3c 100644 --- a/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java +++ b/src/test/java/io/zipcoder/casino/games/blackjack/BlackJackTest.java @@ -1,195 +1,9 @@ package io.zipcoder.casino.games.blackjack; -public class BlackJackTest { -} - -/* -* @Test - public void getPot() { - Game game = new Game(); - Player player = game.getPlayer(); - Double expectedPot = 50.0; - player.makeBet(50.0); - game.addToPot(50.0); - Double actualPot = game.getPot(); - Assert.assertEquals(expectedPot, actualPot); - } - - @Test - public void startTest() { - Game game = new Game(); - game.start(); - int expectedNumberOfPlayerCards = 2; - int expectedNumberOfDealerCards = 2; - - Player player = game.getPlayer(); - Player dealer = game.getDealer(); - - int actualNumberOfPlayerCards = player.getHand().size(); - int actualNumberOfDealerCards = dealer.getHand().size(); - - Assert.assertEquals(expectedNumberOfPlayerCards, actualNumberOfPlayerCards); - Assert.assertEquals(expectedNumberOfDealerCards, actualNumberOfDealerCards); - } - - @Test - public void playerWinsTest_True1() { - Game game = new Game(); - - Player player = game.getPlayer(); - Player dealer = game.getDealer(); - - Card ace = new Card(Suit.HEARTS, 1); - Card nine = new Card(Suit.CLUBS, 9); - Card ten = new Card(Suit.HEARTS, 10); - - player.addToHand(ace); - player.addToHand(nine); - player.addToHand(ten); - - dealer.addToHand(ten); - dealer.addToHand(nine); - - boolean expected = true; - - boolean actual = game.playerWins(); - - Assert.assertEquals(expected, actual); - - System.out.println(player.getScore()); - System.out.println(dealer.getScore()); - } - - @Test - public void playerWinsTest_True2() { - Game game = new Game(); - - Player player = game.getPlayer(); - Player dealer = game.getDealer(); - - Card ace = new Card(Suit.HEARTS, 1); - Card nine = new Card(Suit.CLUBS, 9); - Card ten = new Card(Suit.HEARTS, 10); - - player.addToHand(ace); - player.addToHand(nine); - player.addToHand(ten); - - dealer.addToHand(ten); - dealer.addToHand(nine); - dealer.addToHand(nine); - - boolean expected = true; - - boolean actual = game.playerWins(); - - Assert.assertEquals(expected, actual); - - System.out.println(player.getScore()); - System.out.println(dealer.getScore()); - } - - @Test - public void playerWinsTest_True3() { - Game game = new Game(); - - Player player = game.getPlayer(); - Player dealer = game.getDealer(); +import org.junit.Test; +import org.junit.Assert; - Card ace = new Card(Suit.HEARTS, 1); - Card nine = new Card(Suit.CLUBS, 9); - Card ten = new Card(Suit.HEARTS, 10); - - player.addToHand(ace); - player.addToHand(ten); - - dealer.addToHand(ten); - dealer.addToHand(nine); - - boolean expected = true; - - boolean actual = game.playerWins(); - - System.out.println(player.getScore()); - System.out.println(dealer.getScore()); - - Assert.assertEquals(expected, actual); - } - - @Test - public void playerWinsTest_False() { - Game game = new Game(); - - Player player = game.getPlayer(); - Player dealer = game.getDealer(); - - Card ace = new Card(Suit.HEARTS, 1); - Card nine = new Card(Suit.CLUBS, 9); - Card ten = new Card(Suit.HEARTS, 10); - - player.addToHand(ace); - player.addToHand(ten); - - dealer.addToHand(ten); - dealer.addToHand(ace); - - boolean expected = false; - - boolean actual = game.playerWins(); - - System.out.println(player.getScore()); - System.out.println(dealer.getScore()); - - Assert.assertEquals(expected, actual); - } - -// -// @Test -// public void hitPlayer() { -// Game game = new Game(); -// Player player = game.getPlayer(); -// int expectedHandSize = 1; -// game.askPlayerForHit(player); -// int actualHandSize = player.getHandSize(); -// Assert.assertEquals(expectedHandSize, actualHandSize); -// -// } - - @Test - public void dealerHitUntilFinished() { - Game game = new Game(); - Player dealer = game.getDealer(); - - boolean expected = true; - - game.dealerHitUntilFinished(); - boolean actual = (dealer.getHand().size() >= 2); - - Assert.assertEquals(expected, actual); - } - - @Test - public void returnBet() { - Game game = new Game(); - - Player player = game.getPlayer(); - Player dealer = game.getDealer(); - - Card ace = new Card(Suit.HEARTS, 1); - Card nine = new Card(Suit.CLUBS, 9); - Card ten = new Card(Suit.HEARTS, 10); - - player.addToHand(ace); - player.addToHand(ten); +public class BlackJackTest { - dealer.addToHand(ten); - dealer.addToHand(nine); - Double expected = 550.0; - player.makeBet(50.0); - game.addToPot(50.0); - game.returnBet(); - Double actual = player.getMoney(); - Assert.assertEquals(expected, actual, .001); - } -* */ \ No newline at end of file +} \ No newline at end of file From 509a312dfa3ac4e1bbd602d3797e6bf6c684445e Mon Sep 17 00:00:00 2001 From: timothy Date: Fri, 24 Nov 2017 11:36:40 -0500 Subject: [PATCH 41/46] Craps tests updated --- .../io/zipcoder/casino/games/craps/Craps.java | 4 - .../java/io/zipcoder/casino/AllTests.java | 4 +- .../games/craps/CrapsConsoleWIPTest.java | 11 -- .../casino/games/craps/CrapsPlayerTest.java | 4 - .../casino/games/craps/CrapsTest.java | 135 ++++++++++++++++++ 5 files changed, 136 insertions(+), 22 deletions(-) delete mode 100644 src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java delete mode 100644 src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java diff --git a/src/main/java/io/zipcoder/casino/games/craps/Craps.java b/src/main/java/io/zipcoder/casino/games/craps/Craps.java index d2e444c1..09078ee9 100644 --- a/src/main/java/io/zipcoder/casino/games/craps/Craps.java +++ b/src/main/java/io/zipcoder/casino/games/craps/Craps.java @@ -83,10 +83,6 @@ public void resetTurn() { public boolean getPlayerTurn(){return isPlayerTurn;} - public int getPoint(){return point;} - public String getPair(){ - return(pair.text); - } public int getNumberRolled(){return numberRolled;} public MoneyContainer getSidePot() { return sidePot; diff --git a/src/test/java/io/zipcoder/casino/AllTests.java b/src/test/java/io/zipcoder/casino/AllTests.java index 5a08b2f5..7c16fea5 100644 --- a/src/test/java/io/zipcoder/casino/AllTests.java +++ b/src/test/java/io/zipcoder/casino/AllTests.java @@ -1,7 +1,6 @@ package io.zipcoder.casino; import io.zipcoder.casino.games.blackjack.BlackJackTest; -import io.zipcoder.casino.games.craps.CrapsPlayerTest; import io.zipcoder.casino.games.craps.CrapsTest; import io.zipcoder.casino.games.gofish.GoFishPlayerTest; import io.zipcoder.casino.games.gofish.GoFishTest; @@ -19,13 +18,12 @@ //CasinoTest.class, BlackJackTest.class, CrapsTest.class, - CrapsPlayerTest.class, GoFishTest.class, GoFishPlayerTest.class, HandTest.class, PlayingCardTest.class, PlayingDeckTest.class, - //ConsoleTest.class, + //ConsoleTest.class,} DiceTest.class, MoneyContainerTest.class, UserTest.class diff --git a/src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java b/src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java deleted file mode 100644 index b64eb8a0..00000000 --- a/src/test/java/io/zipcoder/casino/games/craps/CrapsConsoleWIPTest.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.zipcoder.casino.games.craps; - -import org.junit.Assert; -import org.junit.Test; - -public class CrapsConsoleWIPTest { - - - - -} diff --git a/src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java b/src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java deleted file mode 100644 index f7f4519c..00000000 --- a/src/test/java/io/zipcoder/casino/games/craps/CrapsPlayerTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.zipcoder.casino.games.craps; - -public class CrapsPlayerTest { -} diff --git a/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java b/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java index ce48fa31..3d792e5f 100644 --- a/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java +++ b/src/test/java/io/zipcoder/casino/games/craps/CrapsTest.java @@ -1,4 +1,139 @@ package io.zipcoder.casino.games.craps; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Random; + public class CrapsTest { + + Craps game; + + @Before + public void preTestsSetup(){ + game=new Craps(); + } + @Test + public void takeBetTest(){ + double beginningPot=game.getMainPot().getMoney(); + game.takeBet(100.0); + double afterTakeBet=game.getMainPot().getMoney(); + + Assert.assertEquals(beginningPot+100,afterTakeBet, 0.001); + } + + @Test + public void takeSideBetTest() { + double beginningPot = game.getSidePot().getMoney(); + game.takeSideBet(100.0); + double afterTakeSideBet = game.getSidePot().getMoney(); + + Assert.assertEquals(beginningPot + 100, afterTakeSideBet, 0.001); + } + + @Test + public void settleBetTest(){ + double beforeBetting = game.getMainPot().getMoney(); + double betAmount=100; + double settleAmount=50; + + game.takeBet(betAmount); + game.settleBet(settleAmount); + double afterSettling=game.getMainPot().getMoney(); + + Assert.assertEquals(beforeBetting+betAmount-settleAmount, afterSettling, 0.001); + } + + @Test + public void settleSideBetTest(){ + double beforeBetting = game.getSidePot().getMoney(); + double betAmount=100; + double settleAmount=50; + + game.takeSideBet(betAmount); + game.settleSideBet(settleAmount); + double afterSettling=game.getSidePot().getMoney(); + + Assert.assertEquals(beforeBetting+betAmount-settleAmount, afterSettling, 0.001); + } + + @Test + public void emptyPotTest(){ + double beforeBetting = game.getMainPot().getMoney(); + double betAmount=100; + + game.takeBet(betAmount); + double afterEmptying = game.emptyPot(); + + Assert.assertEquals(beforeBetting+betAmount, afterEmptying, 0.001); + } + + @Test + public void emptySidePotTest(){ + double beforeBetting = game.getSidePot().getMoney(); + double betAmount=100; + + game.takeSideBet(betAmount); + double afterEmptying = game.emptySidePot(); + + Assert.assertEquals(beforeBetting+betAmount, afterEmptying, 0.001); + } + + @Test + public void isPlayerAndChangePlayerTest(){ + boolean isPlayerTurn=game.getPlayerTurn(); + Assert.assertEquals(isPlayerTurn, game.getPlayerTurn()); + game.changePlayerTurn(); + Assert.assertNotEquals(isPlayerTurn, game.getPlayerTurn()); + isPlayerTurn=game.getPlayerTurn(); + Assert.assertEquals(isPlayerTurn, game.getPlayerTurn()); + } + + @Test + public void initialThrowAndGetNumberRolledTest(){ + int result; + + for (int i=0; i<1000000; i++) { + result = game.initialThrow(); + Assert.assertTrue(Math.abs(result) <= 1); + Assert.assertTrue(game.getNumberRolled() > 0 && game.getNumberRolled() < 13); + } + } + + @Test + public void secondaryThrowTest(){ + Integer[] valid = {-1, 0, 1, 4, 5, 6, 8, 9, 10}; + ArrayList validList = new ArrayList<>(Arrays.asList(valid)); + + int result; + int numRolled; + for (int i=0; i<50; i++){ + result=game.initialThrow();//Need to get a pair set + //or else we throw a NullPointer Exception + } + + for (int i=0; i<1000000; i++) { + result = game.secondaryThrow(); + Assert.assertTrue(validList.contains(result)); + } + + } + + @Test + public void playTest(){ + String test; + for (char c='A'; c<='z'; c++){ + test=""+c; + if ("Y".equalsIgnoreCase(test)){ + Assert.assertTrue(game.play(test)); + } else{ + Assert.assertFalse(game.play(test)); + } + } + } + } From 6d79e2cc27a822c17caf174d0372505c5d87ee0a Mon Sep 17 00:00:00 2001 From: timothy Date: Sun, 26 Nov 2017 19:05:21 -0500 Subject: [PATCH 42/46] Add CrapsConsole() to menu --- src/main/java/io/zipcoder/casino/casino/CasinoMenu.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java index 43efa959..0936e2d2 100644 --- a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java @@ -1,5 +1,6 @@ package io.zipcoder.casino.casino; +import io.zipcoder.casino.games.craps.CrapsConsole; import io.zipcoder.casino.nuts_n_bolts.Menu; public class CasinoMenu extends Menu{ @@ -17,9 +18,11 @@ public void selectOption(String userInput) { switch(CasinoMenuOptions.valueOf(userInput)){ case EXIT: Casino.getInstance().exitCasino(); - case CRAPS: -// crapsMenu(); + case CRAPS:{ + CrapsConsole craps = new CrapsConsole(/*PassedUserOptional*/); + craps.run(); break; + } case GOFISH: // goFishMenu(); break; From 9a3aa209addbcc38b1db53437a860f6716f5dc5d Mon Sep 17 00:00:00 2001 From: Pavel Date: Sun, 26 Nov 2017 19:10:35 -0500 Subject: [PATCH 43/46] "Casino menu ported" --- .../io/zipcoder/casino/casino/Casino.java | 5 + .../io/zipcoder/casino/casino/CasinoMenu.java | 7 +- .../zipcoder/casino/games/gofish/GoFish.java | 194 ++++++++++++++++-- .../casino/games/gofish/GoFishConsole.java | 15 -- .../casino/games/gofish/GoFishMenu.java | 33 +++ .../zipcoder/casino/nuts_n_bolts/Console.java | 8 +- .../zipcoder/casino/nuts_n_bolts/Input.java | 17 ++ .../io/zipcoder/casino/nuts_n_bolts/Menu.java | 2 +- .../casino/nuts_n_bolts/cards/Hand.java | 5 + .../casino/games/gofish/GoFishPlayerTest.java | 18 +- .../casino/games/gofish/GoFishTest.java | 48 +++-- 11 files changed, 288 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java create mode 100644 src/main/java/io/zipcoder/casino/games/gofish/GoFishMenu.java diff --git a/src/main/java/io/zipcoder/casino/casino/Casino.java b/src/main/java/io/zipcoder/casino/casino/Casino.java index 6ac309e9..ce5683fb 100644 --- a/src/main/java/io/zipcoder/casino/casino/Casino.java +++ b/src/main/java/io/zipcoder/casino/casino/Casino.java @@ -7,6 +7,11 @@ public class Casino { private static Casino INSTANCE = null; + + public User getUser() { + return user; + } + private User user; private Casino(){} diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java index 43efa959..da012858 100644 --- a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java @@ -1,5 +1,6 @@ package io.zipcoder.casino.casino; +import io.zipcoder.casino.games.gofish.GoFishMenu; import io.zipcoder.casino.nuts_n_bolts.Menu; public class CasinoMenu extends Menu{ @@ -21,7 +22,7 @@ public void selectOption(String userInput) { // crapsMenu(); break; case GOFISH: -// goFishMenu(); + goFishMenu(); break; case BLACKJACK: // blackJackMenu(); @@ -34,12 +35,12 @@ private void crapsMenu() { CrapsMenu crapsMenu = CrapsMenu.INSTANCE; crapsMenu.display(); } - +*/ private void goFishMenu() { GoFishMenu goFishMenu = GoFishMenu.INSTANCE; goFishMenu.display(); } - +/* private void blackJackMenu() { BlackJackMenu blackJackMenu = BlackJackMenu.INSTANCE; blackJackMenu.display(); diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index e9e8ba74..69282dee 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -1,5 +1,7 @@ package io.zipcoder.casino.games.gofish; +import io.zipcoder.casino.games.Game; +import io.zipcoder.casino.nuts_n_bolts.Input; import io.zipcoder.casino.nuts_n_bolts.User; import io.zipcoder.casino.nuts_n_bolts.cards.Hand; import io.zipcoder.casino.nuts_n_bolts.cards.PlayingCard; @@ -8,19 +10,26 @@ import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; -public class GoFish { +public class GoFish implements Game { - private GoFishPlayer player; + private GoFishPlayer humanPlayer; - private GoFishPlayer dealer; + private GoFishPlayer compPlayer; private PlayingDeck deck; + private GoFishPlayer winner = null; + public GoFish(User user){ - this.player = new GoFishPlayer(user); - this.dealer = createCompPlayer(); + this.humanPlayer = new GoFishPlayer(user); + this.compPlayer = createCompPlayer(); this.deck = new PlayingDeck(); + this.deck.shuffle(); + } + + @Override + public boolean play(String userInput) { + return false; } GoFishPlayer createCompPlayer(){ @@ -31,12 +40,12 @@ Boolean lastPlayerHandEmpty(GoFishPlayer player){ return player.hand.isHandEmpty(); } - public GoFishPlayer getPlayer() { - return player; + public GoFishPlayer getHumanPlayer() { + return humanPlayer; } - public GoFishPlayer getDealer() { - return dealer; + public GoFishPlayer getCompPlayer() { + return compPlayer; } public PlayingDeck getDeck() { @@ -44,13 +53,154 @@ public PlayingDeck getDeck() { } public void run() { + humanPlayer.hand.clear(); + compPlayer.hand.clear(); + dealInitialHands(7); //change to 6, 5 for 3, 4 players + do { + playHumanTurn(humanPlayer); + playComputerTurn(compPlayer); + } while (winner == null); + endGame(); + } + + private void playHumanTurn(GoFishPlayer player) { + displayHand(player); + tryAskingForValue(); + } + + private void playComputerTurn(GoFishPlayer compPlayer) { + System.out.println(compPlayer.getUser().getName()+" has "+compPlayer.hand.getAllCards().size()+" cards."); + compAskingForValue(); + } + + private void compAskingForValue() { + do { + PlayingValue value = null; + value = getRandomPlayingValue(compPlayer); + System.out.println(compPlayer.getUser().getName()+" asks for "+value+"!"); + if (compPlayer.askForValue(humanPlayer, value) > 0) { + compPlayer.takeCardsFromOther(humanPlayer, value); + System.out.println("Since you had "+value+", "+compPlayer.getUser().getName()+" takes it/them!"); + if(compPlayer.hand.isHandEmpty()){ + winner = compPlayer; + System.out.println(compPlayer.getUser().getName()+"'s hand is empty!"); + break; + } + System.out.println(compPlayer.getUser().getName()+" has "+compPlayer.hand.getAllCards().size()+" cards."); + } else { + System.out.println("You didn't have any of those, "+compPlayer.getUser().getName()+" has to Go Fish!"); + PlayingCard drawnCard = compPlayer.drawCard(); + if (drawnCard.getValue() == value) { + System.out.println(compPlayer.getUser().getName()+" drew a card."); + if(compPlayer.hand.isHandEmpty()){ + winner = compPlayer; + System.out.println(compPlayer.getUser().getName()+"'s hand is empty!"); + break; + } + System.out.println(compPlayer.getUser().getName()+" asked for " + value + " and drew a card of that rank! It can ask for another card!"); + continue; + } else { + System.out.println(compPlayer.getUser().getName()+" has "+compPlayer.hand.getAllCards().size()+" cards."); + System.out.println("This ends "+compPlayer.getUser().getName()+"'s turn.\n\n"); + compPlayer.nullAskedValue(); + break; + } + } + } while (true); + } + + private PlayingValue getRandomPlayingValue(GoFishPlayer compPlayer) { + Random random = new Random(); + TreeSet values = compPlayer.getValuesInHand(); + ArrayList list = new ArrayList<>(values); + return list.get(random.nextInt(list.size())); + } + private void tryAskingForValue() { + do { + PlayingValue value = null; + value = getPlayingValue(humanPlayer); + if (humanPlayer.askForValue(compPlayer, value) > 0) { + humanPlayer.takeCardsFromOther(compPlayer, value); + if(humanPlayer.hand.isHandEmpty()){ + winner = humanPlayer; + break; + } + displayHand(humanPlayer); + } else { + System.out.println("They didn't have any of those, Go Fish!"); + PlayingCard drawnCard = humanPlayer.drawCard(); + if (drawnCard.getValue() == value) { + System.out.println("You draw a "+drawnCard.toString()); + System.out.println("You asked for " + value + " and drew a card of that rank! You can ask for another card!"); + if(humanPlayer.hand.isHandEmpty()){ + winner = humanPlayer; + break; + } + displayHand(humanPlayer); + continue; + } else { + System.out.println("This ends your turn.\n\n"); + humanPlayer.nullAskedValue(); + break; + } + } + } while (true); + } + + private PlayingValue getPlayingValue(GoFishPlayer player) { + PlayingValue value; + do { + value = Input.getPlayingValue(""); + if (player.checkIfHandHasValue(value) > 0) { + break; + } else { + System.out.println("Your hand doesn't have that value! Try another."); + value = null; + } + } while (true); + return value; + } + + /* private GoFishPlayer switchPlayer() { + if(nextPlayer == humanPlayer){ + return compPlayer; + } else { + return humanPlayer; + } + }*/ + + private void endGame() { + if(winner == humanPlayer){ + System.out.println("Congratulations, you won!"); + } else { + System.out.println("Awww, you loooooost."); + } + } + + private void displayHand(GoFishPlayer player) { + System.out.println(compPlayer.getUser().getName()+" has "+compPlayer.hand.getAllCards().size()+" cards."); + System.out.println("Cards in your hand:"); + System.out.println(player.hand.toString()); + System.out.println("\n\n What rank do you want to ask for?"); + String values = ""; + for (PlayingValue value: + player.getValuesInHand()) { + values += " ["+value+"] "; + } + System.out.println(values); + } + + public void dealInitialHands(int numberOfCards) { + for (int i = 0; i < numberOfCards; i++) { + humanPlayer.addCard(deck.getAndRemoveCard()); + compPlayer.addCard(deck.getAndRemoveCard()); + } } class GoFishPlayer { private User user; - private Hand hand; private PlayingValue askedValue = null; @@ -71,6 +221,15 @@ PlayingValue getAskedValue() { return askedValue; } + void addCard(PlayingCard card){ + this.hand.addCard(card); + PlayingValue four = this.fourOfKindValue(); + if(four != null){ + this.discardFourOfKind(four); + System.out.println("Completed a set of "+four+"!"); + } + } + Integer askForValue(GoFishPlayer other, PlayingValue value){ this.askedValue = value; return other.checkIfHandHasValue(value); @@ -87,8 +246,12 @@ private ArrayList getAllOfValue(PlayingValue value) { void takeCardsFromOther(GoFishPlayer other, PlayingValue value){ ArrayList movingCards = other.getAllOfValue(value); + System.out.println(other.getUser().getName()+" had "+movingCards.size()+" of "+value+"!"); other.getHand().getAllCards().removeAll(movingCards); - this.getHand().getAllCards().addAll(movingCards); + for (PlayingCard card : + movingCards) { + this.addCard(card); + } } void nullAskedValue(){ @@ -98,7 +261,7 @@ void nullAskedValue(){ PlayingCard drawCard(){ PlayingCard drawnCard; drawnCard = deck.getAndRemoveCard(); - hand.addCard(drawnCard); + this.addCard(drawnCard); return drawnCard; } @@ -122,5 +285,10 @@ void discardFourOfKind(PlayingValue value){ this.getHand().getAllCards().removeIf(card -> card.getValue() == value); } + TreeSet getValuesInHand(){ + return new TreeSet<>(this.hand.getAllCards().stream(). + map(PlayingCard::getValue).collect(Collectors.toList())); + } + } } diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java deleted file mode 100644 index 69930acb..00000000 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFishConsole.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.zipcoder.casino.games.gofish; - -import io.zipcoder.casino.games.CardGame; - -public class GoFishConsole extends CardGame { - - public void play() { - - } - - @Override - public boolean play(String userInput) { - return false; - } -} diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFishMenu.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFishMenu.java new file mode 100644 index 00000000..9e52ffb5 --- /dev/null +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFishMenu.java @@ -0,0 +1,33 @@ +package io.zipcoder.casino.games.gofish; + +import io.zipcoder.casino.casino.Casino; +import io.zipcoder.casino.games.CardGame; +import io.zipcoder.casino.nuts_n_bolts.Menu; + +public class GoFishMenu extends Menu { + + enum GoFishMenuOptions {PLAY, BACK} + public static final GoFishMenu INSTANCE = new GoFishMenu(); + GoFish goFish = new GoFish(Casino.getInstance().getUser()); + + public GoFishMenu() { + super(GoFishMenuOptions.values()); + } + + @Override + public void selectOption(String userInput) { + switch(GoFishMenuOptions.valueOf(userInput)){ + case BACK: + break; + case PLAY: + goFish.run(); + break; +// case SETPLAYERS: +// goFishMenu(); +// break; +// case SETRULES: +// blackJackMenu(); +// break; + } + } +} diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java index 85d3c2cb..73bda5d0 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Console.java @@ -86,7 +86,7 @@ private Double getBetAmount(){ public static void run(){ - Player userPlayer = game.getPlayer(); + Player userPlayer = game.getHumanPlayer(); System.out.print("" + " ____ _ _ _ _ \n" + @@ -145,14 +145,14 @@ private static void determineWinOrLoss(Player userPlayer){ } else { System.out.println("\nHouse wins!"); } - System.out.println("\nHouse has score: " + game.getDealer().getScore()); + System.out.println("\nHouse has score: " + game.getCompPlayer().getScore()); resetPotAndDiscardHands(userPlayer); } private static void resetPotAndDiscardHands(Player userPlayer){ game.returnBet(); userPlayer.getHand().clear(); - game.getDealer().getHand().clear(); + game.getCompPlayer().getHand().clear(); } private static void playerHitsOrStays(Player userPlayer){ @@ -176,7 +176,7 @@ private static String forceHitOrStay(){ } private static void displayDealerCardShowing(){ - System.out.println("\nDealer is showing:\n"+game.getDealer().getHand().get(0).toString()); + System.out.println("\nDealer is showing:\n"+game.getCompPlayer().getHand().get(0).toString()); } private static void displayPlayerHandAndScore(Player userPlayer){ diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java index 60bcb482..551443d7 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java @@ -1,5 +1,7 @@ package io.zipcoder.casino.nuts_n_bolts; +import io.zipcoder.casino.nuts_n_bolts.cards.PlayingValue; + import java.util.Scanner; public class Input { @@ -38,4 +40,19 @@ public static Double getPositiveDoubleInput(String prompt){ } while (true); } + public static PlayingValue getPlayingValue(String prompt){ + PlayingValue value = null; + String stringInput = ""; + do { + stringInput = getStringInput(prompt); + try { + value = PlayingValue.valueOf(stringInput.toUpperCase()); + return value; + } catch (IllegalArgumentException iae) { + System.out.println("Not a valid value."); + continue; + } + } while (true); + } + } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java index 83cf4439..2a898777 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Menu.java @@ -34,7 +34,7 @@ public void display() { } catch (NullPointerException npe) { handleNullPointerException(npe); } - } while (!"Home".equalsIgnoreCase(userInput)); + } while (!"back".equalsIgnoreCase(userInput)); } protected void handleIllegalArgumentException(String illegalArgument, IllegalArgumentException iae) { diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java index 137a15df..dd59086a 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/Hand.java @@ -1,6 +1,7 @@ package io.zipcoder.casino.nuts_n_bolts.cards; import java.util.ArrayList; +import java.util.Comparator; public class Hand { @@ -14,6 +15,7 @@ public String toString(){ return "If there's nothing in your hand, is it a hand?"; } else { String output = ""; + cards.sort(Comparator.comparing(PlayingCard::getValue)); for (PlayingCard card : cards) { output += " ["+card+"] "; @@ -43,4 +45,7 @@ public PlayingCard getCard(PlayingCard card) { return card; } + public void clear() { + cards = new ArrayList<>(); + } } diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java index b6e3b03c..2eee0f5c 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishPlayerTest.java @@ -15,7 +15,7 @@ public class GoFishPlayerTest { public void creationAndGetterTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - GoFish.GoFishPlayer player = goFish.getPlayer(); + GoFish.GoFishPlayer player = goFish.getHumanPlayer(); Assert.assertEquals(user, player.getUser()); Assert.assertNull(player.getAskedValue()); @@ -25,7 +25,7 @@ public void creationAndGetterTest(){ public void drawCardPutsInHandTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - GoFish.GoFishPlayer player = goFish.getPlayer(); + GoFish.GoFishPlayer player = goFish.getHumanPlayer(); Assert.assertTrue(player.getHand().isHandEmpty()); player.drawCard(); @@ -36,7 +36,7 @@ public void drawCardPutsInHandTest(){ public void drawCardReturnsCorrectCardTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - GoFish.GoFishPlayer player = goFish.getPlayer(); + GoFish.GoFishPlayer player = goFish.getHumanPlayer(); PlayingCard expectedCard = goFish.getDeck().getAllCards().get(0); PlayingCard actualCard = player.drawCard(); @@ -52,10 +52,10 @@ public void hasFourOfKindTrueTest(){ GoFish goFish = new GoFish(user); for (int i = 0; i < 4; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); } - PlayingValue actual = goFish.getDealer().fourOfKindValue(); + PlayingValue actual = goFish.getCompPlayer().fourOfKindValue(); PlayingValue expected = PlayingValue.KING; Assert.assertEquals(expected, actual); @@ -67,10 +67,10 @@ public void hasFourOfKindFalseTest(){ GoFish goFish = new GoFish(user); for (int i = 0; i < 3; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); } - PlayingValue actual = goFish.getDealer().fourOfKindValue(); + PlayingValue actual = goFish.getCompPlayer().fourOfKindValue(); PlayingValue expected = null; Assert.assertEquals(expected, actual); @@ -80,13 +80,13 @@ public void hasFourOfKindFalseTest(){ public void discardFourOfKindTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - GoFish.GoFishPlayer dealer = goFish.getDealer(); + GoFish.GoFishPlayer dealer = goFish.getCompPlayer(); for (int i = 0; i < 4; i++) { dealer.getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); } for (int i = 0; i < 3; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); } Assert.assertEquals(4, (int)dealer.checkIfHandHasValue(PlayingValue.KING)); diff --git a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java index 53ccbd76..03202148 100644 --- a/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java +++ b/src/test/java/io/zipcoder/casino/games/gofish/GoFishTest.java @@ -15,8 +15,8 @@ public void gameCreationAndGetterTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - Assert.assertEquals(user, goFish.getPlayer().getUser()); - Assert.assertEquals(goFish.getDealer().getUser().getName(), "Dealer"); + Assert.assertEquals(user, goFish.getHumanPlayer().getUser()); + Assert.assertEquals(goFish.getCompPlayer().getUser().getName(), "Dealer"); Assert.assertTrue(goFish.getDeck() instanceof PlayingDeck); } @@ -33,7 +33,7 @@ public void playerHandIsEmptyTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - Assert.assertTrue(goFish.lastPlayerHandEmpty(goFish.getPlayer())); + Assert.assertTrue(goFish.lastPlayerHandEmpty(goFish.getHumanPlayer())); } @Test @@ -41,10 +41,10 @@ public void askingSetsValueTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + goFish.getHumanPlayer().askForValue(goFish.getCompPlayer(), PlayingValue.QUEEN); PlayingValue expected = PlayingValue.QUEEN; - PlayingValue actual = goFish.getPlayer().getAskedValue(); + PlayingValue actual = goFish.getHumanPlayer().getAskedValue(); Assert.assertEquals(expected,actual); } @@ -54,10 +54,10 @@ public void nullAskedValueTest(){ User user = new User("Uncle Bob", 1000000d); GoFish goFish = new GoFish(user); - goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + goFish.getHumanPlayer().askForValue(goFish.getCompPlayer(), PlayingValue.QUEEN); - goFish.getPlayer().nullAskedValue(); - PlayingValue actual = goFish.getPlayer().getAskedValue(); + goFish.getHumanPlayer().nullAskedValue(); + PlayingValue actual = goFish.getHumanPlayer().getAskedValue(); Assert.assertNull(actual); } @@ -68,13 +68,13 @@ public void askingForValueTrueTest(){ GoFish goFish = new GoFish(user); for (int i = 0; i < 3; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.SPADE, PlayingValue.ACE)); } for (int i = 0; i < 2; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); } - Integer actual = goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.ACE); + Integer actual = goFish.getHumanPlayer().askForValue(goFish.getCompPlayer(), PlayingValue.ACE); Integer expected = 3; Assert.assertEquals(expected, actual); @@ -86,10 +86,10 @@ public void askingForValueFalseTest(){ GoFish goFish = new GoFish(user); for (int i = 0; i < 5; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); } - Integer actual = goFish.getPlayer().askForValue(goFish.getDealer(), PlayingValue.QUEEN); + Integer actual = goFish.getHumanPlayer().askForValue(goFish.getCompPlayer(), PlayingValue.QUEEN); Integer expected = 0; Assert.assertEquals(expected, actual); @@ -101,24 +101,34 @@ public void takeCardsTest(){ GoFish goFish = new GoFish(user); for (int i = 0; i < 5; i++) { - goFish.getDealer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); + goFish.getCompPlayer().getHand().addCard(new PlayingCard(PlayingSuit.CLUB, PlayingValue.KING)); } - int beforeDealer = goFish.getDealer().checkIfHandHasValue(PlayingValue.KING); - int beforePlayer = goFish.getPlayer().checkIfHandHasValue(PlayingValue.KING); + int beforeDealer = goFish.getCompPlayer().checkIfHandHasValue(PlayingValue.KING); + int beforePlayer = goFish.getHumanPlayer().checkIfHandHasValue(PlayingValue.KING); Assert.assertEquals(5, beforeDealer); Assert.assertEquals(0, beforePlayer); - goFish.getPlayer().takeCardsFromOther(goFish.getDealer(), PlayingValue.KING); + goFish.getHumanPlayer().takeCardsFromOther(goFish.getCompPlayer(), PlayingValue.KING); - int afterDealer = goFish.getDealer().checkIfHandHasValue(PlayingValue.KING); - int afterPlayer = goFish.getPlayer().checkIfHandHasValue(PlayingValue.KING); + int afterDealer = goFish.getCompPlayer().checkIfHandHasValue(PlayingValue.KING); + int afterPlayer = goFish.getHumanPlayer().checkIfHandHasValue(PlayingValue.KING); Assert.assertEquals(0, afterDealer); Assert.assertEquals(5, afterPlayer); } + @Test + public void dealInitialHandTest(){ + User user = new User("Uncle Bob", 1000000d); + GoFish goFish = new GoFish(user); + goFish.dealInitialHands(7); + + Assert.assertEquals(7, goFish.getHumanPlayer().getHand().getAllCards().size()); + Assert.assertEquals(7, goFish.getCompPlayer().getHand().getAllCards().size()); + Assert.assertEquals(((52-7)-7), goFish.getDeck().getAllCards().size()); + } } From 75b6b8e37ff8790dc547a6f21ff1968c7c44baa5 Mon Sep 17 00:00:00 2001 From: timothy Date: Sun, 26 Nov 2017 19:15:45 -0500 Subject: [PATCH 44/46] CasinoMenu Small Change --- src/main/java/io/zipcoder/casino/casino/CasinoMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java index 0936e2d2..55997374 100644 --- a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java @@ -19,7 +19,7 @@ public void selectOption(String userInput) { case EXIT: Casino.getInstance().exitCasino(); case CRAPS:{ - CrapsConsole craps = new CrapsConsole(/*PassedUserOptional*/); + CrapsConsole craps = new CrapsConsole(); craps.run(); break; } From 143889e4bc42ac1e0d99d5c1df865a434435e906 Mon Sep 17 00:00:00 2001 From: Pavel Date: Sun, 26 Nov 2017 19:40:04 -0500 Subject: [PATCH 45/46] "GoFish MVP" --- .../io/zipcoder/casino/games/gofish/GoFish.java | 10 +++++++--- .../io/zipcoder/casino/nuts_n_bolts/Input.java | 17 +++++++++++------ .../casino/nuts_n_bolts/cards/PlayingValue.java | 6 ++++++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java index 69282dee..2eff3f29 100644 --- a/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java +++ b/src/main/java/io/zipcoder/casino/games/gofish/GoFish.java @@ -74,9 +74,13 @@ private void playComputerTurn(GoFishPlayer compPlayer) { } private void compAskingForValue() { + PlayingValue value = null; + PlayingValue randomValue = null; do { - PlayingValue value = null; - value = getRandomPlayingValue(compPlayer); + do { + randomValue = getRandomPlayingValue(compPlayer); + } while (randomValue == value); + value = randomValue; System.out.println(compPlayer.getUser().getName()+" asks for "+value+"!"); if (compPlayer.askForValue(humanPlayer, value) > 0) { compPlayer.takeCardsFromOther(humanPlayer, value); @@ -130,8 +134,8 @@ private void tryAskingForValue() { } else { System.out.println("They didn't have any of those, Go Fish!"); PlayingCard drawnCard = humanPlayer.drawCard(); + System.out.println("You draw a "+drawnCard.toString()); if (drawnCard.getValue() == value) { - System.out.println("You draw a "+drawnCard.toString()); System.out.println("You asked for " + value + " and drew a card of that rank! You can ask for another card!"); if(humanPlayer.hand.isHandEmpty()){ winner = humanPlayer; diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java index 551443d7..c931ce18 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/Input.java @@ -45,14 +45,19 @@ public static PlayingValue getPlayingValue(String prompt){ String stringInput = ""; do { stringInput = getStringInput(prompt); - try { - value = PlayingValue.valueOf(stringInput.toUpperCase()); - return value; - } catch (IllegalArgumentException iae) { - System.out.println("Not a valid value."); - continue; + + for (PlayingValue pv : + PlayingValue.values()) { + if ((pv.getValue()).equalsIgnoreCase(stringInput)) { + value = pv; + } + } + if(value != null){ + break; } + System.out.println("Not a valid value."); } while (true); + return value; } } diff --git a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java index a884f9f5..d3b434d3 100644 --- a/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java +++ b/src/main/java/io/zipcoder/casino/nuts_n_bolts/cards/PlayingValue.java @@ -22,8 +22,14 @@ public enum PlayingValue { this.value = value; } + public String getValue() { + return value; + } + @Override public String toString(){ return value; } + + } From 508153284f88b049f7bf3ebd7e48863a15f246c3 Mon Sep 17 00:00:00 2001 From: timothy Date: Sun, 26 Nov 2017 19:59:24 -0500 Subject: [PATCH 46/46] Fixed minor issue with CasinoMenu --- src/main/java/io/zipcoder/casino/casino/CasinoMenu.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java index f2681f88..8bba209b 100644 --- a/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java +++ b/src/main/java/io/zipcoder/casino/casino/CasinoMenu.java @@ -1,6 +1,7 @@ package io.zipcoder.casino.casino; +import io.zipcoder.casino.games.craps.CrapsConsole; import io.zipcoder.casino.games.gofish.GoFishMenu; import io.zipcoder.casino.nuts_n_bolts.Menu;