Amélioration du jeu

This commit is contained in:
2024-11-24 15:35:18 +01:00
parent 1eb2e67e90
commit fd8004bb8a
7 changed files with 128 additions and 77 deletions

View File

@@ -12,7 +12,6 @@ import fr.monkhanny.dorfromantik.controller.TutorialController;
import fr.monkhanny.dorfromantik.controller.GameModeController; import fr.monkhanny.dorfromantik.controller.GameModeController;
import fr.monkhanny.dorfromantik.gui.GameModeSelectionPanel; import fr.monkhanny.dorfromantik.gui.GameModeSelectionPanel;
import javax.swing.JFrame; import javax.swing.JFrame;
/** /**
@@ -23,62 +22,89 @@ import javax.swing.JFrame;
* @see MainMenuResizeController * @see MainMenuResizeController
*/ */
public class Main { public class Main {
/**
* Méthode principale du jeu
* @param args Tableau de String contenant les arguments passé en paramètre au programme
*/
public static void main(String[] args) {
// Créer la fenêtre des modes de jeu
JFrame gameModeFrame = new JFrame("Choix des modes de jeu - Dorfromantik");
// Créer la fenêtre du jeu private static JFrame gameModeFrame;
JFrame gameFrame = new JFrame("Jeu - Dorfromantik"); private static JFrame gameFrame;
private static JFrame settingsFrame;
private static JFrame howToPlayFrame;
private static JFrame rewardsFrame;
// Créer la fenêtre des paramètres // Variable statique pour savoir si la musique a été jouée
JFrame settingsFrame = new JFrame("Paramètres - Dorfromantik"); private static boolean isMusicPlayed = false;
// Créer la fenêtre du tutoriel // Fonction pour réinitialiser tout le jeu
JFrame howToPlayFrame = new JFrame("Comment jouer ? - Dorfromantik"); public static void resetGame() {
// 1. Fermer toutes les fenêtres ouvertes
if (gameModeFrame != null) {
gameModeFrame.dispose(); // Ferme la fenêtre du choix des modes de jeu
}
if (gameFrame != null) {
gameFrame.dispose(); // Ferme la fenêtre de jeu
}
if (settingsFrame != null) {
settingsFrame.dispose(); // Ferme la fenêtre des paramètres
}
if (howToPlayFrame != null) {
howToPlayFrame.dispose(); // Ferme la fenêtre du tutoriel
}
if (rewardsFrame != null) {
rewardsFrame.dispose(); // Ferme la fenêtre des récompenses
}
// Créer la fenêtre des récompenses // 2. Réinitialiser les variables globales ou statiques si nécessaire
JFrame rewardsFrame = new JFrame("Récompenses - Dorfromantik"); Options.mainMenu = new MainMenu(); // Réinitialiser le menu principal
// Menu principal // 3. Lancer la musique uniquement si ce n'est pas déjà fait
MusicPlayer.loadMusic(Musics.MAIN_MENU_MUSIC); if (!isMusicPlayed) {
MusicPlayer.playMusic(); MusicPlayer.loadMusic(Musics.MAIN_MENU_MUSIC); // Recharger la musique du menu principal
MainMenu mainMenu = new MainMenu(); MusicPlayer.playMusic(); // Reprendre la musique
@SuppressWarnings("unused") isMusicPlayed = true; // Marquer la musique comme jouée
MainMenuResizeController MainMenuResizeController = new MainMenuResizeController(mainMenu); }
@SuppressWarnings("unused")
MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameModeFrame,gameFrame, rewardsFrame);
// 4. Créer les fenêtres à nouveau comme au début
gameModeFrame = new JFrame("Choix des modes de jeu - Dorfromantik");
gameFrame = new JFrame("Jeu - Dorfromantik");
settingsFrame = new JFrame("Paramètres - Dorfromantik");
howToPlayFrame = new JFrame("Comment jouer ? - Dorfromantik");
rewardsFrame = new JFrame("Récompenses - Dorfromantik");
// Fenêtre des paramètres // Re-créer et réinitialiser les panels et les contrôleurs
CloseWindowListener settingsWindowListener = new CloseWindowListener(mainMenu, settingsFrame); MainMenuResizeController mainMenuResizeController = new MainMenuResizeController(Options.mainMenu);
SettingsPanel settingsPanel = new SettingsPanel(mainMenu, settingsFrame); MainMenuButtonController mainMenuButtonController = new MainMenuButtonController(Options.mainMenu, settingsFrame, howToPlayFrame, gameModeFrame, gameFrame, rewardsFrame);
settingsFrame.addWindowListener(settingsWindowListener);
settingsFrame.add(settingsPanel);
// Fenêtre du tutoriel // Fenêtre des paramètres
CloseWindowListener howToPlayWindowListener = new CloseWindowListener(mainMenu, howToPlayFrame); CloseWindowListener settingsWindowListener = new CloseWindowListener(Options.mainMenu, settingsFrame);
TutorialController tutorialController = new TutorialController(mainMenu, howToPlayFrame); SettingsPanel settingsPanel = new SettingsPanel(Options.mainMenu, settingsFrame);
howToPlayFrame.addWindowListener(howToPlayWindowListener); settingsFrame.addWindowListener(settingsWindowListener);
howToPlayFrame.add(tutorialController.getTutorialPanel()); settingsFrame.add(settingsPanel);
// Fenêtre du choix des modes de jeu // Fenêtre du tutoriel
CloseWindowListener gameModeWindowListener = new CloseWindowListener(mainMenu, gameModeFrame); CloseWindowListener howToPlayWindowListener = new CloseWindowListener(Options.mainMenu, howToPlayFrame);
GameModeController gameModeController = new GameModeController(gameFrame,mainMenu); TutorialController tutorialController = new TutorialController(Options.mainMenu, howToPlayFrame);
GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController); howToPlayFrame.addWindowListener(howToPlayWindowListener);
gameModeFrame.addWindowListener(gameModeWindowListener); howToPlayFrame.add(tutorialController.getTutorialPanel());
gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel);
gameModeFrame.add(gameModeSelectionPanel);
// Fenêtre des récompenses // Fenêtre du choix des modes de jeu
CloseWindowListener rewardsWindowListener = new CloseWindowListener(mainMenu, rewardsFrame); CloseWindowListener gameModeWindowListener = new CloseWindowListener(Options.mainMenu, gameModeFrame);
rewardsFrame.addWindowListener(rewardsWindowListener); GameModeController gameModeController = new GameModeController(gameFrame, Options.mainMenu, gameModeFrame);
RewardsPanel rewardsPanel = new RewardsPanel(); GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController);
rewardsFrame.setContentPane(rewardsPanel); gameModeFrame.addWindowListener(gameModeWindowListener);
rewardsFrame.pack(); gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel);
gameModeFrame.add(gameModeSelectionPanel);
}
// Fenêtre des récompenses
CloseWindowListener rewardsWindowListener = new CloseWindowListener(Options.mainMenu, rewardsFrame);
rewardsFrame.addWindowListener(rewardsWindowListener);
RewardsPanel rewardsPanel = new RewardsPanel();
rewardsFrame.setContentPane(rewardsPanel);
rewardsFrame.pack();
// Afficher à nouveau le menu principal
Options.mainMenu.setVisible(true);
}
public static void main(String[] args) {
// Appel initial pour créer les fenêtres et démarrer le jeu
resetGame(); // Appel à la fonction de réinitialisation
}
} }

