Compare commits

...

5 Commits

Author SHA1 Message Date
316339d733 code cleanup 2024-06-19 11:45:29 +02:00
e58808bbbc fixed bug with seven counter 2024-06-19 11:43:35 +02:00
094c17d16a KVA working 2024-06-19 01:58:53 +02:00
4b574c50e8 aufgabe 5 state pattern 2024-06-18 21:25:33 +00:00
2638ca09b6 refactored testing 2024-06-18 20:02:50 +00:00
60 changed files with 191 additions and 70 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -30,16 +30,16 @@ public enum Suit {
public String toString() {
switch (this) {
case HEARTS:
return "";
return "";
case DIAMONDS:
return "";
return "";
case CLUBS:
return "";
return "";
case SPADES:
return "";
return "";
default:
return "";

View File

@@ -1,18 +1,20 @@
package cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
/**
* Manages the actions and state transitions within a MauMau game.
*/
class ActionHandler {
public class ActionHandler {
private final MauMau game;
private Suit chosenSuit;
private int ctr7 = 0;
private GameState gameState;
private HandlerState handlerState;
private GameState gameState = GameState.GAME_INITIALIZED;
private HandlerState handlerState = new Initialized(this);
/**
* Constructs an ActionHandler for the specified MauMau game.
@@ -31,34 +33,40 @@ class ActionHandler {
this.handlerState = handlerState;
}
public HandlerState getHandlerState() {
return handlerState;
}
/**
* Adds the specified player to the game.
*
* @param player The player to be added to the game.
*/
void addPlayer(Player player) {
//TODO implement
handlerState.addPlayer(player);
}
/**
* Starts the game.
*/
void startGame() {
//TODO implement
handlerState.startGame();
}
/**
* Transitions the game state to GAME_OVER.
*/
void finishGame() {
//TODO implement
// handlerState.finishGame();
gameState = GameState.GAME_OVER;
handlerState = new Finished(this);
}
/**
* Transitions the game state to GAME_CANCELED.
*/
void cancelGame() {
//TODO implement
handlerState.cancelGame();
}
/**
@@ -67,7 +75,7 @@ class ActionHandler {
* @param c The card chosen by the player.
*/
void chooseCard(Card c) {
//TODO implement
handlerState.chooseCard(c);
}
/**
@@ -76,21 +84,21 @@ class ActionHandler {
* @param suit The suit chosen by the player.
*/
void chooseSuit(Suit suit) {
//TODO implement
handlerState.chooseSuit(suit);
}
/**
* Lets the player skip a round.
**/
void skip() {
//TODO implement
handlerState.skip();
}
/**
* Handles the player saying "no 7" in the current state.
*/
void no7() {
//TODO implement
handlerState.no7();
}
/**
@@ -156,8 +164,27 @@ class ActionHandler {
* @param c The card being played.
* @return True if the card can be played, false otherwise.
*/
boolean canPlay(Card c) {
//TODO implement
return false;
public boolean canPlay(Card c) {
if (ctr7 == 0 || c.rank() == Rank.SEVEN) {
if (chosenSuit == null) {
if (c.rank() == Rank.JACK) {
return true;
} else if (c.rank() == game.getCardHandler().getDiscardPile().getFirst().rank()) {
return true;
} else if (c.suit() == game.getCardHandler().getDiscardPile().getFirst().suit()) {
return true;
}
}
}
if (c.suit() == chosenSuit) {
return true;
}
else {
return false;
}
}
}

View File

@@ -13,7 +13,6 @@ public class Canceled implements HandlerState {
public void addPlayer(Player player){}
public void startGame(){}
public void finishGame(){}
public void cancelGame(){}
public void chooseCard(Card c){}
public void chooseSuit(Suit suit){}

View File

@@ -73,7 +73,7 @@ public class CardHandler {
* Deals cards to all players.
* @throws Exception when there are not enough cards to satisfy starting conditions
*/
void dealCards() throws Exception {
public void dealCards() throws Exception {
// get List of players
List<Player> players = game.getPlayers();
@@ -119,7 +119,7 @@ public class CardHandler {
*
* @return The top card of the discard pile.
*/
Card top() {
public Card top() {
return discardPile.getFirst();
}
}

View File

@@ -12,7 +12,6 @@ public class Finished implements HandlerState{
public void addPlayer(Player player){}
public void startGame(){}
public void finishGame(){}
public void cancelGame(){}
public void chooseCard(Card c){}
public void chooseSuit(Suit suit){}

View File

@@ -7,7 +7,6 @@ public interface HandlerState {
void addPlayer(Player player);
void startGame();
void finishGame();
void cancelGame();
void chooseCard(Card c);
void chooseSuit(Suit suit);

View File

@@ -19,16 +19,15 @@ public class Initialized implements HandlerState {
public void startGame() {
try {
handler.getGame().getCardHandler().dealCards();
handler.setHandlerState(new Normal(handler));
handler.setGameState(GameState.PLAY);
handler.setHandlerState(new Normal(handler));
} catch (Exception e) {
System.err.println("Not enough Cards!");
handler.setHandlerState(new Canceled(handler));
handler.setGameState(GameState.GAME_CANCELED);
handler.setHandlerState(new Canceled(handler));
}
}
public void finishGame(){}
public void cancelGame(){}
public void chooseCard(Card c){}
public void chooseSuit(Suit suit){}

View File

@@ -14,13 +14,13 @@ public class JackChosen implements HandlerState{
public void chooseSuit(Suit suit){
handler.setChosenSuit(suit);
handler.getGame().getPlayerHandler().nextTurn(1);
handler.setGameState(GameState.PLAY);
handler.setHandlerState(new SuitChosen(handler));
//handler.setGameState(PLAY);
}
public void startGame(){}
public void addPlayer(Player player){}
public void finishGame(){}
public void cancelGame(){}
public void chooseCard(Card c){}
public void skip(){}

View File

@@ -78,7 +78,7 @@ public class MauMau {
*
* @return The action handler.
*/
ActionHandler getActionHandler() {
public ActionHandler getActionHandler() {
return actionHandler;
}

View File

@@ -1,6 +1,7 @@
package cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
public class Normal implements HandlerState {
@@ -12,15 +13,30 @@ public class Normal implements HandlerState {
public void addPlayer(Player player){}
public void startGame(){}
public void finishGame(){
// Logic for finishing Game ????
if (handler.getGame().getPlayerHandler().getPlayers().isEmpty()) {
handler.setHandlerState(new Finished(handler));
public void cancelGame(){}
public void chooseCard(Card c){
if (handler.canPlay(c)) {
handler.getGame().getPlayerHandler().getCurrentPlayer().playCard(c);
if (c.rank() == Rank.SEVEN) {
handler.increment7Counter();
handler.getGame().getPlayerHandler().nextTurn(1);
handler.setHandlerState(new SevenChosen(handler));
} else if (c.rank() == Rank.JACK) {
handler.setGameState(GameState.CHOOSE_SUIT);
handler.setHandlerState(new JackChosen(handler));
} else if (c.rank() == Rank.EIGHT) {
handler.getGame().getPlayerHandler().nextTurn(2);
} else {
handler.getGame().getPlayerHandler().nextTurn(1);
}
}
}
public void cancelGame(){}
public void chooseCard(Card c){}
public void chooseSuit(Suit suit){}
public void skip(){}
public void skip(){
handler.getGame().getPlayerHandler().getCurrentPlayer().drawCards(1);
handler.getGame().getPlayerHandler().nextTurn(1);
}
public void no7(){}
}

View File

@@ -56,12 +56,13 @@ public class PlayerHandler {
public void localNextTurn(int n) {
for(int i = 0; i < n; i++){
players.addLast(players.getFirst());
players.addLast(players.removeFirst());
// players.removeFirst();
}
}
public void finishPlayer(Player p) {
ranking.addLast(players.removeFirst());
ranking.addLast(players.removeLast());
}
public Player getCurrentPlayer() {
@@ -97,6 +98,6 @@ public class PlayerHandler {
}
public void finishGame() {
finishPlayer(players.getFirst());
game.getActionHandler().finishGame();
}
}

View File

@@ -12,7 +12,6 @@ public class SevenChosen implements HandlerState{
public void addPlayer(Player player){}
public void startGame(){}
public void finishGame(){}
public void cancelGame(){}
public void chooseCard(Card c){
@@ -20,16 +19,21 @@ public class SevenChosen implements HandlerState{
handler.getGame().getPlayerHandler().getCurrentPlayer().playCard(c);
handler.increment7Counter();
handler.getGame().getPlayerHandler().nextTurn(1);
} else {
}
}
public void chooseSuit(Suit suit){}
public void skip(){}
public void no7(){
handler.getGame().getPlayerHandler().getCurrentPlayer().drawCards(2 * handler.get7Counter());
handler.reset7Counter();
handler.setHandlerState(new Normal(handler));
if (handler.get7Counter() * 2 > handler.getGame().getCardHandler().getDrawPile().size()) {
handler.setGameState(GameState.GAME_CANCELED);
handler.setHandlerState(new Canceled(handler));
} else {
handler.getGame().getPlayerHandler().getCurrentPlayer().drawCards(2 * handler.get7Counter());
handler.reset7Counter();
handler.setHandlerState(new Normal(handler));
}
}
}

View File

@@ -13,7 +13,6 @@ public class SuitChosen implements HandlerState{
public void addPlayer(Player player){}
public void startGame(){}
public void finishGame(){}
public void cancelGame(){}
public void chooseCard(Card c){

View File

@@ -10,9 +10,19 @@ public class WaitForMauMauState implements PlayerState {
@Override
public void nextTurn(int n) {
// Draw a card and proceed to next turn
handler.getCurrentPlayer().drawCards(1);
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForNextTurnState());
handler.getRemember().drawCards(1);
if (handler.getCurrentPlayer().getCards().isEmpty()) {
handler.setRemember(handler.getCurrentPlayer());
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForMauMauState());
} else if (handler.getCurrentPlayer().getCards().size() == 1) {
handler.setRemember(handler.getCurrentPlayer());
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForMauState());
} else {
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForNextTurnState());
}
}
@Override
@@ -23,13 +33,20 @@ public class WaitForMauMauState implements PlayerState {
@Override
public void maumau(Player p) {
if (p == handler.getRemember()) {
handler.finishPlayer(p);
if (handler.getPlayers().size() == 1) {
handler.finishPlayer(handler.getCurrentPlayer());
handler.finishGame();
handler.setCurrentState(handler.getFinishedState());
} else {
handler.setCurrentState(handler.getWaitForNextTurnState());
}
}
}
}

View File

@@ -10,15 +10,25 @@ public class WaitForMauState implements PlayerState {
@Override
public void nextTurn(int n) {
// Draw a card and proceed to next turn
handler.getCurrentPlayer().drawCards(1);
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForNextTurnState());
handler.getRemember().drawCards(1);
if (handler.getCurrentPlayer().getCards().isEmpty()) {
handler.setRemember(handler.getCurrentPlayer());
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForMauMauState());
} else if (handler.getCurrentPlayer().getCards().size() == 1) {
handler.setRemember(handler.getCurrentPlayer());
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForMauState());
} else {
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForNextTurnState());
}
}
@Override
public void mau(Player p) {
if (p == handler.getRemember()) {
handler.setCurrentState(handler.getWaitForMauMauState());
handler.setCurrentState(handler.getWaitForNextTurnState());
}
}

View File

@@ -1,6 +1,6 @@
package cards.maumau.model;
public class WaitForNextTurnState implements PlayerState {
public class WaitForNextTurnState implements PlayerState {
private final PlayerHandler handler;
public WaitForNextTurnState(PlayerHandler handler) {
@@ -14,9 +14,13 @@ public class WaitForNextTurnState implements PlayerState {
handler.setRemember(handler.getCurrentPlayer());
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForMauMauState());
} else {
} else if (handler.getCurrentPlayer().getCards().size() == 1) {
handler.setRemember(handler.getCurrentPlayer());
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForMauState());
} else {
handler.localNextTurn(n);
handler.setCurrentState(handler.getWaitForNextTurnState());
}
}

View File

@@ -1,7 +1,11 @@
package cards;
package test.cards;
import org.junit.Test;
import cards.Card;
import cards.Rank;
import cards.Suit;
import static cards.Rank.THREE;
import static cards.Rank.TWO;
import static cards.Suit.HEARTS;

View File

@@ -1,4 +1,4 @@
package cards;
package test.cards;
import org.junit.Test;

View File

@@ -1,4 +1,4 @@
package cards;
package test.cards;
import org.junit.Test;

View File

@@ -1,8 +1,10 @@
package cards.maumau;
package test.cards.maumau;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.MauMauDeck;
import org.junit.Test;
import java.util.List;

View File

@@ -1,8 +1,11 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;
@@ -35,7 +38,12 @@ public class CardHandlerTest {
final Player chantal = game.addPlayer("Chantal");
assertTrue(jacqueline.getCards().isEmpty());
assertTrue(chantal.getCards().isEmpty());
game.getCardHandler().dealCards();
try {
game.getCardHandler().dealCards();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
assertEquals("[J♦, Q♦, A♠, A♦, 8♦]", jacqueline.getCards().toString());
assertEquals("[7♣, 9♣, 9♠, 8♣, K♥]", chantal.getCards().toString());
assertEquals(c(ACE, HEARTS), game.getCardHandler().top());

View File

@@ -1,8 +1,13 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Normal;
import cards.maumau.model.Player;
import cards.maumau.model.SevenChosen;
import org.junit.Test;
import java.util.List;
@@ -147,8 +152,10 @@ public class MauMau1Test {
assertNull(game.getChosenSuit());
assertEquals(0, game.get7Counter());
assertEquals(Normal.class, game.getActionHandler().getHandlerState().getClass());
chantal.skip();
assertEquals(PLAY, game.getGameState());
assertEquals(Normal.class, game.getActionHandler().getHandlerState().getClass());
assertEquals(List.of(jacqueline, chantal), game.getPlayers());
assertEquals(List.of(), game.getRanking());
assertEquals("[A♦]", jacqueline.getCards().toString());

View File

@@ -1,8 +1,11 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Normal;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;
@@ -24,6 +27,7 @@ import static cards.maumau.model.GameState.GAME_OVER;
import static cards.maumau.model.GameState.PLAY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class MauMau2Test {
private static Card c(Rank r, Suit s) {
@@ -184,17 +188,22 @@ public class MauMau2Test {
assertEquals(List.of(jacqueline, chantal), game.getPlayers());
assertEquals(List.of(), game.getRanking());
assertEquals("[Q♠, Q♣]", jacqueline.getCards().toString());
// assertEquals("[Q♣]", jacqueline.getCards().toString());
assertEquals("[8♥]", chantal.getCards().toString());
assertEquals("[9♥, K♣, 7♣, J♦, 9♦, A♣, 8♠, 10♦, J♠, J♥, J♣, 10♥, K♥, Q♥, 7♥, 7♦, 8♣, 9♣, 9♠]", game.getDrawPile().toString());
assertEquals("[Q♦, K♦, 8♦, A♦, A♥, A♠, K♠, 7♠, 10♠, 10♣]", game.getDiscardPile().toString());
assertNull(game.getChosenSuit());
assertEquals(0, game.get7Counter());
// assertEquals("[Q♣]", jacqueline.getCards().toString());
// assertEquals(Normal.class, game.getActionHandler().getHandlerState().getClass());
assertTrue(game.getActionHandler().canPlay(c(QUEEN, SPADES)));
jacqueline.chooseCard(c(QUEEN, SPADES));
assertEquals(PLAY, game.getGameState());
assertEquals(List.of(chantal, jacqueline), game.getPlayers());
assertEquals(List.of(), game.getRanking());
assertEquals("[8♥]", chantal.getCards().toString());
// assertEquals(Normal.class, game.getActionHandler().getHandlerState().getClass());
assertEquals("[Q♣]", jacqueline.getCards().toString());
assertEquals("[9♥, K♣, 7♣, J♦, 9♦, A♣, 8♠, 10♦, J♠, J♥, J♣, 10♥, K♥, Q♥, 7♥, 7♦, 8♣, 9♣, 9♠]", game.getDrawPile().toString());
assertEquals("[Q♠, Q♦, K♦, 8♦, A♦, A♥, A♠, K♠, 7♠, 10♠, 10♣]", game.getDiscardPile().toString());

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;
@@ -24,7 +26,9 @@ import static cards.maumau.model.GameState.GAME_INITIALIZED;
import static cards.maumau.model.GameState.GAME_OVER;
import static cards.maumau.model.GameState.PLAY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class MauMau4Test {
private static Card c(Rank r, Suit s) {
@@ -126,6 +130,7 @@ public class MauMau4Test {
assertEquals(0, game.get7Counter());
chantal.chooseCard(c(JACK, SPADES));
assertFalse(game.getActionHandler().canPlay(c(JACK, SPADES)));
assertEquals(PLAY, game.getGameState());
assertEquals(List.of(chantal, jacqueline), game.getPlayers());
assertEquals(List.of(), game.getRanking());

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;

View File

@@ -1,8 +1,10 @@
package cards.maumau.model;
package test.cards.maumau.model;
import cards.Card;
import cards.Rank;
import cards.Suit;
import cards.maumau.model.MauMau;
import cards.maumau.model.Player;
import org.junit.Test;
import java.util.List;