Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Untitled Diagram.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" version="7.7.1" editor="www.draw.io" type="github"><diagram id="bc9e92a8-3742-bf36-3713-459e1e3c7633" name="Page-1">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</diagram></mxfile>
85 changes: 85 additions & 0 deletions casino.uml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<Diagram>
<ID>JAVA</ID>
<OriginalElement>io.zipcoder.casino</OriginalElement>
<nodes>
<node x="240.0" y="1503.0">io.zipcoder.casino.Console</node>
<node x="158.0" y="1106.0">io.zipcoder.casino.CardPlayer</node>
<node x="776.0" y="1503.0">io.zipcoder.casino.Casino</node>
<node x="603.0" y="872.0">io.zipcoder.casino.Hand</node>
<node x="915.0" y="872.0">io.zipcoder.casino.Deck</node>
<node x="542.0" y="1503.0">io.zipcoder.casino.CardTest</node>
<node x="327.0" y="423.0">io.zipcoder.casino.BlackJack</node>
<node x="470.25" y="0.0">io.zipcoder.casino.Games</node>
<node x="285.0" y="1351.5">io.zipcoder.casino.GoFishPlayer</node>
<node x="975.0" y="1503.0">io.zipcoder.casino.CasinoTest</node>
<node x="0.0" y="1503.0">io.zipcoder.casino.DeckTest</node>
<node x="97.25" y="123.0">io.zipcoder.casino.CardGames</node>
<node x="529.0" y="178.5">io.zipcoder.casino.Gamble</node>
<node x="1177.0" y="872.0">io.zipcoder.casino.Card</node>
<node x="185.0" y="872.0">io.zipcoder.casino.Player</node>
<node x="699.0" y="533.5">io.zipcoder.casino.Craps</node>
<node x="0.0" y="1296.0">io.zipcoder.casino.BlackJackGambler</node>
<node x="0.0" y="555.5">io.zipcoder.casino.GoFish</node>
</nodes>
<notes />
<edges>
<edge source="io.zipcoder.casino.Craps" target="io.zipcoder.casino.Games">
<point x="78.25" y="-91.5" />
<point x="933.75" y="98.0" />
<point x="622.5" y="98.0" />
<point x="50.75" y="36.5" />
</edge>
<edge source="io.zipcoder.casino.GoFishPlayer" target="io.zipcoder.casino.CardPlayer">
<point x="0.0" y="-25.5" />
<point x="421.5" y="1271.0" />
<point x="336.5" y="1271.0" />
<point x="59.5" y="70.0" />
</edge>
<edge source="io.zipcoder.casino.CardGames" target="io.zipcoder.casino.Games">
<point x="0.0" y="-125.0" />
<point x="209.75" y="98.0" />
<point x="521.0" y="98.0" />
<point x="-50.75" y="36.5" />
</edge>
<edge source="io.zipcoder.casino.CardPlayer" target="io.zipcoder.casino.Player">
<point x="0.0" y="-70.0" />
<point x="0.0" y="92.0" />
</edge>
<edge source="io.zipcoder.casino.BlackJack" target="io.zipcoder.casino.CardGames">
<point x="-88.0" y="-202.0" />
<point x="415.0" y="398.0" />
<point x="266.0" y="398.0" />
<point x="56.25" y="125.0" />
</edge>
<edge source="io.zipcoder.casino.BlackJackGambler" target="io.zipcoder.casino.CardPlayer">
<point x="0.0" y="-81.0" />
<point x="132.5" y="1271.0" />
<point x="217.5" y="1271.0" />
<point x="-59.5" y="70.0" />
</edge>
<edge source="io.zipcoder.casino.Craps" target="io.zipcoder.casino.Gamble">
<point x="-78.25" y="-91.5" />
<point x="777.25" y="398.0" />
<point x="715.0" y="398.0" />
<point x="62.0" y="69.5" />
</edge>
<edge source="io.zipcoder.casino.BlackJack" target="io.zipcoder.casino.Gamble">
<point x="88.0" y="-202.0" />
<point x="-62.0" y="69.5" />
</edge>
<edge source="io.zipcoder.casino.GoFish" target="io.zipcoder.casino.CardGames">
<point x="0.0" y="-69.5" />
<point x="-56.25" y="125.0" />
</edge>
</edges>
<settings layout="Hierarchic Group" zoom="0.4183634381709904" x="1185.9227114566602" y="584.5280723747564" />
<SelectedNodes />
<Categories>
<Category>Fields</Category>
<Category>Methods</Category>
</Categories>
<SCOPE>All</SCOPE>
<VISIBILITY>private</VISIBILITY>
</Diagram>

