Compare commits
	
		
			6 Commits
		
	
	
		
			42fefb2899
			...
			170afe2718
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					170afe2718 | ||
| 
						 | 
					17220c228b | ||
| 
						 | 
					0f1be83064 | ||
| 
						 | 
					e0ab09295d | ||
| 
						 | 
					758e9b8397 | ||
| 
						 | 
					b3fe289fbe | 
@@ -218,7 +218,6 @@ selector("button", "pp") {
 | 
			
		||||
    insets = new Insets3f(3, 3, 3, 3) // Adjust the border thickness
 | 
			
		||||
    textHAlignment = HAlignment.Center
 | 
			
		||||
    textVAlignment = VAlignment.Center
 | 
			
		||||
    buttonCommands = stdButtonCommands
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
selector("slider", "pp") {
 | 
			
		||||
@@ -387,7 +386,7 @@ selector("button-toolbar", "pp") {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
selector("button-toolbar2", "pp") { playerColor ->
 | 
			
		||||
selector("button-clear", "pp") { playerColor ->
 | 
			
		||||
    def validColor = playerColor ?: new ColorRGBA(0, 0, 0, 0) // Vollständig transparent
 | 
			
		||||
    def playerGradientBackground = new QuadBackgroundComponent(validColor)
 | 
			
		||||
 | 
			
		||||
@@ -395,12 +394,7 @@ selector("button-toolbar2", "pp") { playerColor ->
 | 
			
		||||
    playerGradientBackground.setColor(new ColorRGBA(0, 0, 0, 0)) // RGBA (Rot, Grün, Blau, Alpha)
 | 
			
		||||
 | 
			
		||||
    background = playerGradientBackground.clone() // Setze den Hintergrund
 | 
			
		||||
    insets = new Insets3f(3, 3, 3, 3) // Optional: Ränder
 | 
			
		||||
    insets = new Insets3f(-3, -3, -3, -3) // Optional: Ränder
 | 
			
		||||
    textHAlignment = HAlignment.Center // Text-Zentrierung
 | 
			
		||||
    textVAlignment = VAlignment.Center // Text-Zentrierung
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,38 +2,92 @@ package pp.monopoly.client.gui;
 | 
			
		||||
 | 
			
		||||
import com.jme3.texture.Texture;
 | 
			
		||||
import com.simsilica.lemur.Button;
 | 
			
		||||
import com.simsilica.lemur.Command;
 | 
			
		||||
import com.simsilica.lemur.component.QuadBackgroundComponent;
 | 
			
		||||
import com.simsilica.lemur.style.ElementId;
 | 
			
		||||
 | 
			
		||||
import pp.monopoly.client.MonopolyApp;
 | 
			
		||||
import pp.monopoly.game.server.Player;
 | 
			
		||||
import pp.monopoly.game.server.PlayerColor;
 | 
			
		||||
import pp.monopoly.notification.Sound;
 | 
			
		||||
 | 
			
		||||
public class ImageButton extends Button {
 | 
			
		||||
 | 
			
		||||
    private final String file;
 | 
			
		||||
    private static MonopolyApp app;
 | 
			
		||||
    private final MonopolyApp app;
 | 
			
		||||
    private final String functionality;
 | 
			
		||||
    private final PlayerColor playerColor;
 | 
			
		||||
 | 
			
		||||
    public ImageButton( String s, String file, MonopolyApp app ) {
 | 
			
		||||
        this(s, true, new ElementId(ELEMENT_ID), null, file, app);
 | 
			
		||||
    public ImageButton(String functionality, MonopolyApp app) {
 | 
			
		||||
        super("", "button-clear");
 | 
			
		||||
        this.app = app;
 | 
			
		||||
        this.functionality = functionality;
 | 
			
		||||
        this.playerColor = Player.getColor(app.getId());
 | 
			
		||||
 | 
			
		||||
        updateButtonAppearance(ButtonState.ENABLED);
 | 
			
		||||
        addButtonCommands();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ImageButton( String s, String style, String file, MonopolyApp app ) {
 | 
			
		||||
        this(s, true, new ElementId(ELEMENT_ID), style, file, app);
 | 
			
		||||
    /**
 | 
			
		||||
     * Updates the button's appearance based on its state.
 | 
			
		||||
     *
 | 
			
		||||
     * @param state the current button state
 | 
			
		||||
     */
 | 
			
		||||
    private void updateButtonAppearance(ButtonState state) {
 | 
			
		||||
        setBackgroundTexture(state.name().toLowerCase());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ImageButton( String s, ElementId elementId, String file, MonopolyApp app ) {
 | 
			
		||||
        this(s, true, elementId, null, file, app);
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds button commands for state-specific actions like hover, press, enable, and disable.
 | 
			
		||||
     */
 | 
			
		||||
    private void addButtonCommands() {
 | 
			
		||||
        addCommands(ButtonAction.Enabled, source -> updateButtonAppearance(ButtonState.ENABLED));
 | 
			
		||||
        addCommands(ButtonAction.Disabled, source -> updateButtonAppearance(ButtonState.DISABLED));
 | 
			
		||||
        addCommands(ButtonAction.Hover, source -> {
 | 
			
		||||
            if (isEnabled()) {
 | 
			
		||||
                updateButtonAppearance(ButtonState.HOVER);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        addCommands(ButtonAction.HighlightOff, source -> updateButtonAppearance(isEnabled() ? ButtonState.ENABLED : ButtonState.DISABLED));
 | 
			
		||||
        addCommands(ButtonAction.Up, source -> updateButtonAppearance(isEnabled() ? ButtonState.ENABLED : ButtonState.DISABLED));
 | 
			
		||||
        addCommands(ButtonAction.Down, source -> {
 | 
			
		||||
            if (isEnabled()) {
 | 
			
		||||
                app.getGameLogic().playSound(Sound.BUTTON);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ImageButton( String s, ElementId elementId, String style, String file, MonopolyApp app ) {
 | 
			
		||||
        this(s, true, elementId, style, file, app);
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the background texture for the button based on the given state.
 | 
			
		||||
     *
 | 
			
		||||
     * @param state the button state (e.g., "enabled", "disabled", "hover")
 | 
			
		||||
     */
 | 
			
		||||
    private void setBackgroundTexture(String state) {
 | 
			
		||||
        String texturePath = buildTexturePath(state);
 | 
			
		||||
        Texture texture = app.getAssetManager().loadTexture(texturePath);
 | 
			
		||||
        setBackground(new QuadBackgroundComponent(texture));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected ImageButton( String s, boolean applyStyles, ElementId elementId, String style, String file, MonopolyApp app ) {
 | 
			
		||||
        super(s, false, elementId, style);
 | 
			
		||||
        this.file = file;
 | 
			
		||||
        ImageButton.app = app;
 | 
			
		||||
        Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/Buttons/"+file+".png");
 | 
			
		||||
        setBackground(new QuadBackgroundComponent(backgroundImage));
 | 
			
		||||
    /**
 | 
			
		||||
     * Builds the file path for the button texture.
 | 
			
		||||
     *
 | 
			
		||||
     * @param state the button state (e.g., "enabled", "disabled", "hover")
 | 
			
		||||
     * @return the full file path to the texture
 | 
			
		||||
     */
 | 
			
		||||
    private String buildTexturePath(String state) {
 | 
			
		||||
        return String.format("Pictures/Buttons/Button_%s_%s_%s.png", functionality, playerColor.getColorName(), state);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Button states for handling appearance transitions.
 | 
			
		||||
     */
 | 
			
		||||
    private enum ButtonState {
 | 
			
		||||
        ENABLED, DISABLED, HOVER
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addClickCommands( Command<? super Button> command ) {
 | 
			
		||||
        super.addCommands(ButtonAction.Down, command);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("unchecked") // because Java doesn't like var-arg generics
 | 
			
		||||
    public void addClickCommands( Command<? super Button>... commands ) {
 | 
			
		||||
        super.addCommands(ButtonAction.Down, commands);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -79,6 +79,8 @@ public class Toolbar extends Dialog implements GameEventListener {
 | 
			
		||||
 | 
			
		||||
        toolbarContainer = setupToolbar();
 | 
			
		||||
        app.getGuiNode().attachChild(toolbarContainer);
 | 
			
		||||
 | 
			
		||||
        endTurnButton.setEnabled(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -175,9 +177,9 @@ public class Toolbar extends Dialog implements GameEventListener {
 | 
			
		||||
     */
 | 
			
		||||
    private void setupActionMenu(Container container) {
 | 
			
		||||
        Container menuContainer = container.addChild(new Container());
 | 
			
		||||
        menuContainer.addChild(createTradeButton(getCurrentPlayerColor()));
 | 
			
		||||
        menuContainer.addChild(createPropertyMenuButton(getCurrentPlayerColor()));
 | 
			
		||||
        menuContainer.addChild(createEndTurnButton(getCurrentPlayerColor()));
 | 
			
		||||
        menuContainer.addChild(createTradeButton());
 | 
			
		||||
        menuContainer.addChild(createPropertyMenuButton());
 | 
			
		||||
        menuContainer.addChild(createEndTurnButton());
 | 
			
		||||
        menuContainer.setBackground(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -278,58 +280,65 @@ public class Toolbar extends Dialog implements GameEventListener {
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a trade button with the specified player color.
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerColor The color of the player.
 | 
			
		||||
     * @return The button representing the trade action.
 | 
			
		||||
     */
 | 
			
		||||
    private Button createTradeButton(ColorRGBA playerColor) {
 | 
			
		||||
        return createActionButton(playerColor, "icons/icon-handeln.png", 100, () -> new ChoosePartner(app).open());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a property menu button with the specified player color.
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerColor The color of the player.
 | 
			
		||||
     * @return The button representing the property menu action.
 | 
			
		||||
     */
 | 
			
		||||
    private Button createPropertyMenuButton(ColorRGBA playerColor) {
 | 
			
		||||
        return createActionButton(playerColor, "icons/icon-gebaude.png", 75, () -> new BuildingAdminMenu(app).open());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates an end turn button with the specified player color.
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerColor The color of the player.
 | 
			
		||||
     * @return The button representing the end turn action.
 | 
			
		||||
     */
 | 
			
		||||
    private Button createEndTurnButton(ColorRGBA playerColor) {
 | 
			
		||||
        return createActionButton(playerColor, "icons/icon-zugbeenden.png", 75, () -> handleEndTurn());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates an action button with the specified color, icon path, icon size, and action.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color    The color of the button.
 | 
			
		||||
     * @param iconPath The path to the icon image.
 | 
			
		||||
     * @param iconSize The size of the icon.
 | 
			
		||||
     * @param action   The action to perform when the button is clicked.
 | 
			
		||||
     * @return The button representing the action.
 | 
			
		||||
     */
 | 
			
		||||
    private Button createActionButton(ColorRGBA color, String iconPath, int iconSize, Runnable action) {
 | 
			
		||||
        Button button = new Button("", new ElementId("button-toolbar2"));
 | 
			
		||||
        button.setPreferredSize(new Vector3f(150, 50, 0));
 | 
			
		||||
        button.setBackground(createButtonBackground(color));
 | 
			
		||||
    private Button createTradeButton() {
 | 
			
		||||
        String iconPath = "icons/icon-handeln.png";
 | 
			
		||||
        // createActionButton(playerColor, "icons/icon-handeln.png", 100, () -> new ChoosePartner(app).open());
 | 
			
		||||
        tradeButton = new ImageButton("generic", app);
 | 
			
		||||
        tradeButton.setPreferredSize(new Vector3f(150, 50, 0));
 | 
			
		||||
 | 
			
		||||
        IconComponent icon = new IconComponent(iconPath);
 | 
			
		||||
        icon.setHAlignment(HAlignment.Center);
 | 
			
		||||
        icon.setVAlignment(VAlignment.Center);
 | 
			
		||||
        icon.setIconSize(new Vector2f(iconSize, iconSize));
 | 
			
		||||
        button.setIcon(icon);
 | 
			
		||||
        icon.setIconSize(new Vector2f(75 , 75));
 | 
			
		||||
        tradeButton.setIcon(icon);
 | 
			
		||||
 | 
			
		||||
        button.addClickCommands(source -> ifTopDialog(action));
 | 
			
		||||
        return button;
 | 
			
		||||
        tradeButton.addClickCommands(s -> ifTopDialog(() -> {
 | 
			
		||||
            new ChoosePartner(app).open();
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        return tradeButton;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private Button createPropertyMenuButton() {
 | 
			
		||||
 | 
			
		||||
        String iconPath = "icons/icon-gebaude.png";
 | 
			
		||||
        propertyMenuButton = new ImageButton("generic", app);
 | 
			
		||||
        propertyMenuButton.setPreferredSize(new Vector3f(150, 50, 0));
 | 
			
		||||
 | 
			
		||||
        IconComponent icon = new IconComponent(iconPath);
 | 
			
		||||
        icon.setHAlignment(HAlignment.Center);
 | 
			
		||||
        icon.setVAlignment(VAlignment.Center);
 | 
			
		||||
        icon.setIconSize(new Vector2f(50 , 50));
 | 
			
		||||
        propertyMenuButton.setIcon(icon);
 | 
			
		||||
 | 
			
		||||
        propertyMenuButton.addClickCommands(s -> ifTopDialog(() -> {
 | 
			
		||||
            new BuildingAdminMenu(app).open();
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        return propertyMenuButton;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Button createEndTurnButton() {
 | 
			
		||||
        // return createActionButton(playerColor, "icons/icon-zugbeenden.png", 75, () -> handleEndTurn());
 | 
			
		||||
 | 
			
		||||
        String iconPath = "icons/icon-zugbeenden.png";
 | 
			
		||||
        endTurnButton = new ImageButton("generic", app);
 | 
			
		||||
        endTurnButton.setPreferredSize(new Vector3f(150, 50, 0));
 | 
			
		||||
 | 
			
		||||
        IconComponent icon = new IconComponent(iconPath);
 | 
			
		||||
        icon.setHAlignment(HAlignment.Center);
 | 
			
		||||
        icon.setVAlignment(VAlignment.Center);
 | 
			
		||||
        icon.setIconSize(new Vector2f(50 , 50));
 | 
			
		||||
        endTurnButton.setIcon(icon);
 | 
			
		||||
 | 
			
		||||
        endTurnButton.addClickCommands(s -> ifTopDialog(() -> {
 | 
			
		||||
            app.getGameLogic().send(new EndTurn());
 | 
			
		||||
            receivedEvent(new ButtonStatusEvent(false));
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        return endTurnButton;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -517,11 +526,12 @@ public class Toolbar extends Dialog implements GameEventListener {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void receivedEvent(ButtonStatusEvent event) {
 | 
			
		||||
        System.out.println("Button status event received: " + event.buttonsEnabled()+ "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG");
 | 
			
		||||
        boolean enabled = event.buttonsEnabled();
 | 
			
		||||
        canRollDice = enabled;
 | 
			
		||||
        if (tradeButton != null) tradeButton.setEnabled(enabled);
 | 
			
		||||
        if (propertyMenuButton != null) propertyMenuButton.setEnabled(enabled);
 | 
			
		||||
        if (endTurnButton != null) endTurnButton.setEnabled(false);
 | 
			
		||||
        tradeButton.setEnabled(enabled);
 | 
			
		||||
        propertyMenuButton.setEnabled(enabled);
 | 
			
		||||
        endTurnButton.setEnabled(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
| 
		 After Width: | Height: | Size: 25 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
| 
		 After Width: | Height: | Size: 39 KiB  | 
| 
		 After Width: | Height: | Size: 26 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
| 
		 After Width: | Height: | Size: 46 KiB  | 
| 
		 After Width: | Height: | Size: 27 KiB  | 
| 
		 After Width: | Height: | Size: 18 KiB  | 
| 
		 After Width: | Height: | Size: 49 KiB  | 
| 
		 After Width: | Height: | Size: 26 KiB  | 
| 
		 After Width: | Height: | Size: 18 KiB  | 
| 
		 After Width: | Height: | Size: 46 KiB  | 
| 
		 After Width: | Height: | Size: 24 KiB  | 
| 
		 After Width: | Height: | Size: 16 KiB  | 
| 
		 After Width: | Height: | Size: 37 KiB  | 
| 
		 After Width: | Height: | Size: 27 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
| 
		 After Width: | Height: | Size: 48 KiB  | 
@@ -447,16 +447,99 @@ public class ServerGameLogic implements ClientInterpreter {
 | 
			
		||||
        } else if (msg.getKeyword().equals("PayJail")) {
 | 
			
		||||
            playerHandler.getPlayerById(from).payBail();
 | 
			
		||||
        } else if(msg.getKeyword().equals("hack")) {
 | 
			
		||||
            // for (BuildingProperty bp : boardManager.getPropertyFields( List.of(1,3)).stream().filter(p -> p instanceof BuildingProperty).map(p -> (BuildingProperty) p).collect(Collectors.toList())) {
 | 
			
		||||
            //     bp.build();
 | 
			
		||||
            // }
 | 
			
		||||
            for(PropertyField field : boardManager.getBoard().stream().filter(p -> p instanceof PropertyField).map(p -> (PropertyField) p).collect(Collectors.toList())) {
 | 
			
		||||
                field.setOwner(playerHandler.getPlayerById(0));
 | 
			
		||||
                playerHandler.getPlayerById(0).addProperty(field.getId());
 | 
			
		||||
            }
 | 
			
		||||
            playerHandler.getPlayerById(0).earnMoney(20000);
 | 
			
		||||
            generatePredefinedGameState();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        updateAllPlayers();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void generatePredefinedGameState() {
 | 
			
		||||
        // Ensure at least two players exist
 | 
			
		||||
        if (playerHandler.getPlayers().size() < 2) {
 | 
			
		||||
            Player player1 = new Player(0, "Player1", playerHandler);
 | 
			
		||||
            Player player2 = new Player(1, "Player2", playerHandler);
 | 
			
		||||
    
 | 
			
		||||
            playerHandler.addPlayer(player1);
 | 
			
		||||
            playerHandler.addPlayer(player2);
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        Player p1 = playerHandler.getPlayerById(0);
 | 
			
		||||
        Player p2 = playerHandler.getPlayerById(1);
 | 
			
		||||
    
 | 
			
		||||
        // Reset properties and balances for a clean state
 | 
			
		||||
        p1.getProperties().clear();
 | 
			
		||||
        p2.getProperties().clear();
 | 
			
		||||
        boardManager.getBoard().forEach(field -> {
 | 
			
		||||
            if (field instanceof PropertyField) {
 | 
			
		||||
                ((PropertyField) field).setOwner(null);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    
 | 
			
		||||
        // Define properties to assign
 | 
			
		||||
        Set<Integer> p1Properties = Set.of(1, 3, 6, 8); // Gym, Sportplatz, Studium+, PhysikHörsaal
 | 
			
		||||
        Set<Integer> p2Properties = Set.of(21, 23, 24, 9); // Red set + Audimax
 | 
			
		||||
    
 | 
			
		||||
        // Assign properties via AlterProperty
 | 
			
		||||
        assignProperties(p1, p1Properties);
 | 
			
		||||
        assignProperties(p2, p2Properties);
 | 
			
		||||
    
 | 
			
		||||
        // Player 1 builds houses on Gym and Sportplatz
 | 
			
		||||
        buildHouses(p1, Set.of(1, 3));
 | 
			
		||||
    
 | 
			
		||||
        // Player 2 builds houses on the Red set
 | 
			
		||||
        buildHouses(p2, Set.of(21, 23, 24));
 | 
			
		||||
    
 | 
			
		||||
        // Set player balances
 | 
			
		||||
        p1.setAccountBalance(12325);
 | 
			
		||||
        p2.setAccountBalance(26750);
 | 
			
		||||
    
 | 
			
		||||
        // Add Get Out of Jail cards
 | 
			
		||||
        p1.addJailCard();
 | 
			
		||||
    
 | 
			
		||||
        // Set player positions
 | 
			
		||||
        p1.setPosition(6); // Near Studium+
 | 
			
		||||
        p2.setPosition(25); // Near Nordtor
 | 
			
		||||
    
 | 
			
		||||
        LOGGER.log(Level.INFO, "Predefined game state generated.");
 | 
			
		||||
        updateAllPlayers();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Assigns properties to a player using AlterProperty messages.
 | 
			
		||||
     *
 | 
			
		||||
     * @param player     the player to assign properties to
 | 
			
		||||
     * @param properties the set of property IDs to assign
 | 
			
		||||
     */
 | 
			
		||||
    private void assignProperties(Player player, Set<Integer> properties) {
 | 
			
		||||
        AlterProperty alterProperty = new AlterProperty("AssignProperties");
 | 
			
		||||
        alterProperty.setProperties(properties);
 | 
			
		||||
    
 | 
			
		||||
        for (Integer propertyId : properties) {
 | 
			
		||||
            PropertyField field = (PropertyField) boardManager.getFieldAtIndex(propertyId);
 | 
			
		||||
            field.setOwner(player);
 | 
			
		||||
            player.addProperty(propertyId);
 | 
			
		||||
        }
 | 
			
		||||
        LOGGER.log(Level.DEBUG, "Properties assigned to player {0}: {1}", player.getName(), properties);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Builds houses for a player on specific properties using AlterProperty messages.
 | 
			
		||||
     *
 | 
			
		||||
     * @param player     the player building houses
 | 
			
		||||
     * @param properties the set of property IDs to build houses on
 | 
			
		||||
     */
 | 
			
		||||
    private void buildHouses(Player player, Set<Integer> properties) {
 | 
			
		||||
        AlterProperty alterProperty = new AlterProperty("BuyHouse");
 | 
			
		||||
        alterProperty.setProperties(properties);
 | 
			
		||||
    
 | 
			
		||||
        for (Integer propertyId : properties) {
 | 
			
		||||
            BuildingProperty field = (BuildingProperty) boardManager.getFieldAtIndex(propertyId);
 | 
			
		||||
            if (boardManager.canBuild(field) && player.getAccountBalance() >= field.getHousePrice()) {
 | 
			
		||||
                field.build();
 | 
			
		||||
                player.pay(field.getHousePrice());
 | 
			
		||||
                LOGGER.log(Level.DEBUG, "House built on property {0} for player {1}.", field.getName(), player.getName());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        // Arrange: Spieler initialisieren und Position setzen
 | 
			
		||||
        Player player = new Player(1, "Testspieler", mock(PlayerHandler.class)); // Spieler-Objekt erstellen
 | 
			
		||||
        Figure figure = mock(Figure.class); // Mock für die Spielfigur
 | 
			
		||||
        player.setFigure(figure); // Mock-Figur dem Spieler zuweisen
 | 
			
		||||
        
 | 
			
		||||
        int initialFieldID = player.getFieldID(); // Startfeld
 | 
			
		||||
        DiceResult diceResult = new DiceResult(3, 4); // Würfel: 3 und 4
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +106,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
 | 
			
		||||
        // Assert: Position überprüfen und sicherstellen, dass `figure.moveTo` aufgerufen wurde
 | 
			
		||||
        assertEquals(expectedFieldID, player.getFieldID()); // Überprüfen, ob der Spieler auf dem erwarteten Feld ist
 | 
			
		||||
        verify(figure).moveTo(expectedFieldID); // Sicherstellen, dass die Figur bewegt wurde
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -748,7 +748,6 @@ public class ServerGameLogicTest {
 | 
			
		||||
 | 
			
		||||
        // Create a player with mocked handler
 | 
			
		||||
        Player player = new Player(1, "Spieler 1", handler);
 | 
			
		||||
        player.setFigure(figure); // Set the mocked figure
 | 
			
		||||
        // player.setPosition(5); // Set the initial position
 | 
			
		||||
 | 
			
		||||
        // Stub handler.getLogic() to return mocked ServerGameLogic
 | 
			
		||||
@@ -1028,7 +1027,11 @@ public class ServerGameLogicTest {
 | 
			
		||||
 | 
			
		||||
        player.jail();
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            player.payBail();
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Assert: Spieler ist nicht mehr im Gulag und Geld wurde abgezogen
 | 
			
		||||
        assertTrue(player.canFinishTurn()); // Spieler kann den Zug beenden
 | 
			
		||||
@@ -1231,10 +1234,6 @@ public class ServerGameLogicTest {
 | 
			
		||||
        handler.addPlayer(player2);
 | 
			
		||||
        handler.addPlayer(player3);
 | 
			
		||||
 | 
			
		||||
        player1.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        player2.setFigure(figure);
 | 
			
		||||
        player3.setFigure(figure);
 | 
			
		||||
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
        Card card = null;
 | 
			
		||||
@@ -1263,7 +1262,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        // Arrange
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(null);
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure);
 | 
			
		||||
        
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
        Card card = null;
 | 
			
		||||
@@ -1290,7 +1289,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        // Arrange
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(null);
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
        Card card = null;
 | 
			
		||||
@@ -1316,7 +1315,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        // Arrange
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(null);
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
        Card card = null;
 | 
			
		||||
@@ -1346,7 +1345,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
        Card card = null;
 | 
			
		||||
@@ -1370,7 +1369,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1395,7 +1394,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1422,7 +1421,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1449,7 +1448,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1484,7 +1483,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        player.setAccountBalance(1500); // Startguthaben
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
@@ -1511,7 +1510,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1542,7 +1541,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1565,7 +1564,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            player.setPosition(10); // Starte auf Position 10
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
@@ -1594,7 +1593,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Übergebe den Mock
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Zuweisung einer Spielfigur
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler zur Liste hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1619,7 +1618,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1644,7 +1643,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1673,7 +1672,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler 1 hinzufügen
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1698,7 +1697,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        player.setAccountBalance(1500); // Startsaldo setzen
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
@@ -1725,7 +1724,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        player.setAccountBalance(1500); // Startsaldo setzen
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
@@ -1753,7 +1752,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 | 
			
		||||
@@ -1780,7 +1779,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        player.setAccountBalance(15000); // Anfangsstand des Kontos
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
@@ -1806,7 +1805,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        player.setAccountBalance(15000); // Anfangsstand des Kontos
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
@@ -1833,7 +1832,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        player.setAccountBalance(15000); // Anfangsstand des Kontos
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
@@ -1860,7 +1859,7 @@ public class ServerGameLogicTest {
 | 
			
		||||
        ServerGameLogic logic = mock(ServerGameLogic.class); // Mock der ServerGameLogic
 | 
			
		||||
        PlayerHandler handler = new PlayerHandler(logic); // Mock-Logik übergeben
 | 
			
		||||
        Player player = new Player(1, handler);
 | 
			
		||||
        player.setFigure(figure); // Spielfigur setzen
 | 
			
		||||
        
 | 
			
		||||
        handler.addPlayer(player); // Spieler hinzufügen
 | 
			
		||||
        player.setAccountBalance(15000); // Startguthaben des Spielers
 | 
			
		||||
        DeckHelper deckHelper = new DeckHelper();
 | 
			
		||||
 
 | 
			
		||||