edited a lot of stuff (#52)

This commit is contained in:
Valentin Heiserer
2024-04-26 20:54:39 +02:00
committed by GitHub
parent 539e29dc56
commit ea5df95228
9 changed files with 208 additions and 143 deletions

View File

@@ -0,0 +1,51 @@
package org.schafkopf;
import java.util.List;
import org.schafkopf.SchafkopfException.NotEnoughPlayersException;
import org.schafkopf.SchafkopfMessage.SchafkopfBaseMessage;
import org.schafkopf.SchafkopfMessage.SchafkopfMessageType;
import org.schafkopf.player.BotPlayer;
import org.schafkopf.player.Player;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The main entrypoint of the Application.
*/
public abstract class BaseGameSession implements MessageSender {
protected static final Logger logger = LoggerFactory.getLogger(BaseGameSession.class);
protected Thread spielThread;
protected Schafkopf schafkopf;
protected List<Player> players;
void startGame(List<Player> players) {
logger.info("Starting game");
for (int i = players.size(); i < 4; i++) {
players.add(new BotPlayer("Bot " + i));
}
sendMessage(new SchafkopfBaseMessage(SchafkopfMessageType.GAME_START_READY));
//wait for 5 seconds
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
spielThread = new Thread(() -> {
try {
schafkopf = new Schafkopf(players.toArray(Player[]::new), this);
schafkopf.startGame();
} catch (NotEnoughPlayersException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
spielThread.start();
}
}

View File

@@ -1,5 +1,7 @@
package org.schafkopf.player;
import org.schafkopf.MessageSender;
import org.schafkopf.SchafkopfMessage.SchafkopfBaseMessage;
import org.schafkopf.karte.Karte;
import org.schafkopf.karte.KartenListe;
import org.schafkopf.karte.KartenUtil;
@@ -13,8 +15,17 @@ public class BotPlayer extends Player {
private KartenListe eigeneKarten;
private KartenListe unbekannteKarten = KartenUtil.initializeSchafKopfCardDeck();
/**
* Constructor for the BotPlayer.
*/
public BotPlayer(String name) {
super(name);
super(name, new MessageSender() {
@Override
public void sendMessage(SchafkopfBaseMessage message) {
System.out.println("BotPlayer: " + message);
}
});
this.setReady(true);
}
@Override
@@ -45,4 +56,14 @@ public class BotPlayer extends Player {
this.unbekannteKarten.removeKarten(eigeneKarten);
System.out.println("Eigene Karte fertig");
}
@Override
public void sendMessage(SchafkopfBaseMessage message) {
}
@Override
public void resetReady() {
// Not needed
}
}

View File

@@ -15,14 +15,12 @@ import org.schafkopf.spielcontroller.SpielController;
*/
public class OnlinePlayer extends Player {
private final MessageSender messageSender;
private final BlockingQueue<Karte> receivedCardQueue = new LinkedBlockingQueue<>();
private KartenListe karten = new KartenListe();
public OnlinePlayer(MessageSender messageSender, String name) {
super(name);
this.messageSender = messageSender;
super(name, messageSender);
}
/**
@@ -53,6 +51,11 @@ public class OnlinePlayer extends Player {
return spielKarte;
}
@Override
public void resetReady() {
this.setReady(false);
}
private void sendPlayerCards() {
JsonObject messageObject = new JsonObject();
messageObject.add("cards", this.karten.getJson());
@@ -68,4 +71,9 @@ public class OnlinePlayer extends Player {
System.out.println("Received Card before Queue: " + receivedCard.getName());
receivedCardQueue.add(receivedCard);
}
@Override
public void sendMessage(SchafkopfBaseMessage message) {
messageSender.sendMessage(message);
}
}

View File

@@ -1,5 +1,6 @@
package org.schafkopf.player;
import org.schafkopf.MessageSender;
import org.schafkopf.karte.Karte;
import org.schafkopf.karte.KartenListe;
import org.schafkopf.spielcontroller.SpielController;
@@ -7,11 +8,14 @@ import org.schafkopf.spielcontroller.SpielController;
/**
* Class that represents one Player of the game.
*/
public abstract class Player {
public abstract class Player implements MessageSender {
protected MessageSender messageSender;
private boolean ready = false;
private String name;
protected Player(String name) {
protected Player(String name, MessageSender messageSender) {
this.messageSender = messageSender;
this.name = name;
}
@@ -19,7 +23,21 @@ public abstract class Player {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract Karte play(
SpielController spiel, KartenListe tischKarten, KartenListe gespielteKarten)
throws InterruptedException;
public abstract void resetReady();
public void setReady(boolean ready) {
this.ready = ready;
}
public boolean isReady() {
return ready;
}
}