Initial playSplitHand implementation

This commit is contained in:
Dave Burke
2022-02-22 13:03:35 -06:00
parent 1592263258
commit 5aee1ecd09
3 changed files with 75 additions and 7 deletions

View File

@@ -157,6 +157,7 @@ public class Game {
} else if(player.getHand().size() == 2 && action.equalsIgnoreCase("/")) { // SPLIT } else if(player.getHand().size() == 2 && action.equalsIgnoreCase("/")) { // SPLIT
if(player.getHand().get(0).equals(player.getHand().get(1))){ if(player.getHand().get(0).equals(player.getHand().get(1))){
playSplit(player); playSplit(player);
return;
} else { } else {
userIo.println("SPLITTING NOT ALLOWED"); userIo.println("SPLITTING NOT ALLOWED");
action = userIo.prompt("PLAYER " + player.getPlayerNumber() + " "); action = userIo.prompt("PLAYER " + player.getPlayerNumber() + " ");
@@ -178,8 +179,75 @@ public class Game {
* @param player * @param player
*/ */
protected void playSplit(Player player) { protected void playSplit(Player player) {
// TODO refactor to avoid so much logic duplication
player.split(); player.split();
//TODO: Deal cards, and prompt user action // DEAL CARDS
Card card = deck.deal();
player.dealCard(card);
if(card.getValue() == 1 || card.getValue() == 8) {
userIo.println("FIRST HAND RECEIVES AN " + card.toString());
} else {
userIo.println("FIRST HAND RECEIVES A " + card.toString());
}
card = deck.deal();
player.dealSplitHandCard(card);
if(card.getValue() == 1 || card.getValue() == 8) {
userIo.println("SECOND HAND RECEIVES AN " + card.toString());
} else {
userIo.println("SECOND HAND RECEIVES A " + card.toString());
}
// Play hand 1
String action = userIo.prompt("HAND 1");
while(true){
if(action.equalsIgnoreCase("H")){ // HIT
Card c = deck.deal();
player.dealCard(c);
if(scoreHand(player.getHand()) > 21){
userIo.println("...BUSTED");
break;
}
action = userIo.prompt("RECEIVED A " + c.toString() + " HIT");
} else if(action.equalsIgnoreCase("S")){ // STAY
break;
} else if(player.getHand().size() == 2 && action.equalsIgnoreCase("D")) { // DOUBLE DOWN
player.setCurrentBet(player.getCurrentBet() * 2);
player.dealCard(deck.deal());
break;
} else {
if(player.getHand().size() > 2) {
action = userIo.prompt("TYPE H, OR S, PLEASE");
} else {
action = userIo.prompt("TYPE H, S OR D, PLEASE");
}
}
}
// Play hand 2
action = userIo.prompt("HAND 2");
while(true){
if(action.equalsIgnoreCase("H")){ // HIT
Card c = deck.deal();
player.dealSplitHandCard(card);
if(scoreHand(player.getSplitHand()) > 21){
userIo.println("...BUSTED");
break;
}
action = userIo.prompt("RECEIVED A " + c.toString() + " HIT");
} else if(action.equalsIgnoreCase("S")){ // STAY
break;
} else if(player.getSplitHand().size() == 2 && action.equalsIgnoreCase("D")) { // DOUBLE DOWN
player.setSplitBet(player.getSplitBet() * 2);
player.dealSplitHandCard(card);
break;
} else {
if(player.getSplitHand().size() > 2) {
action = userIo.prompt("TYPE H, OR S, PLEASE");
} else {
action = userIo.prompt("TYPE H, S OR D, PLEASE");
}
}
}
//TODO Uncomment playSplit tests and adjust as needed //TODO Uncomment playSplit tests and adjust as needed
} }

View File

@@ -89,6 +89,7 @@ public class Player {
* Removes first card from hand to adds it to split hand * Removes first card from hand to adds it to split hand
*/ */
public void split() { public void split() {
this.splitBet = this.currentBet;
splitHand.add(hand.pop()); splitHand.add(hand.pop());
} }

View File

@@ -321,7 +321,7 @@ public class GameTest {
assertEquals(0, result); assertEquals(0, result);
} }
//@Test @Test
@DisplayName("playSplit() should end on STAY") @DisplayName("playSplit() should end on STAY")
public void playSplitEndOnStay(){ public void playSplitEndOnStay(){
// Given // Given
@@ -336,10 +336,9 @@ public class GameTest {
// Then // Then
assertTrue(out.toString().contains("FIRST HAND RECEIVES")); assertTrue(out.toString().contains("FIRST HAND RECEIVES"));
assertTrue(out.toString().contains("SECOND HAND RECEIVES")); assertTrue(out.toString().contains("SECOND HAND RECEIVES"));
assertEquals("PLAYER 1 ? ", out.toString());
} }
//@Test @Test
@DisplayName("playSplit() should allow HIT until BUST") @DisplayName("playSplit() should allow HIT until BUST")
public void playSplitHitUntilBust() { public void playSplitHitUntilBust() {
// Given // Given
@@ -360,7 +359,7 @@ public class GameTest {
assertTrue(out.toString().contains("BUSTED")); assertTrue(out.toString().contains("BUSTED"));
} }
//@Test @Test
@DisplayName("playSplit should allow double down") @DisplayName("playSplit should allow double down")
public void playSplitDoubleDown(){ public void playSplitDoubleDown(){
// Given // Given
@@ -385,7 +384,7 @@ public class GameTest {
assertTrue(player.getSplitHand().size() == 3); assertTrue(player.getSplitHand().size() == 3);
} }
//@Test @Test
@DisplayName("playSplit should NOT allow re-splitting") @DisplayName("playSplit should NOT allow re-splitting")
public void playSplitDoubleDownLate(){ public void playSplitDoubleDownLate(){
// Given // Given
@@ -394,7 +393,7 @@ public class GameTest {
player.dealCard(new Card(1, Card.Suit.HEARTS)); player.dealCard(new Card(1, Card.Suit.HEARTS));
player.dealCard(new Card(1, Card.Suit.SPADES)); player.dealCard(new Card(1, Card.Suit.SPADES));
givenInput("\\\nS\nS\n", givenInput("/\nS\nS\n",
new Card(13, Card.Suit.HEARTS), new Card(13, Card.Suit.HEARTS),
new Card(13, Card.Suit.SPADES)); new Card(13, Card.Suit.SPADES));