mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-28 18:59:47 +01:00
Merge remote-tracking branch 'origin/gui' into gui
This commit is contained in:
commit
843052989b
18
Projekte/.run/MonopolyApp.run.xml
Normal file
18
Projekte/.run/MonopolyApp.run.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="MonopolyApp" type="Application" factoryName="Application" singleton="false"
|
||||||
|
nameIsGenerated="true">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="pp.monopoly.client.MonopolyApp"/>
|
||||||
|
<module name="Projekte.monopoly.client.main"/>
|
||||||
|
<option name="VM_PARAMETERS" value="-Djava.util.logging.config.file=logging.properties"/>
|
||||||
|
<option name="WORKING_DIRECTORY" value="$MODULE_WORKING_DIR$"/>
|
||||||
|
<extension name="coverage">
|
||||||
|
<pattern>
|
||||||
|
<option name="PATTERN" value="pp.monopoly.client.*"/>
|
||||||
|
<option name="ENABLED" value="true"/>
|
||||||
|
</pattern>
|
||||||
|
</extension>
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true"/>
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
17
Projekte/.run/MonopolyServer.run.xml
Normal file
17
Projekte/.run/MonopolyServer.run.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="MonopolyServer" type="Application" factoryName="Application"
|
||||||
|
nameIsGenerated="true">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="pp.monopoly.server.MonopolyServer"/>
|
||||||
|
<module name="Projekte.monopoly.server.main"/>
|
||||||
|
<option name="WORKING_DIRECTORY" value="$MODULE_WORKING_DIR$"/>
|
||||||
|
<extension name="coverage">
|
||||||
|
<pattern>
|
||||||
|
<option name="PATTERN" value="pp.monopoly.server.*"/>
|
||||||
|
<option name="ENABLED" value="true"/>
|
||||||
|
</pattern>
|
||||||
|
</extension>
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true"/>
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
@ -7,22 +7,21 @@
|
|||||||
|
|
||||||
package pp.battleship.client;
|
package pp.battleship.client;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
|
|
||||||
import com.simsilica.lemur.Button;
|
import com.simsilica.lemur.Button;
|
||||||
import com.simsilica.lemur.Checkbox;
|
import com.simsilica.lemur.Checkbox;
|
||||||
import com.simsilica.lemur.Label;
|
import com.simsilica.lemur.Label;
|
||||||
import com.simsilica.lemur.style.ElementId;
|
import com.simsilica.lemur.style.ElementId;
|
||||||
|
|
||||||
|
import static pp.battleship.Resources.lookup;
|
||||||
import pp.battleship.client.gui.GameMusic;
|
import pp.battleship.client.gui.GameMusic;
|
||||||
import pp.battleship.client.gui.VolumeSlider;
|
import pp.battleship.client.gui.VolumeSlider;
|
||||||
import pp.dialog.Dialog;
|
import pp.dialog.Dialog;
|
||||||
import pp.dialog.StateCheckboxModel;
|
import pp.dialog.StateCheckboxModel;
|
||||||
import pp.dialog.TextInputDialog;
|
import pp.dialog.TextInputDialog;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.prefs.Preferences;
|
|
||||||
|
|
||||||
import static pp.battleship.Resources.lookup;
|
|
||||||
import static pp.util.PreferencesUtils.getPreferences;
|
import static pp.util.PreferencesUtils.getPreferences;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,7 +38,7 @@ class Menu extends Dialog {
|
|||||||
private final VolumeSlider slider;
|
private final VolumeSlider slider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs the Menu dialog for the Battleship application.
|
* Constructs the Menu dialog for the Battleship application.+
|
||||||
*
|
*
|
||||||
* @param app the BattleshipApp instance
|
* @param app the BattleshipApp instance
|
||||||
*/
|
*/
|
||||||
|
@ -7,6 +7,7 @@ description = 'Monopoly Client'
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation project(":jme-common")
|
implementation project(":jme-common")
|
||||||
implementation project(":monopoly:model")
|
implementation project(":monopoly:model")
|
||||||
|
implementation project(":monopoly:server")
|
||||||
|
|
||||||
implementation libs.jme3.desktop
|
implementation libs.jme3.desktop
|
||||||
|
|
||||||
|
@ -9,8 +9,10 @@ import com.jme3.font.BitmapText;
|
|||||||
import com.jme3.input.KeyInput;
|
import com.jme3.input.KeyInput;
|
||||||
import com.jme3.input.controls.ActionListener;
|
import com.jme3.input.controls.ActionListener;
|
||||||
import com.jme3.input.controls.KeyTrigger;
|
import com.jme3.input.controls.KeyTrigger;
|
||||||
|
|
||||||
import com.jme3.system.AppSettings;
|
import com.jme3.system.AppSettings;
|
||||||
import com.simsilica.lemur.GuiGlobals;
|
import com.simsilica.lemur.GuiGlobals;
|
||||||
|
import com.simsilica.lemur.Label;
|
||||||
import com.simsilica.lemur.style.BaseStyles;
|
import com.simsilica.lemur.style.BaseStyles;
|
||||||
|
|
||||||
import pp.dialog.DialogBuilder;
|
import pp.dialog.DialogBuilder;
|
||||||
@ -23,6 +25,7 @@ import pp.monopoly.game.client.MonopolyClient;
|
|||||||
import pp.monopoly.game.client.ServerConnection;
|
import pp.monopoly.game.client.ServerConnection;
|
||||||
import pp.monopoly.notification.GameEventListener;
|
import pp.monopoly.notification.GameEventListener;
|
||||||
import pp.monopoly.notification.InfoTextEvent;
|
import pp.monopoly.notification.InfoTextEvent;
|
||||||
|
import pp.monopoly.server.MonopolyServer;
|
||||||
|
|
||||||
public class MonopolyApp extends SimpleApplication implements MonopolyClient, GameEventListener {
|
public class MonopolyApp extends SimpleApplication implements MonopolyClient, GameEventListener {
|
||||||
private BitmapText topText;
|
private BitmapText topText;
|
||||||
@ -37,6 +40,8 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga
|
|||||||
private TestWorld testWorld;
|
private TestWorld testWorld;
|
||||||
private boolean isSettingsMenuOpen = false;
|
private boolean isSettingsMenuOpen = false;
|
||||||
private boolean inputBlocked = false;
|
private boolean inputBlocked = false;
|
||||||
|
private MonopolyServer monopolyServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to the styles script for GUI elements.
|
* Path to the styles script for GUI elements.
|
||||||
*/
|
*/
|
||||||
@ -206,4 +211,21 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga
|
|||||||
guiNode.detachAllChildren(); // Entferne die GUI
|
guiNode.detachAllChildren(); // Entferne die GUI
|
||||||
StartMenu.createStartMenu(this); // Zeige das Startmenü erneut
|
StartMenu.createStartMenu(this); // Zeige das Startmenü erneut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Startet den Server in einem neuen Thread.
|
||||||
|
*/
|
||||||
|
public void startServer() {
|
||||||
|
new Thread(() -> {
|
||||||
|
try {
|
||||||
|
monopolyServer = new MonopolyServer(); // Erstelle Serverinstanz
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public MonopolyServer getMonopolyServer() {
|
||||||
|
return monopolyServer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package pp.monopoly.client;
|
package pp.monopoly.client;
|
||||||
|
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import com.jme3.math.ColorRGBA;
|
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
import com.jme3.scene.shape.Quad;
|
import com.jme3.scene.shape.Quad;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package pp.monopoly.client.gui;
|
package pp.monopoly.client.gui;
|
||||||
|
|
||||||
import com.jme3.input.KeyInput;
|
import javax.swing.JOptionPane;
|
||||||
import com.jme3.input.controls.ActionListener;
|
|
||||||
import com.jme3.input.controls.KeyTrigger;
|
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
|
import com.jme3.network.Client;
|
||||||
|
import com.jme3.network.Network;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
import com.jme3.scene.shape.Quad;
|
import com.jme3.scene.shape.Quad;
|
||||||
import com.jme3.texture.Texture;
|
import com.jme3.texture.Texture;
|
||||||
@ -17,6 +18,7 @@ import com.simsilica.lemur.component.SpringGridLayout;
|
|||||||
|
|
||||||
import pp.monopoly.client.MonopolyApp;
|
import pp.monopoly.client.MonopolyApp;
|
||||||
import pp.monopoly.client.StartMenu;
|
import pp.monopoly.client.StartMenu;
|
||||||
|
import pp.monopoly.server.MonopolyServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateGameMenu class represents the menu for creating a new game.
|
* CreateGameMenu class represents the menu for creating a new game.
|
||||||
@ -26,6 +28,7 @@ public class CreateGameMenu {
|
|||||||
private final MonopolyApp app;
|
private final MonopolyApp app;
|
||||||
private final Container menuContainer;
|
private final Container menuContainer;
|
||||||
private Geometry background;
|
private Geometry background;
|
||||||
|
private Label serverStatusLabel;
|
||||||
|
|
||||||
public CreateGameMenu(MonopolyApp app) {
|
public CreateGameMenu(MonopolyApp app) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
@ -64,15 +67,18 @@ public class CreateGameMenu {
|
|||||||
cancelButton.setPreferredSize(new Vector3f(120, 40, 0));
|
cancelButton.setPreferredSize(new Vector3f(120, 40, 0));
|
||||||
cancelButton.addClickCommands(source -> goBackToStartMenu());
|
cancelButton.addClickCommands(source -> goBackToStartMenu());
|
||||||
|
|
||||||
// "Spiel hosten"-Button (funktionslos)
|
// "Selber hosten"-Button
|
||||||
Button hostButton = buttonContainer.addChild(new Button("Spiel hosten"));
|
Button hostButton = buttonContainer.addChild(new Button("Selber hosten"));
|
||||||
hostButton.setPreferredSize(new Vector3f(120, 40, 0));
|
hostButton.setPreferredSize(new Vector3f(120, 40, 0));
|
||||||
// Keine Funktion zugewiesen
|
hostButton.addClickCommands(source -> app.startServer());
|
||||||
|
|
||||||
// "Beitreten"-Button (ebenfalls funktionslos, falls benötigt)
|
// "Beitreten"-Button (vorerst funktionslos)
|
||||||
Button joinButton = buttonContainer.addChild(new Button("Beitreten"));
|
Button joinButton = buttonContainer.addChild(new Button("Beitreten"));
|
||||||
joinButton.setPreferredSize(new Vector3f(120, 40, 0));
|
joinButton.setPreferredSize(new Vector3f(120, 40, 0));
|
||||||
// Keine Funktion zugewiesen
|
|
||||||
|
// Serverstatus-Label
|
||||||
|
serverStatusLabel = menuContainer.addChild(new Label("Serverstatus: Noch nicht gestartet"));
|
||||||
|
serverStatusLabel.setFontSize(24);
|
||||||
|
|
||||||
// Zentrierung des Containers
|
// Zentrierung des Containers
|
||||||
menuContainer.setLocalTranslation(
|
menuContainer.setLocalTranslation(
|
||||||
@ -81,10 +87,17 @@ public class CreateGameMenu {
|
|||||||
1 // Höhere Z-Ebene für den Vordergrund
|
1 // Höhere Z-Ebene für den Vordergrund
|
||||||
);
|
);
|
||||||
|
|
||||||
app.getGuiNode().attachChild(menuContainer);
|
app.getInputManager().addMapping("OpenTestWorld", new com.jme3.input.controls.KeyTrigger(com.jme3.input.KeyInput.KEY_T));
|
||||||
|
app.getInputManager().addListener(new com.jme3.input.controls.ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void onAction(String name, boolean isPressed, float tpf) {
|
||||||
|
if (name.equals("OpenTestWorld") && isPressed) {
|
||||||
|
app.startTestWorld(); // Öffnet die TestWorld
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, "OpenTestWorld");
|
||||||
|
|
||||||
// Key-Mapping für Taste "T"
|
app.getGuiNode().attachChild(menuContainer);
|
||||||
setupKeyMappings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -110,30 +123,4 @@ public class CreateGameMenu {
|
|||||||
app.getGuiNode().detachChild(background); // Entfernt das Hintergrundbild
|
app.getGuiNode().detachChild(background); // Entfernt das Hintergrundbild
|
||||||
StartMenu.createStartMenu(app);
|
StartMenu.createStartMenu(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fügt ein Key-Mapping hinzu, um die TestWorld mit der Taste "T" zu öffnen.
|
|
||||||
*/
|
|
||||||
private void setupKeyMappings() {
|
|
||||||
app.getInputManager().addMapping("OpenTestWorld", new KeyTrigger(KeyInput.KEY_T));
|
|
||||||
app.getInputManager().addListener(actionListener, "OpenTestWorld");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ActionListener, um auf Tastendrücke zu reagieren.
|
|
||||||
*/
|
|
||||||
private final ActionListener actionListener = (name, isPressed, tpf) -> {
|
|
||||||
if (name.equals("OpenTestWorld") && isPressed) {
|
|
||||||
openTestWorld();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Öffnet die TestWorld.
|
|
||||||
*/
|
|
||||||
private void openTestWorld() {
|
|
||||||
app.getGuiNode().detachChild(menuContainer);
|
|
||||||
app.getGuiNode().detachChild(background); // Entfernt das Hintergrundbild
|
|
||||||
app.startTestWorld(); // Öffne die TestWorld
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,89 @@
|
|||||||
|
package pp.monopoly.client.gui;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.FlowLayout;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
public class ServerScreen {
|
||||||
|
private JFrame frame;
|
||||||
|
private JTextField inputField;
|
||||||
|
private JLabel label;
|
||||||
|
private JButton startButton;
|
||||||
|
private JButton stopButton;
|
||||||
|
|
||||||
|
public ServerScreen() {
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initialize() {
|
||||||
|
// Erstelle das Hauptfenster
|
||||||
|
frame = new JFrame("Server Placeholder"); // Setze den Titel
|
||||||
|
frame.setSize(400, 200);
|
||||||
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
frame.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
// Eingabefeld und Label im oberen Bereich
|
||||||
|
JPanel topPanel = new JPanel();
|
||||||
|
topPanel.setLayout(new FlowLayout());
|
||||||
|
|
||||||
|
label = new JLabel("Server-Port:");
|
||||||
|
inputField = new JTextField("42069", 10);
|
||||||
|
topPanel.add(label);
|
||||||
|
topPanel.add(inputField);
|
||||||
|
|
||||||
|
// Buttons im unteren Bereich
|
||||||
|
JPanel bottomPanel = new JPanel();
|
||||||
|
bottomPanel.setLayout(new FlowLayout());
|
||||||
|
|
||||||
|
startButton = new JButton("Start Server");
|
||||||
|
stopButton = new JButton("Stop Server");
|
||||||
|
stopButton.setEnabled(false); // Stop-Button ist anfangs deaktiviert
|
||||||
|
|
||||||
|
bottomPanel.add(startButton);
|
||||||
|
bottomPanel.add(stopButton);
|
||||||
|
|
||||||
|
// Füge die Panels zum Hauptfenster hinzu
|
||||||
|
frame.add(topPanel, BorderLayout.NORTH);
|
||||||
|
frame.add(bottomPanel, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
// Aktion für Start-Button
|
||||||
|
startButton.addActionListener(e -> startServer());
|
||||||
|
|
||||||
|
// Aktion für Stop-Button
|
||||||
|
stopButton.addActionListener(e -> stopServer());
|
||||||
|
|
||||||
|
// Zeige das Fenster
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startServer() {
|
||||||
|
String port = inputField.getText();
|
||||||
|
try {
|
||||||
|
int portNumber = Integer.parseInt(port);
|
||||||
|
// Server-Startlogik hier einfügen
|
||||||
|
JOptionPane.showMessageDialog(frame, "Server gestartet auf Port " + portNumber);
|
||||||
|
startButton.setEnabled(false); // Deaktiviere den Start-Button
|
||||||
|
stopButton.setEnabled(true); // Aktiviere den Stop-Button
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
JOptionPane.showMessageDialog(frame, "Ungültiger Port: " + port, "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopServer() {
|
||||||
|
// Server-Stoplogik hier einfügen
|
||||||
|
JOptionPane.showMessageDialog(frame, "Server gestoppt.");
|
||||||
|
startButton.setEnabled(true); // Aktiviere den Start-Button
|
||||||
|
stopButton.setEnabled(false); // Deaktiviere den Stop-Button
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SwingUtilities.invokeLater(ServerScreen::new);
|
||||||
|
}
|
||||||
|
}
|
@ -56,6 +56,7 @@ public class SettingsMenu extends Dialog {
|
|||||||
Button quitButton = settingsContainer.addChild(new Button("Beenden", new ElementId("menu-button")));
|
Button quitButton = settingsContainer.addChild(new Button("Beenden", new ElementId("menu-button")));
|
||||||
quitButton.setFontSize(32);
|
quitButton.setFontSize(32);
|
||||||
quitButton.addClickCommands(source -> app.stop());
|
quitButton.addClickCommands(source -> app.stop());
|
||||||
|
|
||||||
|
|
||||||
// Zentriere das Menü
|
// Zentriere das Menü
|
||||||
settingsContainer.setLocalTranslation(
|
settingsContainer.setLocalTranslation(
|
||||||
|
@ -7,13 +7,10 @@
|
|||||||
|
|
||||||
package pp.monopoly;
|
package pp.monopoly;
|
||||||
|
|
||||||
import pp.util.config.Config;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import static java.lang.Math.max;
|
import static java.lang.Math.max;
|
||||||
|
|
||||||
|
import pp.util.config.Config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to the configuration settings for the Monopoly game.
|
* Provides access to the configuration settings for the Monopoly game.
|
||||||
* <p>
|
* <p>
|
||||||
@ -31,7 +28,7 @@ public class MonopolyConfig extends Config {
|
|||||||
* The default port number for the Monopoly server.
|
* The default port number for the Monopoly server.
|
||||||
*/
|
*/
|
||||||
@Property("port")
|
@Property("port")
|
||||||
private int port = 1234;
|
private int port = 42069;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The width of the game map in terms of grid units.
|
* The width of the game map in terms of grid units.
|
||||||
|
@ -65,7 +65,7 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
|
|||||||
/**
|
/**
|
||||||
* Creates the server.
|
* Creates the server.
|
||||||
*/
|
*/
|
||||||
MonopolyServer() {
|
public MonopolyServer() {
|
||||||
config.readFromIfExists(CONFIG_FILE);
|
config.readFromIfExists(CONFIG_FILE);
|
||||||
LOGGER.log(Level.INFO, "Configuration: {0}", config); //NON-NLS
|
LOGGER.log(Level.INFO, "Configuration: {0}", config); //NON-NLS
|
||||||
logic = new ServerGameLogic(this, config);
|
logic = new ServerGameLogic(this, config);
|
||||||
|
Loading…
Reference in New Issue
Block a user