KVA working

This commit is contained in:
Johannes Schmelz 2024-06-19 01:58:53 +02:00
parent 4b574c50e8
commit 094c17d16a
24 changed files with 105 additions and 31 deletions

Binary file not shown.

Binary file not shown.

View File

@ -2,12 +2,13 @@ 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;
@ -32,6 +33,10 @@ class ActionHandler {
this.handlerState = handlerState;
}
public HandlerState getHandlerState() {
return handlerState;
}
/**
* Adds the specified player to the game.
*
@ -45,21 +50,23 @@ class ActionHandler {
* 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();
}
/**
@ -68,7 +75,7 @@ class ActionHandler {
* @param c The card chosen by the player.
*/
void chooseCard(Card c) {
//TODO implement
handlerState.chooseCard(c);
}
/**
@ -77,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();
}
/**
@ -157,8 +164,23 @@ class ActionHandler {
* @param c The card being played.
* @return True if the card can be played, false otherwise.
*/
boolean canPlay(Card c) {
//TODO implement
public boolean canPlay(Card c) {
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

@ -19,12 +19,12 @@ 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));
}
}

View File

@ -14,8 +14,9 @@ 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(){}

View File

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

View File

@ -13,7 +13,10 @@ public class Normal implements HandlerState {
public void addPlayer(Player player){}
public void startGame(){}
public void finishGame(){}
public void finishGame(){
handler.setGameState(GameState.GAME_OVER);
handler.setHandlerState(new Finished(handler));
}
public void cancelGame(){}
public void chooseCard(Card c){
@ -24,6 +27,7 @@ public class Normal implements HandlerState {
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);

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

@ -20,16 +20,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(){
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

@ -10,10 +10,20 @@ public class WaitForMauMauState implements PlayerState {
@Override
public void nextTurn(int n) {
// Draw a card and proceed to next turn
handler.getCurrentPlayer().drawCards(1);
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) {
@ -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.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

@ -4,7 +4,9 @@ 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;
@ -150,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

@ -4,6 +4,7 @@ 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;
@ -26,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) {
@ -186,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

@ -26,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) {
@ -128,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());