KVA working
This commit is contained in:
parent
4b574c50e8
commit
094c17d16a
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.
@ -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
|
||||
return false;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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(){}
|
||||
|
@ -78,7 +78,7 @@ public class MauMau {
|
||||
*
|
||||
* @return The action handler.
|
||||
*/
|
||||
ActionHandler getActionHandler() {
|
||||
public ActionHandler getActionHandler() {
|
||||
return actionHandler;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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(){
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
|
@ -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());
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user