From d45552f47679aa624459e75e2fe0cd7b11be24a7 Mon Sep 17 00:00:00 2001 From: Peet Date: Tue, 12 May 2026 10:17:22 +0200 Subject: [PATCH] started 2025st --- src/App.java | 5 --- src/j2025/ST/Animal.java | 5 +++ src/j2025/ST/AnimalCard.java | 32 ++++++++++++++++++ src/j2025/ST/Card.java | 6 ++++ src/j2025/ST/Game.java | 49 ++++++++++++++++++++++++++++ src/j2025/ST/PeterCard.java | 20 ++++++++++++ src/j2025/ST/Player.java | 44 +++++++++++++++++++++++++ src/j2025/ST/SchwarzerPeterTest.java | 49 ++++++++++++++++++++++++++++ src/j2025/ST/Sex.java | 13 ++++++++ 9 files changed, 218 insertions(+), 5 deletions(-) delete mode 100644 src/App.java create mode 100644 src/j2025/ST/Animal.java create mode 100644 src/j2025/ST/AnimalCard.java create mode 100644 src/j2025/ST/Card.java create mode 100644 src/j2025/ST/Game.java create mode 100644 src/j2025/ST/PeterCard.java create mode 100644 src/j2025/ST/Player.java create mode 100644 src/j2025/ST/SchwarzerPeterTest.java create mode 100644 src/j2025/ST/Sex.java diff --git a/src/App.java b/src/App.java deleted file mode 100644 index 0a839f9..0000000 --- a/src/App.java +++ /dev/null @@ -1,5 +0,0 @@ -public class App { - public static void main(String[] args) throws Exception { - System.out.println("Hello, World!"); - } -} diff --git a/src/j2025/ST/Animal.java b/src/j2025/ST/Animal.java new file mode 100644 index 0000000..2f83d53 --- /dev/null +++ b/src/j2025/ST/Animal.java @@ -0,0 +1,5 @@ +package j2025.ST; + +public enum Animal { + Dog, Hare, Hedgehog, Stork, Chicken, Goose, Duck, Pigeon, Starling, Finch, Sparrow, Hamster, Mole, Mouse, Frog +} diff --git a/src/j2025/ST/AnimalCard.java b/src/j2025/ST/AnimalCard.java new file mode 100644 index 0000000..4498ec9 --- /dev/null +++ b/src/j2025/ST/AnimalCard.java @@ -0,0 +1,32 @@ +package j2025.ST; + +public class AnimalCard implements Card { + private final Animal animal; + private final Sex sex; + + public AnimalCard(Animal animal, Sex sex) { + if(animal == null || sex == null) { + throw new IllegalArgumentException("Animal or sex cannot be null"); + } + this.animal = animal; + this.sex = sex; + } + + public Animal getAnimal() { + return animal; + } + + public Sex getSex() { + return sex; + } + + @Override + public boolean formsPairWith(Card other) { + return other.formsPairWith(this); + } + + @Override + public boolean formsPairWith(AnimalCard other) { + return animal == other.getAnimal() && sex != other.getSex(); + } +} diff --git a/src/j2025/ST/Card.java b/src/j2025/ST/Card.java new file mode 100644 index 0000000..bb11f18 --- /dev/null +++ b/src/j2025/ST/Card.java @@ -0,0 +1,6 @@ +package j2025.ST; + +public interface Card { + boolean formsPairWith(Card other); + boolean formsPairWith(AnimalCard other); +} diff --git a/src/j2025/ST/Game.java b/src/j2025/ST/Game.java new file mode 100644 index 0000000..a3ec49c --- /dev/null +++ b/src/j2025/ST/Game.java @@ -0,0 +1,49 @@ +package j2025.ST; + +import java.util.*; + + +public class Game { + + private List players = new LinkedList<>(); + private List playersRanking = new ArrayList<>(); + private Set cards = new HashSet<>(); + + public void addPlayer(Player player) { + + for (Player p : players) { + if (p.toString().equals(player.toString())) { + throw new IllegalArgumentException("Player with the same name already exists"); + } + } + + players.add(player); + } + + 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)); + } + cards.add(PeterCard.INSTANCE); + + + } + + public Player getCurrentPlayer() { + return players.getFirst(); + } + + public void draw(int index) { + + } + + public Player getLoser() { + return playersRanking.isEmpty() ? null : playersRanking.getLast(); + } + +} diff --git a/src/j2025/ST/PeterCard.java b/src/j2025/ST/PeterCard.java new file mode 100644 index 0000000..fae4c19 --- /dev/null +++ b/src/j2025/ST/PeterCard.java @@ -0,0 +1,20 @@ +package j2025.ST; + +public class PeterCard implements Card{ + + public static final PeterCard INSTANCE = new PeterCard(); + + private PeterCard() { + } + + @Override + public boolean formsPairWith(Card other) { + return false; + } + + @Override + public boolean formsPairWith(AnimalCard other) { + return false; + } + +} diff --git a/src/j2025/ST/Player.java b/src/j2025/ST/Player.java new file mode 100644 index 0000000..51a0d81 --- /dev/null +++ b/src/j2025/ST/Player.java @@ -0,0 +1,44 @@ +package j2025.ST; + +import java.util.ArrayList; +import java.util.List; + +public class Player { + + private final String name; + private List cards = new ArrayList<>(); + + public Player(String name) { + this.name = name; + } + + public List getCards() { + return cards; + } + + public void addCard(Card card) { + + for (Card c : cards) { + if (c.formsPairWith(card)) { + cards.remove(c); + return; + } + } + + cards.add(card); + } + + public Card removeCard(int index) { + + if(index < 0 || index >= cards.size()) { + throw new IllegalArgumentException("Index out of bounds"); + } + + return cards.remove(index); + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/j2025/ST/SchwarzerPeterTest.java b/src/j2025/ST/SchwarzerPeterTest.java new file mode 100644 index 0000000..3f9f798 --- /dev/null +++ b/src/j2025/ST/SchwarzerPeterTest.java @@ -0,0 +1,49 @@ +package j2025.ST; + +import static org.junit.Assert.*; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.Test; + + +public class SchwarzerPeterTest { + + @Test + public void test() { + final Card c1 = new AnimalCard(Animal.Dog, Sex.Male); + final AnimalCard c2 = new AnimalCard(Animal.Dog, Sex.Female); + final PeterCard c3 = PeterCard.INSTANCE; + assertTrue(c1.formsPairWith(c2)); + assertFalse(c1.formsPairWith(c3)); + assertTrue(c2.formsPairWith(c1)); + assertFalse(c2.formsPairWith(c3)); + assertFalse(c3.formsPairWith(c1)); + assertFalse(c3.formsPairWith(c2)); + } + + @Test + public void test2() { + final Set set = new HashSet<>(); + set.add(new AnimalCard(Animal.Dog, Sex.Male)); + set.add(new AnimalCard(Animal.Dog, Sex.Male)); + set.add(new AnimalCard(Animal.Dog, Sex.Female)); + set.add(new AnimalCard(Animal.Dog, Sex.Female)); + set.add(PeterCard.INSTANCE); + set.add(PeterCard.INSTANCE); + System.out.println(set); + } + + @Test + public void test3() { + final Player p = new Player("Alice"); + p.addCard(PeterCard.INSTANCE); + p.addCard(new AnimalCard(Animal.Dog, Sex.Male)); + p.addCard(new AnimalCard(Animal.Dog, Sex.Female)); + + assertEquals(1, p.getCards().size()); + assertEquals(PeterCard.INSTANCE, p.getCards().get(0)); + } + +} diff --git a/src/j2025/ST/Sex.java b/src/j2025/ST/Sex.java new file mode 100644 index 0000000..be0ffb3 --- /dev/null +++ b/src/j2025/ST/Sex.java @@ -0,0 +1,13 @@ +package j2025.ST; + +public enum Sex { + Male, Female; + + @Override + public String toString() { + return switch (this) { + case Male -> "♂"; + case Female -> "♀"; + }; + } +}