From 4be67cbf3348c77f17fe97eb7e1100a783bd4dca Mon Sep 17 00:00:00 2001 From: Peet Date: Tue, 12 May 2026 12:07:10 +0200 Subject: [PATCH] finished 2025st --- src/j2025/ST/Game.java | 49 ++++++++++++++++++++++------ src/j2025/ST/Player.java | 9 +++-- src/j2025/ST/SchwarzerPeterTest.java | 3 +- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/j2025/ST/Game.java b/src/j2025/ST/Game.java index a3ec49c..4477ff6 100644 --- a/src/j2025/ST/Game.java +++ b/src/j2025/ST/Game.java @@ -1,13 +1,15 @@ package j2025.ST; -import java.util.*; +import java.util.List; +import java.util.LinkedList; +import java.util.ArrayList; public class Game { private List players = new LinkedList<>(); private List playersRanking = new ArrayList<>(); - private Set cards = new HashSet<>(); + public void addPlayer(Player player) { @@ -22,28 +24,55 @@ public class Game { public void dealCards(List cards) { - } - - private void createDeck() { - for (Animal animal : Animal.values()) { - cards.add(new AnimalCard(animal, Sex.Male)); - cards.add(new AnimalCard(animal, Sex.Female)); + if (players.isEmpty()) { + throw new IllegalStateException("No players to deal cards to"); } - cards.add(PeterCard.INSTANCE); - + for (int i = 0; i < cards.size(); i++) { + players.get(i % players.size()).addCard(cards.get(i)); + } } + public static List createDeck() { + List deck = new ArrayList<>(); + for (Animal animal : Animal.values()) { + deck.add(new AnimalCard(animal, Sex.Male)); + deck.add(new AnimalCard(animal, Sex.Female)); + } + deck.add(PeterCard.INSTANCE); + return deck; + } + + public Player getCurrentPlayer() { return players.getFirst(); } public void draw(int index) { + if (players.size() < 2) { + throw new IllegalStateException("Not enough players to draw cards"); + } + + try { + Player currentPlayer = getCurrentPlayer(); + Player nextPlayer = players.get(1); + + currentPlayer.addCard(nextPlayer.removeCard(index)); + + players.addLast(players.removeFirst()); + } catch (IndexOutOfBoundsException e) { + throw new IllegalArgumentException("Invalid card index"); + } } public Player getLoser() { return playersRanking.isEmpty() ? null : playersRanking.getLast(); } + + void finishPlayer(Player player) { + playersRanking.add(player); + players.remove(player); + } } diff --git a/src/j2025/ST/Player.java b/src/j2025/ST/Player.java index 51a0d81..121cc84 100644 --- a/src/j2025/ST/Player.java +++ b/src/j2025/ST/Player.java @@ -7,9 +7,11 @@ public class Player { private final String name; private List cards = new ArrayList<>(); + private final Game game; - public Player(String name) { + public Player(String name, Game game) { this.name = name; + this.game = game; } public List getCards() { @@ -21,6 +23,9 @@ public class Player { for (Card c : cards) { if (c.formsPairWith(card)) { cards.remove(c); + if (cards.isEmpty()) { + game.finishPlayer(this); + } return; } } @@ -31,7 +36,7 @@ public class Player { public Card removeCard(int index) { if(index < 0 || index >= cards.size()) { - throw new IllegalArgumentException("Index out of bounds"); + throw new IndexOutOfBoundsException("Index out of bounds"); } return cards.remove(index); diff --git a/src/j2025/ST/SchwarzerPeterTest.java b/src/j2025/ST/SchwarzerPeterTest.java index 3f9f798..8d9f18d 100644 --- a/src/j2025/ST/SchwarzerPeterTest.java +++ b/src/j2025/ST/SchwarzerPeterTest.java @@ -37,7 +37,8 @@ public class SchwarzerPeterTest { @Test public void test3() { - final Player p = new Player("Alice"); + final Game game = new Game(); + final Player p = new Player("Alice", game); p.addCard(PeterCard.INSTANCE); p.addCard(new AnimalCard(Animal.Dog, Sex.Male)); p.addCard(new AnimalCard(Animal.Dog, Sex.Female));