View File

@@ -2,6 +2,7 @@ package fr.monkhanny.dorfromantik;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import fr.monkhanny.dorfromantik.gui.MainMenu;
public class Options { public class Options {
@@ -54,11 +55,15 @@ public class Options {
public static boolean AUTO_FOCUS = true; public static boolean AUTO_FOCUS = true;
public static final int MAX_TILE_NUMBER = 2; public static final int MAX_TILE_NUMBER = 50;
public static boolean FULL_SCREEN = false; public static boolean FULL_SCREEN = false;
public static final float SCORE_SIZE = 30f; public static final float SCORE_SIZE = 30f;
public static long SEED = 0; public static long SEED = 0;
public static MainMenu mainMenu;
public static boolean isPlaying = false;
} }

View File

@@ -19,11 +19,14 @@ public class GameModeController implements ActionListener {
private JFrame gameFrame; private JFrame gameFrame;
private MainMenu mainMenu; private MainMenu mainMenu;
private Database database; private Database database;
private JFrame gameModeFrame;
private static Board board;
// Constructeur sans le panneau // Constructeur sans le panneau
public GameModeController(JFrame gameFrame, MainMenu mainMenu) { public GameModeController(JFrame gameFrame, MainMenu mainMenu, JFrame gameModeFrame) {
this.gameFrame = gameFrame; this.gameFrame = gameFrame;
this.mainMenu = mainMenu; this.mainMenu = mainMenu;
this.gameModeFrame = gameModeFrame;
// Connexion à la base de données // Connexion à la base de données
try { try {
@@ -86,18 +89,27 @@ public class GameModeController implements ActionListener {
} }
private void startGame(String mode, long seed) { private void startGame(String mode, long seed) {
// Supprimer la potentielle ancienne instance de board
GameModeController.board = null;
// Cacher la fenêtre avant de faire des modifications
this.gameFrame.setVisible(false);
if (Options.FULL_SCREEN) { if (Options.FULL_SCREEN) {
gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Set frame to full screen gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Set frame to full screen
gameFrame.setUndecorated(true);
} else { } else {
Dimension mainMenuSize = this.mainMenu.getSize(); Dimension mainMenuSize = this.mainMenu.getSize();
Point mainMenuLocation = this.mainMenu.getLocation(); Point mainMenuLocation = this.mainMenu.getLocation();
gameFrame.setSize(mainMenuSize); gameFrame.setSize(mainMenuSize);
gameFrame.setLocation(mainMenuLocation); gameFrame.setLocation(mainMenuLocation);
gameFrame.setUndecorated(false);
} }
Board board = new Board(this.gameFrame,seed); GameModeController.board = new Board(this.gameFrame,seed);
//this.gameModeFrame.setVisible(false);
this.gameFrame.setVisible(true); this.gameFrame.setVisible(true);
this.gameFrame.add(board); this.gameFrame.add(board);
} }
public static Board getGameModeBoard() {
return board;
}
} }

View File

@@ -95,6 +95,7 @@ public class MainMenuButtonController implements ActionListener {
private void openRecompense() { private void openRecompense() {
adjustFrameDisplay(this.rewardsFrame); adjustFrameDisplay(this.rewardsFrame);
this.mainMenu.setVisible(false);
this.rewardsFrame.setVisible(true); this.rewardsFrame.setVisible(true);
} }

View File

@@ -9,6 +9,7 @@ import fr.monkhanny.dorfromantik.Options;
import fr.monkhanny.dorfromantik.enums.Biome; import fr.monkhanny.dorfromantik.enums.Biome;
import fr.monkhanny.dorfromantik.enums.Fonts; import fr.monkhanny.dorfromantik.enums.Fonts;
import fr.monkhanny.dorfromantik.enums.TileOrientation; import fr.monkhanny.dorfromantik.enums.TileOrientation;
import fr.monkhanny.dorfromantik.controller.GameModeController;
import fr.monkhanny.dorfromantik.utils.Database; import fr.monkhanny.dorfromantik.utils.Database;
import java.util.ArrayList; import java.util.ArrayList;
@@ -91,26 +92,26 @@ public class Board extends JPanel{
} }
public void handleMouseMove(java.awt.event.MouseEvent e) { public void handleMouseMove(java.awt.event.MouseEvent e) {
// Récupérer les coordonnées du curseur // Récupérer les coordonnées du curseur
Point cursorPoint = e.getPoint(); Point cursorPoint = e.getPoint();
// Ajuster la position de la souris en fonction du zoom et des offsets // Ajuster la position de la souris en fonction du zoom et des offsets
int adjustedX = (int)((cursorPoint.x - offsetX) / zoomFactor); int adjustedX = (int)((cursorPoint.x - offsetX) / zoomFactor);
int adjustedY = (int)((cursorPoint.y - offsetY) / zoomFactor); int adjustedY = (int)((cursorPoint.y - offsetY) / zoomFactor);
// Vérifier si la souris est proche d'une des positions disponibles // Vérifier si la souris est proche d'une des positions disponibles
for (Point position : availablePositions) { for (Point position : availablePositions) {
if (new Point(adjustedX, adjustedY).distance(position) < 20) { if (new Point(adjustedX, adjustedY).distance(position) < 20) {
mousePosition = position; mousePosition = position;
repaint(); // Redessiner le plateau avec la tuile transparente repaint(); // Redessiner le plateau avec la tuile transparente
return; return;
}
} }
}
// Si la souris n'est pas proche d'une position valide, ne rien faire // Si la souris n'est pas proche d'une position valide, ne rien faire
mousePosition = null; mousePosition = null;
repaint(); // Redessiner sans la tuile transparente repaint(); // Redessiner sans la tuile transparente
} }
private void initializeNextTile() { private void initializeNextTile() {
@@ -335,7 +336,7 @@ public class Board extends JPanel{
} catch (Exception e) { } catch (Exception e) {
System.err.println("Erreur lors de la connexion à la base de données: " + e.getMessage()); System.err.println("Erreur lors de la connexion à la base de données: " + e.getMessage());
} }
GameOver gameOverPanel = new GameOver(gameFrame, currentScore, database); GameOver gameOverPanel = new GameOver(gameFrame, currentScore, database,Options.mainMenu);
gameFrame.getContentPane().removeAll(); // Supprime l'ancien contenu gameFrame.getContentPane().removeAll(); // Supprime l'ancien contenu
gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver
gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre
@@ -344,7 +345,6 @@ public class Board extends JPanel{
} }
} }
public void autoReFocus(Tile newlyPlacedTile) { public void autoReFocus(Tile newlyPlacedTile) {
if (Options.AUTO_FOCUS) { if (Options.AUTO_FOCUS) {
// Récupérer les coordonnées de la nouvelle tuile // Récupérer les coordonnées de la nouvelle tuile

View File

@@ -1,6 +1,8 @@
package fr.monkhanny.dorfromantik.game; package fr.monkhanny.dorfromantik.game;
import fr.monkhanny.dorfromantik.utils.Database; import fr.monkhanny.dorfromantik.utils.Database;
import fr.monkhanny.dorfromantik.gui.MainMenu;
import fr.monkhanny.dorfromantik.Main;
import fr.monkhanny.dorfromantik.Options; import fr.monkhanny.dorfromantik.Options;
import fr.monkhanny.dorfromantik.enums.Fonts; import fr.monkhanny.dorfromantik.enums.Fonts;
@@ -15,9 +17,11 @@ public class GameOver extends JPanel {
private JFrame gameFrame; private JFrame gameFrame;
private int finalScore; private int finalScore;
private Database database; private Database database;
private MainMenu mainMenu;
public GameOver(JFrame gameFrame, int finalScore, Database database) { public GameOver(JFrame gameFrame, int finalScore, Database database, MainMenu mainMenu) {
this.gameFrame = gameFrame; this.gameFrame = gameFrame;
this.mainMenu = mainMenu;
this.finalScore = finalScore; this.finalScore = finalScore;
this.database = database; this.database = database;
@@ -213,10 +217,9 @@ public class GameOver extends JPanel {
} }
// Fermer la fenêtre de jeu // Fermer la fenêtre de jeu
gameFrame.setVisible(false); Main.resetGame();
} }
}); });
return inputPanel; return inputPanel;
} }

View File

@@ -36,5 +36,9 @@ public class ScoreManager {
calculateScore(); calculateScore();
} }
// Réinitialiser le score
public void resetScore() {
currentScore = 0;
}
} }