diff --git a/Hitori/pom.xml b/Hitori/pom.xml
index e52b7ab..d70a88f 100644
--- a/Hitori/pom.xml
+++ b/Hitori/pom.xml
@@ -7,6 +7,7 @@
org.example
HitoriTeamProjekt
1.0-SNAPSHOT
+ jar
21
@@ -44,6 +45,15 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ 21
+ 21
+
+
org.apache.maven.plugins
maven-jar-plugin
@@ -51,7 +61,6 @@
- true
PR2.HitoriSpiel.Main.Main
diff --git a/Hitori/src/main/java/PR2/HitoriSpiel/project_structure.puml b/Hitori/src/main/java/PR2/HitoriSpiel/project_structure.puml
new file mode 100644
index 0000000..3a4ffbe
--- /dev/null
+++ b/Hitori/src/main/java/PR2/HitoriSpiel/project_structure.puml
@@ -0,0 +1,113 @@
+@startuml
+package PR2.HitoriSpiel.Domain {
+ class Action {
+ - int row
+ - int col
+ - String oldState
+ - String newState
+ + getRow(): int
+ + getCol(): int
+ + getOldState(): String
+ + getNewState(): String
+ }
+
+ class HitoriBoard {
+ - int[][] numbers
+ - List solutionCoordinates
+ - String boardName
+ + getNumbers(): int[][]
+ + setNumbers(int[][] numbers): void
+ + getCell(int row, int col): HitoriCell
+ + resetBoard(): void
+ }
+
+ class HitoriCell {
+ - int number
+ - CellState state
+ + getNumber(): int
+ + getState(): CellState
+ + setState(CellState state): void
+ }
+
+ class HitoriValidator {
+ - HitoriBoard board
+ + validateBoard(List solution): boolean
+ }
+
+ class StateFileManager {
+ + saveState(Stack undoStack, Stack redoStack): void
+ + loadState(Stack undoStack, Stack redoStack): void
+ }
+}
+
+package PR2.HitoriSpiel.Fassade {
+ class GameBoard {
+ - HitoriBoard board
+ - Timer timer
+ - long startTime
+ - long pausedTime
+ + startTimer(): void
+ + stopTimer(): void
+ + resumeTimer(): void
+ + resetBoard(): void
+ }
+
+ class StateManager {
+ - Stack undoStack
+ - Stack redoStack
+ + saveAction(int row, int col, String oldState, String newState): void
+ + undo(): Action
+ + redo(): Action
+ }
+
+ class Setup {
+ + stylePanel(JPanel panel): void
+ + styleLabel(JLabel label): void
+ + createButton(String text, int width, int height): JButton
+ }
+
+ class HighscoreManager {
+ - List highscoreList
+ + addHighscore(String playerName, int score, String boardName, int errors): void
+ + getHighscoresForBoard(String boardName): List
+ }
+}
+
+package PR2.HitoriSpiel.GUI {
+ class BoardLoader {
+ + loadBoardsAsList(): List
+ + loadBoard(String resourcePath): int[][]
+ }
+
+ class HighscoreDialog {
+ - HighscoreManager highscoreManager
+ - DefaultTableModel tableModel
+ + HighscoreDialog(JFrame parentFrame, List boardNames)
+ }
+
+ class PauseMenu {
+ - GameBoard gameBoard
+ + PauseMenu(JFrame parent, GameBoard gameBoard, ActionListener resumeAction, ActionListener mainMenuAction, ActionListener exitAction)
+ }
+
+ class StartMenu {
+ + selectBoard(): void
+ + randomBoard(): void
+ + highscorelist(): void
+ }
+}
+
+package PR2.HitoriSpiel.Main {
+ class Main {
+ + main(String[] args): void
+ }
+}
+
+PR2.HitoriSpiel.Domain.HitoriBoard "1" *-- "many" PR2.HitoriSpiel.Domain.HitoriCell
+PR2.HitoriSpiel.Domain.StateManager "1" *-- "many" PR2.HitoriSpiel.Domain.Action
+PR2.HitoriSpiel.Fassade.GameBoard "1" *-- "1" PR2.HitoriSpiel.Domain.HitoriBoard
+PR2.HitoriSpiel.GUI.BoardLoader ..> PR2.HitoriSpiel.Domain.HitoriBoard
+PR2.HitoriSpiel.GUI.HighscoreDialog ..> PR2.HitoriSpiel.Fassade.HighscoreManager
+PR2.HitoriSpiel.GUI.PauseMenu --> PR2.HitoriSpiel.Fassade.GameBoard
+PR2.HitoriSpiel.GUI.StartMenu --> PR2.HitoriSpiel.GUI.BoardLoader
+@enduml