12 changes: 12 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@
<groupId>io.zipcoder</groupId>
<artifactId>casino</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
Expand Down
170 changes: 170 additions & 0 deletions src/main/java/io/zipcoder/casino/BlackJack.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package io.zipcoder.casino;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class BlackJack extends CardGames<BlackJackGambler> implements Gamble<BlackJackGambler> {
private Dealer dealer;
private String playAgain = "";
private Map<BlackJackGambler, Integer> playerWagers = new HashMap<BlackJackGambler, Integer>();

public void play(BlackJackGambler user) {
gameSetUp(user);
do {
if (getRemainingDeckCards() / getPlayers().size() < 52)
loadDecks(8);
System.out.println(user.getName() + " Chips: " + user.getChipCount() + "\n");
for (BlackJackGambler player : getPlayers()) {
Integer bet = takeBet(player);
playerBet(player, bet);
}

addPlayer(dealer);
dealCards(2);
removePlayer(dealer);

System.out.println(dealer.showOneCard());
for (BlackJackGambler player : getPlayers())
System.out.println(player.showHand());

for (BlackJackGambler player : getPlayers())
hitOrStay(player);

System.out.println("Dealers Cards: " + dealer.showHand() + "\n");

hitOrStay(dealer);
checkForWinners();

if (user.getChipCount() == 0) {
System.out.println("Your are out of chips, returning to lobby");
playAgain = "no";
} else
playAgain = Console.getStringInput("Play again?");

resetHands();
resetBets();
removeZeroChipPlayers();
} while (!"no".equalsIgnoreCase(playAgain));

}

@Override
public void gameSetUp(BlackJackGambler user) {
dealer = new Dealer();
addPlayer(user);
loadDecks(8);
int numberOfPlayers = new Random().nextInt(6) + 1;
addAIPlayers(numberOfPlayers);
resetBets();
}

@Override
public void addAIPlayers(int playersToAdd) {
for (int i = 1; i <= playersToAdd; i++)
getPlayers().add(new BlackJackGambler(new Player("Computer" + i, 0, false), 3000));
}

@Override
public Integer takeBet(BlackJackGambler player) {
Integer bet;
if (player.isPerson()) {
bet = Console.getIntegerInput("Place your bet");
bet = player.placeBet(bet);
} else bet = CompPlay.makeBet(player);

return bet;
}

private void playerBet(BlackJackGambler player, Integer amount) {
playerWagers.put(player, amount);
}

private void hitOrStay(BlackJackGambler player) {
String userChoice = "";

while (!userChoice.equalsIgnoreCase("Stay") && !isBust(player)) {
if (player.isPerson())
userChoice = Console.getStringInput("Hit or Stay?");
else userChoice = CompPlay.hitOrStay(player);

if (userChoice.equalsIgnoreCase("Hit")) {
System.out.println(player.getName() + ": Hit");
Card card = getDeckCard();
player.addCardToHand(card);
System.out.println(card + " New Total: " + player.getHandTotal() + "\n");
} else if (userChoice.equalsIgnoreCase("Stay"))
System.out.println(player.getName() + ": Stay\n");
}

if (isBust(player))
System.out.println(player.getName() + " went over: " + player.getHand() + "\n");
}

private boolean isBust(BlackJackGambler player) {
if (player.getHandTotal() > 21) {
return true;
}
return false;
}

private void checkForWinners() {
for (BlackJackGambler player : getPlayers()) {
int multiplier = 0;
if (!isBust(dealer) && !isBust(player))
multiplier = payoutMultiplier(player);
else if (!isBust(player))
multiplier = 2;
payoutWinnings(player, multiplier);
}
}

private int payoutMultiplier(BlackJackGambler player) {
if (player.getHandTotal() > dealer.getHandTotal()) {
return 2;
} else if (player.getHandTotal() == dealer.getHandTotal())
return 1;
return 0;
}

private boolean checkForBlackJack(BlackJackGambler player) {
if (player.getHandTotal() == 21 && player.getHand().size() == 2)
return true;
return false;
}

private void payoutWinnings(BlackJackGambler player, double multiplier) {
if (checkForBlackJack(player))
multiplier += 0.5;
Integer winnings = (int) (playerWagers.get(player).doubleValue() * multiplier);
System.out.println(player.showHand());
System.out.println(" Won: " + winnings + " chips\n");
player.addChips(winnings);
}

private void removeZeroChipPlayers() {
ArrayList<BlackJackGambler> playersToRemove = new ArrayList<>();
for (BlackJackGambler player : getPlayers())
if (player.getChipCount() == 0 && !player.isPerson()) {
System.out.println(player.getName() + " ran out of chips, now leaving.");
playersToRemove.add(player);
}
getPlayers().removeAll(playersToRemove);
}


private void resetHands() {
for (BlackJackGambler player : getPlayers())
player.clearHand();
dealer.resetHand();
}

@Override
public void resetBets() {
for (BlackJackGambler player : getPlayers())
playerWagers.put(player, 0);
}

}
69 changes: 69 additions & 0 deletions src/main/java/io/zipcoder/casino/BlackJackGambler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package io.zipcoder.casino;

