From 5a1aa2d0bc978b193c5e3a5124450834f87e8919 Mon Sep 17 00:00:00 2001 From: Jordan Geurtsen <93926205+JordanGeurtsen@users.noreply.github.com> Date: Tue, 20 Sep 2022 12:22:59 +0200 Subject: [PATCH 1/4] Update pom.xml --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 450b01f..31d315b 100644 --- a/pom.xml +++ b/pom.xml @@ -26,8 +26,8 @@ - 11 - 11 + 16 + 16 UTF-8 From 4e50e3c295646b61b2b45025a6141fbad7b10acd Mon Sep 17 00:00:00 2001 From: DTieman Date: Tue, 20 Sep 2022 22:29:52 +0200 Subject: [PATCH 2/4] added json support and optimized -> broke -> fixed bot --- pom.xml | 5 ++ src/main/java/mau/mau/CardHandler.java | 5 ++ src/main/java/mau/mau/Game.java | 19 ++---- src/main/java/mau/mau/JSONderulo.java | 21 +++++++ src/main/java/mau/mau/Messages.java | 2 +- src/main/java/mau/mau/Referee.java | 4 +- src/main/java/mau/mau/players/Bot.java | 70 ++++++++++++---------- src/main/java/mau/mau/players/Human.java | 18 +++++- src/main/java/mau/mau/players/Player.java | 6 +- src/main/resources/languages/en.json | 7 +++ src/test/java/mau/mau/CardHandlerTest.java | 6 +- src/test/java/mau/mau/RefereeTest.java | 6 +- src/test/java/mau/mau/TurnTableTest.java | 6 +- src/test/java/mau/mau/players/BotTest.java | 2 +- 14 files changed, 116 insertions(+), 61 deletions(-) create mode 100644 src/main/java/mau/mau/JSONderulo.java create mode 100644 src/main/resources/languages/en.json diff --git a/pom.xml b/pom.xml index 07e8170..e1cfeca 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,11 @@ RELEASE test + + org.json + json + 20220320 + diff --git a/src/main/java/mau/mau/CardHandler.java b/src/main/java/mau/mau/CardHandler.java index 35e1091..911c1b6 100644 --- a/src/main/java/mau/mau/CardHandler.java +++ b/src/main/java/mau/mau/CardHandler.java @@ -38,11 +38,13 @@ public class CardHandler { } private void handleEight(TurnTable turnTable) { + System.out.println("Eighty waity"); turnTable.skipNextPlayer(); } private void handleJack(TurnTable turnTable) { Referee.setAllowedCards(turnTable.getCurrentPlayer().getTypeChoice()); + System.out.printf("%s chose %s\n", turnTable.getCurrentPlayer().getName(), turnTable.getCurrentPlayer().getTypeChoice()); turnTable.nextPlayer(); } @@ -51,6 +53,7 @@ public class CardHandler { } private void handleAce(TurnTable turnTable) { + System.out.printf("%s spins everybody right round baby right round\n", turnTable.getCurrentPlayer().getName()); turnTable.reverseDirection(); turnTable.nextPlayer(); } @@ -58,7 +61,9 @@ public class CardHandler { private void handleJoker(TurnTable turnTable) { Player nextPlayer = turnTable.getNextPlayer(); drawCards(nextPlayer, 5); + System.out.printf("%s was forced to draw 5 cards\n", nextPlayer.getName()); Referee.setAllowedCards(nextPlayer.getTypeChoice()); + System.out.printf("%s chose %s\n", nextPlayer.getName(), nextPlayer.getTypeChoice()); turnTable.skipNextPlayer(); } diff --git a/src/main/java/mau/mau/Game.java b/src/main/java/mau/mau/Game.java index c4e3706..3cbb625 100644 --- a/src/main/java/mau/mau/Game.java +++ b/src/main/java/mau/mau/Game.java @@ -26,19 +26,10 @@ public class Game { private void setupGame() { System.out.println(ConsoleColors.RED_BOLD + Messages.WELCOME + ConsoleColors.RESET); dealer = new Dealer(deck); - Scanner scanner = new Scanner(System.in); - System.out.println(Messages.ASK_FOR_PLAYER_NAME); - String input = scanner.nextLine(); - if (input.equals("")) { - input = "Koet"; - System.out.println(Messages.BAD_PLAYER_NAME); - } - new Scanner(System.in).nextLine(); - Human human = new Human(input, dealer); - players.add(human); - players.add(new Bot("Jordan", dealer)); - players.add(new Bot("MaarKoet", dealer)); - players.add(new Bot("El Tigre", dealer)); + players.add(new Human(dealer)); + players.add(new Bot(dealer)); + players.add(new Bot(dealer)); + players.add(new Bot(dealer)); turnTable = new TurnTable(players); dealer.dealCards(players); currentCard = dealer.getInitialCard(); @@ -59,7 +50,7 @@ public class Game { } System.out.println(deck.getDeck().size() + " cards left in deck"); } else { - if(Referee.isValidEndCard(playedCard)) { + if(Referee.isValidEndCard(currentCard, playedCard)) { playCard(playedCard); System.out.println(player.getName() + " won!"); } else { diff --git a/src/main/java/mau/mau/JSONderulo.java b/src/main/java/mau/mau/JSONderulo.java new file mode 100644 index 0000000..d853828 --- /dev/null +++ b/src/main/java/mau/mau/JSONderulo.java @@ -0,0 +1,21 @@ +package mau.mau; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class JSONderulo { + + public static JSONObject parseJSONFile(String filename) throws JSONException, IOException { + String content = new String(Files.readAllBytes(Paths.get(filename))); + return new JSONObject(content); + } + + public static JSONArray getJSONArrayFromJSONFile(String filename, String key) throws JSONException, IOException { + return parseJSONFile(filename).getJSONArray(key); + } +} diff --git a/src/main/java/mau/mau/Messages.java b/src/main/java/mau/mau/Messages.java index 0042357..a1f74e0 100644 --- a/src/main/java/mau/mau/Messages.java +++ b/src/main/java/mau/mau/Messages.java @@ -7,7 +7,7 @@ public class Messages { public static final String WELCOME = "Welcome to Dutch Mau Mau!"; public static final String ASK_FOR_PLAYER_NAME = "What shall be thy name?"; - public static final String BAD_PLAYER_NAME = "What a pathetic response, thy shall be known as Koet"; + public static final String BAD_PLAYER_NAME = "What a pathetic response, thy shall be knoweth as Koet"; public static final String PLAYER_PLAYED_CARD = KEY_PLAYER_NAME + " played " + KEY_CARD; public static final String PLAYER_DRAW_CARDS = KEY_PLAYER_NAME + " drew " + KEY_NUMBER_OF_CARDS + " cards"; public static final String PLAYER_HAS_X_CARDS = KEY_PLAYER_NAME + " now has " + KEY_NUMBER_OF_CARDS + " cards"; diff --git a/src/main/java/mau/mau/Referee.java b/src/main/java/mau/mau/Referee.java index 43c5808..fb2cccc 100644 --- a/src/main/java/mau/mau/Referee.java +++ b/src/main/java/mau/mau/Referee.java @@ -31,8 +31,8 @@ public class Referee { }; } - public static boolean isValidEndCard(Card card) { - return !isMauCard(card); + public static boolean isValidEndCard(Card currentCard, Card playedCard) { + return !isMauCard(playedCard) && isValidMove(currentCard, playedCard); } public static void setAllowedCards(TYPENUM type) { diff --git a/src/main/java/mau/mau/players/Bot.java b/src/main/java/mau/mau/players/Bot.java index 6015c8c..27eed25 100644 --- a/src/main/java/mau/mau/players/Bot.java +++ b/src/main/java/mau/mau/players/Bot.java @@ -8,43 +8,42 @@ import java.util.Scanner; public class Bot extends Player { - public Bot(String name, Dealer dealer) { - super(name, dealer); + private static int nameIndex = 0; + private static String JSON = "src/main/resources/languages/en.json"; + private static String JSON_KEY = "botnames"; + + public Bot(Dealer dealer) { + super(dealer); } @Override public Card getPlay(Card currentCard) { List hand = getHand(); - if (hand.size() == 1 && Referee.isValidEndCard(hand.get(0)) && Referee.isValidMove(hand.get(0), currentCard)) { - Card card = hand.get(0); - System.out.println(getName() + " played " + card); - hand.remove(0); - System.out.println(getName() + " now has " + hand.size() + " cards"); - return card; - } else if (hand.size() == 1) { - hand.add(drawCard()); - System.out.println(getName() + " drew a card"); - System.out.println(getName() + " now has " + hand.size() + " cards"); - return null; - } - - for (Card card : hand) { - if (Referee.allowedTypes.isEmpty()) { - if (Referee.isValidMove(card, currentCard)) { - System.out.println(getName() + " played " + card); - hand.remove(card); - System.out.println(getName() + " now has " + hand.size() + " cards"); - return card; - } - } else { - if (Referee.allowedTypes.contains(card.getType())) { - Referee.allowedTypes.clear(); - System.out.println(getName() + " played " + card); - hand.remove(card); - System.out.println(getName() + " now has " + hand.size() + " cards"); - return card; + if (getHandSize() > 1){ + for (Card card : hand) { + if (!Referee.allowedTypes.isEmpty()) { + if (Referee.allowedTypes.contains(card.getType())) { + Referee.allowedTypes.clear(); + } else { + continue; + } + } else if (!Referee.isValidMove(card, currentCard)) { + continue; } + System.out.println(getName() + " played " + card); + hand.remove(card); + System.out.println(getName() + " now has " + getHandSize() + " cards"); + return card; + } + } else { + Card lastCard = hand.get(0); + if(Referee.isValidEndCard(currentCard, lastCard)){ + Card card = hand.get(0); + System.out.println(getName() + " played " + card); + hand.remove(0); + System.out.println(getName() + " now has " + getHandSize() + " cards"); + return card; } } hand.add(drawCard()); @@ -75,7 +74,16 @@ public class Bot extends Player { if (typeChoice == null || typeChoice == TYPENUM.JOKER) { typeChoice = TYPENUM.values()[(int) (Math.random() * 4)]; } - System.out.println(getName() + " chose " + typeChoice); return typeChoice; } + + @Override + public String askForName() { + try { + return JSONderulo.getJSONArrayFromJSONFile(JSON, JSON_KEY).getString(nameIndex++); + } catch (Exception e) { + System.out.println("Error reading botnames from JSON file"); + return "Koet " + nameIndex++; + } + } } \ No newline at end of file diff --git a/src/main/java/mau/mau/players/Human.java b/src/main/java/mau/mau/players/Human.java index 0e69151..6756e50 100644 --- a/src/main/java/mau/mau/players/Human.java +++ b/src/main/java/mau/mau/players/Human.java @@ -7,12 +7,13 @@ import java.util.Scanner; public class Human extends Player { - public Human(String name, Dealer dealer) { - super(name, dealer); + public Human(Dealer dealer) { + super(dealer); } @Override public Card getPlay(Card currentCard) { + System.out.println(); printHand(); Scanner scanner = new Scanner(System.in); @@ -85,6 +86,19 @@ public class Human extends Player { } } + @Override + public String askForName() { + Scanner scanner = new Scanner(System.in); + System.out.println(Messages.ASK_FOR_PLAYER_NAME); + String input = scanner.nextLine(); + if (input.equals("")) { + input = "Koet"; + System.out.println(Messages.BAD_PLAYER_NAME); + } + scanner.nextLine(); + return input; + } + private void printHand() { List hand = getHand(); for (int i = 0; i < hand.size(); i++) { diff --git a/src/main/java/mau/mau/players/Player.java b/src/main/java/mau/mau/players/Player.java index ca4f115..5694c11 100644 --- a/src/main/java/mau/mau/players/Player.java +++ b/src/main/java/mau/mau/players/Player.java @@ -12,9 +12,9 @@ public abstract class Player { private List hand; private Dealer dealer; - public Player(String name, Dealer dealer) { - this.name = name; + public Player(Dealer dealer) { this.dealer = dealer; + name = askForName(); } public List getHand() { @@ -54,4 +54,6 @@ public abstract class Player { public String getName() { return name; } + + public abstract String askForName(); } diff --git a/src/main/resources/languages/en.json b/src/main/resources/languages/en.json new file mode 100644 index 0000000..0408084 --- /dev/null +++ b/src/main/resources/languages/en.json @@ -0,0 +1,7 @@ +{ + "botnames": [ + "Jordan", + "MaarKoet", + "El Tigre" + ] +} \ No newline at end of file diff --git a/src/test/java/mau/mau/CardHandlerTest.java b/src/test/java/mau/mau/CardHandlerTest.java index be124c3..bf43e97 100644 --- a/src/test/java/mau/mau/CardHandlerTest.java +++ b/src/test/java/mau/mau/CardHandlerTest.java @@ -25,9 +25,9 @@ public class CardHandlerTest { sut = new CardHandler(); players = new ArrayList<>(); turnTable = new TurnTable(players); - bot1 = new Bot("Bot1", dealer); - bot2 = new Bot("Bot2", dealer); - bot3 = new Bot("Bot3", dealer); + bot1 = new Bot(dealer); + bot2 = new Bot(dealer); + bot3 = new Bot(dealer); } @Test diff --git a/src/test/java/mau/mau/RefereeTest.java b/src/test/java/mau/mau/RefereeTest.java index 466dbca..bea2e6c 100644 --- a/src/test/java/mau/mau/RefereeTest.java +++ b/src/test/java/mau/mau/RefereeTest.java @@ -100,9 +100,10 @@ public class RefereeTest { public void isAceOfSpadesValidEndcardTest(){ //Arrange Card testCardOne = new Card(TYPENUM.SPADES, VALUENUM.ACE); + Card testCurrentCard = new Card(TYPENUM.HEARTS, VALUENUM.ACE); //Act - boolean results = Referee.isValidEndCard(testCardOne); + boolean results = Referee.isValidEndCard(testCurrentCard, testCardOne); //Assert assertFalse(results); @@ -112,9 +113,10 @@ public class RefereeTest { public void isThreeOfHeartsValidEndcardTest(){ //Arrange Card testCardOne = new Card(TYPENUM.HEARTS, VALUENUM.THREE); + Card testCurrentCard = new Card(TYPENUM.HEARTS, VALUENUM.ACE); //Act - boolean results = Referee.isValidEndCard(testCardOne); + boolean results = Referee.isValidEndCard(testCurrentCard, testCardOne); //Assert assertTrue(results); diff --git a/src/test/java/mau/mau/TurnTableTest.java b/src/test/java/mau/mau/TurnTableTest.java index eaa17fb..22f002f 100644 --- a/src/test/java/mau/mau/TurnTableTest.java +++ b/src/test/java/mau/mau/TurnTableTest.java @@ -18,9 +18,9 @@ public class TurnTableTest { public void setUp() { Dealer dealer = new Dealer(new Deck()); players = new ArrayList<>(); - bot1 = new Bot("Bot1", dealer); - bot2 = new Bot("Bot2", dealer); - bot3 = new Bot("Bot3", dealer); + bot1 = new Bot(dealer); + bot2 = new Bot(dealer); + bot3 = new Bot(dealer); } @Test diff --git a/src/test/java/mau/mau/players/BotTest.java b/src/test/java/mau/mau/players/BotTest.java index 7701fab..3f7fddf 100644 --- a/src/test/java/mau/mau/players/BotTest.java +++ b/src/test/java/mau/mau/players/BotTest.java @@ -20,7 +20,7 @@ public class BotTest { public void setUp() { deck = new Deck(); dealer = new Dealer(deck); - sut = new Bot("Koet", dealer); + sut = new Bot(dealer); hand = new ArrayList<>(); } From e0f0f80c0416e1b788546600a3d904c8d39050f1 Mon Sep 17 00:00:00 2001 From: DTieman Date: Tue, 20 Sep 2022 22:36:41 +0200 Subject: [PATCH 3/4] nice --- src/main/resources/TODO.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/TODO.md b/src/main/resources/TODO.md index 534ab43..55db2e8 100644 --- a/src/main/resources/TODO.md +++ b/src/main/resources/TODO.md @@ -4,9 +4,10 @@ * Kwartet = win * 69 mag tegelijk opgelegd worden * ~~Als er 2 spelers zijn, mag je 2x na een Ace~~ -3. Spelers kunnen een naam kiezen +3. ~~Spelers kunnen een naam kiezen~~ 4. ~~Als je laatste kaart een pestkaart is moet je 5 kaarten pakken als je hem probeert op te leggen~~ 5. 100% test coverage + * ~~69% test coverage~~ 6. Redesign terminal interface * ~~Kaarten laten zien als er een joker op je gedropt is~~ From 1f82f88193c3de7413392fb5778268077139b64e Mon Sep 17 00:00:00 2001 From: Jordan Geurtsen <93926205+JordanGeurtsen@users.noreply.github.com> Date: Tue, 20 Sep 2022 22:56:40 +0200 Subject: [PATCH 4/4] Update TODO.md --- src/main/resources/TODO.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/TODO.md b/src/main/resources/TODO.md index 55db2e8..607f424 100644 --- a/src/main/resources/TODO.md +++ b/src/main/resources/TODO.md @@ -10,6 +10,7 @@ * ~~69% test coverage~~ 6. Redesign terminal interface * ~~Kaarten laten zien als er een joker op je gedropt is~~ + * ~~Zorgen dat de hand van de speler horizontaal wordt geprint ipv verticaal~~ ## Known Bugs 1. ~~Teveel kaarten in deck na het opnieuw schudden~~ @@ -24,4 +25,4 @@ 2. Multiplayer (websockets?) 3. Game settings 4. Betere bot - * Hyper futuristic AI system \ No newline at end of file + * Hyper futuristic AI system