13 Commits

Author SHA1 Message Date
Fleischer Hanno
b7a3790f81 added final Presentation 2024-12-17 16:46:20 +01:00
Hanno Fleischer
56112f01bb Update README.md 2024-12-16 13:34:39 +00:00
Hanno Fleischer
75ce695029 Update README.md 2024-12-16 11:24:35 +00:00
Hanno Fleischer
9af54051da Update README.md 2024-12-16 11:24:24 +00:00
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
12 changed files with 49 additions and 18 deletions

Binary file not shown.

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,9 @@ 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](https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-01/-/releases) 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.
Falls die Dateien nicht mehr zum Dowload bereit stehen, wenden Sie sich bitte an Fleischer Hanno (hanno.fleischer@unibw.de).