diff --git a/pom.xml b/pom.xml
index dcc430e..e1cfeca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,4 +35,5 @@
16
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 35e1091..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();
}
@@ -38,11 +39,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 +54,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 +62,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 0be160c..785b781 100644
--- a/src/main/java/mau/mau/Game.java
+++ b/src/main/java/mau/mau/Game.java
@@ -24,19 +24,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();
@@ -57,7 +48,7 @@ public class Game {
}
System.out.println(deck.getDeck().size() + " cards left in deck");
} else {
- if( Referee.isAmazedByAmazingQuartet || Referee.isValidEndCard(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/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 ec28d91..3223cf2 100644
--- a/src/main/java/mau/mau/Referee.java
+++ b/src/main/java/mau/mau/Referee.java
@@ -34,8 +34,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 boolean isValidQuartet(List hand){
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 0cf36c2..d769f53 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);
@@ -94,6 +95,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/TODO.md b/src/main/resources/TODO.md
index 19b1704..57b6382 100644
--- a/src/main/resources/TODO.md
+++ b/src/main/resources/TODO.md
@@ -4,16 +4,19 @@
* ~~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~~
+ * ~~Zorgen dat de hand van de speler horizontaal wordt geprint ipv verticaal~~
## Known Bugs
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
@@ -23,4 +26,4 @@
2. Multiplayer (websockets?)
3. Game settings
4. Betere bot
- * Hyper futuristic AI system
\ No newline at end of file
+ * Hyper futuristic AI system
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 c4046be..29b1845 100644
--- a/src/test/java/mau/mau/RefereeTest.java
+++ b/src/test/java/mau/mau/RefereeTest.java
@@ -102,9 +102,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);
@@ -114,9 +115,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<>();
}