From 5a29533736996da56554cc657a1c4e5237aa4f26 Mon Sep 17 00:00:00 2001 From: lorenzo Date: Mon, 13 Apr 2026 23:30:40 +0200 Subject: [PATCH] improvements logging --- src/main/java/client/DeckGridAppFX.java | 4 -- src/main/java/server/GameBoard.java | 2 +- src/main/java/server/Player.java | 11 +++- src/main/java/server/TurnTile.java | 2 +- src/main/java/server/automaton/Game.java | 61 +++++++++++------------ src/main/java/server/utils/GameUtils.java | 2 +- 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/main/java/client/DeckGridAppFX.java b/src/main/java/client/DeckGridAppFX.java index 7e6aa17..bc74dec 100644 --- a/src/main/java/client/DeckGridAppFX.java +++ b/src/main/java/client/DeckGridAppFX.java @@ -228,9 +228,7 @@ public class DeckGridAppFX extends Application { StackPane.setAlignment(debugLabel, Pos.TOP_LEFT); // You can also use Pos.CENTER, Pos.BOTTOM_RIGHT, etc. cardImage.setOnMouseClicked(event -> { - logger.info("Bottom Card clicked"); Player p = game.getCurrentPlayer(); - //pickBottomCardAction(p, game.getGameBoard(), c.getCardId()); ActionResult result = game.resolveCardAction(p, false, c.getCardId()); if (!result.isSuccess()) { new Alert(Alert.AlertType.ERROR, @@ -276,9 +274,7 @@ public class DeckGridAppFX extends Application { StackPane.setAlignment(debugLabel, Pos.TOP_LEFT); // You can also use Pos.CENTER, Pos.BOTTOM_RIGHT, etc. cardImage.setOnMouseClicked(event -> { - logger.info("Card clicked"); Player p = game.getCurrentPlayer(); - ActionResult result = game.resolveCardAction(p, true, c.getCardId()); if (!result.isSuccess()) { new Alert(Alert.AlertType.ERROR, diff --git a/src/main/java/server/GameBoard.java b/src/main/java/server/GameBoard.java index 4021355..f5abc2e 100644 --- a/src/main/java/server/GameBoard.java +++ b/src/main/java/server/GameBoard.java @@ -197,7 +197,7 @@ public class GameBoard { // Step 4: draw fresh cards into the top row List newCards = cardDeck.drawTribe(numPlayers + 4); topRow.addAll(newCards); - logger.info("NEW CARDS ON TOP {} " , newCards); + logger.info("New cards on top: {} " , newCards); return isNewEraRevealed(eraBeforeDraw, newCards); } diff --git a/src/main/java/server/Player.java b/src/main/java/server/Player.java index 99c05ee..e5a9712 100644 --- a/src/main/java/server/Player.java +++ b/src/main/java/server/Player.java @@ -93,10 +93,17 @@ public class Player { //🔴👤 Red Player //🟢👤 Green Player //🟣👤 Purple Player - - return ( "("+getAnsiColorIcon(getTotemColor()) +" " + nickname + + StringBuffer sb = new StringBuffer(); + sb.append("("+getAnsiColorIcon(getTotemColor()) +" " + nickname + " - food=" + foodTokens + ", pp=" + prestigePoints + ")"); + if (!this.getPlayerTribe().getCharacters().isEmpty()) + sb.append(this.getPlayerTribe().getCharacters()); + + if (!this.getPlayerTribe().getBuildingCard().isEmpty()) + sb.append(this.getPlayerTribe().getBuildingCard()); + + return sb.toString(); } public static String getAnsiColorIcon(TotemColor c) { diff --git a/src/main/java/server/TurnTile.java b/src/main/java/server/TurnTile.java index a399bdb..39c2c6e 100644 --- a/src/main/java/server/TurnTile.java +++ b/src/main/java/server/TurnTile.java @@ -127,7 +127,7 @@ public class TurnTile { positions[slot] = player; nextFreeSlot++; - logger.info(player.getNickname() + " returned totem to slot " + slot + logger.debug(player.getNickname() + " returned totem to slot " + slot + (positionFood > 0 ? " and received " + positionFood + " food" : "")); return slot; } diff --git a/src/main/java/server/automaton/Game.java b/src/main/java/server/automaton/Game.java index 09bec54..7ab051d 100644 --- a/src/main/java/server/automaton/Game.java +++ b/src/main/java/server/automaton/Game.java @@ -99,7 +99,7 @@ public class Game { */ public void newGame(InputStream csvStream) { try { - logger.info("STARTING NEW GAME"); + logger.info(" ---- STARTING NEW GAME ----- "); CardDeck deck = new CardDeck(); deck.setForNPlayer(csvStream, players.size()); @@ -115,11 +115,10 @@ public class Game { totemPlacedCount = 0; state = GameState.TOTEM_PLACEMENT; - logger.info("Game started! Round 1."); logTurnOrder(); } catch (LoadingCardsException e) { - System.err.println("Fatal: could not load cards — " + e.getMessage()); + logger.error("Fatal: could not load cards — " + e.getMessage()); state = GameState.GAME_OVER; } } @@ -129,7 +128,7 @@ public class Game { for (int i = 0; i < order.length; i++) { int food = (i == 0) ? 2 : (i <= 2) ? 3 : 4; order[i].addFood(food); - logger.info(" " + order[i].getNickname() + " starts with " + food + " food."); + logger.debug(" " + order[i].getNickname() + " starts with " + food + " food."); } } @@ -149,37 +148,37 @@ public class Game { */ public boolean placeTotem(Player player, int tileIndex) { if (state != GameState.TOTEM_PLACEMENT) { - logger.info("Error: not the totem-placement phase."); + logger.error("Error: not the totem-placement phase."); return false; } // Enforce turn order Player expected = gameBoard.getTurnTile().getPositions()[totemPlacedCount]; if (expected != player) { - logger.info("Error: it is " + expected.getNickname() + logger.error("Error: it is " + expected.getNickname() + "'s turn to place, not " + player.getNickname() + "."); return false; } List tiles = gameBoard.getOfferingTiles(); if (tileIndex < 0 || tileIndex >= tiles.size()) { - logger.info("Error: tile index " + tileIndex + " out of range."); + logger.error("Error: tile index " + tileIndex + " out of range."); return false; } OfferingTile chosen = tiles.get(tileIndex); if (!gameBoard.placeTotem(player, chosen, gameBoard.getTurnTile())) { - logger.info("Tile " + chosen.getLetter() + " is already occupied."); + logger.debug("Tile " + chosen.getLetter() + " is already occupied."); return false; } totemPlacedCount++; - logger.info("player {} TOTEM PLACED ON TILE {}", player.getNickname() , chosen.getLetter()); + logger.debug("player {} TOTEM PLACED ON TILE {}", player.getNickname() , chosen.getLetter()); // + " (" + totemPlacedCount + "/" + players.size() + ")."); if (totemPlacedCount == players.size()) { - logger.info("START ACTION RESOLUTION"); + logger.info(" ----- START ACTION RESOLUTION ---- "); startActionResolution(); } return true; @@ -192,7 +191,7 @@ public class Game { private void startActionResolution() { state = GameState.ACTION_RESOLUTION; currentOfferingTileIndex = 0; - logger.info("All totems placed — resolving actions left to right."); + logger.info("ALL TOTEMS PLACED -> ACTION_RESOLUTION "); loadNextPlayerActions(); } @@ -216,15 +215,15 @@ public class Game { Player player = tile.getOccupant(); pendingActions = new ArrayList<>(tile.getActions()); - logger.info(" PLAYER {} PENDING_ACTIONS {} ", player.getNickname() , pendingActions ); + logger.debug(" PLAYER {} PENDING_ACTIONS {} ", player.getNickname() , pendingActions ); // --- Food tile: resolve entirely without player input --- if (pendingActions.get(0) == Symbol.FOOD) { int food = pendingActions.size(); player.addFood(food); BuildingManager.bonusEndTurn(player, food); // BONUS_FOOD_ENDTURN building effect - logger.info(player.getNickname() + " receives " + food - + " food from tile " + tile.getLetter() + "."); + logger.info("ACTION FOOD {} GET {} ", player.getNickname() , food + + " FROM TILE " + tile.getLetter() ); pendingActions.clear(); finishPlayerTurn(player); currentOfferingTileIndex++; @@ -242,7 +241,7 @@ public class Game { } // Wait for the player to call resolveCardAction() - logger.info("player {} pending ACTIONS {}" , player.getNickname() , pendingActions); + logger.debug("player {} pending ACTIONS {}" , player.getNickname() , pendingActions); // logger.info("It is " + player.getNickname() + "'s turn — actions: " + pendingActions); return; } @@ -294,20 +293,20 @@ public class Game { */ public ActionResult resolveCardAction(Player player, boolean fromTop, int cardId) { if (state != GameState.ACTION_RESOLUTION) { - logger.info("Error: not in ACTION_RESOLUTION phase."); + logger.error("Error: not in ACTION_RESOLUTION phase."); return ActionResult.failure("Error: not in ACTION_RESOLUTION phase."); } OfferingTile currentTile = gameBoard.getOfferingTiles().get(currentOfferingTileIndex); if (currentTile.getOccupant() != player) { - logger.info("Error: it is not " + player.getNickname() + "'s turn to act."); + logger.error("Error: it is not " + player.getNickname() + "'s turn to act."); return ActionResult.failure("Error: it is not " + player.getNickname() + "'s turn to act."); } Symbol required = fromTop ? Symbol.UP : Symbol.DOWN; if (!pendingActions.contains(required)) { - logger.info("Error: no " + required + " action available for " + logger.error("Error: no " + required + " action available for " + player.getNickname() + "."); return ActionResult.failure("Error: no " + required + " action available for " + player.getNickname() + "."); @@ -319,7 +318,7 @@ public class Game { : gameBoard.takeFromBottomRow(cardId); if (card == null) { - logger.info("Error: card " + cardId + " not found in the " + logger.error("Error: card " + cardId + " not found in the " + (fromTop ? "top" : "bottom") + " row."); return ActionResult.failure("Error: card " + cardId + " not found in the " + (fromTop ? "top" : "bottom") + " row."); @@ -328,7 +327,7 @@ public class Game { // Event cards can never be taken by players if (card instanceof EventCard) { putCardBack(card, fromTop); - logger.info("Error: Event cards cannot be taken."); + logger.error("Error: Event cards cannot be taken."); return ActionResult.failure("Error: Event cards cannot be taken."); } @@ -345,7 +344,7 @@ public class Game { // Consume the action pendingActions.remove(required); - logger.info("player {} TOOK CARD {} --> PEDNING ACTIONS {}",player.getNickname(), cardId, pendingActions); + logger.debug("player {} TOOK CARD {} --> PEDNING ACTIONS {}",player.getNickname(), cardId, pendingActions); // A row may have become empty after this draw — re-check impossible actions @@ -414,8 +413,7 @@ public class Game { && character.getIconValue() > 0) { int food = player.getPlayerTribe().huntersNumber() * character.getIconValue(); player.addFood(food); - logger.info(player.getNickname() + "'s hunter (leg icon) grants +" - + food + " food."); + logger.info("GET HUNTER FOOD {} for player {}",food, player.getNickname() ); } // Building-triggered effects on character draw @@ -424,8 +422,7 @@ public class Game { gameBoard.getBuildingManager().foodPerInventors(player, character); } - logger.info(player.getNickname() + " drew " - + character.getCharacterType() + " (id " + character.getCardId() + ")."); + logger.info("{} PICKED {}", player.getNickname() , character); } /** @@ -436,9 +433,9 @@ public class Game { private void finishPlayerTurn(Player player) { int slot = gameBoard.getTurnTile().returnTotem(player); OfferingTile off = gameBoard.getOfferingTile(player); - logger.info("player {} leaving offering {} " ,player.getNickname(), off); + //logger.info("player {} leaving offering {} " ,player.getNickname(), off); if(off!=null) off.setOccupant(null); - logger.info("player {} left offering {} slot {} " ,player.getNickname(), off, slot); + logger.debug("player {} left offering {} slot {} " ,player.getNickname(), off, slot); } @@ -456,7 +453,7 @@ public class Game { * Character or Building card (paying its cost) from the top row." */ private void onAllActionsResolved() { - logger.info("All actions resolved."); + logger.info("--- ALL ACTIONS RESOLVED ---"); extraDrawQueue.clear(); // Iterate in turn order so extra draws happen in a consistent sequence @@ -563,7 +560,7 @@ public class Game { state = GameState.EVENT_RESOLUTION; //notify( GameState.EVENT_RESOLUTION); - logger.info("--- End of round " + round + " ---"); + logger.info("--- START NEXT ROUND " + round + " ---"); boolean isFinalRound = (round == TOTAL_ROUNDS); @@ -573,7 +570,7 @@ public class Game { if (isFinalRound) { state = GameState.GAME_OVER; notify( GameState.GAME_OVER, endGame()); - logger.info("Round 10 complete — game over!"); + logger.info("============= GAME OVER ============"); return; } @@ -605,7 +602,7 @@ public class Game { : gameBoard.getVisibleEvents(); // already sorted by Era ordinal if (events.isEmpty()) { - logger.info("No events to resolve this round."); + logger.info("NO EVENTS TO SOLVE"); return; } @@ -634,7 +631,7 @@ public class Game { round++; notify( GameState.NEXT_ROUND, "Round="+ round); - logger.info("startNewRound: {}", round ); + logger.debug("startNewRound: {}", round ); totemPlacedCount = 0; currentOfferingTileIndex = 0; pendingActions.clear(); diff --git a/src/main/java/server/utils/GameUtils.java b/src/main/java/server/utils/GameUtils.java index 301579a..dcea79a 100644 --- a/src/main/java/server/utils/GameUtils.java +++ b/src/main/java/server/utils/GameUtils.java @@ -29,7 +29,7 @@ public class GameUtils { public static String formatTurnTile(TurnTile t) { //for (Player p : t.getPositions()){" : "occupied"); StringBuilder sb = new StringBuilder(); - sb.append("[TURN ORDER]\n"); + sb.append("Turn Tile\n"); for (int i = 0; i < t.getPositions().length; i++) { Player p = t.getPositions()[i];