diff --git a/pom.xml b/pom.xml
index 4160c25..01b4791 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,14 @@
com.tman
MauMau
1.0-SNAPSHOT
+
+
+ org.junit.jupiter
+ junit-jupiter
+ RELEASE
+ test
+
+
17
diff --git a/src/main/java/mau/mau/Card.java b/src/main/java/mau/mau/Card.java
index da21066..0447ac5 100644
--- a/src/main/java/mau/mau/Card.java
+++ b/src/main/java/mau/mau/Card.java
@@ -17,4 +17,11 @@ public class Card {
public VALUENUM getValue() {
return CARD_VALUE;
}
+
+ public String toString() {
+ if (CARD_TYPE == TYPENUM.JOKER){
+ return CARD_TYPE.name();
+ }
+ return CARD_TYPE.name() + " " + CARD_VALUE.name();
+ }
}
diff --git a/src/main/java/mau/mau/Dealer.java b/src/main/java/mau/mau/Dealer.java
index 5504550..a344826 100644
--- a/src/main/java/mau/mau/Dealer.java
+++ b/src/main/java/mau/mau/Dealer.java
@@ -26,7 +26,7 @@ public class Dealer {
public List getHand() {
List deck = this.deck.getDeck();
List hand = new ArrayList<>();
- for (int i = 0; i < 7; i++) {
+ for (int i = 0; i < 8; i++) {
hand.add(deck.get(i));
deck.remove(i);
}
@@ -42,6 +42,7 @@ public class Dealer {
public Card getInitialCard() {
List deck = this.deck.getDeck();
Card card = deck.get(0);
+ deck.remove(0);
this.deck.addUsedCard(card);
return card;
}
diff --git a/src/main/java/mau/mau/Game.java b/src/main/java/mau/mau/Game.java
index 50d59d7..59807eb 100644
--- a/src/main/java/mau/mau/Game.java
+++ b/src/main/java/mau/mau/Game.java
@@ -5,6 +5,7 @@ import mau.mau.players.Human;
import mau.mau.players.Player;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
public class Game {
@@ -13,7 +14,8 @@ public class Game {
private Dealer dealer;
private Human human;
private Referee referee = new Referee();
- private List players = new ArrayList<>();
+ private List turnOrder = new ArrayList<>();
+ private Boolean skipNextPlayer = false;
public Game() {
setupGame();
@@ -23,28 +25,41 @@ public class Game {
private void setupGame() {
dealer = new Dealer(deck);
human = new Human(dealer);
- players.add(human);
- players.add(new Bot(dealer));
- dealer.dealCards(players);
+ turnOrder.add(human);
+ turnOrder.add(new Bot(dealer));
+ dealer.dealCards(turnOrder);
currentCard = dealer.getInitialCard();
}
private void playGame() {
- while (!human.handIsEmpty()) {
- if (players.size() == 1) {
- System.out.println("Game has ended");
- break;
- }
- for (Player player : players) {
+ while (turnOrder.size() > 1) {
+ for (Player player : turnOrder) {
+ if (skipNextPlayer) {
+ skipNextPlayer = false;
+ continue;
+ }
System.out.println("Current card is " + currentCard.getType() + " " + currentCard.getValue());
Card card = player.getPlay(currentCard);
if (card != null) {
playCard(card);
}
+ if (player.getHandSize() == 0) {
+ if (Referee.isValidEndCard(currentCard)) {
+ System.out.println(player.getClass().getSimpleName() + " won!");
+ turnOrder.remove(player);
+ break;
+ } else {
+ System.out.println("You can't end with this card!");
+ player.addCardToHand(card);
+ }
+ turnOrder.remove(player);
+ break;
+ }
}
System.out.println(deck.getDeck().size() + " cards left in deck");
- players.removeIf(Player::handIsEmpty);
+ turnOrder.removeIf(Player::handIsEmpty);
}
+ System.out.println("Game has ended");
}
public void playCard(Card card) {
@@ -52,31 +67,39 @@ public class Game {
deck.addUsedCard(card);
}
- public void handleSpecialCard(Card card) {
+ public void handleTurn(Card card) {
TYPENUM cardType = card.getType();
VALUENUM cardValue = card.getValue();
if (cardType == TYPENUM.JOKER) {
// Draw 5 cards
+ // Choose color
return;
}
switch (cardValue) {
case TWO:
- // Draw 2 cards
- break;
+ handleTwo();
+ return;
case SEVEN:
case KING:
// Keep turn
- break;
+ return;
case EIGHT:
// Skip next player
- break;
+ return;
case JACK:
// Draw 5 cards
// Change card type
- break;
+ return;
case ACE:
- // Change direction
- break;
+ Collections.reverse(turnOrder);
+ return;
}
}
+
+ private void handleTwo(){
+ Player player = turnOrder.get(1);
+ player.addCardToHand(dealer.drawCard());
+ player.addCardToHand(dealer.drawCard());
+ skipNextPlayer = true;
+ }
}
diff --git a/src/main/java/mau/mau/Referee.java b/src/main/java/mau/mau/Referee.java
index c143916..5b34dc6 100644
--- a/src/main/java/mau/mau/Referee.java
+++ b/src/main/java/mau/mau/Referee.java
@@ -1,6 +1,7 @@
package mau.mau;
public class Referee {
+
public static boolean isValidMove(Card currentCard, Card playedCard) {
TYPENUM currentCardType = currentCard.getType();
VALUENUM currentCardValue = currentCard.getValue();
@@ -11,4 +12,20 @@ public class Referee {
|| playedCardType == currentCardType
|| playedCardValue == currentCardValue;
}
-}
+
+ public static boolean isMauCard(Card card) {
+ TYPENUM cardType = card.getType();
+ VALUENUM cardValue = card.getValue();
+ if (cardType == TYPENUM.JOKER) {
+ return true;
+ }
+ return switch (cardValue) {
+ case TWO, SEVEN, EIGHT, JACK, KING, ACE -> true;
+ default -> false;
+ };
+ }
+
+ public static boolean isValidEndCard(Card card) {
+ return !isMauCard(card);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/mau/mau/players/Player.java b/src/main/java/mau/mau/players/Player.java
index 08ffb12..61aa441 100644
--- a/src/main/java/mau/mau/players/Player.java
+++ b/src/main/java/mau/mau/players/Player.java
@@ -11,10 +11,9 @@ public abstract class Player {
public Player(Dealer dealer) {
this.dealer = dealer;
- this.hand = dealer.getHand();
}
- protected List getHand() {
+ public List getHand() {
return hand;
}
diff --git a/src/test/java/mau/mau/CardTest.java b/src/test/java/mau/mau/CardTest.java
index 60b30f1..d4b946a 100644
--- a/src/test/java/mau/mau/CardTest.java
+++ b/src/test/java/mau/mau/CardTest.java
@@ -1,2 +1,32 @@
-package mau.mau;public class CardTest {
+package mau.mau;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class CardTest {
+
+ @Test
+ public void isAceOfSpadesPrintedCorrectlyTest() {
+ //Assign
+ Card card = new Card(TYPENUM.SPADES, VALUENUM.ACE);
+
+ //Act
+ String result = card.toString();
+
+ //Assert
+ assertEquals("SPADES ACE", result);
+ }
+
+ @Test
+ public void isJokerPrintedCorrectlyTest() {
+ //Assign
+ Card card = new Card(TYPENUM.JOKER, VALUENUM.TWO);
+
+ //Act
+ String result = card.toString();
+
+ //Assert
+ assertEquals("JOKER", result);
+ }
}
diff --git a/src/test/java/mau/mau/DealerTest.java b/src/test/java/mau/mau/DealerTest.java
index 3620993..b1f30d8 100644
--- a/src/test/java/mau/mau/DealerTest.java
+++ b/src/test/java/mau/mau/DealerTest.java
@@ -1,2 +1,21 @@
-package mau.mau;public class DealerTest {
+package mau.mau;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class DealerTest {
+
+ @Test
+ public void isDealerAGoodShufflerTest() {
+ //Assign
+ Deck deck = new Deck();
+ Dealer sut = new Dealer(deck);
+
+ //Act
+// sut.shuffleDeck();
+
+ //Assert
+ assertTrue(false);
+ }
}
diff --git a/src/test/java/mau/mau/DeckTest.java b/src/test/java/mau/mau/DeckTest.java
index b362835..250c9da 100644
--- a/src/test/java/mau/mau/DeckTest.java
+++ b/src/test/java/mau/mau/DeckTest.java
@@ -1,2 +1,4 @@
-package mau.mau;public class DeckTest {
+package mau.mau;
+
+public class DeckTest {
}
diff --git a/src/test/java/tested.md b/src/test/java/tested.md
index e69de29..e05007c 100644
--- a/src/test/java/tested.md
+++ b/src/test/java/tested.md
@@ -0,0 +1,17 @@
+Bot
+
+Human
+
+Player
+
+~~Card~~
+
+Dealer
+
+Deck
+
+Game
+
+~~Referee~~
+
+Utils
\ No newline at end of file