diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/Documentation/ProjectNotes.txt b/Documentation/ProjectNotes.txt new file mode 100644 index 0000000000000000000000000000000000000000..0fc15ced5d7e78a33efb915f97124ce9c50960aa --- /dev/null +++ b/Documentation/ProjectNotes.txt @@ -0,0 +1,112 @@ +------------------------------------------------------------------------------------- +Milestones: +------------------------------------------------------------------------------------- + +1. Main Menu (als Grundstruktur) +2. Game-Engine + -World-Builder + -Player +3. Rudimentäre Spielfunktion +4. Powerups und Multiplayer an Tastatur +5. Computer Gegner-KI und Statistiken +6. Netzwerk Multiplayer und Map-Builder +7. Parallelisierung (Audio) + +Optional: +8. Open World + +------------------------------------------------------------------------------------- +Mögliche Aufgabenverteilung: +------------------------------------------------------------------------------------- + +-Hauptmenü +-Netzwerkfunktion +-Datenbankanbindung +-Kernspiel (3-4 Personen) +-Map-Builder + +------------------------------------------------------------------------------------- +Anforderungen: +------------------------------------------------------------------------------------- + +-UI +-Networking + +------------------------------------------------------------------------------------- +Anforderungsanalyse: +------------------------------------------------------------------------------------- + +Inventar: + -nicht funktional: Anzeige an Spieler + -funktional: Speicherung in Datenbank + +Multiplayer: + -nicht funktional: Multiplayer integriert + -funktional: Umsetzung z.B. mit Network-Framework + +------------------------------------------------------------------------------------- +Random ideas: +------------------------------------------------------------------------------------- + +-wenn Bombe gelegt wurde kann, solange keine weitere gelegt werden bis sie explodiert ist +-außer man hat Multibomb Powerup + +-Startbereich muss immer frei bleiben, auch bei Map-Builder + + +_________________________________________________________________________________________ +Aktueller Stand vom 30.10. : +Spielidee +Kämpfe in der Arena + +Ideen: +• Map auf max. Bildschirmgröße +• Multiplayer per Network und Tasten +• Spieler bekämpft Gegner +• Inventar (Datenbank) mit + o Nah-: Bomben, Schwerter, … + o und Fernkampfwaffen: Raketen, Miniguns, … + o Powerups: Rüstungen, etc + +• Shopsystem, um neue Items zu bekommen (Sammeln von Wert-Items ïƒ evtl. Speichersystem v. Spielständen) +• Steuerung über WASD, Leertaste = Angriff +• Movementrichtung=Kampfrichtung=Blickrichtung +• Aufbau der Map aus Blöcken/Tiles ïƒ Verschiedene Arten von Blöcken (Tracking): + o Nicht-zerstörbare Blöcke + o Explosive Blöcke +  Wenn man drauf schießt + o Rampen + o Blöcke die man zerstören kann +• Lebenspunkte +• High-Score +• Persönliche Stats, Achievements +• Map-Builder +• User-Tag +• Etc + + + + + +User Stories: +Ich als Spieler möchte mit anderen zusammen spielen können. +Ich als Spieler möchte meine persönlichen Statistiken sehen. +Ich als Spieler möchte eine Auswahl an benutzbaren Items haben um Abwechslung im Spiel zu haben. +Ich als Spieler möchte mich bewegen können. + +Funktionalen und nicht-funktionalen Anforderungen: +• Inventarsystem + o Funktionale Anforderungen: +  Speicherung der Item-stats in einer Datenbank + o Nicht-funktionale Anforderungen +  UI-Bildschirm zur Anzeige der Items im Inventar +• Multiplayer + o Funktional: +  Umsetzung via Network + o Nicht-Funktional: +  Multiplayer Integriert +• Rendering + o Funktional: +  Darstellung der Tiles in einem Graphics Context +• Nicht-Funktional: +  Darstellen der Spielwelt für den Spieler diff --git a/pom.xml b/pom.xml index 6b387cd5a548094603f62d80029bb5acb510af78..231758b8295c2602c5156431d7eec666619df078 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,12 @@ <version>2.21.0</version> </dependency> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-media</artifactId> + <version>19.0.2.1</version> + </dependency> + </dependencies> <build> diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java new file mode 100644 index 0000000000000000000000000000000000000000..4fa73f1d596e95461bfb44775fdb526efc4377f3 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java @@ -0,0 +1,4 @@ +package de.hdm_stuttgart.battlearena.Controller; + +public class MainMenuController { +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java index 95a74218f6c028edb4fc27fe651f83403eeb0d6a..f2952c692546cd275924f9d299819d2f70c7a7bf 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java @@ -1,5 +1,34 @@ package de.hdm_stuttgart.battlearena.Main; -public class Main { +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; -} +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.Objects; + +public class Main extends Application { + + private static final Logger log = LogManager.getLogger(Main.class); + + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage stage) throws Exception { + Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MainMenu.fxml"))); + + Scene scene = new Scene(root); + + stage.setTitle("BattleArena"); + stage.setScene(scene); + + stage.show(); + log.debug("Project started successfully!"); + } +} \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 5109a559a9c05749e436a0e6e89a9513109acd5a..c37776eeb147449e3fa1dbb6aaf650b8c5f12637 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,8 +1,10 @@ module gui { requires javafx.controls; requires javafx.fxml; + requires javafx.media; requires org.apache.logging.log4j; opens de.hdm_stuttgart.battlearena to javafx.fxml; exports de.hdm_stuttgart.battlearena.Main; + exports de.hdm_stuttgart.battlearena.Controller; } diff --git a/src/main/resources/fxml/MainMenu.fxml b/src/main/resources/fxml/MainMenu.fxml new file mode 100644 index 0000000000000000000000000000000000000000..593ebfedde7527d354af67c063ffcfc078a2472e --- /dev/null +++ b/src/main/resources/fxml/MainMenu.fxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.VBox?> + + +<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MainMenuController"> + <children> + <BorderPane prefHeight="400.0" prefWidth="600.0"> + <center> + <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="30.0" BorderPane.alignment="CENTER"> + <children> + <Button mnemonicParsing="false" text="Button" /> + <Button mnemonicParsing="false" text="Button" /> + <Button mnemonicParsing="false" text="Button" /> + </children> + </VBox> + </center> + </BorderPane> + </children> +</AnchorPane> diff --git a/src/main/resources/fxml/hello.fxml b/src/main/resources/fxml/hello.fxml deleted file mode 100644 index bd2fbc357b7e5c89a07d9debfba7c287651fb54a..0000000000000000000000000000000000000000 --- a/src/main/resources/fxml/hello.fxml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<?import javafx.geometry.*?> -<?import javafx.scene.control.*?> -<?import java.lang.*?> -<?import javafx.scene.layout.*?> - - -<!-- -Adding stylesheets="/styles/styles.css" yet does not work, see FxmlGuiDriver as well. ---> - -<GridPane fx:controller="de.hdm_stuttgart.battlearena.HelloController" - hgap="5.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" - prefHeight="402.0" prefWidth="600.0" styleClass="main-panel" vgap="5.0" - xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" > - <columnConstraints> - <ColumnConstraints hgrow="SOMETIMES" maxWidth="319.0" minWidth="10.0" prefWidth="279.0" /> - <ColumnConstraints hgrow="SOMETIMES" maxWidth="470.0" minWidth="10.0" prefWidth="321.0" /> - </columnConstraints> - <rowConstraints> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - </rowConstraints> - <children> - <Label text="First name:" /> - <Label text="Last name:" GridPane.rowIndex="1" /> - <Button mnemonicParsing="false" onAction="#sayHello" text="Say hello" GridPane.rowIndex="2" /> - <TextField fx:id="firstNameField" GridPane.columnIndex="1" /> - <TextField fx:id="lastNameField" GridPane.columnIndex="1" GridPane.rowIndex="1" /> - <Label fx:id="helloLabel" styleClass="hello-message" text=" " - GridPane.columnIndex="1" GridPane.rowIndex="2" /> - </children> - <padding> - <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> - </padding> -</GridPane> \ No newline at end of file diff --git a/src/main/resources/images/background.jpg b/src/main/resources/images/background.jpg deleted file mode 100644 index d46fe9da99a23bc3d725cb92eb82dc7294198bbf..0000000000000000000000000000000000000000 Binary files a/src/main/resources/images/background.jpg and /dev/null differ diff --git a/src/main/resources/styles/styles.css b/src/main/resources/styles/styles.css deleted file mode 100644 index 0da6622eacefef83809758a8dd82a6ed4f580f86..0000000000000000000000000000000000000000 --- a/src/main/resources/styles/styles.css +++ /dev/null @@ -1,34 +0,0 @@ -/* Application wide styles */ - -.label { - -fx-font-size: 12px; - -fx-font-weight: bold; - -fx-text-fill: #333333; - -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); -} - -.button { - -fx-text-fill: white; - -fx-font-family: "Arial Narrow"; - -fx-font-weight: bold; - -fx-background-color: linear-gradient(#61a2b1, #2A5058); - -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); -} - -.button:hover{ - -fx-background-color: #395bae; -} - -/* Component specific styles */ - - -.main-panel { - -fx-background-image: url("../images/background.jpg"); -} - -.hello-message { - -fx-text-fill: #AA0000; - -fx-font-weight: bold; - -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); -} - diff --git a/src/test/java/de/hdm_stuttgart/battlearena/PropertyTest.java b/src/test/java/de/hdm_stuttgart/battlearena/PropertyTest.java deleted file mode 100644 index 66706eb4f658a53f22ae05f9621c7bc35a9d7ef2..0000000000000000000000000000000000000000 --- a/src/test/java/de/hdm_stuttgart/battlearena/PropertyTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.hdm_stuttgart.battlearena; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Testing for existing and non-existing property keys. - */ -public class PropertyTest { - /** - * Testing for existing property key definitions. - */ - @Test - public void testExistingPropertyKeys() { - assertEquals("Reset", Conf.get("resetButton.text")); - assertEquals("Fields have been resetted", Conf.get("infoFieldReset")); - } - /** - * Testing for an inexistent property key definition. - */ - @Test - public void testUndefinedPropertyKey() { - assertEquals("!nonexistentKey!", Conf.get("nonexistentKey")); - } -}