Compare commits

..

23 Commits

Author SHA1 Message Date
802e605b4a Amélioration du README.MD + Ajout d'une nouvelle règle dans le makefile 2024-12-13 19:35:02 +01:00
b33495327f Ajout de la version finale du rapport !
J'ai l'honneur de cloturé cette SAé !
2024-12-13 19:17:48 +01:00
d7adad36af Delete Documentation/Rapport.pdf 2024-12-13 19:16:38 +01:00
360102f88b Update README.md 2024-12-13 19:02:47 +01:00
bb9d2eb9e2 Update README.md 2024-12-13 19:02:12 +01:00
17d321d9cb Update README.md 2024-12-13 19:01:26 +01:00
stiti
4071ca4d27 Modifications du nombre de tuiles maximum 2024-12-13 16:21:12 +01:00
stiti
1457c3c56c Amélioration de la vitesse de déplacement 2024-12-13 16:17:00 +01:00
stiti
776f361631 Correction du nombre de tuiles 2024-12-13 16:10:13 +01:00
stiti
69cef45a0f Améliorations 2024-12-13 16:05:43 +01:00
b6a7560aa4 Amélioration du makefile 2024-12-13 15:01:01 +01:00
88cfa23b5d Amélioration du makefile 2024-12-12 16:50:14 +01:00
749e89926b Ajout du rapport 2024-12-12 16:36:12 +01:00
c132455434 Amélioration du graphique de fin de partie + Modification d'un commentaire dans Options 2024-12-12 16:21:39 +01:00
900b8a176e Mise à jour du README.md : amélioration de la clarté et de la structure, ajout de sections sur la compilation et l'exécution, et mise à jour des descriptions du projet. 2024-12-11 20:56:48 +01:00
a530cd5f64 Renommage du fichier SQL et ajout de nouvelles entrées dans les tables Scores et Series 2024-12-11 20:38:26 +01:00
7c618da86a Amélioration du makefile 2024-12-11 20:22:17 +01:00
bbbee9dbf0 Ajout du wireflow 2024-12-11 19:55:24 +01:00
ebc06b26e5 Augmentation du nombre maximum de tuiles dans le jeu à 51 2024-12-11 19:00:43 +01:00
55f6f9aae0 Ajout du diagramme d'activité 2024-12-11 18:40:47 +01:00
90b3406c2a Mise à jour des diagrammes de classe pour refléter les dernières modifications 2024-12-11 18:09:30 +01:00
58e0e56a9e Ajouts des bons diagrammes de classe 2024-12-11 09:53:12 +01:00
be5b9bf20e Ajout des diagrammes de classe pour les différents packages 2024-12-11 09:13:00 +01:00
38 changed files with 152370 additions and 483 deletions

View File

@@ -3,7 +3,7 @@
-- https://www.phpmyadmin.net/
--
-- Hôte : localhost
-- Généré le : mar. 03 déc. 2024 à 12:02
-- Généré le : mer. 11 déc. 2024 à 19:37
-- Version du serveur : 10.8.3-MariaDB
-- Version de PHP : 8.1.7
@@ -45192,7 +45192,89 @@ INSERT INTO `Scores` (`score_id`, `series_id`, `score`, `submission_date`) VALUE
(45218, 38484884, 11, '2024-12-03 11:55:28'),
(45219, 384885, 23, '2024-12-03 11:55:50'),
(45220, 24358385, 19, '2024-12-03 11:59:09'),
(45221, 123456789, 11, '2024-12-03 11:59:49');
(45221, 123456789, 11, '2024-12-03 11:59:49'),
(1200001, 123456789, 11, '2024-12-03 12:02:53'),
(1200002, 123456789, 11, '2024-12-03 12:03:31'),
(1200003, 123456789, 11, '2024-12-03 12:04:27'),
(1200004, 123456789, 11, '2024-12-03 12:04:56'),
(1200005, 123456789, 11, '2024-12-03 12:06:39'),
(1200006, 123456789, 11, '2024-12-03 12:07:44'),
(1200007, 123456789, 11, '2024-12-03 12:08:07'),
(1200008, 123456789, 11, '2024-12-03 12:21:07'),
(1200009, 123456789, 328, '2024-12-03 12:22:58'),
(1200010, 72737, 344, '2024-12-03 12:24:14'),
(1200011, 123456789, 324, '2024-12-04 09:09:24'),
(1200012, 123456789, 328, '2024-12-04 09:13:06'),
(1200013, 123456789, 2, '2024-12-04 09:18:38'),
(1200014, 123456789, 2, '2024-12-04 09:18:43'),
(1200015, 123456789, 2, '2024-12-04 09:18:54'),
(1200016, 123456789, 11, '2024-12-04 12:12:05'),
(1200017, 123456789, 11, '2024-12-04 12:12:18'),
(1200018, 123456789, 11, '2024-12-04 12:12:27'),
(1200019, 123456789, 15, '2024-12-04 12:13:15'),
(1200020, 123456789, 11, '2024-12-04 12:16:40'),
(1200021, 123456789, 11, '2024-12-04 12:19:15'),
(1200022, 123456789, 11, '2024-12-04 12:28:23'),
(1200023, 123456789, 11, '2024-12-04 12:29:39'),
(1200024, 123456789, 11, '2024-12-04 12:32:44'),
(1200025, 123456789, 328, '2024-12-04 12:53:02'),
(1200026, 123456789, 244, '2024-12-04 12:58:41'),
(1200027, 123456789, 300, '2024-12-04 13:40:58'),
(1200028, 123456789, 13, '2024-12-04 13:49:15'),
(1200029, 123456789, 302, '2024-12-04 13:50:11'),
(1200030, 123456789, 290, '2024-12-04 14:05:57'),
(1200031, 123456789, 328, '2024-12-04 14:07:37'),
(1200032, 8, 447, '2024-12-04 14:21:59'),
(1200033, 123456789, 314, '2024-12-04 16:58:52'),
(1200034, 123456789, 264, '2024-12-04 17:09:59'),
(1200035, 123456789, 290, '2024-12-04 18:55:04'),
(1200036, 678912345, 750, '2024-12-04 18:57:37'),
(1200037, 123456789, 494, '2024-12-04 21:47:11'),
(1200038, 123456789, 338, '2024-12-04 21:50:33'),
(1200039, 123456789, 162, '2024-12-04 22:42:16'),
(1200040, 678912345, 356, '2024-12-05 11:31:08'),
(1200041, 987654321, 315, '2024-12-05 11:36:15'),
(1200042, 987654321, 396, '2024-12-05 14:49:05'),
(1200043, 404040, 347, '2024-12-05 14:59:39'),
(1200044, 72737, 454, '2024-12-05 16:13:33'),
(1200045, 678912345, 287, '2024-12-05 20:01:45'),
(1200046, 678912345, 14, '2024-12-06 20:27:11'),
(1200047, 678912345, 8, '2024-12-06 20:29:30'),
(1200048, 678912345, 10, '2024-12-06 20:29:38'),
(1200049, 678912345, 12, '2024-12-06 20:30:42'),
(1200050, 678912345, 12, '2024-12-06 20:31:16'),
(1200051, 678912345, 12, '2024-12-06 20:31:51'),
(1200052, 678912345, 10, '2024-12-06 20:32:27'),
(1200053, 678912345, 14, '2024-12-06 20:32:50'),
(1200054, 678912345, 148, '2024-12-06 20:33:52'),
(1200055, 678912345, 160, '2024-12-06 20:36:15'),
(1200056, 123456789, 564, '2024-12-06 21:23:58'),
(1200057, 678912345, 172, '2024-12-07 10:23:23'),
(1200058, 678912345, 160, '2024-12-10 13:16:06'),
(1200059, 678912345, 146, '2024-12-10 13:19:33'),
(1200060, 678912345, 12, '2024-12-10 13:20:24'),
(1200061, 678912345, 12, '2024-12-10 13:20:43'),
(1200062, 678912345, 10, '2024-12-10 13:21:01'),
(1200063, 123456789, 7, '2024-12-10 13:21:16'),
(1200064, 678912345, 10, '2024-12-10 13:21:33'),
(1200065, 678912345, 10, '2024-12-10 13:22:17'),
(1200066, 678912345, 12, '2024-12-10 13:22:36'),
(1200067, 678912345, 12, '2024-12-10 13:23:55'),
(1200068, 678912345, 10, '2024-12-10 13:25:08'),
(1200069, 678912345, 12, '2024-12-10 13:25:28'),
(1200070, 678912345, 12, '2024-12-10 13:25:44'),
(1200071, 678912345, 14, '2024-12-10 13:26:04'),
(1200072, 678912345, 12, '2024-12-10 13:26:40'),
(1200073, 678912345, 10, '2024-12-10 13:27:02'),
(1200074, 678912345, 12, '2024-12-10 13:27:19'),
(1200075, 678912345, 14, '2024-12-10 13:28:13'),
(1200076, 678912345, 12, '2024-12-10 13:29:17'),
(1200077, 678912345, 14, '2024-12-10 13:31:19'),
(1200078, 678912345, 12, '2024-12-10 13:31:45'),
(1200079, 678912345, 14, '2024-12-10 13:38:41'),
(1200080, 3333, 151, '2024-12-11 10:52:23'),
(1200081, 123456789, 116, '2024-12-11 10:53:38'),
(1200082, 678912345, 456, '2024-12-11 15:58:53');
-- --------------------------------------------------------
@@ -45202,32 +45284,37 @@ INSERT INTO `Scores` (`score_id`, `series_id`, `score`, `submission_date`) VALUE
CREATE TABLE `Series` (
`series_id` bigint(20) NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Custom seed',
`creation_date` timestamp NOT NULL DEFAULT current_timestamp()
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Série Custom ',
`creation_date` timestamp NOT NULL DEFAULT current_timestamp(),
`created_by_developer` tinyint(1) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Déchargement des données de la table `Series`
--
INSERT INTO `Series` (`series_id`, `name`, `creation_date`) VALUES
(1, 'Custom Mode', '2024-11-24 01:06:49'),
(2, 'Custom Mode', '2024-11-24 01:08:38'),
(7, 'Custom Mode', '2024-11-26 10:56:33'),
(9, 'Custom Mode', '2024-11-27 13:57:46'),
(12, 'Custom Mode', '2024-12-03 10:29:36'),
(123, 'Custom Mode', '2024-11-23 23:35:38'),
(555, 'Custom Mode', '2024-11-16 23:31:00'),
(384885, 'Série Custom', '2024-12-03 11:55:47'),
(24358385, 'Série Custom', '2024-12-03 11:59:06'),
(38484884, 'Série Custom', '2024-12-03 11:55:23'),
(103072005, 'Série 4', '2024-11-16 23:17:30'),
(123456789, 'Série 1', '2024-11-16 23:17:30'),
(445335353, 'Custom Mode', '2024-12-02 12:56:33'),
(678912345, 'Série 3', '2024-11-16 23:17:30'),
(987654321, 'Série 2', '2024-11-16 23:17:30'),
(1732629214087, 'Custom Mode', '2024-11-26 13:53:34'),
(1732629226475, 'Custom Mode', '2024-11-26 13:53:46');
INSERT INTO `Series` (`series_id`, `name`, `creation_date`, `created_by_developer`) VALUES
(2, 'Série custom 15', '2024-12-05 15:41:05', 0),
(7, 'Série custom 1', '2024-11-26 10:56:33', 0),
(8, 'Série custom 2', '2024-12-04 14:21:24', 0),
(9, 'Série custom 9', '2024-12-05 15:07:23', 0),
(3333, 'Série custom 13', '2024-12-05 15:25:55', 0),
(3993, 'Série custom 8', '2024-12-05 15:07:06', 0),
(39393, 'Série custom 14', '2024-12-05 15:27:30', 0),
(72737, 'Série custom 3', '2024-12-03 12:23:43', 0),
(384885, 'Série custom 4', '2024-12-03 11:55:47', 0),
(404040, 'Série custom 7', '2024-12-05 14:58:48', 0),
(3893939, 'Série custom 11', '2024-12-05 15:15:21', 0),
(24358385, 'Série custom 5', '2024-12-03 11:59:06', 0),
(38484884, 'Série custom 6', '2024-12-03 11:55:23', 0),
(99393939, 'Série custom 10', '2024-12-05 15:07:34', 0),
(103072005, 'Série 1', '2024-11-16 23:17:30', 1),
(123456789, 'Série 2', '2024-11-16 23:17:30', 1),
(678912345, 'Série 3', '2024-11-16 23:17:30', 1),
(737377373, 'Série custom 16', '2024-12-05 20:01:58', 0),
(987654321, 'Série 4', '2024-11-16 23:17:30', 1),
(1733512433643, 'Série custom 17', '2024-12-06 19:13:54', 0),
(93939939393939, 'Série custom 12', '2024-12-05 15:15:32', 0);
--
-- Index pour les tables déchargées
@@ -45254,13 +45341,13 @@ ALTER TABLE `Series`
-- AUTO_INCREMENT pour la table `Scores`
--
ALTER TABLE `Scores`
MODIFY `score_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=45222;
MODIFY `score_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1200083;
--
-- AUTO_INCREMENT pour la table `Series`
--
ALTER TABLE `Series`
MODIFY `series_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1732629226476;
MODIFY `series_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=93939939393940;
--
-- Contraintes pour les tables déchargées

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,18 @@
@startuml components
!theme plain
top to bottom direction
skinparam linetype ortho
class Button {
+ Button():
+ createCustomIconButton(String): JButton
+ createCustomTextButton(String, float): JButton
}
class Title {
+ Title(String, float):
+ Title(String, float, Color):
+ updateTitleFont(float): void
}
@enduml

View File

@@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="516pt" height="100pt" viewBox="0.00 0.00 515.94 100.20">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 96.2)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-96.2 511.94,-96.2 511.94,4 -4,4"/>
<!-- Button -->
<g id="node1" class="node">
<title>Button</title>
<polygon fill="none" stroke="black" points="0,-0.5 0,-91.7 302.3,-91.7 302.3,-0.5 0,-0.5"/>
<text text-anchor="middle" x="151.15" y="-75.1" font-family="Times,serif" font-size="14.00">Button</text>
<polyline fill="none" stroke="black" points="0,-66.9 302.3,-66.9"/>
<text text-anchor="start" x="8" y="-50.3" font-family="Times,serif" font-size="14.00">+ Button() : </text>
<polyline fill="none" stroke="black" points="0,-42.1 302.3,-42.1"/>
<text text-anchor="start" x="8" y="-25.5" font-family="Times,serif" font-size="14.00">+ createCustomIconButton(String) : JButton</text>
<text text-anchor="start" x="8" y="-8.7" font-family="Times,serif" font-size="14.00"> + createCustomTextButton(String, float) : JButton</text>
</g>
<!-- Title -->
<g id="node2" class="node">
<title>Title</title>
<polygon fill="none" stroke="black" points="320.36,-0.5 320.36,-91.7 507.94,-91.7 507.94,-0.5 320.36,-0.5"/>
<text text-anchor="middle" x="414.15" y="-75.1" font-family="Times,serif" font-size="14.00">Title</text>
<polyline fill="none" stroke="black" points="320.36,-66.9 507.94,-66.9"/>
<text text-anchor="start" x="328.36" y="-50.3" font-family="Times,serif" font-size="14.00">+ Title(String, float) : </text>
<text text-anchor="start" x="328.36" y="-33.5" font-family="Times,serif" font-size="14.00"> + Title(String, float, Color) : </text>
<polyline fill="none" stroke="black" points="320.36,-25.3 507.94,-25.3"/>
<text text-anchor="start" x="328.36" y="-8.7" font-family="Times,serif" font-size="14.00">+ updateTitleFont(float) : void</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 KiB

View File

