bis playerhandler states

This commit is contained in:
Johannes Schmelz 2025-06-14 17:01:30 +02:00
parent 2f702b016c
commit b4652c5b4e
6 changed files with 194 additions and 15 deletions

View File

@ -23,7 +23,12 @@ public record Card(Rank rank, Suit suit) implements Comparable<Card> {
*/ */
@Override @Override
public int compareTo(Card other) { public int compareTo(Card other) {
//TODO implement int rankcomparison = rank.compareTo(other.rank);
return 0;
if (rankcomparison != 0) {
return rankcomparison;
} else {
return suit.compareTo(other.suit);
}
} }
} }

View File

@ -13,7 +13,35 @@ public enum Rank {
*/ */
@Override @Override
public String toString() { public String toString() {
//TODO implement switch (this) {
return super.toString(); case TWO:
return "2";
case THREE:
return "3";
case FOUR:
return "4";
case FIVE:
return "5";
case SIX:
return "6";
case SEVEN:
return "7";
case EIGHT:
return "8";
case NINE:
return "9";
case TEN:
return "10";
case JACK:
return "J";
case QUEEN:
return "Q";
case KING:
return "K";
case ACE:
return "A";
default:
return "";
}
} }
} }

View File

@ -28,7 +28,17 @@ public enum Suit {
*/ */
@Override @Override
public String toString() { public String toString() {
//TODO implement switch (this) {
return super.toString(); case HEARTS:
return "♥︎";
case DIAMONDS:
return "♦︎";
case CLUBS:
return "♣︎";
case SPADES:
return "♠︎";
default:
return "";
}
} }
} }

View File

@ -1,7 +1,10 @@
package cards.maumau; package cards.maumau;
import cards.Card; import cards.Card;
import cards.Rank;
import cards.Suit;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@ -20,7 +23,20 @@ public class MauMauDeck {
* @return A list containing the generated deck of cards. * @return A list containing the generated deck of cards.
*/ */
public static List<Card> makeDeck(int numDecks) { public static List<Card> makeDeck(int numDecks) {
//TODO implement List<Card> deck = List.of();
return null;
for(int i = 0; i < numDecks; i++){
for(Rank rank : Rank.values()) {
for(Suit suit : Suit.values()) {
if(rank != Rank.TWO && rank != Rank.THREE && rank != Rank.FOUR && rank != Rank.FIVE && rank != Rank.SIX) {
deck.add(new Card(rank,suit));
}
}
}
}
Collections.shuffle(deck);
return deck;
} }
} }

View File

@ -73,7 +73,11 @@ class CardHandler {
* Deals cards to all players. * Deals cards to all players.
*/ */
void dealCards() { void dealCards() {
//TODO implement for (Player player : game.getPlayerHandler().getPlayers()) {
for (int i = 0; i < numCardsPerPlayer; i++) {
player.getCards().add(drawCard());
}
}
} }
/** /**

View File

@ -13,6 +13,117 @@ class PlayerHandler {
private final List<Player> ranking = new ArrayList<>(); private final List<Player> ranking = new ArrayList<>();
private Player remember; private Player remember;
private interface PlayerState {
void nextTurn(int n);
void mau(Player p);
void maumau(Player p);
};
private final PlayerState waitForNextTurnState = new PlayerState() {
@Override
public void nextTurn(int n) {
decide(n);
}
@Override
public void mau(Player p) {
//Do nothing
}
@Override
public void maumau(Player p) {
// Do nothing
}
};
private final PlayerState waitForMauState = new PlayerState() {
@Override
public void nextTurn(int n) {
remember.drawCards(1);
decide(n);
}
@Override
public void mau(Player p) {
if (p == remember) {
currentState = waitForNextTurnState;
}
}
@Override
public void maumau(Player p) {
//Do nothing
}
};
private final PlayerState waitForMauMauState = new PlayerState() {
@Override
public void nextTurn(int n) {
remember.drawCards(1);
decide(n);
}
@Override
public void mau(Player p) {
//Do nothing
}
@Override
public void maumau(Player p) {
if (p == remember) {
finishPlayer(p);
}
if (players.size() == 1) {
finishPlayer(getCurrentPlayer());
game.getActionHandler().finishGame();
currentState = finishedState;
} else {
currentState = waitForNextTurnState;
}
}
};
private final PlayerState finishedState = new PlayerState() {
@Override
public void nextTurn(int n) {
//Do nothing
}
@Override
public void mau(Player p) {
// Do nothing
}
@Override
public void maumau(Player p) {
// Do nothing
}
};
private void decide(int n) {
if (getCurrentPlayer().getCards().isEmpty()) {
remember = getCurrentPlayer();
localNextTurn(n);
currentState = waitForMauMauState;
} else if (getCurrentPlayer().getCards().size() == 1) {
remember = getCurrentPlayer();
localNextTurn(n);
currentState = waitForMauState;
} else {
localNextTurn(n);
}
}
private PlayerState currentState = waitForNextTurnState;
/** /**
* Constructs a PlayerHandler for the specified MauMau game. * Constructs a PlayerHandler for the specified MauMau game.
* *
@ -28,7 +139,7 @@ class PlayerHandler {
* @param n The number of turns to proceed. * @param n The number of turns to proceed.
*/ */
void nextTurn(int n) { void nextTurn(int n) {
//TODO implement currentState.nextTurn(n);
} }
/** /**
@ -37,7 +148,7 @@ class PlayerHandler {
* @param p The player calling "Mau". * @param p The player calling "Mau".
*/ */
void mau(Player p) { void mau(Player p) {
//TODO implement currentState.mau(p);
} }
/** /**
@ -46,7 +157,7 @@ class PlayerHandler {
* @param p The player calling "Mau-Mau". * @param p The player calling "Mau-Mau".
*/ */
void maumau(Player p) { void maumau(Player p) {
//TODO implement currentState.maumau(p);
} }
/** /**
@ -74,7 +185,10 @@ class PlayerHandler {
* @throws IllegalArgumentException if a player with the same name already exists. * @throws IllegalArgumentException if a player with the same name already exists.
*/ */
void addPlayer(Player player) { void addPlayer(Player player) {
//TODO implement if (!players.contains(player)) {
throw new IllegalArgumentException("Player with name " + player.getName() + " already exists.");
}
players.add(player);
} }
/** /**
@ -83,7 +197,9 @@ class PlayerHandler {
* @param n The number of turns to proceed. * @param n The number of turns to proceed.
*/ */
private void localNextTurn(int n) { private void localNextTurn(int n) {
//TODO implement for (int i = 0; i < n; i++) {
players.addLast(players.removeFirst());
}
} }
/** /**
@ -92,7 +208,7 @@ class PlayerHandler {
* @param p The player to finish. * @param p The player to finish.
*/ */
private void finishPlayer(Player p) { private void finishPlayer(Player p) {
//TODO implement ranking.addLast(players.removeLast());
} }
/** /**