diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index be140a6..0000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-include:
- - template: SAST.gitlab-ci.yml
-
-default:
- tags: ['docker-exec']
-
-
-image: maven:3.9.6-eclipse-temurin-21-jammy
-variables:
- MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
- MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dmaven.artifact.threads=50"
-cache:
- paths:
- - .m2/repository/
-junit tests:
- stage: test
- script:
- - mvn test
- allow_failure: false
- artifacts:
- expire_in: 1 week
- reports:
- junit:
- - target/surefire-reports/TEST-*.xml
-
-script tests:
- stage: test
- script:
- - ./build-project.sh
- allow_failure: false
- artifacts:
- expire_in: 1 week
- reports:
- junit:
- - target/surefire-reports/TEST-*.xml
\ No newline at end of file
diff --git a/build-project.sh b/build-project.sh
index 1c3edee..c0a8d6f 100755
--- a/build-project.sh
+++ b/build-project.sh
@@ -1,3 +1,5 @@
#!/bin/bash
+echo "Build"
+mvn clean compile
echo "RUN JUnit Tests"
-mvn clean test
\ No newline at end of file
+mvn clean test
diff --git a/pom.xml b/pom.xml
index 7775e6f..6c76b08 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,14 @@
${junit.version}
test
+
+ org.testfx
+ testfx-junit5
+ 4.0.17
+ test
+
+
+
diff --git a/src/main/java/de/hsfulda/onses/App.java b/src/main/java/de/hsfulda/onses/App.java
index 8712287..bda0c20 100644
--- a/src/main/java/de/hsfulda/onses/App.java
+++ b/src/main/java/de/hsfulda/onses/App.java
@@ -1,7 +1,7 @@
package de.hsfulda.onses;
import de.hsfulda.onses.controllers.AppController;
-import de.hsfulda.onses.models.Game;
+import de.hsfulda.onses.services.GameService;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
@@ -9,9 +9,9 @@ import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage stage) throws Exception {
- final AppController appController = new AppController(new Game());
+ final AppController appController = new AppController(new GameService(), stage);
- stage.setTitle("Onses - Uno Game");
+ stage.setTitle("Onses - Uno");
stage.setScene(new Scene(appController.render()));
stage.show();
}
diff --git a/src/main/java/de/hsfulda/onses/controllers/AppController.java b/src/main/java/de/hsfulda/onses/controllers/AppController.java
index 5f8a4cc..d2e0b80 100644
--- a/src/main/java/de/hsfulda/onses/controllers/AppController.java
+++ b/src/main/java/de/hsfulda/onses/controllers/AppController.java
@@ -2,27 +2,38 @@ package de.hsfulda.onses.controllers;
import de.hsfulda.onses.Main;
import de.hsfulda.onses.models.Game;
+import de.hsfulda.onses.services.GameService;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
+import javafx.scene.Scene;
import javafx.scene.control.Button;
+import javafx.stage.Stage;
import java.io.IOException;
import java.util.Objects;
public class AppController implements Controller {
- private final Game game;
+ private final GameService gameService;
+ private final Stage stage;
- public AppController(Game game) {
- this.game = game;
+ public AppController(GameService gameService, Stage stage) {
+ this.gameService = gameService;
+ this.stage = stage;
}
@Override
public Parent render() throws IOException {
- final Parent parent = FXMLLoader.load(Main.class.getResource("views/app.fxml"));
+ GameController gameController = new GameController(gameService);
+ final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/app.fxml")));
Button button = (Button) parent.lookup("#startGameBtn");
button.setOnAction(e -> {
- System.out.println("Pressed");
+ try {
+ stage.setScene(new Scene(gameController.render()));
+ stage.setTitle("Onses - Uno Game");
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
});
return parent;
}
diff --git a/src/main/java/de/hsfulda/onses/controllers/CardController.java b/src/main/java/de/hsfulda/onses/controllers/CardController.java
new file mode 100644
index 0000000..0f9ca86
--- /dev/null
+++ b/src/main/java/de/hsfulda/onses/controllers/CardController.java
@@ -0,0 +1,57 @@
+package de.hsfulda.onses.controllers;
+
+import de.hsfulda.onses.Main;
+import de.hsfulda.onses.models.Card;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.control.Label;
+import javafx.scene.layout.Pane;
+
+import java.io.IOException;
+import java.util.Objects;
+
+public class CardController implements Controller {
+
+ private Card card;
+
+ public CardController(Card card) {
+ this.card = card;
+ }
+ @Override
+ public Parent render() throws IOException {
+ final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/card.fxml")));
+ final Pane mainPane = (Pane) parent.lookup("#cardPane");
+ final Label cardName = (Label) parent.lookup("#labelName");
+
+ switch(card.getColor()) {
+ case RED -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: red"));
+ case BLUE -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: blue"));
+ case GREEN -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: green"));
+ case YELLOW -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: yellow"));
+ default -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: black"));
+ }
+
+ switch(card.getValue()) {
+ case ONE -> cardName.setText("1");
+ case TWO -> cardName.setText("2");
+ case THREE -> cardName.setText("3");
+ case FOUR -> cardName.setText("4");
+ case FIVE -> cardName.setText("5");
+ case SIX -> cardName.setText("6");
+ case SEVEN -> cardName.setText("7");
+ case EIGHT -> cardName.setText("8");
+ case NINE -> cardName.setText("9");
+ case SKIP -> cardName.setText("skip player");
+ case CHOOSE -> cardName.setText("wish card");
+ case DRAWTWO -> cardName.setText("+2");
+ case REVERSE -> cardName.setText("reverse");
+ }
+
+
+ return parent;
+ }
+
+ private String addStyle(String oldStyle, String newStyle) {
+ return oldStyle + "; " + newStyle;
+ }
+}
diff --git a/src/main/java/de/hsfulda/onses/controllers/GameController.java b/src/main/java/de/hsfulda/onses/controllers/GameController.java
new file mode 100644
index 0000000..2da4cb3
--- /dev/null
+++ b/src/main/java/de/hsfulda/onses/controllers/GameController.java
@@ -0,0 +1,48 @@
+package de.hsfulda.onses.controllers;
+
+import de.hsfulda.onses.Main;
+import de.hsfulda.onses.models.Card;
+import de.hsfulda.onses.models.Game;
+import de.hsfulda.onses.services.GameService;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.control.Button;
+import javafx.scene.layout.Pane;
+
+import java.io.IOException;
+import java.util.Objects;
+
+public class GameController implements Controller {
+ private final GameService gameService;
+ private final Game game;
+ public GameController(GameService gameService) {
+ this.gameService = gameService;
+ this.game = gameService.getGame();
+ }
+ @Override
+ public Parent render() throws IOException {
+ final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/game.fxml")));
+ final Pane lastPlayedCardPane = (Pane) parent.lookup("#lastPlayedCardPane");
+
+ final Button playButton = (Button) parent.lookup("#playCardBtn");
+ CardController lastPlayedCardController = new CardController(new Card().setValue(Card.Value.FIVE).setColor(Card.Color.BLUE));
+
+ game.listeners().addPropertyChangeListener(Game.PROPERTY_LAST_PLAYED_CARD, e -> {
+ lastPlayedCardPane.getChildren().removeAll();
+ try {
+ lastPlayedCardPane.getChildren().add(new CardController((Card) e.getNewValue()).render());
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ });
+
+ playButton.setOnAction(e -> {
+ gameService.playCard(new Card().setColor(Card.Color.GREEN).setValue(Card.Value.ONE));
+ });
+
+
+ lastPlayedCardPane.getChildren().add(lastPlayedCardController.render());
+
+ return parent;
+ }
+}
diff --git a/src/main/java/de/hsfulda/onses/controllers/PlayerController.java b/src/main/java/de/hsfulda/onses/controllers/PlayerController.java
new file mode 100644
index 0000000..7cdb72f
--- /dev/null
+++ b/src/main/java/de/hsfulda/onses/controllers/PlayerController.java
@@ -0,0 +1,17 @@
+package de.hsfulda.onses.controllers;
+
+import de.hsfulda.onses.Main;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+
+import java.io.IOException;
+import java.util.Objects;
+
+public class PlayerController implements Controller {
+ @Override
+ public Parent render() throws IOException {
+ final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/player.fxml")));
+
+ return parent;
+ }
+}
diff --git a/src/main/resources/de/hsfulda/onses/views/app.fxml b/src/main/resources/de/hsfulda/onses/views/app.fxml
index 7facd52..7205ca5 100644
--- a/src/main/resources/de/hsfulda/onses/views/app.fxml
+++ b/src/main/resources/de/hsfulda/onses/views/app.fxml
@@ -5,15 +5,14 @@
-
-
+
-