9 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
Hanno Fleischer
3ba1c62685 Merge branch 'development2' into 'main'
fixed Icons; edited smoke particles; removed test code

See merge request progproj/gruppen-ht24/Gruppe-01!43
2024-12-14 09:14:59 +00:00
Hanno Fleischer
82aa9f6a51 fixed double copunting of played cards and now calculating correct travled nodes 2024-12-14 10:13:46 +01:00
Hanno Fleischer
d6ae8f3bdc Merge branch 'development2' into 'main'
Converted Music and deleted unused modules

See merge request progproj/gruppen-ht24/Gruppe-01!42
2024-12-13 20:54:51 +00:00
11 changed files with 47 additions and 18 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 {
if (!System.getProperty("os.name").toLowerCase().contains("mac")) {
settings.setIcons(new BufferedImage[]{
ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("Images/icon/icon128.png"))
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

@@ -55,11 +55,11 @@ public void exit() {
*/
@Override
public void received(AnimationEndMessage msg, int from) {
logic.getGame().getActivePlayer().getPlayerStatistic().increaseCardsPlayed();
logic.getGame().getGameStatistics().increaseCardsPlayed();
this.messageReceived.add(from);
if (this.messageReceived.size() == this.logic.getGame().getPlayers().size()) {
this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new DiceNowMessage());
logic.getGame().getActivePlayer().getPlayerStatistic().increaseCardsPlayed();
logic.getGame().getGameStatistics().increaseCardsPlayed();
this.turnAutomaton.setCurrentState(this.turnAutomaton.getRollDiceState());
}
}

View File

@@ -67,8 +67,8 @@ public void received(RequestMoveMessage msg, int from) {
int indexOfPiece = moveablePieces.indexOf(msg.getPiece());
int steps = logic.getGame().getDiceModifier() * logic.getGame().getDiceEyes();
Piece piece = moveablePieces.get(indexOfPiece);
logic.getGame().getActivePlayer().getPlayerStatistic().increaseTraveledNodes(calculateTargetIndex(piece));
logic.getGame().getGameStatistics().increaseTraveledNodes(calculateTargetIndex(piece));
logic.getGame().getActivePlayer().getPlayerStatistic().increaseTraveledNodes(logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier());
logic.getGame().getGameStatistics().increaseTraveledNodes(logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier());
if (canPieceMoveInHome(piece, steps)) {
if (piece.getState().equals(PieceState.HOME)) {
//gets the oldNode

View File

@@ -47,8 +47,8 @@ public void received(RequestMoveMessage msg, int from) {
if (piece.equals(msg.getPiece())) {
int targetIndex = calculateTargetIndex(piece);
Node targetNode = logic.getGame().getBoard().getInfield()[targetIndex];
logic.getGame().getActivePlayer().getPlayerStatistic().increaseTraveledNodes(calculateTargetIndex(piece));
logic.getGame().getGameStatistics().increaseTraveledNodes(calculateTargetIndex(piece));
logic.getGame().getActivePlayer().getPlayerStatistic().increaseTraveledNodes(logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier());
logic.getGame().getGameStatistics().increaseTraveledNodes(logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier());
//send MoveMessage
logic.getServerSender().broadcast(new MoveMessage(piece, false, targetIndex));

View File

@@ -10,3 +10,7 @@ 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.
**_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.