6 Commits

Author SHA1 Message Date
Hanno Fleischer
ccf77f052f repositioned Logger for server shutdown 2024-12-16 12:14:09 +01:00
Hanno Fleischer
0d3e93b681 fixed test for state transition 2024-12-16 12:12:21 +01:00
Hanno Fleischer
ab4c7159f3 Server now closes correctly when host is leaving 2024-12-16 12:08:18 +01:00
Fleischer Hanno
61ea4c3276 the game will now create a new clg when entering the main view 2024-12-16 11:38:31 +01:00
Fleischer Hanno
e8506e607c removed icon for app when using apple due to problems 2024-12-16 11:23:27 +01:00
Hanno Fleischer
0c46477f01 Update README.md 2024-12-15 10:04:49 +00:00
8 changed files with 41 additions and 12 deletions

View File

@@ -13,6 +13,7 @@
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.prefs.Preferences;
@@ -83,7 +84,7 @@ public class MdgaApp extends SimpleApplication {
/**
* The client game logic.
*/
private final ClientGameLogic clientGameLogic;
private ClientGameLogic clientGameLogic;
private ExecutorService executor;
@@ -137,9 +138,11 @@ public static void main(String[] args) {
app.setDisplayStatView(false);
try {
settings.setIcons(new BufferedImage[]{
ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("Images/icon/icon128.png"))
});
if (!System.getProperty("os.name").toLowerCase().contains("mac")) {
settings.setIcons(new BufferedImage[]{
ImageIO.read(Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResourceAsStream("Images/icon/icon128.png")))
});
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
@@ -201,6 +204,7 @@ public void enter(MdgaState state) {
switch (state) {
case MAIN:
view = mainView;
clientGameLogic = new ClientGameLogic(networkConnection);
break;
case LOBBY:
view = lobbyView;

View File

@@ -103,11 +103,10 @@ public void shutdownServer() {
// Wait for the server to shut down
try {
serverThread.join(); // Wait for the server thread to finish
System.out.println("Server shutdown successfully.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Server shutdown successfully.");
}
/**

View File

@@ -285,6 +285,7 @@ public void handleDisconnect(int id) {
public void exit() {
LOGGER.log(Level.INFO, "Requesting server shutdown"); //NON-NLS
running = false;
pendingMessages.add(new ReceivedMessage(new AnimationEndMessage(), -1));
}
/**

View File

@@ -76,6 +76,15 @@ private Piece getPiece(UUID pieceId) {
return null;
}
public void clear(){
game = new Game();
notifications.clear();
setState(dialogsState);
isHost = false;
ownPlayerID = 0;
ownPlayerName = null;
}
/**
* This method returns the clientSender
*

View File

@@ -50,9 +50,9 @@ public void exit() {
*/
@Override
public void selectLeave() {
parent.setState(parent.getStartDialog());
logic.addNotification(new StartDialogNotification());
logic.send(new LeaveGameMessage());
logic.addNotification(new StartDialogNotification());
logic.setState(logic.getDialogs());
}
/**

View File

@@ -175,4 +175,16 @@ public void received(StartGameMessage msg, int from) {
this.logic.getServerSender().send(from, new IncorrectRequestMessage(5));
}
}
/**
* Removed the player after receiving a LeaveGameMessage message.
*
* @param msg as the message which was sent by the player as a LeaveGameMessage object.
* @param from as the client id of the player as an Integer.
*/
@Override
public void received(LeaveGameMessage msg, int from) {
this.logic.getGame().removePlayer(from);
this.logic.getServerSender().broadcast(new LobbyPlayerLeaveMessage(from));
}
}

View File

@@ -61,13 +61,13 @@ public void received(AnimationEndMessage msg, int from) {
if (finishedAnimations.size() == logic.getGame().getPlayers().size()) {
if (logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).isFinished()) {
logic.getGame().getPlayerRanking().put(logic.getGame().getPlayerRanking().size(), logic.getGame().getActivePlayer());
logic.getServerSender().send(logic.getGame().getPlayerIdByColor(logic.getGame().getActiveColor()), new SpectatorMessage());
setActivePlayer(logic.getGame().getActiveColor());
if (logic.getGame().getPlayerRanking().size() == logic.getGame().getPlayers().size() - 1) {
logic.getGame().getPlayerRanking().put(logic.getGame().getPlayerRanking().size(), logic.getGame().getActivePlayer());
logic.getGame().getPlayerRanking().put(logic.getGame().getPlayerRanking().size(), logic.getGame().getPlayerByColor(logic.getGame().getActiveColor().next(logic.getGame())));
logic.setCurrentState(logic.getCeremonyState());
return;
}
logic.getServerSender().send(logic.getGame().getPlayerIdByColor(logic.getGame().getActiveColor()), new SpectatorMessage());
setActivePlayer(logic.getGame().getActiveColor());
this.turnAutomaton.getGameAutomaton().setCurrentState(this.turnAutomaton.getGameAutomaton().getTurnState());
}
else if (logic.getGame().getDiceEyes() == 6) {

View File

@@ -9,4 +9,8 @@ zusätzlichen Features.
In dieser Version gibt es ein besonderes Feature: Bonuskarten. Auf
bestimmten Feldern können die Spieler Bonuskarten ziehen, die ihnen
besondere Vorteile im Spiel verschaffen. Diese Bonuskarten können nur vor
dem Wurf des Würfels eingesetzt werden.
dem Wurf des Würfels eingesetzt werden.
**_INSTALLATION_**
Von der Release Seite für Windows die .exe Datei runterladen für Linux und Mac die .jar Datei,
zum spielen wird dann Java 20 oder höher benötigt.