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
public int compareTo(Card other) {
//TODO implement
return 0;
int rankcomparison = rank.compareTo(other.rank);
if (rankcomparison != 0) {
return rankcomparison;
} else {
return suit.compareTo(other.suit);
}
}
}

View File

@ -13,7 +13,35 @@ public enum Rank {
*/
@Override
public String toString() {
//TODO implement
return super.toString();
switch (this) {
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
public String toString() {
//TODO implement
return super.toString();
switch (this) {
case HEARTS:
return "♥︎";
case DIAMONDS:
return "♦︎";
case CLUBS:
return "♣︎";
case SPADES:
return "♠︎";
default:
return "";
}
}
}

View File

@ -1,7 +1,10 @@
package cards.maumau;
import cards.Card;
import cards.Rank;
import cards.Suit;
import java.util.Collections;
import java.util.List;
/**
@ -20,7 +23,20 @@ public class MauMauDeck {
* @return A list containing the generated deck of cards.
*/
public static List<Card> makeDeck(int numDecks) {
//TODO implement
return null;
List<Card> deck = List.of();
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.
*/
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 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.
*
@ -28,7 +139,7 @@ class PlayerHandler {
* @param n The number of turns to proceed.
*/
void nextTurn(int n) {
//TODO implement
currentState.nextTurn(n);
}
/**
@ -37,7 +148,7 @@ class PlayerHandler {
* @param p The player calling "Mau".
*/
void mau(Player p) {
//TODO implement
currentState.mau(p);
}
/**
@ -46,7 +157,7 @@ class PlayerHandler {
* @param p The player calling "Mau-Mau".
*/
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.
*/
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.
*/
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.
*/
private void finishPlayer(Player p) {
//TODO implement
ranking.addLast(players.removeLast());
}
/**