@@ -0,0 +1,59 @@
@startuml controller
!theme plain
top to bottom direction
skinparam linetype ortho
class ButtonHoverAnimationListener {
+ ButtonHoverAnimationListener(boolean, JButton, Color, Font):
+ actionPerformed(ActionEvent): void
}
class ButtonHoverListener {
+ ButtonHoverListener(ButtonHoverAnimator):
+ mouseEntered(MouseEvent): void
+ mouseExited(MouseEvent): void
}
class GameModeController {
+ GameModeController(JFrame, MainMenu, JFrame):
- gameModeSelectionPanel: GameModeSelectionPanel
- isDynamicSeries(String): boolean
- addCustomSeedToDatabase(long): void
- getSeedFromDatabaseByName(String): long
+ actionPerformed(ActionEvent): void
- startGame(long): void
gameModeBoard: Board
gameModeSelectionPanel: GameModeSelectionPanel
}
class MainMenuButtonController {
+ MainMenuButtonController(MainMenu, JFrame, JFrame, JFrame, JFrame):
- adjustFrameDisplay(JFrame): void
+ actionPerformed(ActionEvent): void
- openSettings(): void
+ startNewGame(): void
+ showHowToPlay(): void
- configureFrame(JFrame): void
- exitGame(): void
}
class MainMenuMouseController {
+ MainMenuMouseController(ButtonPanel):
- initMouseListeners(): void
- addButtonHoverListener(JButton): void
}
class MainMenuResizeController {
+ MainMenuResizeController(MainMenu):
- addComponentListener(): void
}
class MainMenuResizeHandler {
+ MainMenuResizeHandler(MainMenu):
+ componentResized(ComponentEvent): void
}
class TutorialController {
+ TutorialController(MainMenu, JFrame):
- tutorialPanel: TutorialPanel
tutorialPanel: JPanel
}
MainMenuMouseController -[#595959,dashed]-> ButtonHoverListener : "«create»"
MainMenuResizeController "1" *-[#595959,plain]-> "resizeHandler\n1" MainMenuResizeHandler
MainMenuResizeController -[#595959,dashed]-> MainMenuResizeHandler : "«create»"
@enduml

View File

@@ -0,0 +1,129 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2086pt" height="362pt" viewBox="0.00 0.00 2085.80 362.00">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 358)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-358 2081.8,-358 2081.8,4 -4,4"/>
<!-- ButtonHoverAnimationListener -->
<g id="node1" class="node">
<title>ButtonHoverAnimationListener</title>
<polygon fill="none" stroke="black" points="0,-212.3 0,-286.7 392.91,-286.7 392.91,-212.3 0,-212.3"/>
<text text-anchor="middle" x="196.46" y="-270.1" font-family="Times,serif" font-size="14.00">ButtonHoverAnimationListener</text>
<polyline fill="none" stroke="black" points="0,-261.9 392.91,-261.9"/>
<text text-anchor="start" x="8" y="-245.3" font-family="Times,serif" font-size="14.00">+ ButtonHoverAnimationListener(boolean, JButton, Color, Font) : </text>
<polyline fill="none" stroke="black" points="0,-237.1 392.91,-237.1"/>
<text text-anchor="start" x="8" y="-220.5" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- ButtonHoverListener -->
<g id="node2" class="node">
<title>ButtonHoverListener</title>
<polygon fill="none" stroke="black" points="401.79,-0.5 401.79,-91.7 695.13,-91.7 695.13,-0.5 401.79,-0.5"/>
<text text-anchor="middle" x="548.46" y="-75.1" font-family="Times,serif" font-size="14.00">ButtonHoverListener</text>
<polyline fill="none" stroke="black" points="401.79,-66.9 695.13,-66.9"/>
<text text-anchor="start" x="409.79" y="-50.3" font-family="Times,serif" font-size="14.00">+ ButtonHoverListener(ButtonHoverAnimator) : </text>
<polyline fill="none" stroke="black" points="401.79,-42.1 695.13,-42.1"/>
<text text-anchor="start" x="409.79" y="-25.5" font-family="Times,serif" font-size="14.00">+ mouseEntered(MouseEvent) : void</text>
<text text-anchor="start" x="409.79" y="-8.7" font-family="Times,serif" font-size="14.00"> + mouseExited(MouseEvent) : void</text>
</g>
<!-- GameModeController -->
<g id="node3" class="node">
<title>GameModeController</title>
<polygon fill="none" stroke="black" points="704.2,-145.5 704.2,-353.5 1034.72,-353.5 1034.72,-145.5 704.2,-145.5"/>
<text text-anchor="middle" x="869.46" y="-336.9" font-family="Times,serif" font-size="14.00">GameModeController</text>
<polyline fill="none" stroke="black" points="704.2,-328.7 1034.72,-328.7"/>
<text text-anchor="start" x="712.2" y="-312.1" font-family="Times,serif" font-size="14.00">+ GameModeController(JFrame, MainMenu, JFrame) : </text>
<polyline fill="none" stroke="black" points="704.2,-303.9 1034.72,-303.9"/>
<text text-anchor="start" x="712.2" y="-287.3" font-family="Times,serif" font-size="14.00">- gameModeSelectionPanel : GameModeSelectionPanel</text>
<polyline fill="none" stroke="black" points="704.2,-279.1 1034.72,-279.1"/>
<text text-anchor="start" x="712.2" y="-262.5" font-family="Times,serif" font-size="14.00">- isDynamicSeries(String) : boolean</text>
<text text-anchor="start" x="712.2" y="-245.7" font-family="Times,serif" font-size="14.00"> - addCustomSeedToDatabase(long) : void</text>
<text text-anchor="start" x="712.2" y="-228.9" font-family="Times,serif" font-size="14.00"> - getSeedFromDatabaseByName(String) : long</text>
<text text-anchor="start" x="712.2" y="-212.1" font-family="Times,serif" font-size="14.00"> + actionPerformed(ActionEvent) : void</text>
<text text-anchor="start" x="712.2" y="-195.3" font-family="Times,serif" font-size="14.00"> - startGame(long) : void</text>
<polyline fill="none" stroke="black" points="704.2,-187.1 1034.72,-187.1"/>
<text text-anchor="start" x="712.2" y="-170.5" font-family="Times,serif" font-size="14.00">gameModeBoard : Board</text>
<text text-anchor="start" x="712.2" y="-153.7" font-family="Times,serif" font-size="14.00"> gameModeSelectionPanel : GameModeSelectionPanel</text>
</g>
<!-- MainMenuButtonController -->
<g id="node4" class="node">
<title>MainMenuButtonController</title>
<polygon fill="none" stroke="black" points="1053.18,-161.9 1053.18,-337.1 1513.73,-337.1 1513.73,-161.9 1053.18,-161.9"/>
<text text-anchor="middle" x="1283.46" y="-320.5" font-family="Times,serif" font-size="14.00">MainMenuButtonController</text>
<polyline fill="none" stroke="black" points="1053.18,-312.3 1513.73,-312.3"/>
<text text-anchor="start" x="1061.18" y="-295.7" font-family="Times,serif" font-size="14.00">+ MainMenuButtonController(MainMenu, JFrame, JFrame, JFrame, JFrame) : </text>
<polyline fill="none" stroke="black" points="1053.18,-287.5 1513.73,-287.5"/>
<text text-anchor="start" x="1061.18" y="-270.9" font-family="Times,serif" font-size="14.00">- adjustFrameDisplay(JFrame) : void</text>
<text text-anchor="start" x="1061.18" y="-254.1" font-family="Times,serif" font-size="14.00"> + actionPerformed(ActionEvent) : void</text>
<text text-anchor="start" x="1061.18" y="-237.3" font-family="Times,serif" font-size="14.00"> - openSettings() : void</text>
<text text-anchor="start" x="1061.18" y="-220.5" font-family="Times,serif" font-size="14.00"> + startNewGame() : void</text>
<text text-anchor="start" x="1061.18" y="-203.7" font-family="Times,serif" font-size="14.00"> + showHowToPlay() : void</text>
<text text-anchor="start" x="1061.18" y="-186.9" font-family="Times,serif" font-size="14.00"> - configureFrame(JFrame) : void</text>
<text text-anchor="start" x="1061.18" y="-170.1" font-family="Times,serif" font-size="14.00"> - exitGame() : void</text>
</g>
<!-- MainMenuMouseController -->
<g id="node5" class="node">
<title>MainMenuMouseController</title>
<polygon fill="none" stroke="black" points="411.11,-203.9 411.11,-295.1 685.81,-295.1 685.81,-203.9 411.11,-203.9"/>
<text text-anchor="middle" x="548.46" y="-278.5" font-family="Times,serif" font-size="14.00">MainMenuMouseController</text>
<polyline fill="none" stroke="black" points="411.11,-270.3 685.81,-270.3"/>
<text text-anchor="start" x="419.11" y="-253.7" font-family="Times,serif" font-size="14.00">+ MainMenuMouseController(ButtonPanel) : </text>
<polyline fill="none" stroke="black" points="411.11,-245.5 685.81,-245.5"/>
<text text-anchor="start" x="419.11" y="-228.9" font-family="Times,serif" font-size="14.00">- initMouseListeners() : void</text>
<text text-anchor="start" x="419.11" y="-212.1" font-family="Times,serif" font-size="14.00"> - addButtonHoverListener(JButton) : void</text>
</g>
<!-- MainMenuMouseController&#45;&gt;ButtonHoverListener -->
<g id="edge1" class="edge">
<title>MainMenuMouseController-&gt;ButtonHoverListener</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M548.46,-203.6C548.46,-203.6 548.46,-103.4 548.46,-103.4"/>
<polygon fill="#595959" stroke="#595959" points="548.46,-93.4 552.96,-103.4 548.46,-97.19 548.46,-103.4 548.46,-103.4 548.46,-103.4 548.46,-97.19 543.96,-103.4 548.46,-93.4"/>
<text text-anchor="middle" x="572.16" y="-114.4" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- MainMenuResizeController -->
<g id="node6" class="node">
<title>MainMenuResizeController</title>
<polygon fill="none" stroke="black" points="1532.01,-212.3 1532.01,-286.7 1798.91,-286.7 1798.91,-212.3 1532.01,-212.3"/>
<text text-anchor="middle" x="1665.46" y="-270.1" font-family="Times,serif" font-size="14.00">MainMenuResizeController</text>
<polyline fill="none" stroke="black" points="1532.01,-261.9 1798.91,-261.9"/>
<text text-anchor="start" x="1540.01" y="-245.3" font-family="Times,serif" font-size="14.00">+ MainMenuResizeController(MainMenu) : </text>
<polyline fill="none" stroke="black" points="1532.01,-237.1 1798.91,-237.1"/>
<text text-anchor="start" x="1540.01" y="-220.5" font-family="Times,serif" font-size="14.00">- addComponentListener() : void</text>
</g>
<!-- MainMenuResizeHandler -->
<g id="node7" class="node">
<title>MainMenuResizeHandler</title>
<polygon fill="none" stroke="black" points="1526.95,-8.9 1526.95,-83.3 1803.96,-83.3 1803.96,-8.9 1526.95,-8.9"/>
<text text-anchor="middle" x="1665.46" y="-66.7" font-family="Times,serif" font-size="14.00">MainMenuResizeHandler</text>
<polyline fill="none" stroke="black" points="1526.95,-58.5 1803.96,-58.5"/>
<text text-anchor="start" x="1534.95" y="-41.9" font-family="Times,serif" font-size="14.00">+ MainMenuResizeHandler(MainMenu) : </text>
<polyline fill="none" stroke="black" points="1526.95,-33.7 1803.96,-33.7"/>
<text text-anchor="start" x="1534.95" y="-17.1" font-family="Times,serif" font-size="14.00">+ componentResized(ComponentEvent) : void</text>
</g>
<!-- MainMenuResizeController&#45;&gt;MainMenuResizeHandler -->
<g id="edge2" class="edge">
<title>MainMenuResizeController-&gt;MainMenuResizeHandler</title>
<path fill="none" stroke="#595959" d="M1620.97,-199.14C1620.97,-199.14 1620.97,-94.73 1620.97,-94.73"/>
<polygon fill="#595959" stroke="#595959" points="1620.97,-199.29 1624.97,-205.29 1620.97,-211.29 1616.97,-205.29 1620.97,-199.29"/>
<polygon fill="#595959" stroke="#595959" points="1620.97,-84.73 1625.47,-94.73 1620.97,-88.51 1620.97,-94.73 1620.97,-94.73 1620.97,-94.73 1620.97,-88.51 1616.47,-94.73 1620.97,-84.73"/>
<text text-anchor="middle" x="1582.11" y="-104.51" font-family="Times,serif" font-size="14.00">resizeHandler</text>
<text text-anchor="middle" x="1582.11" y="-87.71" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1617.47" y="-199.59" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- MainMenuResizeController&#45;&gt;MainMenuResizeHandler -->
<g id="edge3" class="edge">
<title>MainMenuResizeController-&gt;MainMenuResizeHandler</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1709.94,-212.19C1709.94,-212.19 1709.94,-94.73 1709.94,-94.73"/>
<polygon fill="#595959" stroke="#595959" points="1709.94,-84.73 1714.44,-94.73 1709.94,-88.51 1709.94,-94.73 1709.94,-94.73 1709.94,-94.73 1709.94,-88.51 1705.44,-94.73 1709.94,-84.73"/>
<text text-anchor="middle" x="1705.16" y="-114.4" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- TutorialController -->
<g id="node8" class="node">
<title>TutorialController</title>
<polygon fill="none" stroke="black" points="1817.12,-199.9 1817.12,-299.1 2077.8,-299.1 2077.8,-199.9 1817.12,-199.9"/>
<text text-anchor="middle" x="1947.46" y="-282.5" font-family="Times,serif" font-size="14.00">TutorialController</text>
<polyline fill="none" stroke="black" points="1817.12,-274.3 2077.8,-274.3"/>
<text text-anchor="start" x="1825.12" y="-257.7" font-family="Times,serif" font-size="14.00">+ TutorialController(MainMenu, JFrame) : </text>
<polyline fill="none" stroke="black" points="1817.12,-249.5 2077.8,-249.5"/>
<text text-anchor="start" x="1825.12" y="-232.9" font-family="Times,serif" font-size="14.00">- tutorialPanel : TutorialPanel</text>
<polyline fill="none" stroke="black" points="1817.12,-224.7 2077.8,-224.7"/>
<text text-anchor="start" x="1825.12" y="-208.1" font-family="Times,serif" font-size="14.00">tutorialPanel : JPanel</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 756 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 49 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

View File

@@ -0,0 +1,45 @@
@startuml enums
!theme plain
top to bottom direction
skinparam linetype ortho
enum Biome << enumeration >> {
+ Biome():
+ values(): Biome[]
+ valueOf(String): Biome
biomeColors: Color[]
}
enum Fonts << enumeration >> {
+ Fonts():
+ getFont(float): Font
+ valueOf(String): Fonts
+ values(): Fonts[]
fontPath: String
}
enum Images << enumeration >> {
+ Images():
+ values(): Images[]
+ valueOf(String): Images
imagePath: String
}
enum Musics << enumeration >> {
+ Musics():
+ values(): Musics[]
+ valueOf(String): Musics
soundsPath: String
}
enum Sounds << enumeration >> {
+ Sounds():
+ values(): Sounds[]
+ valueOf(String): Sounds
soundsPath: String
}
enum TileOrientation << enumeration >> {
+ TileOrientation():
+ oppositeOrientation(): TileOrientation
+ valueOf(String): TileOrientation
+ values(): TileOrientation[]
}
@enduml

View File

@@ -0,0 +1,90 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1185pt" height="159pt" viewBox="0.00 0.00 1185.44 158.60">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 154.6)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-154.6 1181.44,-154.6 1181.44,4 -4,4"/>
<!-- Biome -->
<g id="node1" class="node">
<title>Biome</title>
<polygon fill="none" stroke="black" points="0,-8.9 0,-141.7 167.76,-141.7 167.76,-8.9 0,-8.9"/>
<text text-anchor="middle" x="83.88" y="-125.1" font-family="Times,serif" font-size="14.00">&lt;&lt;enumeration&gt;&gt;</text>
<text text-anchor="middle" x="83.88" y="-108.3" font-family="Times,serif" font-size="14.00">Biome</text>
<polyline fill="none" stroke="black" points="0,-100.1 167.76,-100.1"/>
<text text-anchor="start" x="8" y="-83.5" font-family="Times,serif" font-size="14.00">+ Biome() : </text>
<polyline fill="none" stroke="black" points="0,-75.3 167.76,-75.3"/>
<text text-anchor="start" x="8" y="-58.7" font-family="Times,serif" font-size="14.00">+ values() : Biome[]</text>
<text text-anchor="start" x="8" y="-41.9" font-family="Times,serif" font-size="14.00"> + valueOf(String) : Biome</text>
<polyline fill="none" stroke="black" points="0,-33.7 167.76,-33.7"/>
<text text-anchor="start" x="8" y="-17.1" font-family="Times,serif" font-size="14.00">biomeColors : Color[]</text>
</g>
<!-- Fonts -->
<g id="node2" class="node">
<title>Fonts</title>
<polygon fill="none" stroke="black" points="186.1,-0.5 186.1,-150.1 347.65,-150.1 347.65,-0.5 186.1,-0.5"/>
<text text-anchor="middle" x="266.88" y="-133.5" font-family="Times,serif" font-size="14.00">&lt;&lt;enumeration&gt;&gt;</text>
<text text-anchor="middle" x="266.88" y="-116.7" font-family="Times,serif" font-size="14.00">Fonts</text>
<polyline fill="none" stroke="black" points="186.1,-108.5 347.65,-108.5"/>
<text text-anchor="start" x="194.1" y="-91.9" font-family="Times,serif" font-size="14.00">+ Fonts() : </text>
<polyline fill="none" stroke="black" points="186.1,-83.7 347.65,-83.7"/>
<text text-anchor="start" x="194.1" y="-67.1" font-family="Times,serif" font-size="14.00">+ getFont(float) : Font</text>
<text text-anchor="start" x="194.1" y="-50.3" font-family="Times,serif" font-size="14.00"> + valueOf(String) : Fonts</text>
<text text-anchor="start" x="194.1" y="-33.5" font-family="Times,serif" font-size="14.00"> + values() : Fonts[]</text>
<polyline fill="none" stroke="black" points="186.1,-25.3 347.65,-25.3"/>
<text text-anchor="start" x="194.1" y="-8.7" font-family="Times,serif" font-size="14.00">fontPath : String</text>
</g>
<!-- Images -->
<g id="node3" class="node">
<title>Images</title>
<polygon fill="none" stroke="black" points="365.45,-8.9 365.45,-141.7 536.31,-141.7 536.31,-8.9 365.45,-8.9"/>
<text text-anchor="middle" x="450.88" y="-125.1" font-family="Times,serif" font-size="14.00">&lt;&lt;enumeration&gt;&gt;</text>
<text text-anchor="middle" x="450.88" y="-108.3" font-family="Times,serif" font-size="14.00">Images</text>
<polyline fill="none" stroke="black" points="365.45,-100.1 536.31,-100.1"/>
<text text-anchor="start" x="373.45" y="-83.5" font-family="Times,serif" font-size="14.00">+ Images() : </text>
<polyline fill="none" stroke="black" points="365.45,-75.3 536.31,-75.3"/>
<text text-anchor="start" x="373.45" y="-58.7" font-family="Times,serif" font-size="14.00">+ values() : Images[]</text>
<text text-anchor="start" x="373.45" y="-41.9" font-family="Times,serif" font-size="14.00"> + valueOf(String) : Images</text>
<polyline fill="none" stroke="black" points="365.45,-33.7 536.31,-33.7"/>
<text text-anchor="start" x="373.45" y="-17.1" font-family="Times,serif" font-size="14.00">imagePath : String</text>
</g>
<!-- Musics -->
<g id="node4" class="node">
<title>Musics</title>
<polygon fill="none" stroke="black" points="554.44,-8.9 554.44,-141.7 725.32,-141.7 725.32,-8.9 554.44,-8.9"/>
<text text-anchor="middle" x="639.88" y="-125.1" font-family="Times,serif" font-size="14.00">&lt;&lt;enumeration&gt;&gt;</text>
<text text-anchor="middle" x="639.88" y="-108.3" font-family="Times,serif" font-size="14.00">Musics</text>
<polyline fill="none" stroke="black" points="554.44,-100.1 725.32,-100.1"/>
<text text-anchor="start" x="562.44" y="-83.5" font-family="Times,serif" font-size="14.00">+ Musics() : </text>
<polyline fill="none" stroke="black" points="554.44,-75.3 725.32,-75.3"/>
<text text-anchor="start" x="562.44" y="-58.7" font-family="Times,serif" font-size="14.00">+ values() : Musics[]</text>
<text text-anchor="start" x="562.44" y="-41.9" font-family="Times,serif" font-size="14.00"> + valueOf(String) : Musics</text>
<polyline fill="none" stroke="black" points="554.44,-33.7 725.32,-33.7"/>
<text text-anchor="start" x="562.44" y="-17.1" font-family="Times,serif" font-size="14.00">soundsPath : String</text>
</g>
<!-- Sounds -->
<g id="node5" class="node">
<title>Sounds</title>
<polygon fill="none" stroke="black" points="743.05,-8.9 743.05,-141.7 914.71,-141.7 914.71,-8.9 743.05,-8.9"/>
<text text-anchor="middle" x="828.88" y="-125.1" font-family="Times,serif" font-size="14.00">&lt;&lt;enumeration&gt;&gt;</text>
<text text-anchor="middle" x="828.88" y="-108.3" font-family="Times,serif" font-size="14.00">Sounds</text>
<polyline fill="none" stroke="black" points="743.05,-100.1 914.71,-100.1"/>
<text text-anchor="start" x="751.05" y="-83.5" font-family="Times,serif" font-size="14.00">+ Sounds() : </text>
<polyline fill="none" stroke="black" points="743.05,-75.3 914.71,-75.3"/>
<text text-anchor="start" x="751.05" y="-58.7" font-family="Times,serif" font-size="14.00">+ values() : Sounds[]</text>
<text text-anchor="start" x="751.05" y="-41.9" font-family="Times,serif" font-size="14.00"> + valueOf(String) : Sounds</text>
<polyline fill="none" stroke="black" points="743.05,-33.7 914.71,-33.7"/>
<text text-anchor="start" x="751.05" y="-17.1" font-family="Times,serif" font-size="14.00">soundsPath : String</text>
</g>
<!-- TileOrientation -->
<g id="node6" class="node">
<title>TileOrientation</title>
<polygon fill="none" stroke="black" points="932.32,-12.9 932.32,-137.7 1177.44,-137.7 1177.44,-12.9 932.32,-12.9"/>
<text text-anchor="middle" x="1054.88" y="-121.1" font-family="Times,serif" font-size="14.00">&lt;&lt;enumeration&gt;&gt;</text>
<text text-anchor="middle" x="1054.88" y="-104.3" font-family="Times,serif" font-size="14.00">TileOrientation</text>
<polyline fill="none" stroke="black" points="932.32,-96.1 1177.44,-96.1"/>
<text text-anchor="start" x="940.32" y="-79.5" font-family="Times,serif" font-size="14.00">+ TileOrientation() : </text>
<polyline fill="none" stroke="black" points="932.32,-71.3 1177.44,-71.3"/>
<text text-anchor="start" x="940.32" y="-54.7" font-family="Times,serif" font-size="14.00">+ oppositeOrientation() : TileOrientation</text>
<text text-anchor="start" x="940.32" y="-37.9" font-family="Times,serif" font-size="14.00"> + valueOf(String) : TileOrientation</text>
<text text-anchor="start" x="940.32" y="-21.1" font-family="Times,serif" font-size="14.00"> + values() : TileOrientation[]</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -0,0 +1,141 @@
@startuml gui
!theme plain
top to bottom direction
skinparam linetype ortho
class BarChartPanel {
+ BarChartPanel(List<Integer>, int, JPanel):
# paintComponent(Graphics): void
}
class ButtonHoverAnimator {
+ ButtonHoverAnimator(JButton):
+ startAnimation(boolean): void
+ updateOriginalFont(float): void
}
class ButtonPanel {
+ ButtonPanel(float):
- howToPlayButton: JButton
- exitButton: JButton
- newGameButton: JButton
- settingsButton: JButton
+ updateButtonFonts(int): void
howToPlayButton: JButton
exitButton: JButton
buttons: List<JButton>
settingsButton: JButton
newGameButton: JButton
}
class GameControlsMenu {
+ GameControlsMenu():
- createPanel(String, String): JPanel
- loadIcon(String): ImageIcon
- createPanelWithMultipleIcons(String, String[]): JPanel
+ toggleVisibility(): void
controlsMenuVisible: boolean
}
class GameModeSelectionPanel {
+ GameModeSelectionPanel(ActionListener, JFrame, MainMenu):
- currentPage: int
- createTopPanel(JFrame, MainMenu): JPanel
- createDateFilterPanel(): JPanel
- createSeedPanel(ActionListener): JPanel
- stylizeDateSpinner(JSpinner): void
- createPaginationPanel(): JPanel
- createReturnButtonWithIcon(JFrame, MainMenu): JButton
- createGameModeButton(String, ActionListener): JButton
+ loadSeriesForCurrentPage(): void
- createMainPanel(): JPanel
- updatePageLabelAndButtons(int, int): void
- createGridBagConstraints(int, int, int): GridBagConstraints
longSeed: long
currentPage: int
stringSeed: String
}
class GameOver {
+ GameOver(JFrame, int, Database, MainMenu):
- getFunnyQuote(int): String
- scoreInGroup(List<Integer>, int, int, int): boolean
}
class Leaderboard {
+ Leaderboard():
+ refresh(): void
}
class LeaderboardBarChartPanel {
+ LeaderboardBarChartPanel(int, int):
# paintComponent(Graphics): void
}
class LeaderboardByTier {
+ LeaderboardByTier():
+ refresh(): void
}
class LeaderboardWorldWide {
+ LeaderboardWorldWide():
- createPlayerPanel(String, int, int): JPanel
- createTopPlayerPanel(String, int, String, boolean): JPanel
- resizeIcon(String, int, int): ImageIcon
+ refresh(): void
}
class MainMenu {
+ MainMenu():
- titleLabel: Title
- buttonPanel: ButtonPanel
titleLabel: Title
buttonPanel: ButtonPanel
}
class Reward {
+ Reward(String, String, boolean, ImageIcon):
- description: String
- isUnlocked: boolean
- icon: ImageIcon
- name: String
name: String
icon: ImageIcon
description: String
isUnlocked: boolean
}
class SettingsPanel {
+ SettingsPanel(MainMenu, JFrame):
- initializeSettingsFrame(): void
- createReturnButtonWithIcon(): JButton
- setupBackground(): void
- createSliderPanel(JSlider): JPanel
- createSoundPanel(String, JSlider, ChangeListener, MuteCheckBoxListener): JPanel
- setupMainPanel(): void
- setupTopPanel(): void
- createGridBagConstraints(int, int, int): GridBagConstraints
# paintComponent(Graphics): void
- createAutoFocusPanel(): JPanel
returnButtonVisible: boolean
}
class Step {
+ Step(String, String, String):
- title: String
- imagePath: String
- text: String
text: String
imagePath: String
title: String
}
class TutorialPanel {
+ TutorialPanel(List<Step>, MainMenu, JFrame):
- updateStepDisplay(): void
- styleButton(JButton): void
- createReturnButtonWithIcon(): JButton
- showPreviousStep(): void
- addLineBreaks(String, int): String
# paintComponent(Graphics): void
- showNextStep(): void
}
GameOver -[#595959,dashed]-> BarChartPanel : "«create»"
LeaderboardByTier -[#000082,plain]-^ Leaderboard
LeaderboardByTier -[#595959,dashed]-> LeaderboardBarChartPanel : "«create»"
LeaderboardWorldWide -[#000082,plain]-^ Leaderboard
MainMenu "1" *-[#595959,plain]-> "buttonPanel\n1" ButtonPanel
MainMenu -[#595959,dashed]-> ButtonPanel : "«create»"
MainMenu "1" *-[#595959,plain]-> "currentLeaderboard\n1" Leaderboard
MainMenu -[#595959,dashed]-> LeaderboardWorldWide : "«create»"
SettingsPanel "1" *-[#595959,plain]-> "mainMenu\n1" MainMenu
TutorialPanel "1" *-[#595959,plain]-> "mainMenu\n1" MainMenu
TutorialPanel "1" *-[#595959,plain]-> "steps\n*" Step
@enduml

View File

@@ -0,0 +1,318 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2475pt" height="978pt" viewBox="0.00 0.00 2475.25 978.40">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 974.4)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-974.4 2471.25,-974.4 2471.25,4 -4,4"/>
<!-- BarChartPanel -->
<g id="node1" class="node">
<title>BarChartPanel</title>
<polygon fill="none" stroke="black" points="19.57,-470.1 19.57,-544.5 292.14,-544.5 292.14,-470.1 19.57,-470.1"/>
<text text-anchor="middle" x="155.86" y="-527.9" font-family="Times,serif" font-size="14.00">BarChartPanel</text>
<polyline fill="none" stroke="black" points="19.57,-519.7 292.14,-519.7"/>
<text text-anchor="start" x="27.57" y="-503.1" font-family="Times,serif" font-size="14.00">+ BarChartPanel(List&lt;Integer&gt;, int, JPanel) : </text>
<polyline fill="none" stroke="black" points="19.57,-494.9 292.14,-494.9"/>
<text text-anchor="start" x="27.57" y="-478.3" font-family="Times,serif" font-size="14.00"># paintComponent(Graphics) : void</text>
</g>
<!-- ButtonHoverAnimator -->
<g id="node2" class="node">
<title>ButtonHoverAnimator</title>
<polygon fill="none" stroke="black" points="329.89,-761.5 329.89,-852.7 547.82,-852.7 547.82,-761.5 329.89,-761.5"/>
<text text-anchor="middle" x="438.86" y="-836.1" font-family="Times,serif" font-size="14.00">ButtonHoverAnimator</text>
<polyline fill="none" stroke="black" points="329.89,-827.9 547.82,-827.9"/>
<text text-anchor="start" x="337.89" y="-811.3" font-family="Times,serif" font-size="14.00">+ ButtonHoverAnimator(JButton) : </text>
<polyline fill="none" stroke="black" points="329.89,-803.1 547.82,-803.1"/>
<text text-anchor="start" x="337.89" y="-786.5" font-family="Times,serif" font-size="14.00">+ startAnimation(boolean) : void</text>
<text text-anchor="start" x="337.89" y="-769.7" font-family="Times,serif" font-size="14.00"> + updateOriginalFont(float) : void</text>
</g>
<!-- ButtonPanel -->
<g id="node3" class="node">
<title>ButtonPanel</title>
<polygon fill="none" stroke="black" points="733.94,-128.7 733.94,-370.3 927.78,-370.3 927.78,-128.7 733.94,-128.7"/>
<text text-anchor="middle" x="830.86" y="-353.7" font-family="Times,serif" font-size="14.00">ButtonPanel</text>
<polyline fill="none" stroke="black" points="733.94,-345.5 927.78,-345.5"/>
<text text-anchor="start" x="741.94" y="-328.9" font-family="Times,serif" font-size="14.00">+ ButtonPanel(float) : </text>
<polyline fill="none" stroke="black" points="733.94,-320.7 927.78,-320.7"/>
<text text-anchor="start" x="741.94" y="-304.1" font-family="Times,serif" font-size="14.00">- howToPlayButton : JButton</text>
<text text-anchor="start" x="741.94" y="-287.3" font-family="Times,serif" font-size="14.00"> - exitButton : JButton</text>
<text text-anchor="start" x="741.94" y="-270.5" font-family="Times,serif" font-size="14.00"> - newGameButton : JButton</text>
<text text-anchor="start" x="741.94" y="-253.7" font-family="Times,serif" font-size="14.00"> - settingsButton : JButton</text>
<polyline fill="none" stroke="black" points="733.94,-245.5 927.78,-245.5"/>
<text text-anchor="start" x="741.94" y="-228.9" font-family="Times,serif" font-size="14.00">+ updateButtonFonts(int) : void</text>
<polyline fill="none" stroke="black" points="733.94,-220.7 927.78,-220.7"/>
<text text-anchor="start" x="741.94" y="-204.1" font-family="Times,serif" font-size="14.00">howToPlayButton : JButton</text>
<text text-anchor="start" x="741.94" y="-187.3" font-family="Times,serif" font-size="14.00"> exitButton : JButton</text>
<text text-anchor="start" x="741.94" y="-170.5" font-family="Times,serif" font-size="14.00"> buttons : List&lt;JButton&gt;</text>
<text text-anchor="start" x="741.94" y="-153.7" font-family="Times,serif" font-size="14.00"> settingsButton : JButton</text>
<text text-anchor="start" x="741.94" y="-136.9" font-family="Times,serif" font-size="14.00"> newGameButton : JButton</text>
</g>
<!-- GameControlsMenu -->
<g id="node4" class="node">
<title>GameControlsMenu</title>
<polygon fill="none" stroke="black" points="1407.73,-732.3 1407.73,-881.9 1747.99,-881.9 1747.99,-732.3 1407.73,-732.3"/>
<text text-anchor="middle" x="1577.86" y="-865.3" font-family="Times,serif" font-size="14.00">GameControlsMenu</text>
<polyline fill="none" stroke="black" points="1407.73,-857.1 1747.99,-857.1"/>
<text text-anchor="start" x="1415.73" y="-840.5" font-family="Times,serif" font-size="14.00">+ GameControlsMenu() : </text>
<polyline fill="none" stroke="black" points="1407.73,-832.3 1747.99,-832.3"/>
<text text-anchor="start" x="1415.73" y="-815.7" font-family="Times,serif" font-size="14.00">- createPanel(String, String) : JPanel</text>
<text text-anchor="start" x="1415.73" y="-798.9" font-family="Times,serif" font-size="14.00"> - loadIcon(String) : ImageIcon</text>
<text text-anchor="start" x="1415.73" y="-782.1" font-family="Times,serif" font-size="14.00"> - createPanelWithMultipleIcons(String, String[]) : JPanel</text>
<text text-anchor="start" x="1415.73" y="-765.3" font-family="Times,serif" font-size="14.00"> + toggleVisibility() : void</text>
<polyline fill="none" stroke="black" points="1407.73,-757.1 1747.99,-757.1"/>
<text text-anchor="start" x="1415.73" y="-740.5" font-family="Times,serif" font-size="14.00">controlsMenuVisible : boolean</text>
</g>
<!-- GameModeSelectionPanel -->
<g id="node5" class="node">
<title>GameModeSelectionPanel</title>
<polygon fill="none" stroke="black" points="1765.71,-644.3 1765.71,-969.9 2164.01,-969.9 2164.01,-644.3 1765.71,-644.3"/>
<text text-anchor="middle" x="1964.86" y="-953.3" font-family="Times,serif" font-size="14.00">GameModeSelectionPanel</text>
<polyline fill="none" stroke="black" points="1765.71,-945.1 2164.01,-945.1"/>
<text text-anchor="start" x="1773.71" y="-928.5" font-family="Times,serif" font-size="14.00">+ GameModeSelectionPanel(ActionListener, JFrame, MainMenu) : </text>
<polyline fill="none" stroke="black" points="1765.71,-920.3 2164.01,-920.3"/>
<text text-anchor="start" x="1773.71" y="-903.7" font-family="Times,serif" font-size="14.00">- currentPage : int</text>
<polyline fill="none" stroke="black" points="1765.71,-895.5 2164.01,-895.5"/>
<text text-anchor="start" x="1773.71" y="-878.9" font-family="Times,serif" font-size="14.00">- createTopPanel(JFrame, MainMenu) : JPanel</text>
<text text-anchor="start" x="1773.71" y="-862.1" font-family="Times,serif" font-size="14.00"> - createDateFilterPanel() : JPanel</text>
<text text-anchor="start" x="1773.71" y="-845.3" font-family="Times,serif" font-size="14.00"> - createSeedPanel(ActionListener) : JPanel</text>
<text text-anchor="start" x="1773.71" y="-828.5" font-family="Times,serif" font-size="14.00"> - stylizeDateSpinner(JSpinner) : void</text>
<text text-anchor="start" x="1773.71" y="-811.7" font-family="Times,serif" font-size="14.00"> - createPaginationPanel() : JPanel</text>
<text text-anchor="start" x="1773.71" y="-794.9" font-family="Times,serif" font-size="14.00"> - createReturnButtonWithIcon(JFrame, MainMenu) : JButton</text>
<text text-anchor="start" x="1773.71" y="-778.1" font-family="Times,serif" font-size="14.00"> - createGameModeButton(String, ActionListener) : JButton</text>
<text text-anchor="start" x="1773.71" y="-761.3" font-family="Times,serif" font-size="14.00"> + loadSeriesForCurrentPage() : void</text>
<text text-anchor="start" x="1773.71" y="-744.5" font-family="Times,serif" font-size="14.00"> - createMainPanel() : JPanel</text>
<text text-anchor="start" x="1773.71" y="-727.7" font-family="Times,serif" font-size="14.00"> - updatePageLabelAndButtons(int, int) : void</text>
<text text-anchor="start" x="1773.71" y="-710.9" font-family="Times,serif" font-size="14.00"> - createGridBagConstraints(int, int, int) : GridBagConstraints</text>
<polyline fill="none" stroke="black" points="1765.71,-702.7 2164.01,-702.7"/>
<text text-anchor="start" x="1773.71" y="-686.1" font-family="Times,serif" font-size="14.00">longSeed : long</text>
<text text-anchor="start" x="1773.71" y="-669.3" font-family="Times,serif" font-size="14.00"> currentPage : int</text>
<text text-anchor="start" x="1773.71" y="-652.5" font-family="Times,serif" font-size="14.00"> stringSeed : String</text>
</g>
<!-- GameOver -->
<g id="node6" class="node">
<title>GameOver</title>
<polygon fill="none" stroke="black" points="0,-761.5 0,-852.7 311.72,-852.7 311.72,-761.5 0,-761.5"/>
<text text-anchor="middle" x="155.86" y="-836.1" font-family="Times,serif" font-size="14.00">GameOver</text>
<polyline fill="none" stroke="black" points="0,-827.9 311.72,-827.9"/>
<text text-anchor="start" x="8" y="-811.3" font-family="Times,serif" font-size="14.00">+ GameOver(JFrame, int, Database, MainMenu) : </text>
<polyline fill="none" stroke="black" points="0,-803.1 311.72,-803.1"/>
<text text-anchor="start" x="8" y="-786.5" font-family="Times,serif" font-size="14.00">- getFunnyQuote(int) : String</text>
<text text-anchor="start" x="8" y="-769.7" font-family="Times,serif" font-size="14.00"> - scoreInGroup(List&lt;Integer&gt;, int, int, int) : boolean</text>
</g>
<!-- GameOver&#45;&gt;BarChartPanel -->
<g id="edge1" class="edge">
<title>GameOver-&gt;BarChartPanel</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M155.86,-761.24C155.86,-761.24 155.86,-555.85 155.86,-555.85"/>
<polygon fill="#595959" stroke="#595959" points="155.86,-545.85 160.36,-555.85 155.86,-549.63 155.86,-555.85 155.86,-555.85 155.86,-555.85 155.86,-549.63 151.36,-555.85 155.86,-545.85"/>
<text text-anchor="middle" x="179.56" y="-613.2" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Leaderboard -->
<g id="node7" class="node">
<title>Leaderboard</title>
<polygon fill="none" stroke="black" points="896.69,-0.5 896.69,-74.9 1015.03,-74.9 1015.03,-0.5 896.69,-0.5"/>
<text text-anchor="middle" x="955.86" y="-58.3" font-family="Times,serif" font-size="14.00">Leaderboard</text>
<polyline fill="none" stroke="black" points="896.69,-50.1 1015.03,-50.1"/>
<text text-anchor="start" x="904.69" y="-33.5" font-family="Times,serif" font-size="14.00">+ Leaderboard() : </text>
<polyline fill="none" stroke="black" points="896.69,-25.3 1015.03,-25.3"/>
<text text-anchor="start" x="904.69" y="-8.7" font-family="Times,serif" font-size="14.00">+ refresh() : void</text>
</g>
<!-- LeaderboardBarChartPanel -->
<g id="node8" class="node">
<title>LeaderboardBarChartPanel</title>
<polygon fill="none" stroke="black" points="518.2,-0.5 518.2,-74.9 755.52,-74.9 755.52,-0.5 518.2,-0.5"/>
<text text-anchor="middle" x="636.86" y="-58.3" font-family="Times,serif" font-size="14.00">LeaderboardBarChartPanel</text>
<polyline fill="none" stroke="black" points="518.2,-50.1 755.52,-50.1"/>
<text text-anchor="start" x="526.2" y="-33.5" font-family="Times,serif" font-size="14.00">+ LeaderboardBarChartPanel(int, int) : </text>
<polyline fill="none" stroke="black" points="518.2,-25.3 755.52,-25.3"/>
<text text-anchor="start" x="526.2" y="-8.7" font-family="Times,serif" font-size="14.00"># paintComponent(Graphics) : void</text>
</g>
<!-- LeaderboardByTier -->
<g id="node9" class="node">
<title>LeaderboardByTier</title>
<polygon fill="none" stroke="black" points="557.86,-212.3 557.86,-286.7 715.86,-286.7 715.86,-212.3 557.86,-212.3"/>
<text text-anchor="middle" x="636.86" y="-270.1" font-family="Times,serif" font-size="14.00">LeaderboardByTier</text>
<polyline fill="none" stroke="black" points="557.86,-261.9 715.86,-261.9"/>
<text text-anchor="start" x="565.86" y="-245.3" font-family="Times,serif" font-size="14.00">+ LeaderboardByTier() : </text>
<polyline fill="none" stroke="black" points="557.86,-237.1 715.86,-237.1"/>
<text text-anchor="start" x="565.86" y="-220.5" font-family="Times,serif" font-size="14.00">+ refresh() : void</text>
</g>
<!-- LeaderboardByTier&#45;&gt;Leaderboard -->
<g id="edge2" class="edge">
<title>LeaderboardByTier-&gt;Leaderboard</title>
<path fill="none" stroke="#000082" d="M663.19,-211.85C663.19,-168.09 663.19,-101.8 663.19,-101.8 663.19,-101.8 912.23,-101.8 912.23,-101.8 912.23,-101.8 912.23,-86.87 912.23,-86.87"/>
<polygon fill="#000082" stroke="#000082" points="915.73,-86.87 912.23,-76.87 908.73,-86.87 915.73,-86.87"/>
</g>
<!-- LeaderboardByTier&#45;&gt;LeaderboardBarChartPanel -->
<g id="edge3" class="edge">
<title>LeaderboardByTier-&gt;LeaderboardBarChartPanel</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M610.53,-212.12C610.53,-212.12 610.53,-86.28 610.53,-86.28"/>
<polygon fill="#595959" stroke="#595959" points="610.53,-76.28 615.03,-86.28 610.53,-80.06 610.53,-86.28 610.53,-86.28 610.53,-86.28 610.53,-80.06 606.03,-86.28 610.53,-76.28"/>
<text text-anchor="middle" x="660.56" y="-97.6" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- LeaderboardWorldWide -->
<g id="node10" class="node">
<title>LeaderboardWorldWide</title>
<polygon fill="none" stroke="black" points="983.95,-187.1 983.95,-311.9 1339.76,-311.9 1339.76,-187.1 983.95,-187.1"/>
<text text-anchor="middle" x="1161.86" y="-295.3" font-family="Times,serif" font-size="14.00">LeaderboardWorldWide</text>
<polyline fill="none" stroke="black" points="983.95,-287.1 1339.76,-287.1"/>
<text text-anchor="start" x="991.95" y="-270.5" font-family="Times,serif" font-size="14.00">+ LeaderboardWorldWide() : </text>
<polyline fill="none" stroke="black" points="983.95,-262.3 1339.76,-262.3"/>
<text text-anchor="start" x="991.95" y="-245.7" font-family="Times,serif" font-size="14.00">- createPlayerPanel(String, int, int) : JPanel</text>
<text text-anchor="start" x="991.95" y="-228.9" font-family="Times,serif" font-size="14.00"> - createTopPlayerPanel(String, int, String, boolean) : JPanel</text>
<text text-anchor="start" x="991.95" y="-212.1" font-family="Times,serif" font-size="14.00"> - resizeIcon(String, int, int) : ImageIcon</text>
<text text-anchor="start" x="991.95" y="-195.3" font-family="Times,serif" font-size="14.00"> + refresh() : void</text>
</g>
<!-- LeaderboardWorldWide&#45;&gt;Leaderboard -->
<g id="edge4" class="edge">
<title>LeaderboardWorldWide-&gt;Leaderboard</title>
<path fill="none" stroke="#000082" d="M999.49,-186.81C999.49,-186.81 999.49,-86.85 999.49,-86.85"/>
<polygon fill="#000082" stroke="#000082" points="1002.99,-86.85 999.49,-76.85 995.99,-86.85 1002.99,-86.85"/>
</g>
<!-- MainMenu -->
<g id="node11" class="node">
<title>MainMenu</title>
<polygon fill="none" stroke="black" points="834.53,-440.9 834.53,-573.7 1009.19,-573.7 1009.19,-440.9 834.53,-440.9"/>
<text text-anchor="middle" x="921.86" y="-557.1" font-family="Times,serif" font-size="14.00">MainMenu</text>
<polyline fill="none" stroke="black" points="834.53,-548.9 1009.19,-548.9"/>
<text text-anchor="start" x="842.53" y="-532.3" font-family="Times,serif" font-size="14.00">+ MainMenu() : </text>
<polyline fill="none" stroke="black" points="834.53,-524.1 1009.19,-524.1"/>
<text text-anchor="start" x="842.53" y="-507.5" font-family="Times,serif" font-size="14.00">- titleLabel : Title</text>
<text text-anchor="start" x="842.53" y="-490.7" font-family="Times,serif" font-size="14.00"> - buttonPanel : ButtonPanel</text>
<polyline fill="none" stroke="black" points="834.53,-482.5 1009.19,-482.5"/>
<text text-anchor="start" x="842.53" y="-465.9" font-family="Times,serif" font-size="14.00">titleLabel : Title</text>
<text text-anchor="start" x="842.53" y="-449.1" font-family="Times,serif" font-size="14.00"> buttonPanel : ButtonPanel</text>
</g>
<!-- MainMenu&#45;&gt;ButtonPanel -->
<g id="edge5" class="edge">
<title>MainMenu-&gt;ButtonPanel</title>
<path fill="none" stroke="#595959" d="M865.61,-427.52C865.61,-427.52 865.61,-381.91 865.61,-381.91"/>
<polygon fill="#595959" stroke="#595959" points="865.61,-427.67 869.61,-433.67 865.61,-439.67 861.61,-433.67 865.61,-427.67"/>
<polygon fill="#595959" stroke="#595959" points="865.61,-371.91 870.11,-381.91 865.61,-375.69 865.61,-381.91 865.61,-381.91 865.61,-381.91 865.61,-375.69 861.11,-381.91 865.61,-371.91"/>
<text text-anchor="middle" x="832.17" y="-391.69" font-family="Times,serif" font-size="14.00">buttonPanel</text>
<text text-anchor="middle" x="832.17" y="-374.89" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="862.11" y="-427.97" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- MainMenu&#45;&gt;ButtonPanel -->
<g id="edge6" class="edge">
<title>MainMenu-&gt;ButtonPanel</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M896.69,-440.57C896.69,-440.57 896.69,-381.91 896.69,-381.91"/>
<polygon fill="#595959" stroke="#595959" points="896.69,-371.91 901.19,-381.91 896.69,-375.69 896.69,-381.91 896.69,-381.91 896.69,-381.91 896.69,-375.69 892.19,-381.91 896.69,-371.91"/>
<text text-anchor="middle" x="910.56" y="-393" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- MainMenu&#45;&gt;Leaderboard -->
<g id="edge7" class="edge">
<title>MainMenu-&gt;Leaderboard</title>
<path fill="none" stroke="#595959" d="M955.87,-427.46C955.87,-427.46 955.87,-86.44 955.87,-86.44"/>
<polygon fill="#595959" stroke="#595959" points="955.87,-427.62 959.87,-433.62 955.87,-439.62 951.87,-433.62 955.87,-427.62"/>
<polygon fill="#595959" stroke="#595959" points="955.87,-76.44 960.37,-86.44 955.87,-80.22 955.87,-86.44 955.87,-86.44 955.87,-86.44 955.87,-80.22 951.37,-86.44 955.87,-76.44"/>
<text text-anchor="middle" x="900.68" y="-96.22" font-family="Times,serif" font-size="14.00">currentLeaderboard</text>
<text text-anchor="middle" x="900.68" y="-79.42" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="952.37" y="-427.92" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- MainMenu&#45;&gt;LeaderboardWorldWide -->
<g id="edge8" class="edge">
<title>MainMenu-&gt;LeaderboardWorldWide</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M996.57,-440.57C996.57,-440.57 996.57,-323.62 996.57,-323.62"/>
<polygon fill="#595959" stroke="#595959" points="996.57,-313.62 1001.07,-323.62 996.57,-317.4 996.57,-323.62 996.57,-323.62 996.57,-323.62 996.57,-317.4 992.07,-323.62 996.57,-313.62"/>
<text text-anchor="middle" x="1098.56" y="-393" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Reward -->
<g id="node12" class="node">
<title>Reward</title>
<polygon fill="none" stroke="black" points="2182.47,-707.1 2182.47,-907.1 2467.25,-907.1 2467.25,-707.1 2182.47,-707.1"/>
<text text-anchor="middle" x="2324.86" y="-890.5" font-family="Times,serif" font-size="14.00">Reward</text>
<polyline fill="none" stroke="black" points="2182.47,-882.3 2467.25,-882.3"/>
<text text-anchor="start" x="2190.47" y="-865.7" font-family="Times,serif" font-size="14.00">+ Reward(String, String, boolean, ImageIcon) : </text>
<polyline fill="none" stroke="black" points="2182.47,-857.5 2467.25,-857.5"/>
<text text-anchor="start" x="2190.47" y="-840.9" font-family="Times,serif" font-size="14.00">- description : String</text>
<text text-anchor="start" x="2190.47" y="-824.1" font-family="Times,serif" font-size="14.00"> - isUnlocked : boolean</text>
<text text-anchor="start" x="2190.47" y="-807.3" font-family="Times,serif" font-size="14.00"> - icon : ImageIcon</text>
<text text-anchor="start" x="2190.47" y="-790.5" font-family="Times,serif" font-size="14.00"> - name : String</text>
<polyline fill="none" stroke="black" points="2182.47,-782.3 2467.25,-782.3"/>
<text text-anchor="start" x="2190.47" y="-765.7" font-family="Times,serif" font-size="14.00">name : String</text>
<text text-anchor="start" x="2190.47" y="-748.9" font-family="Times,serif" font-size="14.00"> icon : ImageIcon</text>
<text text-anchor="start" x="2190.47" y="-732.1" font-family="Times,serif" font-size="14.00"> description : String</text>
<text text-anchor="start" x="2190.47" y="-715.3" font-family="Times,serif" font-size="14.00"> isUnlocked : boolean</text>
</g>
<!-- SettingsPanel -->
<g id="node13" class="node">
<title>SettingsPanel</title>
<polygon fill="none" stroke="black" points="565.86,-681.9 565.86,-932.3 1067.86,-932.3 1067.86,-681.9 565.86,-681.9"/>
<text text-anchor="middle" x="816.86" y="-915.7" font-family="Times,serif" font-size="14.00">SettingsPanel</text>
<polyline fill="none" stroke="black" points="565.86,-907.5 1067.86,-907.5"/>
<text text-anchor="start" x="573.86" y="-890.9" font-family="Times,serif" font-size="14.00">+ SettingsPanel(MainMenu, JFrame) : </text>
<polyline fill="none" stroke="black" points="565.86,-882.7 1067.86,-882.7"/>
<text text-anchor="start" x="573.86" y="-866.1" font-family="Times,serif" font-size="14.00">- initializeSettingsFrame() : void</text>
<text text-anchor="start" x="573.86" y="-849.3" font-family="Times,serif" font-size="14.00"> - createReturnButtonWithIcon() : JButton</text>
<text text-anchor="start" x="573.86" y="-832.5" font-family="Times,serif" font-size="14.00"> - setupBackground() : void</text>
<text text-anchor="start" x="573.86" y="-815.7" font-family="Times,serif" font-size="14.00"> - createSliderPanel(JSlider) : JPanel</text>
<text text-anchor="start" x="573.86" y="-798.9" font-family="Times,serif" font-size="14.00"> - createSoundPanel(String, JSlider, ChangeListener, MuteCheckBoxListener) : JPanel</text>
<text text-anchor="start" x="573.86" y="-782.1" font-family="Times,serif" font-size="14.00"> - setupMainPanel() : void</text>
<text text-anchor="start" x="573.86" y="-765.3" font-family="Times,serif" font-size="14.00"> - setupTopPanel() : void</text>
<text text-anchor="start" x="573.86" y="-748.5" font-family="Times,serif" font-size="14.00"> - createGridBagConstraints(int, int, int) : GridBagConstraints</text>
<text text-anchor="start" x="573.86" y="-731.7" font-family="Times,serif" font-size="14.00"> # paintComponent(Graphics) : void</text>
<text text-anchor="start" x="573.86" y="-714.9" font-family="Times,serif" font-size="14.00"> - createAutoFocusPanel() : JPanel</text>
<polyline fill="none" stroke="black" points="565.86,-706.7 1067.86,-706.7"/>
<text text-anchor="start" x="573.86" y="-690.1" font-family="Times,serif" font-size="14.00">returnButtonVisible : boolean</text>
</g>
<!-- SettingsPanel&#45;&gt;MainMenu -->
<g id="edge9" class="edge">
<title>SettingsPanel-&gt;MainMenu</title>
<path fill="none" stroke="#595959" d="M921.86,-668.64C921.86,-668.64 921.86,-585.37 921.86,-585.37"/>
<polygon fill="#595959" stroke="#595959" points="921.86,-668.79 925.86,-674.79 921.86,-680.79 917.86,-674.79 921.86,-668.79"/>
<polygon fill="#595959" stroke="#595959" points="921.86,-575.37 926.36,-585.37 921.86,-579.15 921.86,-585.37 921.86,-585.37 921.86,-585.37 921.86,-579.15 917.36,-585.37 921.86,-575.37"/>
<text text-anchor="middle" x="891.53" y="-595.15" font-family="Times,serif" font-size="14.00">mainMenu</text>
<text text-anchor="middle" x="891.53" y="-578.35" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="918.36" y="-669.09" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- Step -->
<g id="node14" class="node">
<title>Step</title>
<polygon fill="none" stroke="black" points="1143.27,-424.1 1143.27,-590.5 1332.45,-590.5 1332.45,-424.1 1143.27,-424.1"/>
<text text-anchor="middle" x="1237.86" y="-573.9" font-family="Times,serif" font-size="14.00">Step</text>
<polyline fill="none" stroke="black" points="1143.27,-565.7 1332.45,-565.7"/>
<text text-anchor="start" x="1151.27" y="-549.1" font-family="Times,serif" font-size="14.00">+ Step(String, String, String) : </text>
<polyline fill="none" stroke="black" points="1143.27,-540.9 1332.45,-540.9"/>
<text text-anchor="start" x="1151.27" y="-524.3" font-family="Times,serif" font-size="14.00">- title : String</text>
<text text-anchor="start" x="1151.27" y="-507.5" font-family="Times,serif" font-size="14.00"> - imagePath : String</text>
<text text-anchor="start" x="1151.27" y="-490.7" font-family="Times,serif" font-size="14.00"> - text : String</text>
<polyline fill="none" stroke="black" points="1143.27,-482.5 1332.45,-482.5"/>
<text text-anchor="start" x="1151.27" y="-465.9" font-family="Times,serif" font-size="14.00">text : String</text>
<text text-anchor="start" x="1151.27" y="-449.1" font-family="Times,serif" font-size="14.00"> imagePath : String</text>
<text text-anchor="start" x="1151.27" y="-432.3" font-family="Times,serif" font-size="14.00"> title : String</text>
</g>
<!-- TutorialPanel -->
<g id="node15" class="node">
<title>TutorialPanel</title>
<polygon fill="none" stroke="black" points="1086.01,-719.5 1086.01,-894.7 1389.71,-894.7 1389.71,-719.5 1086.01,-719.5"/>
<text text-anchor="middle" x="1237.86" y="-878.1" font-family="Times,serif" font-size="14.00">TutorialPanel</text>
<polyline fill="none" stroke="black" points="1086.01,-869.9 1389.71,-869.9"/>
<text text-anchor="start" x="1094.01" y="-853.3" font-family="Times,serif" font-size="14.00">+ TutorialPanel(List&lt;Step&gt;, MainMenu, JFrame) : </text>
<polyline fill="none" stroke="black" points="1086.01,-845.1 1389.71,-845.1"/>
<text text-anchor="start" x="1094.01" y="-828.5" font-family="Times,serif" font-size="14.00">- updateStepDisplay() : void</text>
<text text-anchor="start" x="1094.01" y="-811.7" font-family="Times,serif" font-size="14.00"> - styleButton(JButton) : void</text>
<text text-anchor="start" x="1094.01" y="-794.9" font-family="Times,serif" font-size="14.00"> - createReturnButtonWithIcon() : JButton</text>
<text text-anchor="start" x="1094.01" y="-778.1" font-family="Times,serif" font-size="14.00"> - showPreviousStep() : void</text>
<text text-anchor="start" x="1094.01" y="-761.3" font-family="Times,serif" font-size="14.00"> - addLineBreaks(String, int) : String</text>
<text text-anchor="start" x="1094.01" y="-744.5" font-family="Times,serif" font-size="14.00"> # paintComponent(Graphics) : void</text>
<text text-anchor="start" x="1094.01" y="-727.7" font-family="Times,serif" font-size="14.00"> - showNextStep() : void</text>
</g>
<!-- TutorialPanel&#45;&gt;MainMenu -->
<g id="edge10" class="edge">
<title>TutorialPanel-&gt;MainMenu</title>
<path fill="none" stroke="#595959" d="M1114.64,-706.12C1114.64,-706.12 1114.64,-507.3 1114.64,-507.3 1114.64,-507.3 1020.72,-507.3 1020.72,-507.3"/>
<polygon fill="#595959" stroke="#595959" points="1114.64,-706.27 1118.64,-712.27 1114.64,-718.27 1110.64,-712.27 1114.64,-706.27"/>
<polygon fill="#595959" stroke="#595959" points="1010.72,-507.3 1020.72,-502.8 1014.5,-507.3 1020.72,-507.3 1020.72,-507.3 1020.72,-507.3 1014.5,-507.3 1020.72,-511.8 1010.72,-507.3"/>
<text text-anchor="middle" x="1039.83" y="-528.3" font-family="Times,serif" font-size="14.00">mainMenu</text>
<text text-anchor="middle" x="1039.83" y="-511.5" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1111.14" y="-706.58" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- TutorialPanel&#45;&gt;Step -->
<g id="edge11" class="edge">
<title>TutorialPanel-&gt;Step</title>
<path fill="none" stroke="#595959" d="M1237.86,-706.12C1237.86,-706.12 1237.86,-602.06 1237.86,-602.06"/>
<polygon fill="#595959" stroke="#595959" points="1237.86,-706.27 1241.86,-712.27 1237.86,-718.27 1233.86,-712.27 1237.86,-706.27"/>
<polygon fill="#595959" stroke="#595959" points="1237.86,-592.06 1242.36,-602.06 1237.86,-595.85 1237.86,-602.06 1237.86,-602.06 1237.86,-602.06 1237.86,-595.85 1233.36,-602.06 1237.86,-592.06"/>
<text text-anchor="middle" x="1223.86" y="-611.85" font-family="Times,serif" font-size="14.00">steps</text>
<text text-anchor="middle" x="1223.86" y="-595.05" font-family="Times,serif" font-size="14.00">*</text>
<text text-anchor="middle" x="1234.36" y="-706.58" font-family="Times,serif" font-size="14.00">1</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -0,0 +1,136 @@
@startuml game
!theme plain
top to bottom direction
skinparam linetype ortho
class Board {
- offsetX: int
- random: Random
- zoomFactor: double
- game: Game
- nextTile: Tile
- offsetY: int
- controlsMenu: GameControlsMenu
+ handleSpaceKeyPress(): void
+ zoomIn(): void
+ moveBoard(int, int): void
+ zoomOut(): void
- initializeNextTile(): void
- calculateAvailablePositions(Tile): void
+ handleMouseMove(MouseEvent): void
- isTileAtPosition(Point): boolean
+ handleMouseClick(MouseEvent): void
+ paintComponent(Graphics): void
+ autoReFocus(Tile): void
+ getTileAt(int, int): Tile
- initializeCentralTile(): void
+ placeTileAtPosition(Point): void
+ addTile(Tile): void
random: Random
zoomFactor: double
controlsMenu: GameControlsMenu
nextTile: Tile
offsetX: int
game: Game
offsetY: int
}
class Cell {
+ radius: int
- board: Board
+ setPosition(int, int): void
# paintComponent(Graphics): void
+ to360Degrees(double): double
XCoord: int
board: Board
YCoord: int
radius: int
}
class CustomKeyAdapter {
+ keyPressed(KeyEvent): void
}
class CustomMouseMotionAdapter {
+ mouseMoved(MouseEvent): void
}
class EscapeMenu {
- createButton(String): JButton
menuVisible: boolean
settingsButtonListener: ActionListener
resumeButtonListener: ActionListener
quitButtonListener: ActionListener
}
class Game {
+ getRandomInt(int): int
}
class PauseGame {
+ keyPressed(KeyEvent): void
}
class Pocket {
- biome: Biome
- tiles: Set<Tile>
+ addTile(Tile): void
tiles: Set<Tile>
size: int
biome: Biome
}
class RemainingTilesIndicator {
- remainingTiles: int
+ draw(Graphics, int, int): void
- createHexagon(int, int, int, int): Polygon
totalHeight: int
remainingTiles: int
}
class ScoreDisplay {
- score: int
+ setPosition(int, int): void
+ draw(Graphics): void
score: int
}
class ScoreManager {
- currentScore: int
- recalculateScore(): void
- findPocketForTile(Tile, Biome): Pocket?
+ addTile(Tile): void
currentScore: int
}
class Tile {
+ determineSide(int, int): TileOrientation
+ getBiome(TileOrientation): Biome
+ getNeighbor(TileOrientation): Tile
+ containsBiome(Biome): boolean
+ assignRandomBiomes(): void
# drawTileAt(Graphics, int, int, float): void
# paintTile(Graphics, float): void
+ isAdjacentTo(Tile): boolean
+ rotate(boolean): void
biomes: Biome[]
dominantBiome: Biome
}
class TilePanningTransition {
+ start(): void
}
Board -[#595959,dashed]-> CustomKeyAdapter : "«create»"
Board -[#595959,dashed]-> CustomMouseMotionAdapter : "«create»"
Board "1" *-[#595959,plain]-> "game\n1" Game
Board -[#595959,dashed]-> Game : "«create»"
Board -[#595959,dashed]-> PauseGame : "«create»"
Board -[#595959,dashed]-> RemainingTilesIndicator : "«create»"
Board "1" *-[#595959,plain]-> "remainingTilesIndicator\n1" RemainingTilesIndicator
Board -[#595959,dashed]-> ScoreDisplay : "«create»"
Board "1" *-[#595959,plain]-> "scoreDisplay\n1" ScoreDisplay
Board -[#595959,dashed]-> ScoreManager : "«create»"
Board "1" *-[#595959,plain]-> "scoreManager\n1" ScoreManager
Board "1" *-[#595959,plain]-> "tiles\n*" Tile
Board -[#595959,dashed]-> Tile : "«create»"
Board -[#595959,dashed]-> TilePanningTransition : "«create»"
Cell "1" *-[#595959,plain]-> "board\n1" Board
CustomKeyAdapter "1" *-[#595959,plain]-> "board\n1" Board
CustomMouseMotionAdapter "1" *-[#595959,plain]-> "board\n1" Board
PauseGame "1" *-[#595959,plain]-> "escapeMenu\n1" EscapeMenu
PauseGame -[#595959,dashed]-> EscapeMenu : "«create»"
Pocket "1" *-[#595959,plain]-> "tiles\n*" Tile
ScoreManager -[#595959,dashed]-> Pocket : "«create»"
ScoreManager "1" *-[#595959,plain]-> "pockets\n*" Pocket
Tile -[#000082,plain]-^ Cell
TilePanningTransition "1" *-[#595959,plain]-> "board\n1" Board
@enduml

View File

@@ -0,0 +1,393 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1840pt" height="1437pt" viewBox="0.00 0.00 1840.22 1436.60">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1432.6)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-1432.6 1836.22,-1432.6 1836.22,4 -4,4"/>
<!-- Board -->
<g id="node1" class="node">
<title>Board</title>
<polygon fill="none" stroke="black" points="978.31,-892.1 978.31,-1428.1 1233.16,-1428.1 1233.16,-892.1 978.31,-892.1"/>
<text text-anchor="middle" x="1105.73" y="-1411.5" font-family="Times,serif" font-size="14.00">Board</text>
<polyline fill="none" stroke="black" points="978.31,-1403.3 1233.16,-1403.3"/>
<text text-anchor="start" x="986.31" y="-1386.7" font-family="Times,serif" font-size="14.00">- offsetX : int</text>
<text text-anchor="start" x="986.31" y="-1369.9" font-family="Times,serif" font-size="14.00"> - random : Random</text>
<text text-anchor="start" x="986.31" y="-1353.1" font-family="Times,serif" font-size="14.00"> - zoomFactor : double</text>
<text text-anchor="start" x="986.31" y="-1336.3" font-family="Times,serif" font-size="14.00"> - game : Game</text>
<text text-anchor="start" x="986.31" y="-1319.5" font-family="Times,serif" font-size="14.00"> - nextTile : Tile</text>
<text text-anchor="start" x="986.31" y="-1302.7" font-family="Times,serif" font-size="14.00"> - offsetY : int</text>
<text text-anchor="start" x="986.31" y="-1285.9" font-family="Times,serif" font-size="14.00"> - controlsMenu : GameControlsMenu</text>
<polyline fill="none" stroke="black" points="978.31,-1277.7 1233.16,-1277.7"/>
<text text-anchor="start" x="986.31" y="-1261.1" font-family="Times,serif" font-size="14.00">+ handleSpaceKeyPress() : void</text>
<text text-anchor="start" x="986.31" y="-1244.3" font-family="Times,serif" font-size="14.00"> + zoomIn() : void</text>
<text text-anchor="start" x="986.31" y="-1227.5" font-family="Times,serif" font-size="14.00"> + moveBoard(int, int) : void</text>
<text text-anchor="start" x="986.31" y="-1210.7" font-family="Times,serif" font-size="14.00"> + zoomOut() : void</text>
<text text-anchor="start" x="986.31" y="-1193.9" font-family="Times,serif" font-size="14.00"> - initializeNextTile() : void</text>
<text text-anchor="start" x="986.31" y="-1177.1" font-family="Times,serif" font-size="14.00"> - calculateAvailablePositions(Tile) : void</text>
<text text-anchor="start" x="986.31" y="-1160.3" font-family="Times,serif" font-size="14.00"> + handleMouseMove(MouseEvent) : void</text>
<text text-anchor="start" x="986.31" y="-1143.5" font-family="Times,serif" font-size="14.00"> - isTileAtPosition(Point) : boolean</text>
<text text-anchor="start" x="986.31" y="-1126.7" font-family="Times,serif" font-size="14.00"> + handleMouseClick(MouseEvent) : void</text>
<text text-anchor="start" x="986.31" y="-1109.9" font-family="Times,serif" font-size="14.00"> + paintComponent(Graphics) : void</text>
<text text-anchor="start" x="986.31" y="-1093.1" font-family="Times,serif" font-size="14.00"> + autoReFocus(Tile) : void</text>
<text text-anchor="start" x="986.31" y="-1076.3" font-family="Times,serif" font-size="14.00"> + getTileAt(int, int) : Tile</text>
<text text-anchor="start" x="986.31" y="-1059.5" font-family="Times,serif" font-size="14.00"> - initializeCentralTile() : void</text>
<text text-anchor="start" x="986.31" y="-1042.7" font-family="Times,serif" font-size="14.00"> + placeTileAtPosition(Point) : void</text>
<text text-anchor="start" x="986.31" y="-1025.9" font-family="Times,serif" font-size="14.00"> + addTile(Tile) : void</text>
<polyline fill="none" stroke="black" points="978.31,-1017.7 1233.16,-1017.7"/>
<text text-anchor="start" x="986.31" y="-1001.1" font-family="Times,serif" font-size="14.00">random : Random</text>
<text text-anchor="start" x="986.31" y="-984.3" font-family="Times,serif" font-size="14.00"> zoomFactor : double</text>
<text text-anchor="start" x="986.31" y="-967.5" font-family="Times,serif" font-size="14.00"> controlsMenu : GameControlsMenu</text>
<text text-anchor="start" x="986.31" y="-950.7" font-family="Times,serif" font-size="14.00"> nextTile : Tile</text>
<text text-anchor="start" x="986.31" y="-933.9" font-family="Times,serif" font-size="14.00"> offsetX : int</text>
<text text-anchor="start" x="986.31" y="-917.1" font-family="Times,serif" font-size="14.00"> game : Game</text>
<text text-anchor="start" x="986.31" y="-900.3" font-family="Times,serif" font-size="14.00"> offsetY : int</text>
</g>
<!-- CustomKeyAdapter -->
<g id="node3" class="node">
<title>CustomKeyAdapter</title>
<polygon fill="none" stroke="black" points="0,-747.1 0,-796.7 191.46,-796.7 191.46,-747.1 0,-747.1"/>
<text text-anchor="middle" x="95.73" y="-780.1" font-family="Times,serif" font-size="14.00">CustomKeyAdapter</text>
<polyline fill="none" stroke="black" points="0,-771.9 191.46,-771.9"/>
<text text-anchor="start" x="8" y="-755.3" font-family="Times,serif" font-size="14.00">+ keyPressed(KeyEvent) : void</text>
</g>
<!-- Board&#45;&gt;CustomKeyAdapter -->
<g id="edge1" class="edge">
<title>Board-&gt;CustomKeyAdapter</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M977.97,-1361.48C699.75,-1361.48 63.82,-1361.48 63.82,-1361.48 63.82,-1361.48 63.82,-808.08 63.82,-808.08"/>
<polygon fill="#595959" stroke="#595959" points="63.82,-798.08 68.32,-808.08 63.82,-801.86 63.82,-808.08 63.82,-808.08 63.82,-808.08 63.82,-801.86 59.32,-808.08 63.82,-798.08"/>
<text text-anchor="middle" x="126.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- CustomMouseMotionAdapter -->
<g id="node4" class="node">
<title>CustomMouseMotionAdapter</title>
<polygon fill="none" stroke="black" points="208.99,-747.1 208.99,-796.7 428.47,-796.7 428.47,-747.1 208.99,-747.1"/>
<text text-anchor="middle" x="318.73" y="-780.1" font-family="Times,serif" font-size="14.00">CustomMouseMotionAdapter</text>
<polyline fill="none" stroke="black" points="208.99,-771.9 428.47,-771.9"/>
<text text-anchor="start" x="216.99" y="-755.3" font-family="Times,serif" font-size="14.00">+ mouseMoved(MouseEvent) : void</text>
</g>
<!-- Board&#45;&gt;CustomMouseMotionAdapter -->
<g id="edge2" class="edge">
<title>Board-&gt;CustomMouseMotionAdapter</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M977.95,-1227.23C746.62,-1227.23 282.15,-1227.23 282.15,-1227.23 282.15,-1227.23 282.15,-808.25 282.15,-808.25"/>
<polygon fill="#595959" stroke="#595959" points="282.15,-798.25 286.65,-808.25 282.15,-802.03 282.15,-808.25 282.15,-808.25 282.15,-808.25 282.15,-802.03 277.65,-808.25 282.15,-798.25"/>
<text text-anchor="middle" x="602.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Game -->
<g id="node6" class="node">
<title>Game</title>
<polygon fill="none" stroke="black" points="446.1,-747.1 446.1,-796.7 603.36,-796.7 603.36,-747.1 446.1,-747.1"/>
<text text-anchor="middle" x="524.73" y="-780.1" font-family="Times,serif" font-size="14.00">Game</text>
<polyline fill="none" stroke="black" points="446.1,-771.9 603.36,-771.9"/>
<text text-anchor="start" x="454.1" y="-755.3" font-family="Times,serif" font-size="14.00">+ getRandomInt(int) : int</text>
</g>
<!-- Board&#45;&gt;Game -->
<g id="edge3" class="edge">
<title>Board-&gt;Game</title>
<path fill="none" stroke="#595959" d="M965.05,-1025.85C965.05,-1025.85 550.94,-1025.85 550.94,-1025.85 550.94,-1025.85 550.94,-808.4 550.94,-808.4"/>
<polygon fill="#595959" stroke="#595959" points="965.2,-1025.85 971.2,-1021.85 977.2,-1025.85 971.2,-1029.85 965.2,-1025.85"/>
<polygon fill="#595959" stroke="#595959" points="550.94,-798.4 555.44,-808.4 550.94,-802.18 550.94,-808.4 550.94,-808.4 550.94,-808.4 550.94,-802.18 546.44,-808.4 550.94,-798.4"/>
<text text-anchor="middle" x="535.78" y="-818.18" font-family="Times,serif" font-size="14.00">game</text>
<text text-anchor="middle" x="535.78" y="-801.38" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="974.6" y="-1030.05" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- Board&#45;&gt;Game -->
<g id="edge4" class="edge">
<title>Board-&gt;Game</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M978.07,-1092.98C799.97,-1092.98 498.52,-1092.98 498.52,-1092.98 498.52,-1092.98 498.52,-808.31 498.52,-808.31"/>
<polygon fill="#595959" stroke="#595959" points="498.52,-798.31 503.02,-808.31 498.52,-802.09 498.52,-808.31 498.52,-808.31 498.52,-808.31 498.52,-802.09 494.02,-808.31 498.52,-798.31"/>
<text text-anchor="middle" x="834.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- PauseGame -->
<g id="node7" class="node">
<title>PauseGame</title>
<polygon fill="none" stroke="black" points="621,-747.1 621,-796.7 812.46,-796.7 812.46,-747.1 621,-747.1"/>
<text text-anchor="middle" x="716.73" y="-780.1" font-family="Times,serif" font-size="14.00">PauseGame</text>
<polyline fill="none" stroke="black" points="621,-771.9 812.46,-771.9"/>
<text text-anchor="start" x="629" y="-755.3" font-family="Times,serif" font-size="14.00">+ keyPressed(KeyEvent) : void</text>
</g>
<!-- Board&#45;&gt;PauseGame -->
<g id="edge5" class="edge">
<title>Board-&gt;PauseGame</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M977.82,-958.73C864.44,-958.73 716.73,-958.73 716.73,-958.73 716.73,-958.73 716.73,-808.31 716.73,-808.31"/>
<polygon fill="#595959" stroke="#595959" points="716.73,-798.31 721.23,-808.31 716.73,-802.1 716.73,-808.31 716.73,-808.31 716.73,-808.31 716.73,-802.1 712.23,-808.31 716.73,-798.31"/>
<text text-anchor="middle" x="912.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- RemainingTilesIndicator -->
<g id="node9" class="node">
<title>RemainingTilesIndicator</title>
<polygon fill="none" stroke="black" points="830.43,-705.5 830.43,-838.3 1089.04,-838.3 1089.04,-705.5 830.43,-705.5"/>
<text text-anchor="middle" x="959.73" y="-821.7" font-family="Times,serif" font-size="14.00">RemainingTilesIndicator</text>
<polyline fill="none" stroke="black" points="830.43,-813.5 1089.04,-813.5"/>
<text text-anchor="start" x="838.43" y="-796.9" font-family="Times,serif" font-size="14.00">- remainingTiles : int</text>
<polyline fill="none" stroke="black" points="830.43,-788.7 1089.04,-788.7"/>
<text text-anchor="start" x="838.43" y="-772.1" font-family="Times,serif" font-size="14.00">+ draw(Graphics, int, int) : void</text>
<text text-anchor="start" x="838.43" y="-755.3" font-family="Times,serif" font-size="14.00"> - createHexagon(int, int, int, int) : Polygon</text>
<polyline fill="none" stroke="black" points="830.43,-747.1 1089.04,-747.1"/>
<text text-anchor="start" x="838.43" y="-730.5" font-family="Times,serif" font-size="14.00">totalHeight : int</text>
<text text-anchor="start" x="838.43" y="-713.7" font-family="Times,serif" font-size="14.00"> remainingTiles : int</text>
</g>
<!-- Board&#45;&gt;RemainingTilesIndicator -->
<g id="edge6" class="edge">
<title>Board-&gt;RemainingTilesIndicator</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1052.13,-891.81C1052.13,-891.81 1052.13,-849.78 1052.13,-849.78"/>
<polygon fill="#595959" stroke="#595959" points="1052.13,-839.78 1056.63,-849.78 1052.13,-843.56 1052.13,-849.78 1052.13,-849.78 1052.13,-849.78 1052.13,-843.56 1047.63,-849.78 1052.13,-839.78"/>
<text text-anchor="middle" x="986.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Board&#45;&gt;RemainingTilesIndicator -->
<g id="edge7" class="edge">
<title>Board-&gt;RemainingTilesIndicator</title>
<path fill="none" stroke="#595959" d="M1015.22,-878.75C1015.22,-878.75 1015.22,-849.78 1015.22,-849.78"/>
<polygon fill="#595959" stroke="#595959" points="1015.22,-878.9 1019.22,-884.9 1015.22,-890.9 1011.22,-884.9 1015.22,-878.9"/>
<polygon fill="#595959" stroke="#595959" points="1015.22,-839.78 1019.72,-849.78 1015.22,-843.56 1015.22,-849.78 1015.22,-849.78 1015.22,-849.78 1015.22,-843.56 1010.72,-849.78 1015.22,-839.78"/>
<text text-anchor="middle" x="1082.86" y="-859.56" font-family="Times,serif" font-size="14.00">remainingTilesIndicator</text>
<text text-anchor="middle" x="1082.86" y="-842.76" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1011.72" y="-879.21" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- ScoreDisplay -->
<g id="node10" class="node">
<title>ScoreDisplay</title>
<polygon fill="none" stroke="black" points="1107.48,-713.9 1107.48,-829.9 1277.99,-829.9 1277.99,-713.9 1107.48,-713.9"/>
<text text-anchor="middle" x="1192.73" y="-813.3" font-family="Times,serif" font-size="14.00">ScoreDisplay</text>
<polyline fill="none" stroke="black" points="1107.48,-805.1 1277.99,-805.1"/>
<text text-anchor="start" x="1115.48" y="-788.5" font-family="Times,serif" font-size="14.00">- score : int</text>
<polyline fill="none" stroke="black" points="1107.48,-780.3 1277.99,-780.3"/>
<text text-anchor="start" x="1115.48" y="-763.7" font-family="Times,serif" font-size="14.00">+ setPosition(int, int) : void</text>
<text text-anchor="start" x="1115.48" y="-746.9" font-family="Times,serif" font-size="14.00"> + draw(Graphics) : void</text>
<polyline fill="none" stroke="black" points="1107.48,-738.7 1277.99,-738.7"/>
<text text-anchor="start" x="1115.48" y="-722.1" font-family="Times,serif" font-size="14.00">score : int</text>
</g>
<!-- Board&#45;&gt;ScoreDisplay -->
<g id="edge8" class="edge">
<title>Board-&gt;ScoreDisplay</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1170.32,-891.81C1170.32,-891.81 1170.32,-841.49 1170.32,-841.49"/>
<polygon fill="#595959" stroke="#595959" points="1170.32,-831.49 1174.82,-841.49 1170.32,-835.27 1170.32,-841.49 1170.32,-841.49 1170.32,-841.49 1170.32,-835.27 1165.82,-841.49 1170.32,-831.49"/>
<text text-anchor="middle" x="1133.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Board&#45;&gt;ScoreDisplay -->
<g id="edge9" class="edge">
<title>Board-&gt;ScoreDisplay</title>
<path fill="none" stroke="#595959" d="M1138.9,-878.75C1138.9,-878.75 1138.9,-841.49 1138.9,-841.49"/>
<polygon fill="#595959" stroke="#595959" points="1138.9,-878.9 1142.9,-884.9 1138.9,-890.9 1134.9,-884.9 1138.9,-878.9"/>
<polygon fill="#595959" stroke="#595959" points="1138.9,-831.49 1143.4,-841.49 1138.9,-835.27 1138.9,-841.49 1138.9,-841.49 1138.9,-841.49 1138.9,-835.27 1134.4,-841.49 1138.9,-831.49"/>
<text text-anchor="middle" x="1175.44" y="-851.27" font-family="Times,serif" font-size="14.00">scoreDisplay</text>
<text text-anchor="middle" x="1175.44" y="-834.47" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1135.4" y="-879.21" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- ScoreManager -->
<g id="node11" class="node">
<title>ScoreManager</title>
<polygon fill="none" stroke="black" points="1295.87,-705.5 1295.87,-838.3 1557.59,-838.3 1557.59,-705.5 1295.87,-705.5"/>
<text text-anchor="middle" x="1426.73" y="-821.7" font-family="Times,serif" font-size="14.00">ScoreManager</text>
<polyline fill="none" stroke="black" points="1295.87,-813.5 1557.59,-813.5"/>
<text text-anchor="start" x="1303.87" y="-796.9" font-family="Times,serif" font-size="14.00">- currentScore : int</text>
<polyline fill="none" stroke="black" points="1295.87,-788.7 1557.59,-788.7"/>
<text text-anchor="start" x="1303.87" y="-772.1" font-family="Times,serif" font-size="14.00">- recalculateScore() : void</text>
<text text-anchor="start" x="1303.87" y="-755.3" font-family="Times,serif" font-size="14.00"> - findPocketForTile(Tile, Biome) : Pocket?</text>
<text text-anchor="start" x="1303.87" y="-738.5" font-family="Times,serif" font-size="14.00"> + addTile(Tile) : void</text>
<polyline fill="none" stroke="black" points="1295.87,-730.3 1557.59,-730.3"/>
<text text-anchor="start" x="1303.87" y="-713.7" font-family="Times,serif" font-size="14.00">currentScore : int</text>
</g>
<!-- Board&#45;&gt;ScoreManager -->
<g id="edge10" class="edge">
<title>Board-&gt;ScoreManager</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1201.74,-891.71C1201.74,-858.53 1201.74,-836 1201.74,-836 1201.74,-836 1284.31,-836 1284.31,-836"/>
<polygon fill="#595959" stroke="#595959" points="1294.31,-836 1284.31,-840.5 1290.53,-836 1284.31,-836 1284.31,-836 1284.31,-836 1290.53,-836 1284.31,-831.5 1294.31,-836"/>
<text text-anchor="middle" x="1274.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Board&#45;&gt;ScoreManager -->
<g id="edge11" class="edge">
<title>Board-&gt;ScoreManager</title>
<path fill="none" stroke="#595959" d="M1103.79,-878.59C1103.79,-878.59 1103.79,-833.2 1103.79,-833.2 1103.79,-833.2 1284.16,-833.2 1284.16,-833.2"/>
<polygon fill="#595959" stroke="#595959" points="1103.79,-878.74 1107.79,-884.74 1103.79,-890.74 1099.79,-884.74 1103.79,-878.74"/>
<polygon fill="#595959" stroke="#595959" points="1294.16,-833.2 1284.16,-837.7 1290.38,-833.2 1284.16,-833.2 1284.16,-833.2 1284.16,-833.2 1290.38,-833.2 1284.16,-828.7 1294.16,-833.2"/>
<text text-anchor="middle" x="1255.73" y="-854.2" font-family="Times,serif" font-size="14.00">scoreManager</text>
<text text-anchor="middle" x="1255.73" y="-837.4" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1100.29" y="-879.04" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- Tile -->
<g id="node12" class="node">
<title>Tile</title>
<polygon fill="none" stroke="black" points="1471.54,-238.5 1471.54,-464.1 1737.93,-464.1 1737.93,-238.5 1471.54,-238.5"/>
<text text-anchor="middle" x="1604.73" y="-447.5" font-family="Times,serif" font-size="14.00">Tile</text>
<polyline fill="none" stroke="black" points="1471.54,-439.3 1737.93,-439.3"/>
<text text-anchor="start" x="1479.54" y="-422.7" font-family="Times,serif" font-size="14.00">+ determineSide(int, int) : TileOrientation</text>
<text text-anchor="start" x="1479.54" y="-405.9" font-family="Times,serif" font-size="14.00"> + getBiome(TileOrientation) : Biome</text>
<text text-anchor="start" x="1479.54" y="-389.1" font-family="Times,serif" font-size="14.00"> + getNeighbor(TileOrientation) : Tile</text>
<text text-anchor="start" x="1479.54" y="-372.3" font-family="Times,serif" font-size="14.00"> + containsBiome(Biome) : boolean</text>
<text text-anchor="start" x="1479.54" y="-355.5" font-family="Times,serif" font-size="14.00"> + assignRandomBiomes() : void</text>
<text text-anchor="start" x="1479.54" y="-338.7" font-family="Times,serif" font-size="14.00"> # drawTileAt(Graphics, int, int, float) : void</text>
<text text-anchor="start" x="1479.54" y="-321.9" font-family="Times,serif" font-size="14.00"> # paintTile(Graphics, float) : void</text>
<text text-anchor="start" x="1479.54" y="-305.1" font-family="Times,serif" font-size="14.00"> + isAdjacentTo(Tile) : boolean</text>
<text text-anchor="start" x="1479.54" y="-288.3" font-family="Times,serif" font-size="14.00"> + rotate(boolean) : void</text>
<polyline fill="none" stroke="black" points="1471.54,-280.1 1737.93,-280.1"/>
<text text-anchor="start" x="1479.54" y="-263.5" font-family="Times,serif" font-size="14.00">biomes : Biome[]</text>
<text text-anchor="start" x="1479.54" y="-246.7" font-family="Times,serif" font-size="14.00"> dominantBiome : Biome</text>
</g>
<!-- Board&#45;&gt;Tile -->
<g id="edge12" class="edge">
<title>Board-&gt;Tile</title>
<path fill="none" stroke="#595959" d="M1096.41,-878.61C1096.41,-878.61 1096.41,-313.53 1096.41,-313.53 1096.41,-313.53 1096.41,-302.31 1096.41,-302.31"/>
<polygon fill="#595959" stroke="#595959" points="1096.41,-878.76 1100.41,-884.76 1096.41,-890.76 1092.41,-884.76 1096.41,-878.76"/>
<polygon fill="#595959" stroke="#595959" points="1469.96,-313.5 1459.83,-317.7 1466.18,-313.38 1459.96,-313.2 1459.96,-313.2 1459.96,-313.2 1466.18,-313.38 1460.1,-308.7 1469.96,-313.5"/>
<text text-anchor="middle" x="1459.51" y="-334.53" font-family="Times,serif" font-size="14.00">tiles</text>
<text text-anchor="middle" x="1459.51" y="-317.73" font-family="Times,serif" font-size="14.00">*</text>
<text text-anchor="middle" x="1092.91" y="-879.06" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- Board&#45;&gt;Tile -->
<g id="edge13" class="edge">
<title>Board-&gt;Tile</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1100.1,-891.78C1100.1,-669.22 1100.1,-389.07 1100.1,-389.07 1100.1,-389.07 1459.94,-389.07 1459.94,-389.07"/>
<polygon fill="#595959" stroke="#595959" points="1469.94,-389.07 1459.94,-393.57 1466.16,-389.07 1459.94,-389.07 1459.94,-389.07 1459.94,-389.07 1466.16,-389.07 1459.94,-384.57 1469.94,-389.07"/>
<text text-anchor="middle" x="1647.44" y="-674.4" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- TilePanningTransition -->
<g id="node13" class="node">
<title>TilePanningTransition</title>
<polygon fill="none" stroke="black" points="1651.74,-747.1 1651.74,-796.7 1793.72,-796.7 1793.72,-747.1 1651.74,-747.1"/>
<text text-anchor="middle" x="1722.73" y="-780.1" font-family="Times,serif" font-size="14.00">TilePanningTransition</text>
<polyline fill="none" stroke="black" points="1651.74,-771.9 1793.72,-771.9"/>
<text text-anchor="start" x="1659.74" y="-755.3" font-family="Times,serif" font-size="14.00">+ start() : void</text>
</g>
<!-- Board&#45;&gt;TilePanningTransition -->
<g id="edge14" class="edge">
<title>Board-&gt;TilePanningTransition</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1233.46,-1249.6C1420.36,-1249.6 1746.4,-1249.6 1746.4,-1249.6 1746.4,-1249.6 1746.4,-808.13 1746.4,-808.13"/>
<polygon fill="#595959" stroke="#595959" points="1746.4,-798.13 1750.9,-808.13 1746.4,-801.91 1746.4,-808.13 1746.4,-808.13 1746.4,-808.13 1746.4,-801.91 1741.9,-808.13 1746.4,-798.13"/>
<text text-anchor="middle" x="1681.44" y="-861" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Cell -->
<g id="node2" class="node">
<title>Cell</title>
<polygon fill="none" stroke="black" points="1613.25,-0.5 1613.25,-200.5 1832.22,-200.5 1832.22,-0.5 1613.25,-0.5"/>
<text text-anchor="middle" x="1722.73" y="-183.9" font-family="Times,serif" font-size="14.00">Cell</text>
<polyline fill="none" stroke="black" points="1613.25,-175.7 1832.22,-175.7"/>
<text text-anchor="start" x="1621.25" y="-159.1" font-family="Times,serif" font-size="14.00">+ radius : int</text>
<text text-anchor="start" x="1621.25" y="-142.3" font-family="Times,serif" font-size="14.00"> - board : Board</text>
<polyline fill="none" stroke="black" points="1613.25,-134.1 1832.22,-134.1"/>
<text text-anchor="start" x="1621.25" y="-117.5" font-family="Times,serif" font-size="14.00">+ setPosition(int, int) : void</text>
<text text-anchor="start" x="1621.25" y="-100.7" font-family="Times,serif" font-size="14.00"> # paintComponent(Graphics) : void</text>
<text text-anchor="start" x="1621.25" y="-83.9" font-family="Times,serif" font-size="14.00"> + to360Degrees(double) : double</text>
<polyline fill="none" stroke="black" points="1613.25,-75.7 1832.22,-75.7"/>
<text text-anchor="start" x="1621.25" y="-59.1" font-family="Times,serif" font-size="14.00">XCoord : int</text>
<text text-anchor="start" x="1621.25" y="-42.3" font-family="Times,serif" font-size="14.00"> board : Board</text>
<text text-anchor="start" x="1621.25" y="-25.5" font-family="Times,serif" font-size="14.00"> YCoord : int</text>
<text text-anchor="start" x="1621.25" y="-8.7" font-family="Times,serif" font-size="14.00"> radius : int</text>
</g>
<!-- Cell&#45;&gt;Board -->
<g id="edge15" class="edge">
<title>Cell-&gt;Board</title>
<path fill="none" stroke="#595959" d="M1599.94,-100.5C1599.94,-100.5 1092.73,-100.5 1092.73,-100.5 1092.73,-100.5 1092.73,-880.47 1092.73,-880.47"/>
<polygon fill="#595959" stroke="#595959" points="1600.09,-100.5 1606.09,-96.5 1612.09,-100.5 1606.09,-104.5 1600.09,-100.5"/>
<polygon fill="#595959" stroke="#595959" points="1092.73,-890.47 1088.23,-880.47 1092.73,-886.69 1092.73,-880.47 1092.73,-880.47 1092.73,-880.47 1092.73,-886.69 1097.23,-880.47 1092.73,-890.47"/>
<text text-anchor="middle" x="1076.79" y="-879.09" font-family="Times,serif" font-size="14.00">board</text>
<text text-anchor="middle" x="1076.79" y="-862.29" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1609.49" y="-104.7" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- CustomKeyAdapter&#45;&gt;Board -->
<g id="edge16" class="edge">
<title>CustomKeyAdapter-&gt;Board</title>
<path fill="none" stroke="#595959" d="M127.64,-810.15C127.64,-810.15 127.64,-1294.35 127.64,-1294.35 127.64,-1294.35 966.65,-1294.35 966.65,-1294.35"/>
<polygon fill="#595959" stroke="#595959" points="127.64,-810 123.64,-804 127.64,-798 131.64,-804 127.64,-810"/>
<polygon fill="#595959" stroke="#595959" points="976.65,-1294.35 966.65,-1298.85 972.86,-1294.35 966.65,-1294.35 966.65,-1294.35 966.65,-1294.35 972.86,-1294.35 966.65,-1289.85 976.65,-1294.35"/>
<text text-anchor="middle" x="961.93" y="-1315.35" font-family="Times,serif" font-size="14.00">board</text>
<text text-anchor="middle" x="961.93" y="-1298.55" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="124.14" y="-801.3" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- CustomMouseMotionAdapter&#45;&gt;Board -->
<g id="edge17" class="edge">
<title>CustomMouseMotionAdapter-&gt;Board</title>
<path fill="none" stroke="#595959" d="M355.31,-810.12C355.31,-810.12 355.31,-1160.1 355.31,-1160.1 355.31,-1160.1 966.79,-1160.1 966.79,-1160.1"/>
<polygon fill="#595959" stroke="#595959" points="355.31,-809.97 351.31,-803.97 355.31,-797.97 359.31,-803.97 355.31,-809.97"/>
<polygon fill="#595959" stroke="#595959" points="976.79,-1160.1 966.79,-1164.6 973.01,-1160.1 966.79,-1160.1 966.79,-1160.1 966.79,-1160.1 973.01,-1160.1 966.79,-1155.6 976.79,-1160.1"/>
<text text-anchor="middle" x="962.07" y="-1181.1" font-family="Times,serif" font-size="14.00">board</text>
<text text-anchor="middle" x="962.07" y="-1164.3" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="351.81" y="-801.27" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- EscapeMenu -->
<g id="node5" class="node">
<title>EscapeMenu</title>
<polygon fill="none" stroke="black" points="597.17,-514.5 597.17,-639.3 838.3,-639.3 838.3,-514.5 597.17,-514.5"/>
<text text-anchor="middle" x="717.73" y="-622.7" font-family="Times,serif" font-size="14.00">EscapeMenu</text>
<polyline fill="none" stroke="black" points="597.17,-614.5 838.3,-614.5"/>
<text text-anchor="start" x="605.17" y="-597.9" font-family="Times,serif" font-size="14.00">- createButton(String) : JButton</text>
<polyline fill="none" stroke="black" points="597.17,-589.7 838.3,-589.7"/>
<text text-anchor="start" x="605.17" y="-573.1" font-family="Times,serif" font-size="14.00">menuVisible : boolean</text>
<text text-anchor="start" x="605.17" y="-556.3" font-family="Times,serif" font-size="14.00"> settingsButtonListener : ActionListener</text>
<text text-anchor="start" x="605.17" y="-539.5" font-family="Times,serif" font-size="14.00"> resumeButtonListener : ActionListener</text>
<text text-anchor="start" x="605.17" y="-522.7" font-family="Times,serif" font-size="14.00"> quitButtonListener : ActionListener</text>
</g>
<!-- PauseGame&#45;&gt;EscapeMenu -->
<g id="edge18" class="edge">
<title>PauseGame-&gt;EscapeMenu</title>
<path fill="none" stroke="#595959" d="M684.82,-733.75C684.82,-733.75 684.82,-650.81 684.82,-650.81"/>
<polygon fill="#595959" stroke="#595959" points="684.82,-733.9 688.82,-739.91 684.82,-745.9 680.82,-739.9 684.82,-733.9"/>
<polygon fill="#595959" stroke="#595959" points="684.82,-640.81 689.32,-650.81 684.82,-644.59 684.82,-650.81 684.82,-650.81 684.82,-650.81 684.82,-644.59 680.32,-650.81 684.82,-640.81"/>
<text text-anchor="middle" x="649.84" y="-660.59" font-family="Times,serif" font-size="14.00">escapeMenu</text>
<text text-anchor="middle" x="649.84" y="-643.79" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="681.32" y="-734.21" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- PauseGame&#45;&gt;EscapeMenu -->
<g id="edge19" class="edge">
<title>PauseGame-&gt;EscapeMenu</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M748.64,-746.81C748.64,-746.81 748.64,-650.81 748.64,-650.81"/>
<polygon fill="#595959" stroke="#595959" points="748.64,-640.81 753.14,-650.81 748.64,-644.59 748.64,-650.81 748.64,-650.81 748.64,-650.81 748.64,-644.59 744.14,-650.81 748.64,-640.81"/>
<text text-anchor="middle" x="757.44" y="-674.4" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- Pocket -->
<g id="node8" class="node">
<title>Pocket</title>
<polygon fill="none" stroke="black" points="1419.83,-502.1 1419.83,-651.7 1557.63,-651.7 1557.63,-502.1 1419.83,-502.1"/>
<text text-anchor="middle" x="1488.73" y="-635.1" font-family="Times,serif" font-size="14.00">Pocket</text>
<polyline fill="none" stroke="black" points="1419.83,-626.9 1557.63,-626.9"/>
<text text-anchor="start" x="1427.83" y="-610.3" font-family="Times,serif" font-size="14.00">- biome : Biome</text>
<text text-anchor="start" x="1427.83" y="-593.5" font-family="Times,serif" font-size="14.00"> - tiles : Set&lt;Tile&gt;</text>
<polyline fill="none" stroke="black" points="1419.83,-585.3 1557.63,-585.3"/>
<text text-anchor="start" x="1427.83" y="-568.7" font-family="Times,serif" font-size="14.00">+ addTile(Tile) : void</text>
<polyline fill="none" stroke="black" points="1419.83,-560.5 1557.63,-560.5"/>
<text text-anchor="start" x="1427.83" y="-543.9" font-family="Times,serif" font-size="14.00">tiles : Set&lt;Tile&gt;</text>
<text text-anchor="start" x="1427.83" y="-527.1" font-family="Times,serif" font-size="14.00"> size : int</text>
<text text-anchor="start" x="1427.83" y="-510.3" font-family="Times,serif" font-size="14.00"> biome : Biome</text>
</g>
<!-- Pocket&#45;&gt;Tile -->
<g id="edge20" class="edge">
<title>Pocket-&gt;Tile</title>
<path fill="none" stroke="#595959" d="M1514.59,-488.73C1514.59,-488.73 1514.59,-475.55 1514.59,-475.55"/>
<polygon fill="#595959" stroke="#595959" points="1514.59,-488.88 1518.59,-494.88 1514.59,-500.88 1510.59,-494.88 1514.59,-488.88"/>
<polygon fill="#595959" stroke="#595959" points="1514.59,-465.55 1519.09,-475.55 1514.59,-469.33 1514.59,-475.55 1514.59,-475.55 1514.59,-475.55 1514.59,-469.33 1510.09,-475.55 1514.59,-465.55"/>
<text text-anchor="middle" x="1526.25" y="-485.33" font-family="Times,serif" font-size="14.00">tiles</text>
<text text-anchor="middle" x="1526.25" y="-468.53" font-family="Times,serif" font-size="14.00">*</text>
<text text-anchor="middle" x="1511.09" y="-489.18" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- ScoreManager&#45;&gt;Pocket -->
<g id="edge21" class="edge">
<title>ScoreManager-&gt;Pocket</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1511.67,-705.06C1511.67,-705.06 1511.67,-663.23 1511.67,-663.23"/>
<polygon fill="#595959" stroke="#595959" points="1511.67,-653.23 1516.17,-663.23 1511.67,-657.01 1511.67,-663.23 1511.67,-663.23 1511.67,-663.23 1511.67,-657.01 1507.17,-663.23 1511.67,-653.23"/>
<text text-anchor="middle" x="1450.44" y="-674.4" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- ScoreManager&#45;&gt;Pocket -->
<g id="edge22" class="edge">
<title>ScoreManager-&gt;Pocket</title>
<path fill="none" stroke="#595959" d="M1465.75,-692.01C1465.75,-692.01 1465.75,-663.23 1465.75,-663.23"/>
<polygon fill="#595959" stroke="#595959" points="1465.75,-692.16 1469.75,-698.16 1465.75,-704.16 1461.75,-698.16 1465.75,-692.16"/>
<polygon fill="#595959" stroke="#595959" points="1465.75,-653.23 1470.25,-663.23 1465.75,-657.01 1465.75,-663.23 1465.75,-663.23 1465.75,-663.23 1465.75,-657.01 1461.25,-663.23 1465.75,-653.23"/>
<text text-anchor="middle" x="1487.13" y="-673.01" font-family="Times,serif" font-size="14.00">pockets</text>
<text text-anchor="middle" x="1487.13" y="-656.21" font-family="Times,serif" font-size="14.00">*</text>
<text text-anchor="middle" x="1462.25" y="-692.46" font-family="Times,serif" font-size="14.00">1</text>
</g>
<!-- Tile&#45;&gt;Cell -->
<g id="edge23" class="edge">
<title>Tile-&gt;Cell</title>
<path fill="none" stroke="#000082" d="M1675.59,-238.01C1675.59,-238.01 1675.59,-212.15 1675.59,-212.15"/>
<polygon fill="#000082" stroke="#000082" points="1679.09,-212.15 1675.59,-202.15 1672.09,-212.15 1679.09,-212.15"/>
</g>
<!-- TilePanningTransition&#45;&gt;Board -->
<g id="edge24" class="edge">
<title>TilePanningTransition-&gt;Board</title>
<path fill="none" stroke="#595959" d="M1699.07,-810.16C1699.07,-810.16 1699.07,-1070.6 1699.07,-1070.6 1699.07,-1070.6 1244.6,-1070.6 1244.6,-1070.6"/>
<polygon fill="#595959" stroke="#595959" points="1699.07,-810.01 1695.07,-804.01 1699.07,-798.01 1703.07,-804.01 1699.07,-810.01"/>
<polygon fill="#595959" stroke="#595959" points="1234.6,-1070.6 1244.6,-1066.1 1238.38,-1070.6 1244.6,-1070.6 1244.6,-1070.6 1244.6,-1070.6 1238.38,-1070.6 1244.6,-1075.1 1234.6,-1070.6"/>
<text text-anchor="middle" x="1249.32" y="-1091.6" font-family="Times,serif" font-size="14.00">board</text>
<text text-anchor="middle" x="1249.32" y="-1074.8" font-family="Times,serif" font-size="14.00">1</text>
<text text-anchor="middle" x="1695.57" y="-801.31" font-family="Times,serif" font-size="14.00">1</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 KiB

View File

@@ -0,0 +1,109 @@
@startuml listeners
!theme plain
top to bottom direction
skinparam linetype ortho
class CloseButtonListener {
+ CloseButtonListener(MainMenu, JFrame):
+ actionPerformed(ActionEvent): void
}
class CloseWindowListener {
+ CloseWindowListener(MainMenu, JFrame):
+ windowClosing(WindowEvent): void
}
class EscapeMenuCloseListener {
+ EscapeMenuCloseListener():
+ windowClosing(WindowEvent): void
}
class GameArrowKeyListener {
+ GameArrowKeyListener(Board):
+ keyPressed(KeyEvent): void
}
class GameMainMenuButtonListener {
+ GameMainMenuButtonListener(JFrame):
+ actionPerformed(ActionEvent): void
}
class GameModeFilterButtonActionListener {
+ GameModeFilterButtonActionListener(GameModeSelectionPanel):
+ actionPerformed(ActionEvent): void
}
class GameModeHoverEffectMouseListener {
+ GameModeHoverEffectMouseListener(Color, Color, Color):
+ mouseExited(MouseEvent): void
+ mousePressed(MouseEvent): void
+ mouseReleased(MouseEvent): void
+ mouseEntered(MouseEvent): void
}
class GameModeNextButtonActionListener {
+ GameModeNextButtonActionListener(GameModeSelectionPanel):
+ actionPerformed(ActionEvent): void
}
class GameModePrevButtonActionListener {
+ GameModePrevButtonActionListener(GameModeSelectionPanel):
+ actionPerformed(ActionEvent): void
}
class GameMouseClickListener {
+ GameMouseClickListener(Board):
+ mousePressed(MouseEvent): void
}
class GameMouseWheelListener {
+ GameMouseWheelListener(Board):
+ mouseWheelMoved(MouseWheelEvent): void
}
class GameQuitButtonListener {
+ GameQuitButtonListener():
+ actionPerformed(ActionEvent): void
}
class GameResumeButtonListener {
+ GameResumeButtonListener(EscapeMenu):
+ actionPerformed(ActionEvent): void
}
class GameSettingsButtonListener {
+ GameSettingsButtonListener(JFrame, EscapeMenu):
+ actionPerformed(ActionEvent): void
}
class GameSettingsWindowListener {
+ GameSettingsWindowListener(JFrame):
+ windowIconified(WindowEvent): void
+ windowDeactivated(WindowEvent): void
+ windowDeiconified(WindowEvent): void
+ windowOpened(WindowEvent): void
+ windowClosing(WindowEvent): void
+ windowClosed(WindowEvent): void
+ windowActivated(WindowEvent): void
}
class GameSpaceKeyListener {
+ GameSpaceKeyListener(Board):
+ keyPressed(KeyEvent): void
}
class GameZoomListener {
+ GameZoomListener(Board):
+ mouseWheelMoved(MouseWheelEvent): void
}
class MusicVolumeChangeListener {
+ MusicVolumeChangeListener(JSlider):
+ stateChanged(ChangeEvent): void
}
class MuteCheckBoxListener {
+ MuteCheckBoxListener(String):
+ actionPerformed(ActionEvent): void
}
class SoundsVolumeChangeListener {
+ SoundsVolumeChangeListener(JSlider):
+ stateChanged(ChangeEvent): void
}
class TilePanningActionListener {
+ TilePanningActionListener(Board, int, int, int):
- stopAnimation(): void
+ actionPerformed(ActionEvent): void
+ startAnimation(): void
}
class TutorialButtonHoverListener {
+ TutorialButtonHoverListener(JButton, Color, Color):
+ mouseEntered(MouseEvent): void
+ mouseExited(MouseEvent): void
}
GameSettingsButtonListener -[#595959,dashed]-> GameSettingsWindowListener : "«create»"
@enduml

View File

@@ -0,0 +1,245 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1183pt" height="995pt" viewBox="0.00 0.00 1182.64 995.40">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 991.4)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-991.4 1178.64,-991.4 1178.64,4 -4,4"/>
<!-- CloseButtonListener -->
<g id="node1" class="node">
<title>CloseButtonListener</title>
<polygon fill="none" stroke="black" points="873.98,-836.5 873.98,-910.9 1147.89,-910.9 1147.89,-836.5 873.98,-836.5"/>
<text text-anchor="middle" x="1010.94" y="-894.3" font-family="Times,serif" font-size="14.00">CloseButtonListener</text>
<polyline fill="none" stroke="black" points="873.98,-886.1 1147.89,-886.1"/>
<text text-anchor="start" x="881.98" y="-869.5" font-family="Times,serif" font-size="14.00">+ CloseButtonListener(MainMenu, JFrame) : </text>
<polyline fill="none" stroke="black" points="873.98,-861.3 1147.89,-861.3"/>
<text text-anchor="start" x="881.98" y="-844.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- CloseWindowListener -->
<g id="node2" class="node">
<title>CloseWindowListener</title>
<polygon fill="none" stroke="black" points="474.93,-114.5 474.93,-188.9 758.94,-188.9 758.94,-114.5 474.93,-114.5"/>
<text text-anchor="middle" x="616.94" y="-172.3" font-family="Times,serif" font-size="14.00">CloseWindowListener</text>
<polyline fill="none" stroke="black" points="474.93,-164.1 758.94,-164.1"/>
<text text-anchor="start" x="482.93" y="-147.5" font-family="Times,serif" font-size="14.00">+ CloseWindowListener(MainMenu, JFrame) : </text>
<polyline fill="none" stroke="black" points="474.93,-139.3 758.94,-139.3"/>
<text text-anchor="start" x="482.93" y="-122.7" font-family="Times,serif" font-size="14.00">+ windowClosing(WindowEvent) : void</text>
</g>
<!-- EscapeMenuCloseListener -->
<g id="node3" class="node">
<title>EscapeMenuCloseListener</title>
<polygon fill="none" stroke="black" points="474.91,-0.5 474.91,-74.9 716.96,-74.9 716.96,-0.5 474.91,-0.5"/>
<text text-anchor="middle" x="595.94" y="-58.3" font-family="Times,serif" font-size="14.00">EscapeMenuCloseListener</text>
<polyline fill="none" stroke="black" points="474.91,-50.1 716.96,-50.1"/>
<text text-anchor="start" x="482.91" y="-33.5" font-family="Times,serif" font-size="14.00">+ EscapeMenuCloseListener() : </text>
<polyline fill="none" stroke="black" points="474.91,-25.3 716.96,-25.3"/>
<text text-anchor="start" x="482.91" y="-8.7" font-family="Times,serif" font-size="14.00">+ windowClosing(WindowEvent) : void</text>
</g>
<!-- GameArrowKeyListener -->
<g id="node4" class="node">
<title>GameArrowKeyListener</title>
<polygon fill="none" stroke="black" points="37.44,-722.5 37.44,-796.9 258.43,-796.9 258.43,-722.5 37.44,-722.5"/>
<text text-anchor="middle" x="147.94" y="-780.3" font-family="Times,serif" font-size="14.00">GameArrowKeyListener</text>
<polyline fill="none" stroke="black" points="37.44,-772.1 258.43,-772.1"/>
<text text-anchor="start" x="45.44" y="-755.5" font-family="Times,serif" font-size="14.00">+ GameArrowKeyListener(Board) : </text>
<polyline fill="none" stroke="black" points="37.44,-747.3 258.43,-747.3"/>
<text text-anchor="start" x="45.44" y="-730.7" font-family="Times,serif" font-size="14.00">+ keyPressed(KeyEvent) : void</text>
</g>
<!-- GameMainMenuButtonListener -->
<g id="node5" class="node">
<title>GameMainMenuButtonListener</title>
<polygon fill="none" stroke="black" points="151.71,-114.5 151.71,-188.9 420.16,-188.9 420.16,-114.5 151.71,-114.5"/>
<text text-anchor="middle" x="285.94" y="-172.3" font-family="Times,serif" font-size="14.00">GameMainMenuButtonListener</text>
<polyline fill="none" stroke="black" points="151.71,-164.1 420.16,-164.1"/>
<text text-anchor="start" x="159.71" y="-147.5" font-family="Times,serif" font-size="14.00">+ GameMainMenuButtonListener(JFrame) : </text>
<polyline fill="none" stroke="black" points="151.71,-139.3 420.16,-139.3"/>
<text text-anchor="start" x="159.71" y="-122.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameModeFilterButtonActionListener -->
<g id="node6" class="node">
<title>GameModeFilterButtonActionListener</title>
<polygon fill="none" stroke="black" points="759.23,-722.5 759.23,-796.9 1174.64,-796.9 1174.64,-722.5 759.23,-722.5"/>
<text text-anchor="middle" x="966.94" y="-780.3" font-family="Times,serif" font-size="14.00">GameModeFilterButtonActionListener</text>
<polyline fill="none" stroke="black" points="759.23,-772.1 1174.64,-772.1"/>
<text text-anchor="start" x="767.23" y="-755.5" font-family="Times,serif" font-size="14.00">+ GameModeFilterButtonActionListener(GameModeSelectionPanel) : </text>
<polyline fill="none" stroke="black" points="759.23,-747.3 1174.64,-747.3"/>
<text text-anchor="start" x="767.23" y="-730.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameModeHoverEffectMouseListener -->
<g id="node7" class="node">
<title>GameModeHoverEffectMouseListener</title>
<polygon fill="none" stroke="black" points="588.67,-551.3 588.67,-676.1 965.2,-676.1 965.2,-551.3 588.67,-551.3"/>
<text text-anchor="middle" x="776.94" y="-659.5" font-family="Times,serif" font-size="14.00">GameModeHoverEffectMouseListener</text>
<polyline fill="none" stroke="black" points="588.67,-651.3 965.2,-651.3"/>
<text text-anchor="start" x="596.67" y="-634.7" font-family="Times,serif" font-size="14.00">+ GameModeHoverEffectMouseListener(Color, Color, Color) : </text>
<polyline fill="none" stroke="black" points="588.67,-626.5 965.2,-626.5"/>
<text text-anchor="start" x="596.67" y="-609.9" font-family="Times,serif" font-size="14.00">+ mouseExited(MouseEvent) : void</text>
<text text-anchor="start" x="596.67" y="-593.1" font-family="Times,serif" font-size="14.00"> + mousePressed(MouseEvent) : void</text>
<text text-anchor="start" x="596.67" y="-576.3" font-family="Times,serif" font-size="14.00"> + mouseReleased(MouseEvent) : void</text>
<text text-anchor="start" x="596.67" y="-559.5" font-family="Times,serif" font-size="14.00"> + mouseEntered(MouseEvent) : void</text>
</g>
<!-- GameModeNextButtonActionListener -->
<g id="node8" class="node">
<title>GameModeNextButtonActionListener</title>
<polygon fill="none" stroke="black" points="303.79,-722.5 303.79,-796.9 716.08,-796.9 716.08,-722.5 303.79,-722.5"/>
<text text-anchor="middle" x="509.94" y="-780.3" font-family="Times,serif" font-size="14.00">GameModeNextButtonActionListener</text>
<polyline fill="none" stroke="black" points="303.79,-772.1 716.08,-772.1"/>
<text text-anchor="start" x="311.79" y="-755.5" font-family="Times,serif" font-size="14.00">+ GameModeNextButtonActionListener(GameModeSelectionPanel) : </text>
<polyline fill="none" stroke="black" points="303.79,-747.3 716.08,-747.3"/>
<text text-anchor="start" x="311.79" y="-730.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameModePrevButtonActionListener -->
<g id="node9" class="node">
<title>GameModePrevButtonActionListener</title>
<polygon fill="none" stroke="black" points="474.57,-228.5 474.57,-302.9 885.31,-302.9 885.31,-228.5 474.57,-228.5"/>
<text text-anchor="middle" x="679.94" y="-286.3" font-family="Times,serif" font-size="14.00">GameModePrevButtonActionListener</text>
<polyline fill="none" stroke="black" points="474.57,-278.1 885.31,-278.1"/>
<text text-anchor="start" x="482.57" y="-261.5" font-family="Times,serif" font-size="14.00">+ GameModePrevButtonActionListener(GameModeSelectionPanel) : </text>
<polyline fill="none" stroke="black" points="474.57,-253.3 885.31,-253.3"/>
<text text-anchor="start" x="482.57" y="-236.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameMouseClickListener -->
<g id="node10" class="node">
<title>GameMouseClickListener</title>
<polygon fill="none" stroke="black" points="760.16,-0.5 760.16,-74.9 989.72,-74.9 989.72,-0.5 760.16,-0.5"/>
<text text-anchor="middle" x="874.94" y="-58.3" font-family="Times,serif" font-size="14.00">GameMouseClickListener</text>
<polyline fill="none" stroke="black" points="760.16,-50.1 989.72,-50.1"/>
<text text-anchor="start" x="768.16" y="-33.5" font-family="Times,serif" font-size="14.00">+ GameMouseClickListener(Board) : </text>
<polyline fill="none" stroke="black" points="760.16,-25.3 989.72,-25.3"/>
<text text-anchor="start" x="768.16" y="-8.7" font-family="Times,serif" font-size="14.00">+ mousePressed(MouseEvent) : void</text>
</g>
<!-- GameMouseWheelListener -->
<g id="node11" class="node">
<title>GameMouseWheelListener</title>
<polygon fill="none" stroke="black" points="797.67,-114.5 797.67,-188.9 1090.21,-188.9 1090.21,-114.5 797.67,-114.5"/>
<text text-anchor="middle" x="943.94" y="-172.3" font-family="Times,serif" font-size="14.00">GameMouseWheelListener</text>
<polyline fill="none" stroke="black" points="797.67,-164.1 1090.21,-164.1"/>
<text text-anchor="start" x="805.67" y="-147.5" font-family="Times,serif" font-size="14.00">+ GameMouseWheelListener(Board) : </text>
<polyline fill="none" stroke="black" points="797.67,-139.3 1090.21,-139.3"/>
<text text-anchor="start" x="805.67" y="-122.7" font-family="Times,serif" font-size="14.00">+ mouseWheelMoved(MouseWheelEvent) : void</text>
</g>
<!-- GameQuitButtonListener -->
<g id="node12" class="node">
<title>GameQuitButtonListener</title>
<polygon fill="none" stroke="black" points="37.66,-0.5 37.66,-74.9 274.21,-74.9 274.21,-0.5 37.66,-0.5"/>
<text text-anchor="middle" x="155.94" y="-58.3" font-family="Times,serif" font-size="14.00">GameQuitButtonListener</text>
<polyline fill="none" stroke="black" points="37.66,-50.1 274.21,-50.1"/>
<text text-anchor="start" x="45.66" y="-33.5" font-family="Times,serif" font-size="14.00">+ GameQuitButtonListener() : </text>
<polyline fill="none" stroke="black" points="37.66,-25.3 274.21,-25.3"/>
<text text-anchor="start" x="45.66" y="-8.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameResumeButtonListener -->
<g id="node13" class="node">
<title>GameResumeButtonListener</title>
<polygon fill="none" stroke="black" points="151.72,-228.5 151.72,-302.9 434.15,-302.9 434.15,-228.5 151.72,-228.5"/>
<text text-anchor="middle" x="292.94" y="-286.3" font-family="Times,serif" font-size="14.00">GameResumeButtonListener</text>
<polyline fill="none" stroke="black" points="151.72,-278.1 434.15,-278.1"/>
<text text-anchor="start" x="159.72" y="-261.5" font-family="Times,serif" font-size="14.00">+ GameResumeButtonListener(EscapeMenu) : </text>
<polyline fill="none" stroke="black" points="151.72,-253.3 434.15,-253.3"/>
<text text-anchor="start" x="159.72" y="-236.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameSettingsButtonListener -->
<g id="node14" class="node">
<title>GameSettingsButtonListener</title>
<polygon fill="none" stroke="black" points="170.73,-439.58 170.73,-513.98 501.39,-513.98 501.39,-439.58 170.73,-439.58"/>
<text text-anchor="middle" x="336.06" y="-497.38" font-family="Times,serif" font-size="14.00">GameSettingsButtonListener</text>
<polyline fill="none" stroke="black" points="170.73,-489.18 501.39,-489.18"/>
<text text-anchor="start" x="178.73" y="-472.58" font-family="Times,serif" font-size="14.00">+ GameSettingsButtonListener(JFrame, EscapeMenu) : </text>
<polyline fill="none" stroke="black" points="170.73,-464.38 501.39,-464.38"/>
<text text-anchor="start" x="178.73" y="-447.78" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- GameSettingsWindowListener -->
<g id="node15" class="node">
<title>GameSettingsWindowListener</title>
<polygon fill="none" stroke="black" points="513.19,-342.63 513.19,-517.83 782.02,-517.83 782.02,-342.63 513.19,-342.63"/>
<text text-anchor="middle" x="647.61" y="-501.23" font-family="Times,serif" font-size="14.00">GameSettingsWindowListener</text>
<polyline fill="none" stroke="black" points="513.19,-493.03 782.02,-493.03"/>
<text text-anchor="start" x="521.19" y="-476.43" font-family="Times,serif" font-size="14.00">+ GameSettingsWindowListener(JFrame) : </text>
<polyline fill="none" stroke="black" points="513.19,-468.23 782.02,-468.23"/>
<text text-anchor="start" x="521.19" y="-451.63" font-family="Times,serif" font-size="14.00">+ windowIconified(WindowEvent) : void</text>
<text text-anchor="start" x="521.19" y="-434.83" font-family="Times,serif" font-size="14.00"> + windowDeactivated(WindowEvent) : void</text>
<text text-anchor="start" x="521.19" y="-418.03" font-family="Times,serif" font-size="14.00"> + windowDeiconified(WindowEvent) : void</text>
<text text-anchor="start" x="521.19" y="-401.23" font-family="Times,serif" font-size="14.00"> + windowOpened(WindowEvent) : void</text>
<text text-anchor="start" x="521.19" y="-384.43" font-family="Times,serif" font-size="14.00"> + windowClosing(WindowEvent) : void</text>
<text text-anchor="start" x="521.19" y="-367.63" font-family="Times,serif" font-size="14.00"> + windowClosed(WindowEvent) : void</text>
<text text-anchor="start" x="521.19" y="-350.83" font-family="Times,serif" font-size="14.00"> + windowActivated(WindowEvent) : void</text>
</g>
<!-- GameSettingsButtonListener&#45;&gt;GameSettingsWindowListener -->
<g id="edge1" class="edge">
<title>GameSettingsButtonListener-&gt;GameSettingsWindowListener</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M501.87,-476.78C501.87,-476.78 502.95,-476.78 502.95,-476.78"/>
<polygon fill="#595959" stroke="#595959" points="511.52,-476.78 501.52,-481.28 507.73,-476.78 501.52,-476.78 501.52,-476.78 501.52,-476.78 507.73,-476.78 501.52,-472.28 511.52,-476.78"/>
<text text-anchor="middle" x="526.11" y="-480.98" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- GameSpaceKeyListener -->
<g id="node16" class="node">
<title>GameSpaceKeyListener</title>
<polygon fill="none" stroke="black" points="0,-912.5 0,-986.9 217.87,-986.9 217.87,-912.5 0,-912.5"/>
<text text-anchor="middle" x="108.94" y="-970.3" font-family="Times,serif" font-size="14.00">GameSpaceKeyListener</text>
<polyline fill="none" stroke="black" points="0,-962.1 217.87,-962.1"/>
<text text-anchor="start" x="8" y="-945.5" font-family="Times,serif" font-size="14.00">+ GameSpaceKeyListener(Board) : </text>
<polyline fill="none" stroke="black" points="0,-937.3 217.87,-937.3"/>
<text text-anchor="start" x="8" y="-920.7" font-family="Times,serif" font-size="14.00">+ keyPressed(KeyEvent) : void</text>
</g>
<!-- GameZoomListener -->
<g id="node17" class="node">
<title>GameZoomListener</title>
<polygon fill="none" stroke="black" points="189.67,-342.5 189.67,-416.9 482.21,-416.9 482.21,-342.5 189.67,-342.5"/>
<text text-anchor="middle" x="335.94" y="-400.3" font-family="Times,serif" font-size="14.00">GameZoomListener</text>
<polyline fill="none" stroke="black" points="189.67,-392.1 482.21,-392.1"/>
<text text-anchor="start" x="197.67" y="-375.5" font-family="Times,serif" font-size="14.00">+ GameZoomListener(Board) : </text>
<polyline fill="none" stroke="black" points="189.67,-367.3 482.21,-367.3"/>
<text text-anchor="start" x="197.67" y="-350.7" font-family="Times,serif" font-size="14.00">+ mouseWheelMoved(MouseWheelEvent) : void</text>
</g>
<!-- MusicVolumeChangeListener -->
<g id="node18" class="node">
<title>MusicVolumeChangeListener</title>
<polygon fill="none" stroke="black" points="265.32,-836.5 265.32,-910.9 520.55,-910.9 520.55,-836.5 265.32,-836.5"/>
<text text-anchor="middle" x="392.94" y="-894.3" font-family="Times,serif" font-size="14.00">MusicVolumeChangeListener</text>
<polyline fill="none" stroke="black" points="265.32,-886.1 520.55,-886.1"/>
<text text-anchor="start" x="273.32" y="-869.5" font-family="Times,serif" font-size="14.00">+ MusicVolumeChangeListener(JSlider) : </text>
<polyline fill="none" stroke="black" points="265.32,-861.3 520.55,-861.3"/>
<text text-anchor="start" x="273.32" y="-844.7" font-family="Times,serif" font-size="14.00">+ stateChanged(ChangeEvent) : void</text>
</g>
<!-- MuteCheckBoxListener -->
<g id="node19" class="node">
<title>MuteCheckBoxListener</title>
<polygon fill="none" stroke="black" points="930.66,-228.5 930.66,-302.9 1167.21,-302.9 1167.21,-228.5 930.66,-228.5"/>
<text text-anchor="middle" x="1048.94" y="-286.3" font-family="Times,serif" font-size="14.00">MuteCheckBoxListener</text>
<polyline fill="none" stroke="black" points="930.66,-278.1 1167.21,-278.1"/>
<text text-anchor="start" x="938.66" y="-261.5" font-family="Times,serif" font-size="14.00">+ MuteCheckBoxListener(String) : </text>
<polyline fill="none" stroke="black" points="930.66,-253.3 1167.21,-253.3"/>
<text text-anchor="start" x="938.66" y="-236.7" font-family="Times,serif" font-size="14.00">+ actionPerformed(ActionEvent) : void</text>
</g>
<!-- SoundsVolumeChangeListener -->
<g id="node20" class="node">
<title>SoundsVolumeChangeListener</title>
<polygon fill="none" stroke="black" points="569.2,-836.5 569.2,-910.9 830.67,-910.9 830.67,-836.5 569.2,-836.5"/>
<text text-anchor="middle" x="699.94" y="-894.3" font-family="Times,serif" font-size="14.00">SoundsVolumeChangeListener</text>
<polyline fill="none" stroke="black" points="569.2,-886.1 830.67,-886.1"/>
<text text-anchor="start" x="577.2" y="-869.5" font-family="Times,serif" font-size="14.00">+ SoundsVolumeChangeListener(JSlider) : </text>
<polyline fill="none" stroke="black" points="569.2,-861.3 830.67,-861.3"/>
<text text-anchor="start" x="577.2" y="-844.7" font-family="Times,serif" font-size="14.00">+ stateChanged(ChangeEvent) : void</text>
</g>
<!-- TilePanningActionListener -->
<g id="node21" class="node">
<title>TilePanningActionListener</title>
<polygon fill="none" stroke="black" points="817.15,-342.7 817.15,-450.7 1116.72,-450.7 1116.72,-342.7 817.15,-342.7"/>
<text text-anchor="middle" x="966.94" y="-434.1" font-family="Times,serif" font-size="14.00">TilePanningActionListener</text>
<polyline fill="none" stroke="black" points="817.15,-425.9 1116.72,-425.9"/>
<text text-anchor="start" x="825.15" y="-409.3" font-family="Times,serif" font-size="14.00">+ TilePanningActionListener(Board, int, int, int) : </text>
<polyline fill="none" stroke="black" points="817.15,-401.1 1116.72,-401.1"/>
<text text-anchor="start" x="825.15" y="-384.5" font-family="Times,serif" font-size="14.00">- stopAnimation() : void</text>
<text text-anchor="start" x="825.15" y="-367.7" font-family="Times,serif" font-size="14.00"> + actionPerformed(ActionEvent) : void</text>
<text text-anchor="start" x="825.15" y="-350.9" font-family="Times,serif" font-size="14.00"> + startAnimation() : void</text>
</g>
<!-- TutorialButtonHoverListener -->
<g id="node22" class="node">
<title>TutorialButtonHoverListener</title>
<polygon fill="none" stroke="black" points="208.42,-589.1 208.42,-680.3 541.45,-680.3 541.45,-589.1 208.42,-589.1"/>
<text text-anchor="middle" x="374.94" y="-663.7" font-family="Times,serif" font-size="14.00">TutorialButtonHoverListener</text>
<polyline fill="none" stroke="black" points="208.42,-655.5 541.45,-655.5"/>
<text text-anchor="start" x="216.42" y="-638.9" font-family="Times,serif" font-size="14.00">+ TutorialButtonHoverListener(JButton, Color, Color) : </text>
<polyline fill="none" stroke="black" points="208.42,-630.7 541.45,-630.7"/>
<text text-anchor="start" x="216.42" y="-614.1" font-family="Times,serif" font-size="14.00">+ mouseEntered(MouseEvent) : void</text>
<text text-anchor="start" x="216.42" y="-597.3" font-family="Times,serif" font-size="14.00"> + mouseExited(MouseEvent) : void</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

View File

@@ -0,0 +1,84 @@
@startuml utils
!theme plain
top to bottom direction
skinparam linetype ortho
class Database {
+ Database():
- database: Connection
+ addScore(long, int): void
+ getSeedBySeriesId(long): long
+ countSeriesByDateRange(Date, Date, boolean): int
+ getSeriesByDateRange(Date, Date): List<String>
+ getScoresBySeriesId(long): List<Integer>
+ getAllScores(long): List<PlayerScore>
+ getSeriesByDateRangePaginated(Date, Date, int, int, boolean): List<String>
+ addCustomSeed(long): void
+ close(): void
+ getSeedByName(String): long
database: Connection
topPlayers: List<PlayerScore>
allSeries: List<String>
}
class FontLoader {
+ FontLoader():
+ loadFont(Fonts): Font
}
class FontManager {
+ FontManager():
- buttonFont: Font
- titleFont: Font
+ getTitleFont(float): Font
+ loadCustomFont(Fonts): void
+ getAdjustedTitleFont(Component, float, float): Font
+ getAdjustedButtonFont(Component, float, float): Font
+ getButtonFont(float): Font
buttonFont: Font
titleFont: Font
}
class Hexagon {
+ Hexagon(int, int, int):
+ Hexagon(Point, int):
+ Hexagon(Point, int, double):
+ Hexagon(int, int, int, double):
- calculateAngle(int, double): double
}
class HexagonDrawer {
+ HexagonDrawer(Tile):
+ drawHexagon(Graphics2D, double, Point): void
- drawHexagonRow(Graphics2D, double, double, double, int): void
}
class ImageLoader {
+ ImageLoader():
+ loadImage(String): Image?
}
class MusicPlayer {
+ MusicPlayer():
- soundClip: Clip
- musicClip: Clip
+ loadMusic(Musics): void
+ playSound(): void
+ pauseMusic(): void
+ loadSound(Sounds): void
+ setVolume(Clip, int): void
+ playMusic(): void
+ stopMusic(): void
playingSound: boolean
soundClip: Clip
playingMusic: boolean
musicClip: Clip
}
class PlayerScore {
+ PlayerScore(String, int):
- score: int
serieName: String
score: int
}
class SoundLoader {
+ SoundLoader():
+ loadMusic(String): Clip?
}
Database -[#595959,dashed]-> PlayerScore : "«create»"
HexagonDrawer -[#595959,dashed]-> Hexagon : "«create»"
@enduml

View File

@@ -0,0 +1,156 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2010pt" height="496pt" viewBox="0.00 0.00 2009.98 496.40">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 492.4)">
<title>package</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-492.4 2005.98,-492.4 2005.98,4 -4,4"/>
<!-- Database -->
<g id="node1" class="node">
<title>Database</title>
<polygon fill="none" stroke="black" points="0,-179.1 0,-487.9 462.69,-487.9 462.69,-179.1 0,-179.1"/>
<text text-anchor="middle" x="231.35" y="-471.3" font-family="Times,serif" font-size="14.00">Database</text>
<polyline fill="none" stroke="black" points="0,-463.1 462.69,-463.1"/>
<text text-anchor="start" x="8" y="-446.5" font-family="Times,serif" font-size="14.00">+ Database() : </text>
<polyline fill="none" stroke="black" points="0,-438.3 462.69,-438.3"/>
<text text-anchor="start" x="8" y="-421.7" font-family="Times,serif" font-size="14.00">- database : Connection</text>
<polyline fill="none" stroke="black" points="0,-413.5 462.69,-413.5"/>
<text text-anchor="start" x="8" y="-396.9" font-family="Times,serif" font-size="14.00">+ addScore(long, int) : void</text>
<text text-anchor="start" x="8" y="-380.1" font-family="Times,serif" font-size="14.00"> + getSeedBySeriesId(long) : long</text>
<text text-anchor="start" x="8" y="-363.3" font-family="Times,serif" font-size="14.00"> + countSeriesByDateRange(Date, Date, boolean) : int</text>
<text text-anchor="start" x="8" y="-346.5" font-family="Times,serif" font-size="14.00"> + getSeriesByDateRange(Date, Date) : List&lt;String&gt;</text>
<text text-anchor="start" x="8" y="-329.7" font-family="Times,serif" font-size="14.00"> + getScoresBySeriesId(long) : List&lt;Integer&gt;</text>
<text text-anchor="start" x="8" y="-312.9" font-family="Times,serif" font-size="14.00"> + getAllScores(long) : List&lt;PlayerScore&gt;</text>
<text text-anchor="start" x="8" y="-296.1" font-family="Times,serif" font-size="14.00"> + getSeriesByDateRangePaginated(Date, Date, int, int, boolean) : List&lt;String&gt;</text>
<text text-anchor="start" x="8" y="-279.3" font-family="Times,serif" font-size="14.00"> + addCustomSeed(long) : void</text>
<text text-anchor="start" x="8" y="-262.5" font-family="Times,serif" font-size="14.00"> + close() : void</text>
<text text-anchor="start" x="8" y="-245.7" font-family="Times,serif" font-size="14.00"> + getSeedByName(String) : long</text>
<polyline fill="none" stroke="black" points="0,-237.5 462.69,-237.5"/>
<text text-anchor="start" x="8" y="-220.9" font-family="Times,serif" font-size="14.00">database : Connection</text>
<text text-anchor="start" x="8" y="-204.1" font-family="Times,serif" font-size="14.00"> topPlayers : List&lt;PlayerScore&gt;</text>
<text text-anchor="start" x="8" y="-187.3" font-family="Times,serif" font-size="14.00"> allSeries : List&lt;String&gt;</text>
</g>
<!-- PlayerScore -->
<g id="node8" class="node">
<title>PlayerScore</title>
<polygon fill="none" stroke="black" points="145.72,-4.9 145.72,-120.9 316.98,-120.9 316.98,-4.9 145.72,-4.9"/>
<text text-anchor="middle" x="231.35" y="-104.3" font-family="Times,serif" font-size="14.00">PlayerScore</text>
<polyline fill="none" stroke="black" points="145.72,-96.1 316.98,-96.1"/>
<text text-anchor="start" x="153.72" y="-79.5" font-family="Times,serif" font-size="14.00">+ PlayerScore(String, int) : </text>
<polyline fill="none" stroke="black" points="145.72,-71.3 316.98,-71.3"/>
<text text-anchor="start" x="153.72" y="-54.7" font-family="Times,serif" font-size="14.00">- score : int</text>
<polyline fill="none" stroke="black" points="145.72,-46.5 316.98,-46.5"/>
<text text-anchor="start" x="153.72" y="-29.9" font-family="Times,serif" font-size="14.00">serieName : String</text>
<text text-anchor="start" x="153.72" y="-13.1" font-family="Times,serif" font-size="14.00"> score : int</text>
</g>
<!-- Database&#45;&gt;PlayerScore -->
<g id="edge1" class="edge">
<title>Database-&gt;PlayerScore</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M231.35,-178.84C231.35,-178.84 231.35,-132.35 231.35,-132.35"/>
<polygon fill="#595959" stroke="#595959" points="231.35,-122.35 235.85,-132.35 231.35,-126.14 231.35,-132.35 231.35,-132.35 231.35,-132.35 231.35,-126.14 226.85,-132.35 231.35,-122.35"/>
<text text-anchor="middle" x="255.05" y="-148" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- FontLoader -->
<g id="node2" class="node">
<title>FontLoader</title>
<polygon fill="none" stroke="black" points="480.25,-296.3 480.25,-370.7 634.44,-370.7 634.44,-296.3 480.25,-296.3"/>
<text text-anchor="middle" x="557.35" y="-354.1" font-family="Times,serif" font-size="14.00">FontLoader</text>
<polyline fill="none" stroke="black" points="480.25,-345.9 634.44,-345.9"/>
<text text-anchor="start" x="488.25" y="-329.3" font-family="Times,serif" font-size="14.00">+ FontLoader() : </text>
<polyline fill="none" stroke="black" points="480.25,-321.1 634.44,-321.1"/>
<text text-anchor="start" x="488.25" y="-304.5" font-family="Times,serif" font-size="14.00">+ loadFont(Fonts) : Font</text>
</g>
<!-- FontManager -->
<g id="node3" class="node">
<title>FontManager</title>
<polygon fill="none" stroke="black" points="652.91,-221.1 652.91,-445.9 991.78,-445.9 991.78,-221.1 652.91,-221.1"/>
<text text-anchor="middle" x="822.35" y="-429.3" font-family="Times,serif" font-size="14.00">FontManager</text>
<polyline fill="none" stroke="black" points="652.91,-421.1 991.78,-421.1"/>
<text text-anchor="start" x="660.91" y="-404.5" font-family="Times,serif" font-size="14.00">+ FontManager() : </text>
<polyline fill="none" stroke="black" points="652.91,-396.3 991.78,-396.3"/>
<text text-anchor="start" x="660.91" y="-379.7" font-family="Times,serif" font-size="14.00">- buttonFont : Font</text>
<text text-anchor="start" x="660.91" y="-362.9" font-family="Times,serif" font-size="14.00"> - titleFont : Font</text>
<polyline fill="none" stroke="black" points="652.91,-354.7 991.78,-354.7"/>
<text text-anchor="start" x="660.91" y="-338.1" font-family="Times,serif" font-size="14.00">+ getTitleFont(float) : Font</text>
<text text-anchor="start" x="660.91" y="-321.3" font-family="Times,serif" font-size="14.00"> + loadCustomFont(Fonts) : void</text>
<text text-anchor="start" x="660.91" y="-304.5" font-family="Times,serif" font-size="14.00"> + getAdjustedTitleFont(Component, float, float) : Font</text>
<text text-anchor="start" x="660.91" y="-287.7" font-family="Times,serif" font-size="14.00"> + getAdjustedButtonFont(Component, float, float) : Font</text>
<text text-anchor="start" x="660.91" y="-270.9" font-family="Times,serif" font-size="14.00"> + getButtonFont(float) : Font</text>
<polyline fill="none" stroke="black" points="652.91,-262.7 991.78,-262.7"/>
<text text-anchor="start" x="660.91" y="-246.1" font-family="Times,serif" font-size="14.00">buttonFont : Font</text>
<text text-anchor="start" x="660.91" y="-229.3" font-family="Times,serif" font-size="14.00"> titleFont : Font</text>
</g>
<!-- Hexagon -->
<g id="node4" class="node">
<title>Hexagon</title>
<polygon fill="none" stroke="black" points="1098.19,-0.5 1098.19,-125.3 1324.5,-125.3 1324.5,-0.5 1098.19,-0.5"/>
<text text-anchor="middle" x="1211.35" y="-108.7" font-family="Times,serif" font-size="14.00">Hexagon</text>
<polyline fill="none" stroke="black" points="1098.19,-100.5 1324.5,-100.5"/>
<text text-anchor="start" x="1106.19" y="-83.9" font-family="Times,serif" font-size="14.00">+ Hexagon(int, int, int) : </text>
<text text-anchor="start" x="1106.19" y="-67.1" font-family="Times,serif" font-size="14.00"> + Hexagon(Point, int) : </text>
<text text-anchor="start" x="1106.19" y="-50.3" font-family="Times,serif" font-size="14.00"> + Hexagon(Point, int, double) : </text>
<text text-anchor="start" x="1106.19" y="-33.5" font-family="Times,serif" font-size="14.00"> + Hexagon(int, int, int, double) : </text>
<polyline fill="none" stroke="black" points="1098.19,-25.3 1324.5,-25.3"/>
<text text-anchor="start" x="1106.19" y="-8.7" font-family="Times,serif" font-size="14.00">- calculateAngle(int, double) : double</text>
</g>
<!-- HexagonDrawer -->
<g id="node5" class="node">
<title>HexagonDrawer</title>
<polygon fill="none" stroke="black" points="1010.11,-287.9 1010.11,-379.1 1412.59,-379.1 1412.59,-287.9 1010.11,-287.9"/>
<text text-anchor="middle" x="1211.35" y="-362.5" font-family="Times,serif" font-size="14.00">HexagonDrawer</text>
<polyline fill="none" stroke="black" points="1010.11,-354.3 1412.59,-354.3"/>
<text text-anchor="start" x="1018.11" y="-337.7" font-family="Times,serif" font-size="14.00">+ HexagonDrawer(Tile) : </text>
<polyline fill="none" stroke="black" points="1010.11,-329.5 1412.59,-329.5"/>
<text text-anchor="start" x="1018.11" y="-312.9" font-family="Times,serif" font-size="14.00">+ drawHexagon(Graphics2D, double, Point) : void</text>
<text text-anchor="start" x="1018.11" y="-296.1" font-family="Times,serif" font-size="14.00"> - drawHexagonRow(Graphics2D, double, double, double, int) : void</text>
</g>
<!-- HexagonDrawer&#45;&gt;Hexagon -->
<g id="edge2" class="edge">
<title>HexagonDrawer-&gt;Hexagon</title>
<path fill="none" stroke="#595959" stroke-dasharray="5,2" d="M1211.35,-287.6C1211.35,-287.6 1211.35,-136.77 1211.35,-136.77"/>
<polygon fill="#595959" stroke="#595959" points="1211.35,-126.77 1215.85,-136.77 1211.35,-130.55 1211.35,-136.77 1211.35,-136.77 1211.35,-136.77 1211.35,-130.55 1206.85,-136.77 1211.35,-126.77"/>
<text text-anchor="middle" x="1235.05" y="-148" font-family="Times,serif" font-size="14.00">«create»</text>
</g>
<!-- ImageLoader -->
<g id="node6" class="node">
<title>ImageLoader</title>
<polygon fill="none" stroke="black" points="1430.29,-296.3 1430.29,-370.7 1612.4,-370.7 1612.4,-296.3 1430.29,-296.3"/>
<text text-anchor="middle" x="1521.35" y="-354.1" font-family="Times,serif" font-size="14.00">ImageLoader</text>
<polyline fill="none" stroke="black" points="1430.29,-345.9 1612.4,-345.9"/>
<text text-anchor="start" x="1438.29" y="-329.3" font-family="Times,serif" font-size="14.00">+ ImageLoader() : </text>
<polyline fill="none" stroke="black" points="1430.29,-321.1 1612.4,-321.1"/>
<text text-anchor="start" x="1438.29" y="-304.5" font-family="Times,serif" font-size="14.00">+ loadImage(String) : Image?</text>
</g>
<!-- MusicPlayer -->
<g id="node7" class="node">
<title>MusicPlayer</title>
<polygon fill="none" stroke="black" points="1630.07,-187.5 1630.07,-479.5 1812.62,-479.5 1812.62,-187.5 1630.07,-187.5"/>
<text text-anchor="middle" x="1721.35" y="-462.9" font-family="Times,serif" font-size="14.00">MusicPlayer</text>
<polyline fill="none" stroke="black" points="1630.07,-454.7 1812.62,-454.7"/>
<text text-anchor="start" x="1638.07" y="-438.1" font-family="Times,serif" font-size="14.00">+ MusicPlayer() : </text>
<polyline fill="none" stroke="black" points="1630.07,-429.9 1812.62,-429.9"/>
<text text-anchor="start" x="1638.07" y="-413.3" font-family="Times,serif" font-size="14.00">- soundClip : Clip</text>
<text text-anchor="start" x="1638.07" y="-396.5" font-family="Times,serif" font-size="14.00"> - musicClip : Clip</text>
<polyline fill="none" stroke="black" points="1630.07,-388.3 1812.62,-388.3"/>
<text text-anchor="start" x="1638.07" y="-371.7" font-family="Times,serif" font-size="14.00">+ loadMusic(Musics) : void</text>
<text text-anchor="start" x="1638.07" y="-354.9" font-family="Times,serif" font-size="14.00"> + playSound() : void</text>
<text text-anchor="start" x="1638.07" y="-338.1" font-family="Times,serif" font-size="14.00"> + pauseMusic() : void</text>
<text text-anchor="start" x="1638.07" y="-321.3" font-family="Times,serif" font-size="14.00"> + loadSound(Sounds) : void</text>
<text text-anchor="start" x="1638.07" y="-304.5" font-family="Times,serif" font-size="14.00"> + setVolume(Clip, int) : void</text>
<text text-anchor="start" x="1638.07" y="-287.7" font-family="Times,serif" font-size="14.00"> + playMusic() : void</text>
<text text-anchor="start" x="1638.07" y="-270.9" font-family="Times,serif" font-size="14.00"> + stopMusic() : void</text>
<polyline fill="none" stroke="black" points="1630.07,-262.7 1812.62,-262.7"/>
<text text-anchor="start" x="1638.07" y="-246.1" font-family="Times,serif" font-size="14.00">playingSound : boolean</text>
<text text-anchor="start" x="1638.07" y="-229.3" font-family="Times,serif" font-size="14.00"> soundClip : Clip</text>
<text text-anchor="start" x="1638.07" y="-212.5" font-family="Times,serif" font-size="14.00"> playingMusic : boolean</text>
<text text-anchor="start" x="1638.07" y="-195.7" font-family="Times,serif" font-size="14.00"> musicClip : Clip</text>
</g>
<!-- SoundLoader -->
<g id="node9" class="node">
<title>SoundLoader</title>
<polygon fill="none" stroke="black" points="1830.71,-296.3 1830.71,-370.7 2001.98,-370.7 2001.98,-296.3 1830.71,-296.3"/>
<text text-anchor="middle" x="1916.35" y="-354.1" font-family="Times,serif" font-size="14.00">SoundLoader</text>
<polyline fill="none" stroke="black" points="1830.71,-345.9 2001.98,-345.9"/>
<text text-anchor="start" x="1838.71" y="-329.3" font-family="Times,serif" font-size="14.00">+ SoundLoader() : </text>
<polyline fill="none" stroke="black" points="1830.71,-321.1 2001.98,-321.1"/>
<text text-anchor="start" x="1838.71" y="-304.5" font-family="Times,serif" font-size="14.00">+ loadMusic(String) : Clip?</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

127085
Documentation/Rapport.pdf Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

238
Makefile
View File

@@ -1,7 +1,6 @@
# Définition des variables
JC = javac
JVM = java
JCFLAGS = -d build -classpath "libs/mariadb-client.jar" -sourcepath src -encoding UTF-8
JVMFLAGS = -classpath ".:libs/mariadb-client.jar:build"
JARNAME = dorfromantik.jar
ENTRY = fr.monkhanny.dorfromantik.Main
@@ -9,86 +8,221 @@ PACKAGE = build/fr/monkhanny/dorfromantik
SRC = src/fr/monkhanny/dorfromantik
# Compilation des fichiers .java
${PACKAGE}/Main.class: ${SRC}/Main.java
${JC} ${JCFLAGS} ${SRC}/Main.java
${PACKAGE}/Main.class ${PACKAGE}/controller/GameModeController.class: ${SRC}/Main.java ${SRC}/controller/GameModeController.java ${PACKAGE}/Options.class ${PACKAGE}/utils/MusicPlayer.class ${PACKAGE}/controller/MainMenuResizeController.class ${PACKAGE}/controller/MainMenuButtonController.class ${PACKAGE}/enums/Musics.class ${PACKAGE}/gui/SettingsPanel.class ${PACKAGE}/controller/TutorialController.class ${PACKAGE}/gui/GameModeSelectionPanel.class ${PACKAGE}/utils/Database.class ${PACKAGE}/game/Board.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/GameModeSelectionPanel.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/Main.java ${SRC}/controller/GameModeController.java
${PACKAGE}/Options.class: ${SRC}/Options.java
${JC} ${JCFLAGS} ${SRC}/Options.java
${PACKAGE}/Options.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/controller/MainMenuMouseController.class ${PACKAGE}/gui/ButtonPanel.class ${PACKAGE}/gui/ButtonHoverAnimator.class ${PACKAGE}/utils/MusicPlayer.class: ${SRC}/Options.java ${SRC}/gui/MainMenu.java ${SRC}/controller/MainMenuMouseController.java ${SRC}/gui/ButtonPanel.java ${SRC}/gui/ButtonHoverAnimator.java ${SRC}/utils/MusicPlayer.java ${PACKAGE}/utils/FontManager.class ${PACKAGE}/utils/ImageLoader.class ${PACKAGE}/enums/Fonts.class ${PACKAGE}/components/Title.class ${PACKAGE}/gui/Leaderboard.class ${PACKAGE}/gui/LeaderboardWorldWide.class ${PACKAGE}/components/Button.class ${PACKAGE}/enums/Musics.class ${PACKAGE}/enums/Sounds.class ${PACKAGE}/utils/SoundLoader.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/Options.java ${SRC}/gui/MainMenu.java ${SRC}/controller/MainMenuMouseController.java ${SRC}/gui/ButtonPanel.java ${SRC}/gui/ButtonHoverAnimator.java ${SRC}/utils/MusicPlayer.java
################################
# Compilation des composants
${PACKAGE}/components/Button.class: ${SRC}/components/Button.java
${JC} ${JCFLAGS} ${SRC}/components/Button.java
${PACKAGE}/components/Button.class: ${SRC}/components/Button.java ${PACKAGE}/utils/FontManager.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/components/Button.java
${PACKAGE}/components/Title.class: ${SRC}/components/Title.java
${JC} ${JCFLAGS} ${SRC}/components/Title.java
${PACKAGE}/components/Title.class: ${SRC}/components/Title.java ${PACKAGE}/utils/FontManager.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/components/Title.java
# Compilation des contrôleurs
${PACKAGE}/controller/ButtonHoverAnimationListener.class: ${SRC}/controller/ButtonHoverAnimationListener.java
${JC} ${JCFLAGS} ${SRC}/controller/ButtonHoverAnimationListener.java
################################
# -----------------------------#
################################
# Compilation des enums
${PACKAGE}/controller/GameModeController.class: ${SRC}/controller/GameModeController.java
${JC} ${JCFLAGS} ${SRC}/controller/GameModeController.java
# Compilation des énumérations
${PACKAGE}/enums/Biome.class: ${SRC}/enums/Biome.java
${JC} ${JCFLAGS} ${SRC}/enums/Biome.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/enums/Biome.java
${PACKAGE}/enums/Fonts.class: ${SRC}/enums/Fonts.java
${JC} ${JCFLAGS} ${SRC}/enums/Fonts.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/enums/Fonts.java
# Compilation des classes liées au jeu
${PACKAGE}/game/BarChartPanel.class: ${SRC}/game/BarChartPanel.java
${JC} ${JCFLAGS} ${SRC}/game/BarChartPanel.java
${PACKAGE}/enums/Images.class: ${SRC}/enums/Images.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/enums/Images.java
${PACKAGE}/game/Board.class: ${SRC}/game/Board.java
${JC} ${JCFLAGS} ${SRC}/game/Board.java
${PACKAGE}/enums/Musics.class: ${SRC}/enums/Musics.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/enums/Musics.java
${PACKAGE}/game/Game.class: ${SRC}/game/Game.java
${JC} ${JCFLAGS} ${SRC}/game/Game.java
${PACKAGE}/enums/Sounds.class: ${SRC}/enums/Sounds.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/enums/Sounds.java
# Compilation des interfaces graphiques
${PACKAGE}/gui/ButtonPanel.class: ${SRC}/gui/ButtonPanel.java
${JC} ${JCFLAGS} ${SRC}/gui/ButtonPanel.java
${PACKAGE}/enums/TileOrientation.class: ${SRC}/enums/TileOrientation.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/enums/TileOrientation.java
################################
# -----------------------------#
################################
# Compilation des utilitaires
${PACKAGE}/utils/SoundLoader.class: ${SRC}/utils/SoundLoader.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/SoundLoader.java
${PACKAGE}/utils/PlayerScore.class: ${SRC}/utils/PlayerScore.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/PlayerScore.java
${PACKAGE}/utils/ImageLoader.class: ${SRC}/utils/ImageLoader.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/ImageLoader.java
${PACKAGE}/utils/Hexagon.class: ${SRC}/utils/Hexagon.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/Hexagon.java
${PACKAGE}/utils/FontManager.class: ${SRC}/utils/FontManager.java ${PACKAGE}/enums/Fonts.class ${PACKAGE}/utils/FontLoader.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/FontManager.java
${PACKAGE}/utils/FontLoader.class: ${SRC}/utils/FontLoader.java ${PACKAGE}/enums/Fonts.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/FontLoader.java
${PACKAGE}/utils/Database.class: ${SRC}/utils/Database.java ${PACKAGE}/utils/PlayerScore.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/utils/Database.java
################################
# -----------------------------#
################################
# Compilation des GUI
${PACKAGE}/gui/TutorialPanel.class: ${SRC}/gui/TutorialPanel.java ${PACKAGE}/components/Title.class ${PACKAGE}/enums/Images.class ${PACKAGE}/gui/Step.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/TutorialPanel.java
${PACKAGE}/gui/Step.class: ${SRC}/gui/Step.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/Step.java
${PACKAGE}/gui/SettingsPanel.class: ${SRC}/gui/SettingsPanel.java ${PACKAGE}/enums/Images.class ${PACKAGE}/components/Title.class ${PACKAGE}/Options.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/SettingsPanel.java
${PACKAGE}/gui/Reward.class: ${SRC}/gui/Reward.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/Reward.java
${PACKAGE}/gui/LeaderboardWorldWide.class: ${SRC}/gui/LeaderboardWorldWide.java ${PACKAGE}/utils/Database.class ${PACKAGE}/utils/PlayerScore.class ${PACKAGE}/gui/Leaderboard.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/LeaderboardWorldWide.java
${PACKAGE}/gui/LeaderboardByTier.class: ${SRC}/gui/LeaderboardByTier.java ${PACKAGE}/gui/Leaderboard.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/LeaderboardByTier.java
${PACKAGE}/gui/LeaderboardBarChartPanel.class: ${SRC}/gui/LeaderboardBarChartPanel.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/LeaderboardBarChartPanel.java
${PACKAGE}/gui/Leaderboard.class: ${SRC}/gui/Leaderboard.java
${JC} ${JCFLAGS} ${SRC}/gui/Leaderboard.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/Leaderboard.java
# Compilation des listeners
${PACKAGE}/listeners/CloseButtonListener.class: ${SRC}/listeners/CloseButtonListener.java
${JC} ${JCFLAGS} ${SRC}/listeners/CloseButtonListener.java
${PACKAGE}/gui/GameOver.class: ${SRC}/gui/GameOver.java ${PACKAGE}/utils/Database.class ${PACKAGE}/Options.class ${PACKAGE}/enums/Fonts.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/BarChartPanel.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/GameOver.java
${PACKAGE}/listeners/GameArrowKeyListener.class: ${SRC}/listeners/GameArrowKeyListener.java
${JC} ${JCFLAGS} ${SRC}/listeners/GameArrowKeyListener.java
${PACKAGE}/gui/GameModeSelectionPanel.class: ${SRC}/gui/GameModeSelectionPanel.java ${PACKAGE}/components/Title.class ${PACKAGE}/utils/Database.class ${PACKAGE}/gui/MainMenu.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/GameModeSelectionPanel.java
# Compilation des utils
${PACKAGE}/utils/Database.class: ${SRC}/utils/Database.java
${JC} ${JCFLAGS} ${SRC}/utils/Database.java
${PACKAGE}/gui/GameControlsMenu.class: ${SRC}/gui/GameControlsMenu.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/GameControlsMenu.java
${PACKAGE}/utils/FontLoader.class: ${SRC}/utils/FontLoader.java
${JC} ${JCFLAGS} ${SRC}/utils/FontLoader.java
${PACKAGE}/gui/BarChartPanel.class: ${SRC}/gui/BarChartPanel.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/gui/BarChartPanel.java
################################
# -----------------------------#
################################
# Compilation des game
${PACKAGE}/game/TilePanningTransition.class: ${SRC}/game/TilePanningTransition.java ${PACKAGE}/game/Board.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/TilePanningTransition.java
${PACKAGE}/game/ScoreManager.class ${PACKAGE}/game/Tile.class ${PACKAGE}/utils/HexagonDrawer.class ${PACKAGE}/game/Pocket.class ${PACKAGE}/game/Board.class ${PACKAGE}/game/Cell.class: ${SRC}/game/ScoreManager.java ${SRC}/game/Tile.java ${SRC}/utils/HexagonDrawer.java ${SRC}/game/Pocket.java ${SRC}/game/Board.java ${SRC}/game/Cell.java ${PACKAGE}/enums/Biome.class ${PACKAGE}/enums/TileOrientation.class ${PACKAGE}/utils/Hexagon.class ${PACKAGE}/game/Game.class ${PACKAGE}/utils/Database.class ${PACKAGE}/game/RemainingTilesIndicator.class ${PACKAGE}/gui/GameControlsMenu.class ${PACKAGE}/game/ScoreDisplay.class ${PACKAGE}/Options.class ${PACKAGE}/enums/Fonts.class ${PACKAGE}/gui/GameOver.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/ScoreManager.java ${SRC}/game/Tile.java ${SRC}/utils/HexagonDrawer.java ${SRC}/game/Pocket.java ${SRC}/game/Board.java ${SRC}/game/Cell.java
${PACKAGE}/game/ScoreDisplay.class: ${SRC}/game/ScoreDisplay.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/ScoreDisplay.java
${PACKAGE}/game/RemainingTilesIndicator.class: ${SRC}/game/RemainingTilesIndicator.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/RemainingTilesIndicator.java
${PACKAGE}/game/PauseGame.class: ${SRC}/game/PauseGame.java ${PACKAGE}/Options.class ${PACKAGE}/game/EscapeMenu.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/PauseGame.java
${PACKAGE}/game/Game.class: ${SRC}/game/Game.java
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/Game.java
${PACKAGE}/game/EscapeMenu.class: ${SRC}/game/EscapeMenu.java ${PACKAGE}/components/Title.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/EscapeMenu.java
${PACKAGE}/game/CustomMouseMotionAdapter.class: ${SRC}/game/CustomMouseMotionAdapter.java ${PACKAGE}/game/Board.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/CustomMouseMotionAdapter.java
JCFLAGS = -d build -classpath "libs/mariadb-client.jar:build" -sourcepath src
${PACKAGE}/game/CustomKeyAdapter.class: ${SRC}/game/CustomKeyAdapter.java ${PACKAGE}/game/Board.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/game/CustomKeyAdapter.java
################################
# -----------------------------#
################################
# Compilation des controllers
${PACKAGE}/controller/TutorialController.class: ${SRC}/controller/TutorialController.java ${PACKAGE}/gui/TutorialPanel.class ${PACKAGE}/gui/Step.class ${PACKAGE}/enums/Images.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/TutorialPanel.class ${PACKAGE}/gui/MainMenu.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/controller/TutorialController.java
${PACKAGE}/controller/MainMenuResizeHandler.class: ${SRC}/controller/MainMenuResizeHandler.java ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/Options.class ${PACKAGE}/gui/ButtonHoverAnimator.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/controller/MainMenuResizeHandler.java
${PACKAGE}/controller/MainMenuResizeController.class: ${SRC}/controller/MainMenuResizeController.java ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/controller/MainMenuResizeHandler.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/controller/MainMenuResizeController.java
${PACKAGE}/controller/MainMenuButtonController.class: ${SRC}/controller/MainMenuButtonController.java ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/ButtonPanel.class
@echo "Compiling $<..."
@${JC} ${JCFLAGS} ${SRC}/controller/MainMenuButtonController.java
# Cibles supplémentaires
run:
${JVM} ${JVMFLAGS} ${ENTRY}
clean:
@echo "Nettoyage de build et doc"
rm -rf build
rm -rf doc
rm -rf docs
# Génération du fichier .jar
jar:
@echo "Création du fichier .jar"
jar cvfm ${JARNAME} Manifest.MF -C build/ . -C libs/ .
jar: ${PACKAGE}/Main.class
jar cvfm ${JARNAME} Manifest.MF -C build/ . -C libs/ . ./ressources
# Extraction des fichiers MariaDB
extract-mariadb:
rm -rf build/org
unzip -qo libs/mariadb-client.jar -d build
rm -rf build/Version.java.template
rm -rf build/META-INF
seedoc:
firefox ./docs/index.html &
# Documentation JavaDoc
javadoc:
@echo "Génération de la documentation JavaDoc"
javadoc -d doc -sourcepath src -subpackages fr.monkhanny.dorfromantik -classpath libs/mariadb-client.jar
javadoc -d docs -sourcepath src -subpackages fr.monkhanny.dorfromantik -classpath libs/mariadb-client.jar

248
Makefile2

File diff suppressed because one or more lines are too long

121
README.md
View File

@@ -1,84 +1,111 @@
# Dorfromantik 🏔️🌲
# Dorfromantik 🏔️
Bienvenue sur notre projet **"Dorfromantik"**, un jeu inspiré par l'univers de [Dorfromantik](https://store.steampowered.com/app/1455840/Dorfromantik/), où vous devrez assembler des tuiles pour créer des paysages harmonieux 🌈. Ce projet a été réalisé dans le cadre de la SAE 3.1 de notre formation à l'IUT de Sénart-Fontainebleau.
## Table des Matières
Bienvenue sur notre projet **"Dorfromantik"**, un jeu de construction de paysages inspiré par l'univers de [Dorfromantik](https://store.steampowered.com/app/1455840/Dorfromantik/). Ce projet a été réalisé dans le cadre de la SAE 3.1 de l'IUT Sénart-Fontainebleau.
## Table des matières
- [Introduction](#introduction)
- [Lancement du Programme](#lancement-du-programme)
- [Compilation](#compilation)
- [Exécution](#exécution)
- [Nettoyage des Fichiers](#nettoyage-des-fichiers)
- [Architecture du Projet](#architecture-du-projet)
- [Rapport d'Avancement](#rapport-davancement)
- [Structure du projet](#structure-du-projet)
- [Compilation et exécution](#compilation-et-exécution)
- [Génération de la documentation](#génération-de-la-documentation-)
- [Nettoyage des fichiers](#nettoyage-des-fichiers-)
- [Rapport d'avancement](#rapport-davancement)
- [Crédits](#crédits)
## Introduction 🌱
---
Dans ce jeu, les joueurs assemblent des tuiles hexagonales représentant différents types de terrains (🌊 mer, 🌾 pré, 🍂 forêt, 🏠 champ, et ⛰ montagne) afin de former un paysage harmonieux. Les tuiles peuvent avoir un ou deux types de terrains, et doivent être placées en suivant certaines contraintes.
## Introduction
L'objectif est de créer des poches de terrains connexes maximisant les points 🌟. Le jeu se termine après avoir placé 50 tuiles 🏙️.
Dorfromantik est un jeu où vous devrez :
- Placer des tuiles hexagonales sur un plateau pour former des paysages cohérents.
- Maximiser votre score en reliant des poches de terrains identiques.
Ce projet a été développé en **Java** en suivant les consignes de l'IUT pour garantir modularité et maintenabilité.
## Lancement du Programme 🚀
---
Pour démarrer le projet, suivez les instructions ci-dessous :
## Structure du projet
### Compilation 🛠️
````
.
├── Database # Fichiers qui contient une sauvegarde de la BDD
├── Documentation # Diagrammes UML, Wireflow et rapport
├── libs # Bibliothèque MariaDB pour la connexion à la BDD
├── ressources # Ressources : images, polices, sons
├── src # Code source du projet
├── dorfromantik.jar # Archive exécutable
├── Makefile # Automatisation de la compilation
├── LICENSE # Licence du projet
└── README.md # Ce fichier
````
Pour compiler le projet, utilisez le Makefile présent à la racine du projet avec la commande suivante :
---
## Compilation et exécution
### Pré-requis
- **MariaDB client** (inclus dans le répertoire `libs`)
### Compilation
Utilisez le fichier `Makefile` pour compiler le projet :
```bash
make
```
Cela générera tous les fichiers `.class` nécessaires dans le répertoire `build/`.
### Exécution 🌿
Pour lancer le jeu, utilisez la commande suivante :
### Exécution
Pour lancer le programme, utilisez la commande suivante :
```bash
make run
```
ou
Avec l'archive .jar :
```bash
java -jar dorfromantik.jar
java -cp dorfromantik.jar:libs/mariadb-client.jar fr.monkhanny.dorfromantik.Main
```
Cela exécutera le fichier `dorfromantik.jar` contenant tout le projet.
### Création du fichier `.jar`
Vous pouvez générer une archive exécutable :
```bash
make jar
```
### Nettoyage des Fichiers 🛏️
---
Pour nettoyer les fichiers `.class` et la documentation, utilisez la commande :
## Génération de la documentation 📜
La documentation du code source est générée via **Javadoc**. Utilisez :
```bash
make javadoc
```
Les fichiers HTML seront disponibles dans le répertoire `docs`.
Pour voir la documentation facilement, utilisez :
```bash
make seedoc
```
---
## Nettoyage des fichiers 🗑️
Pour supprimer les fichiers temporaires et la documentation générée :
```bash
make clean
```
## Architecture du Projet 🛁
---
## Rapport d'avancement
Le projet est organisé de manière modulaire pour assurer une bonne maintenance et faciliter la lecture du code. Voici les principaux composants :
Le rapport d'avancement du projet est disponible dans le dossier `Documentation`. Accédez-y directement ici : [Documentation/Rapport.pdf](./Documentation/Rapport.pdf).
- **Main.java** : Point d'entrée du programme.
- **game/** : Contient la logique de gestion du plateau et des tuiles, notamment `Board.java` et `Tile.java`.
- **gui/** : Fournit les interfaces graphiques pour l'utilisateur, comme `MainMenu.java` et `GameControlsMenu.java`.
- **controller/** : Gère les actions et les événements des utilisateurs.
- **utils/** : Fonctions utilitaires pour charger des images, des polices, et se connecter à la base de données.
- **listeners/** : Gère les différents événements de l'application, tels que `GameMouseClickListener.java`.
---
## Rapport d'Avancement 📃
Un rapport d'avancement complet est disponible dans le dossier `XXXXXXXXXXXXXXXXXXXX/`. Ce fichier **PDF** inclut :
- Une description du sujet.
- Les fonctionnalités et captures d'écran de notre application.
- La structure du programme avec des diagrammes de classe.
- Une analyse des algorithmes employés.
- ...
## Crédits 🚀
## Crédits
Ce projet a été réalisé par :
- [Moncef STITI](https://grond.iut-fbleau.fr/stiti)
- [Lenny FOULOU](https://grond.iut-fbleau.fr/foulou)
- [Khalid CHENOUNA](https://grond.iut-fbleau.fr/chenouna)
- **Moncef STITI** (@stiti)
- **Lenny FOULOU** (@foulou)
- **Khalid CHENOUNA** (@chenouna)
Professeur : **Luc Hernandez**.

View File

@@ -93,7 +93,7 @@ public class Options {
public static boolean AUTO_FOCUS = false;
/**
* Nombre maximum de tuiles dans le jeu
* Nombre maximum de tuiles dans le jeu (tuile initiale comprise)
*/
public static final int MAX_TILE_NUMBER = 50;

View File

@@ -9,72 +9,77 @@ import javax.swing.*;
* Un composant graphique Swing pour afficher un histogramme représentant les scores moyens des groupes.
* Chaque barre représente un groupe et est colorée différemment en fonction de s'il est mis en surbrillance.
*
* Les barres sont ombrées et incluent des labels pour indiquer les scores moyens, ainsi que les noms des groupes.
* Les barres incluent des labels pour indiquer les scores moyens, ainsi que les noms des groupes.
*
* @version 1.0
* @version 1.2
* @author Moncef STITI
*/
public class BarChartPanel extends JPanel {
/** Liste des scores moyens des groupes. */
/**
* Liste des scores moyens des groupes à afficher.
*/
private final List<Integer> groupAverages;
/** Indice du groupe mis en surbrillance. */
/**
* Indice du groupe à mettre en surbrillance.
*/
private final int highlightedGroup;
/** Couleur de la barre pour le groupe du joueur. */
private static final Color PLAYER_GROUP_COLOR = new Color(204, 0, 0);
/** Couleur des barres pour les autres groupes. */
private static final Color OTHER_GROUP_COLOR = new Color(0, 0, 204);
/** Couleur de l'ombre projetée par les barres. */
private static final Color SHADOW_COLOR = new Color(0, 0, 0, 60);
/** Couleur du texte affiché sur les barres. */
private static final Color TEXT_COLOR = Color.BLACK;
/** Police pour le label "Score moyen". */
private static final Font AVERAGE_FONT = new Font("Arial", Font.ITALIC, 12);
/** Police pour les labels des groupes. */
private static final Font GROUP_LABEL_FONT = new Font("Arial", Font.BOLD, 16);
/** Police pour afficher les scores des groupes. */
private static final Font SCORE_FONT = new Font("Arial", Font.BOLD, 14);
/** Marge autour de l'histogramme. */
private static final int PADDING = 30;
/** Décalage de l'ombre en pixels. */
private static final int SHADOW_OFFSET = 2;
/**
* Couleur des barres pour le groupe du joueur.
*/
private static final Color PLAYER_GROUP_COLOR = new Color(11, 143, 55); // Vert
/**
* Construit un nouveau panneau d'histogramme.
*
* @param groupAverages Liste des scores moyens des groupes.
* La taille de cette liste détermine le nombre de barres dans l'histogramme.
* @param highlightedGroup Indice du groupe à mettre en surbrillance.
* Si cet indice ne correspond à aucun groupe, aucune barre ne sera mise en surbrillance.
* @throws NullPointerException si {@code groupAverages} est {@code null}.
* Couleur des barres pour les autres groupes.
*/
private static final Color OTHER_GROUP_COLOR = new Color(11, 77, 143); // Bleu
/**
* Couleur du texte.
*/
private static final Color TEXT_COLOR = Color.BLACK;
/**
* Polices utilisée pour le texte de la moyenne du groupe
*/
private static final Font AVERAGE_FONT = new Font("Arial", Font.ITALIC, 12);
/**
* Police utilisée pour les étiquettes de groupe
*/
private static final Font GROUP_LABEL_FONT = new Font("Arial", Font.BOLD, 16);
/**
* Police utilisée pour les scores
*/
private static final Font SCORE_FONT = new Font("Arial", Font.BOLD, 14);
/**
* Marge intérieure pour les barres.
*/
private static final int PADDING = 30;
/**
* Crée un nouveau panneau d'histogramme avec les scores moyens des groupes et un groupe mis en surbrillance.
* @param groupAverages Liste des scores moyens des groupes
* @param highlightedGroup Indice du groupe à mettre en surbrillance
*/
public BarChartPanel(List<Integer> groupAverages, int highlightedGroup) {
this.groupAverages = Objects.requireNonNull(groupAverages, "Group averages cannot be null");
this.highlightedGroup = highlightedGroup;
// Configuration du panneau
setOpaque(false);
setBackground(new Color(0, 0, 0, 0));
setAlignmentX(Component.CENTER_ALIGNMENT);
}
/**
* Dessine le composant graphique, incluant les barres, les labels et les scores.
* Dessine les barres de l'histogramme avec les scores moyens des groupes.
*
* @param g Le contexte graphique.
* @param g Contexte graphique pour dessiner les barres
*/
@Override
protected void paintComponent(Graphics g) {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (groupAverages.isEmpty()) {
@@ -87,74 +92,57 @@ protected void paintComponent(Graphics g) {
int width = getWidth();
int height = getHeight();
int barWidth = width / (groupAverages.size() + 1);
int maxScore = groupAverages.stream()
.mapToInt(Integer::intValue)
.max()
.orElse(0);
int barWidth = Math.max(20, width / (groupAverages.size() * 2));
int maxScore = groupAverages.stream().mapToInt(Integer::intValue).max().orElse(1);
for (int i = 0; i < groupAverages.size(); i++) {
int barHeight = calculateBarHeight(maxScore, height, groupAverages.get(i));
int xPosition = (i + 1) * barWidth;
int score = groupAverages.get(i);
int barHeight = calculateBarHeight(maxScore, height, score);
int xPosition = PADDING + i * (barWidth * 2);
Color barColor = (i == highlightedGroup) ? PLAYER_GROUP_COLOR : OTHER_GROUP_COLOR;
g2d.setColor(SHADOW_COLOR);
g2d.fillRect(xPosition + SHADOW_OFFSET, height - barHeight - PADDING + SHADOW_OFFSET, barWidth - 5, barHeight);
// Dessiner la barre avec coins arrondis
g2d.setColor(barColor);
g2d.fillRect(xPosition, height - barHeight - PADDING, barWidth - 5, barHeight);
g2d.fillRoundRect(xPosition, height - barHeight - PADDING, barWidth, barHeight, 10, 10);
// Ajustez dynamiquement la position des textes
int textY = height - barHeight - PADDING - 20; // Score position
if (textY < PADDING) {
textY = PADDING - 2; // Éviter le chevauchement au sommet
}
String avgScoreText = String.valueOf(groupAverages.get(i));
// Ajouter le texte des scores
g2d.setFont(SCORE_FONT);
g2d.setColor(TEXT_COLOR);
drawCenteredString(g2d, avgScoreText, xPosition, barWidth, textY);
// Position de "Score moyen"
int labelY = textY - 15; // Placer légèrement au-dessus du score
if (labelY < PADDING) {
labelY = PADDING - 17; // Éviter les débordements
}
String scoreText = String.valueOf(score);
drawCenteredString(g2d, scoreText, xPosition, barWidth, height - barHeight - PADDING - 5);
// Ajouter les labels "Score moyen"
g2d.setFont(AVERAGE_FONT);
drawCenteredString(g2d, "Score moyen : ", xPosition, barWidth, labelY);
drawCenteredString(g2d, "Score moyen", xPosition, barWidth, height - barHeight - PADDING - 20);
// Ajouter les noms des groupes
g2d.setFont(GROUP_LABEL_FONT);
String groupLabel = "Groupe " + (i + 1);
drawCenteredString(g2d, groupLabel, xPosition, barWidth, height - 10);
drawCenteredString(g2d, "Groupe " + (i + 1), xPosition, barWidth, height - 5);
}
} finally {
g2d.dispose();
}
}
/**
* Calcule la hauteur d'une barre proportionnellement au score maximum.
*
* @param maxScore Le score maximum parmi tous les groupes
* @param height La hauteur totale du composant
* @param score Le score du groupe courant
* @return La hauteur de la barre
* Calcule la hauteur de la barre en fonction du score et de la hauteur du panneau.
* @param maxScore Score maximum
* @param height Hauteur du panneau
* @param score Score du groupe
* @return Hauteur de la barre
*/
private int calculateBarHeight(int maxScore, int height, int score) {
return (int) ((double) score / maxScore * (height - 2 * PADDING));
}
/**
* Dessine une chaîne centrée horizontalement dans une section de la largeur du composant.
*
* @param g2d Le contexte graphique
* @param text Le texte à dessiner
* @param xOffset La position x de départ de la section
* @param sectionWidth La largeur de la section
* @param y La position y où dessiner le texte
* Dessine une chaîne de texte centrée horizontalement dans un rectangle.
* @param g2d Contexte graphique pour dessiner le texte
* @param text Texte à dessiner
* @param xOffset Position X du coin supérieur gauche du rectangle
* @param sectionWidth Largeur du rectangle
* @param y Position Y du coin supérieur gauche du rectangle
*/
private void drawCenteredString(Graphics2D g2d, String text, int xOffset, int sectionWidth, int y) {
FontMetrics metrics = g2d.getFontMetrics();
@@ -165,13 +153,10 @@ protected void paintComponent(Graphics g) {
/**
* Retourne la taille préférée du panneau.
*
* @return La taille préférée
* @see Dimension
* @return Taille préférée du panneau
*/
@Override
public Dimension getPreferredSize() {
// Définir une taille préférée par défaut si non spécifiée
return new Dimension(400, 200);
return new Dimension(600, 400);
}
}

View File

@@ -274,7 +274,7 @@ public class GameModeSelectionPanel extends JPanel {
// Créer un bouton de filtre
JButton filterButton = new JButton("Filtrer");
filterButton.setFont(new Font("Arial", Font.BOLD, 16));
filterButton.setBackground(new Color(70, 130, 180));
filterButton.setBackground(new Color(252, 161, 3));
filterButton.setForeground(Color.WHITE);
filterButton.setFocusPainted(false);
filterButton.setBorder(BorderFactory.createCompoundBorder(
@@ -309,7 +309,7 @@ public class GameModeSelectionPanel extends JPanel {
BorderFactory.createLineBorder(new Color(255, 255, 255, 120), 2),
BorderFactory.createEmptyBorder(5, 10, 5, 10)
));
textField.setBackground(new Color(40, 40, 40)); // Fond doux pour les spinners
textField.setBackground(new Color(112,128,144)); // Fond doux pour les spinners
textField.setForeground(Color.WHITE); // Texte blanc pour une meilleure lisibilité
textField.setCaretColor(Color.WHITE); // Curseur blanc
}
@@ -494,7 +494,7 @@ public class GameModeSelectionPanel extends JPanel {
startButton = new JButton("Démarrer");
startButton.setFont(new Font("Arial", Font.BOLD, 24));
startButton.setBackground(new Color(0, 255, 0));
startButton.setBackground(new Color(0, 100, 0));
startButton.setForeground(Color.WHITE);
startButton.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2));
startButton.setPreferredSize(new Dimension(150, 50));

View File

@@ -158,7 +158,7 @@ public class GameOver extends JPanel {
returnButton.setFont(Fonts.BUTTON.getFont(24));
returnButton.setAlignmentX(Component.CENTER_ALIGNMENT);
returnButton.setFocusPainted(false); // Optionnel : pour un style plus propre
returnButton.setBackground(new Color(0, 0, 0)); // Couleur d'arrière-plan du bouton
returnButton.setBackground(new Color(255, 255, 255)); // Couleur d'arrière-plan du bouton
returnButton.setForeground(Color.BLACK); // Couleur du texte du bouton
// Ajouter un listener d'action au bouton
@@ -205,7 +205,7 @@ public class GameOver extends JPanel {
case 7: return "C'est un bon début ! Peut-être qu'un peu de café améliorerait encore la situation ?!";
case 8: return "Sur le chemin de la gloire, mais vous êtes encore coincé dans les bouchons...";
case 9: return "Félicitations ! Mais peut-être que vous voudriez réessayer sans les lunettes de soleil ?";
case 10: return "L'important c'est de participer, non ? Mais vous pourriez essayer de jouer les yeux ouvert la prochaine fois !";
case 10: return "L'important c'est de participer, non ? Mais vous pourriez essayer de jouer les yeux ouverts la prochaine fois !";
default: return "Hé, on progresse ! Peut-être qu'un jour, vous dominerez le monde... ou du moins ce jeu !";
}
}

View File

@@ -92,7 +92,6 @@ public class SettingsPanel extends JPanel {
}
// Méthode pour rendre le bouton de retour visible ou invisible
/**
* Permet de rendre le bouton de retour visible ou invisible.
*
@@ -202,6 +201,7 @@ public class SettingsPanel extends JPanel {
volumeSlider.setPreferredSize(new Dimension(200, 50));
volumeSlider.setMajorTickSpacing(50);
volumeSlider.setPaintTicks(true);
volumeSlider.setOpaque(false);
volumeSlider.setPaintLabels(true);
volumeSlider.setFont(new Font("Roboto", Font.PLAIN, 16));
volumeSlider.addChangeListener(sliderChangeListener);

View File

@@ -40,16 +40,16 @@ public class GameArrowKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
board.moveBoard(0, -10); // Déplacer vers le haut
board.moveBoard(0, -30); // Déplacer vers le haut
break;
case KeyEvent.VK_DOWN:
board.moveBoard(0, 10); // Déplacer vers le bas
board.moveBoard(0, 30); // Déplacer vers le bas
break;
case KeyEvent.VK_LEFT:
board.moveBoard(-10, 0); // Déplacer vers la gauche
board.moveBoard(-30, 0); // Déplacer vers la gauche
break;
case KeyEvent.VK_RIGHT:
board.moveBoard(10, 0); // Déplacer vers la droite
board.moveBoard(30, 0); // Déplacer vers la droite
break;
}
}