started 2025st
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
public class App {
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("Hello, World!");
|
||||
}
|
||||
}
|
||||
5
src/j2025/ST/Animal.java
Normal file
5
src/j2025/ST/Animal.java
Normal file
@@ -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
|
||||
}
|
||||
32
src/j2025/ST/AnimalCard.java
Normal file
32
src/j2025/ST/AnimalCard.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
6
src/j2025/ST/Card.java
Normal file
6
src/j2025/ST/Card.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package j2025.ST;
|
||||
|
||||
public interface Card {
|
||||
boolean formsPairWith(Card other);
|
||||
boolean formsPairWith(AnimalCard other);
|
||||
}
|
||||
49
src/j2025/ST/Game.java
Normal file
49
src/j2025/ST/Game.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package j2025.ST;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class Game {
|
||||
|
||||
private List<Player> players = new LinkedList<>();
|
||||
private List<Player> playersRanking = new ArrayList<>();
|
||||
private Set<Card> 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<Card> 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();
|
||||
}
|
||||
|
||||
}
|
||||
20
src/j2025/ST/PeterCard.java
Normal file
20
src/j2025/ST/PeterCard.java
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
44
src/j2025/ST/Player.java
Normal file
44
src/j2025/ST/Player.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package j2025.ST;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Player {
|
||||
|
||||
private final String name;
|
||||
private List<Card> cards = new ArrayList<>();
|
||||
|
||||
public Player(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<Card> 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;
|
||||
}
|
||||
}
|
||||
49
src/j2025/ST/SchwarzerPeterTest.java
Normal file
49
src/j2025/ST/SchwarzerPeterTest.java
Normal file
@@ -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<Card> 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));
|
||||
}
|
||||
|
||||
}
|
||||
13
src/j2025/ST/Sex.java
Normal file
13
src/j2025/ST/Sex.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package j2025.ST;
|
||||
|
||||
public enum Sex {
|
||||
Male, Female;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return switch (this) {
|
||||
case Male -> "♂";
|
||||
case Female -> "♀";
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user