diff --git a/pom.xml b/pom.xml index 088a4e2..a9094be 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.junit.jupiter junit-jupiter - RELEASE + 5.9.0 test @@ -36,4 +36,4 @@ UTF-8 - + \ No newline at end of file diff --git a/src/main/java/mau/mau/CardHandler.java b/src/main/java/mau/mau/CardHandler.java index 911c1b6..f49c4db 100644 --- a/src/main/java/mau/mau/CardHandler.java +++ b/src/main/java/mau/mau/CardHandler.java @@ -30,6 +30,7 @@ public class CardHandler { private void handleTwo(TurnTable turnTable) { drawCards(turnTable.getNextPlayer(), 2); + System.out.printf("%s was forced to draw 2 cards\n", turnTable.getNextPlayer().getName()); turnTable.skipNextPlayer(); } diff --git a/src/main/java/mau/mau/Dealer.java b/src/main/java/mau/mau/Dealer.java index eea373b..0c649da 100644 --- a/src/main/java/mau/mau/Dealer.java +++ b/src/main/java/mau/mau/Dealer.java @@ -7,7 +7,7 @@ import java.util.Collections; import java.util.List; public class Dealer { - private Deck deck; + private final Deck deck; public Dealer(Deck deck) { this.deck = deck; diff --git a/src/main/java/mau/mau/Game.java b/src/main/java/mau/mau/Game.java index 3cbb625..785b781 100644 --- a/src/main/java/mau/mau/Game.java +++ b/src/main/java/mau/mau/Game.java @@ -12,11 +12,9 @@ public class Game { private Card currentCard; private final Deck deck = new Deck(); private Dealer dealer; - private CardHandler cardHandler = new CardHandler(); + private final CardHandler cardHandler = new CardHandler(); private TurnTable turnTable; private final List players = new ArrayList<>(); - private int playerTurn = 0; - private Boolean reverse = false; public Game() { setupGame(); @@ -50,7 +48,7 @@ public class Game { } System.out.println(deck.getDeck().size() + " cards left in deck"); } else { - if(Referee.isValidEndCard(currentCard, playedCard)) { + if( Referee.isAmazedByAmazingQuartet || Referee.isValidEndCard(currentCard, playedCard)) { playCard(playedCard); System.out.println(player.getName() + " won!"); } else { diff --git a/src/main/java/mau/mau/Referee.java b/src/main/java/mau/mau/Referee.java index fb2cccc..3223cf2 100644 --- a/src/main/java/mau/mau/Referee.java +++ b/src/main/java/mau/mau/Referee.java @@ -1,11 +1,14 @@ package mau.mau; import java.util.ArrayList; +import java.util.List; public class Referee { public static ArrayList allowedTypes = new ArrayList<>(); + public static boolean isAmazedByAmazingQuartet = false; + public static boolean isValidMove(Card currentCard, Card playedCard) { TYPENUM currentCardType = currentCard.getType(); @@ -35,6 +38,25 @@ public class Referee { return !isMauCard(playedCard) && isValidMove(currentCard, playedCard); } + public static boolean isValidQuartet(List hand){ + boolean result = false; + + for (Card card : hand) { + int count = 0; + for (Card card1 : hand) { + if (card.getValue() == card1.getValue()) { + count++; + } + } + if (count == 4) { + result = true; + Referee.isAmazedByAmazingQuartet = true; + break; + } + } + return result; + } + public static void setAllowedCards(TYPENUM type) { allowedTypes.add(type); allowedTypes.add(TYPENUM.JOKER); diff --git a/src/main/java/mau/mau/TYPENUM.java b/src/main/java/mau/mau/TYPENUM.java index 09f4111..6807d8a 100644 --- a/src/main/java/mau/mau/TYPENUM.java +++ b/src/main/java/mau/mau/TYPENUM.java @@ -1,5 +1,5 @@ package mau.mau; public enum TYPENUM { - SPADES, HEARTS, DIAMONDS, CLUBS, JOKER; + SPADES, HEARTS, DIAMONDS, CLUBS, JOKER } diff --git a/src/main/java/mau/mau/TurnTable.java b/src/main/java/mau/mau/TurnTable.java index 2feb3d2..75a9835 100644 --- a/src/main/java/mau/mau/TurnTable.java +++ b/src/main/java/mau/mau/TurnTable.java @@ -5,7 +5,7 @@ import mau.mau.players.Player; import java.util.List; public class TurnTable { - private List players; + private final List players; private int currentPlayerIndex; private int direction; diff --git a/src/main/java/mau/mau/players/Bot.java b/src/main/java/mau/mau/players/Bot.java index 27eed25..a8841e1 100644 --- a/src/main/java/mau/mau/players/Bot.java +++ b/src/main/java/mau/mau/players/Bot.java @@ -4,13 +4,12 @@ import mau.mau.*; import java.util.HashMap; import java.util.List; -import java.util.Scanner; public class Bot extends Player { private static int nameIndex = 0; - private static String JSON = "src/main/resources/languages/en.json"; - private static String JSON_KEY = "botnames"; + private static final String JSON = "src/main/resources/languages/en.json"; + private static final String JSON_KEY = "bot-names"; public Bot(Dealer dealer) { super(dealer); @@ -82,7 +81,7 @@ public class Bot extends Player { try { return JSONderulo.getJSONArrayFromJSONFile(JSON, JSON_KEY).getString(nameIndex++); } catch (Exception e) { - System.out.println("Error reading botnames from JSON file"); + System.out.println("Error reading bot-names from JSON file"); return "Koet " + nameIndex++; } } diff --git a/src/main/java/mau/mau/players/Human.java b/src/main/java/mau/mau/players/Human.java index 6756e50..d769f53 100644 --- a/src/main/java/mau/mau/players/Human.java +++ b/src/main/java/mau/mau/players/Human.java @@ -15,7 +15,6 @@ public class Human extends Player { public Card getPlay(Card currentCard) { System.out.println(); printHand(); - Scanner scanner = new Scanner(System.in); List hand = getHand(); @@ -31,6 +30,16 @@ public class Human extends Player { hand.add(card); return null; } + if (input.equals("quartet")) { + if (Referee.isValidQuartet(hand)) { + System.out.println("You played a quartet!"); + + hand.clear(); + return null; + } + System.out.println("You don't have a quartet!"); + continue; + } if (Utils.isNumeric(input)) { int cardIndex = Integer.parseInt(input); if (cardIndex < 0 || cardIndex > hand.size()) { @@ -103,7 +112,13 @@ public class Human extends Player { List hand = getHand(); for (int i = 0; i < hand.size(); i++) { Card card = hand.get(i); - System.out.println("(" + i + ") " + card); + if (i == 0) { + System.out.println("Your hand: "); + System.out.printf("(%s) %s ", i, card); + } else { + System.out.printf("| (%s) %s ", i, card); + } } + System.out.println(); } } diff --git a/src/main/java/mau/mau/players/Player.java b/src/main/java/mau/mau/players/Player.java index 5694c11..812a58f 100644 --- a/src/main/java/mau/mau/players/Player.java +++ b/src/main/java/mau/mau/players/Player.java @@ -8,9 +8,9 @@ import java.util.List; public abstract class Player { - private String name; + private final String name; private List hand; - private Dealer dealer; + private final Dealer dealer; public Player(Dealer dealer) { this.dealer = dealer; @@ -21,8 +21,8 @@ public abstract class Player { return hand; } - public List setHand(List hand) { - return this.hand = hand; + public void setHand(List hand) { + this.hand = hand; } public Boolean handIsEmpty() { diff --git a/src/main/resources/TODO.md b/src/main/resources/TODO.md index 607f424..57b6382 100644 --- a/src/main/resources/TODO.md +++ b/src/main/resources/TODO.md @@ -1,7 +1,7 @@ # TODO 1. Refactoring 2. Huisregels toevoegen - * Kwartet = win + * ~~Kwartet = win~~ * 69 mag tegelijk opgelegd worden * ~~Als er 2 spelers zijn, mag je 2x na een Ace~~ 3. ~~Spelers kunnen een naam kiezen~~ @@ -16,6 +16,7 @@ 1. ~~Teveel kaarten in deck na het opnieuw schudden~~ 2. Dezelfde type kaart als de boer mag alsnog opgelegd worden 3. Je kan als laatste kaart een pestkaart opleggen +4. Wanneer je een nieuwe type mag kiezen met een boer of joker, moet je 2 keer kiezen ### In een land hier ver, ver vandaan 1. UI diff --git a/src/main/resources/diagrams/SequenceDiagram.puml b/src/main/resources/diagrams/SequenceDiagram.puml index 6ad1794..d005741 100644 --- a/src/main/resources/diagrams/SequenceDiagram.puml +++ b/src/main/resources/diagrams/SequenceDiagram.puml @@ -20,7 +20,7 @@ loop until someone wins else draw User -> Player: draw() end - else bot's turn + else bots turn alt play Bot -> Player: play(card) Game <-- Player: playedCard diff --git a/src/main/resources/languages/en.json b/src/main/resources/languages/en.json index 0408084..d84a42c 100644 --- a/src/main/resources/languages/en.json +++ b/src/main/resources/languages/en.json @@ -1,5 +1,5 @@ { - "botnames": [ + "bot-names": [ "Jordan", "MaarKoet", "El Tigre" diff --git a/src/test/java/mau/mau/CardHandlerTest.java b/src/test/java/mau/mau/CardHandlerTest.java index bf43e97..04a1591 100644 --- a/src/test/java/mau/mau/CardHandlerTest.java +++ b/src/test/java/mau/mau/CardHandlerTest.java @@ -15,13 +15,12 @@ public class CardHandlerTest { private CardHandler sut; private TurnTable turnTable; private List players; - private Dealer dealer; private Bot bot1, bot2, bot3; @BeforeEach public void setUp() { //Arrange - dealer = new Dealer(new Deck()); + Dealer dealer = new Dealer(new Deck()); sut = new CardHandler(); players = new ArrayList<>(); turnTable = new TurnTable(players); diff --git a/src/test/java/mau/mau/DealerTest.java b/src/test/java/mau/mau/DealerTest.java index 49b8d37..72a90dc 100644 --- a/src/test/java/mau/mau/DealerTest.java +++ b/src/test/java/mau/mau/DealerTest.java @@ -1,8 +1,4 @@ package mau.mau; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertTrue; - public class DealerTest { } diff --git a/src/test/java/mau/mau/RefereeTest.java b/src/test/java/mau/mau/RefereeTest.java index bea2e6c..b6cdbd7 100644 --- a/src/test/java/mau/mau/RefereeTest.java +++ b/src/test/java/mau/mau/RefereeTest.java @@ -2,6 +2,8 @@ package mau.mau; import org.junit.jupiter.api.Test; +import java.util.List; + import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -97,7 +99,7 @@ public class RefereeTest { @Test - public void isAceOfSpadesValidEndcardTest(){ + public void isAceOfSpadesValidEndCardTest(){ //Arrange Card testCardOne = new Card(TYPENUM.SPADES, VALUENUM.ACE); Card testCurrentCard = new Card(TYPENUM.HEARTS, VALUENUM.ACE); @@ -110,7 +112,7 @@ public class RefereeTest { } @Test - public void isThreeOfHeartsValidEndcardTest(){ + public void isThreeOfHeartsValidEndCardTest(){ //Arrange Card testCardOne = new Card(TYPENUM.HEARTS, VALUENUM.THREE); Card testCurrentCard = new Card(TYPENUM.HEARTS, VALUENUM.ACE); @@ -121,4 +123,36 @@ public class RefereeTest { //Assert assertTrue(results); } + + @Test + public void isAFourOfEveryTypeAValidQuartetTest(){ + //Arrange + Card testCardOne = new Card(TYPENUM.HEARTS, VALUENUM.FOUR); + Card testCardTwo = new Card(TYPENUM.DIAMONDS, VALUENUM.FOUR); + Card testCardThree = new Card(TYPENUM.SPADES, VALUENUM.FOUR); + Card testCardFour = new Card(TYPENUM.CLUBS, VALUENUM.FOUR); + List hand = List.of(testCardOne, testCardTwo, testCardThree, testCardFour); + + //Act + boolean results = Referee.isValidQuartet(hand); + + //Assert + assertTrue(results); + } + + @Test + public void isTwoFoursAndTwoThreesAValidQuartetTest(){ + //Arrange + Card testCardOne = new Card(TYPENUM.HEARTS, VALUENUM.FOUR); + Card testCardTwo = new Card(TYPENUM.DIAMONDS, VALUENUM.FOUR); + Card testCardThree = new Card(TYPENUM.SPADES, VALUENUM.THREE); + Card testCardFour = new Card(TYPENUM.CLUBS, VALUENUM.THREE); + List hand = List.of(testCardOne, testCardTwo, testCardThree, testCardFour); + + //Act + boolean results = Referee.isValidQuartet(hand); + + //Assert + assertFalse(results); + } } diff --git a/src/test/java/mau/mau/players/BotTest.java b/src/test/java/mau/mau/players/BotTest.java index 3f7fddf..8a2f091 100644 --- a/src/test/java/mau/mau/players/BotTest.java +++ b/src/test/java/mau/mau/players/BotTest.java @@ -12,14 +12,12 @@ import static org.junit.jupiter.api.Assertions.*; public class BotTest { private Bot sut; - private Dealer dealer; - private Deck deck; private List hand; @BeforeEach public void setUp() { - deck = new Deck(); - dealer = new Dealer(deck); + Deck deck = new Deck(); + Dealer dealer = new Dealer(deck); sut = new Bot(dealer); hand = new ArrayList<>(); }