import java.util.ArrayList;

public class BlackJackGambler extends CardPlayer {

private Integer chipCount;

public BlackJackGambler(Player player, Integer chipCount) {
super(player);
this.chipCount = chipCount;
}

public Integer getChipCount() {
return chipCount;
}

public void addChips(Integer amount) {
chipCount += amount;
}

public Integer tradeInChips() {
Integer chips = chipCount;
chipCount = 0;
return chips;
}

public Integer placeBet(Integer amount) {
if (wagerAvailable(amount))
chipCount -= amount;
else {
amount = chipCount;
chipCount = 0;
}

return amount;
}

private boolean wagerAvailable(Integer bet) {
if (bet > chipCount)
return false;
else return true;
}

public int getHandTotal() {
int total = 0;
String card;
int aces = 0;
for (Card c : getHand()) {
card = c.getRank().toString();
if ("JACK".equals(card) || "QUEEN".equals(card) || "KING".equals(card))
total += 10;
else if ("ACE".equals(card.toString())) {
total += 11;
aces++;
} else total += c.getValue();
}
while (total > 21 && aces != 0) {
total -= 10;
aces--;
}
return total;
}

public String showHand() {
return getName() + ": " + handToString() + " Total: " + getHandTotal();
}

}
47 changes: 47 additions & 0 deletions src/main/java/io/zipcoder/casino/Card.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package io.zipcoder.casino;


public class Card {

enum Rank {

JOKER, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE;

public int getValue() {
return ordinal() + 1;
}
}

enum Suit {
CLUBS((char)'\u2663'), SPADES((char)'\u2660'), HEARTS((char)'\u2665'), DIAMONDS((char)'\u2666');

private char val;
Suit(char val){
this.val=val;
}
}

private Rank rank;
private Suit suit;

public Card(Rank v, Suit s) {
this.rank = v;
this.suit = s;
}

public int getValue() {
return rank.getValue();
}

public Rank getRank() {
return rank;
}

public Suit getSuit() {
return suit;
}

public String toString() {
return rank + " of " + suit.val;
}
}
Loading