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.gui.GameModeSelectionPanel;
import javax.swing.JFrame;
/**
@@ -23,62 +22,89 @@ import javax.swing.JFrame;
* @see MainMenuResizeController
*/
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
JFrame gameFrame = new JFrame("Jeu - Dorfromantik");
private static JFrame gameModeFrame;
private static JFrame gameFrame;
private static JFrame settingsFrame;
private static JFrame howToPlayFrame;
private static JFrame rewardsFrame;
// Créer la fenêtre des paramètres
JFrame settingsFrame = new JFrame("Paramètres - Dorfromantik");
// Variable statique pour savoir si la musique a été jouée
private static boolean isMusicPlayed = false;
// Créer la fenêtre du tutoriel
JFrame howToPlayFrame = new JFrame("Comment jouer ? - Dorfromantik");
// Fonction pour réinitialiser tout le jeu
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
JFrame rewardsFrame = new JFrame("Récompenses - Dorfromantik");
// 2. Réinitialiser les variables globales ou statiques si nécessaire
Options.mainMenu = new MainMenu(); // Réinitialiser le menu principal
// Menu principal
MusicPlayer.loadMusic(Musics.MAIN_MENU_MUSIC);
MusicPlayer.playMusic();
MainMenu mainMenu = new MainMenu();
@SuppressWarnings("unused")
MainMenuResizeController MainMenuResizeController = new MainMenuResizeController(mainMenu);
@SuppressWarnings("unused")
MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameModeFrame,gameFrame, rewardsFrame);
// 3. Lancer la musique uniquement si ce n'est pas déjà fait
if (!isMusicPlayed) {
MusicPlayer.loadMusic(Musics.MAIN_MENU_MUSIC); // Recharger la musique du menu principal
MusicPlayer.playMusic(); // Reprendre la musique
isMusicPlayed = true; // Marquer la musique comme jouée
}
// 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");
// Re-créer et réinitialiser les panels et les contrôleurs
MainMenuResizeController mainMenuResizeController = new MainMenuResizeController(Options.mainMenu);
MainMenuButtonController mainMenuButtonController = new MainMenuButtonController(Options.mainMenu, settingsFrame, howToPlayFrame, gameModeFrame, gameFrame, rewardsFrame);
// Fenêtre des paramètres
CloseWindowListener settingsWindowListener = new CloseWindowListener(mainMenu, settingsFrame);
SettingsPanel settingsPanel = new SettingsPanel(mainMenu, settingsFrame);
CloseWindowListener settingsWindowListener = new CloseWindowListener(Options.mainMenu, settingsFrame);
SettingsPanel settingsPanel = new SettingsPanel(Options.mainMenu, settingsFrame);
settingsFrame.addWindowListener(settingsWindowListener);
settingsFrame.add(settingsPanel);
// Fenêtre du tutoriel
CloseWindowListener howToPlayWindowListener = new CloseWindowListener(mainMenu, howToPlayFrame);
TutorialController tutorialController = new TutorialController(mainMenu, howToPlayFrame);
CloseWindowListener howToPlayWindowListener = new CloseWindowListener(Options.mainMenu, howToPlayFrame);
TutorialController tutorialController = new TutorialController(Options.mainMenu, howToPlayFrame);
howToPlayFrame.addWindowListener(howToPlayWindowListener);
howToPlayFrame.add(tutorialController.getTutorialPanel());
// Fenêtre du choix des modes de jeu
CloseWindowListener gameModeWindowListener = new CloseWindowListener(mainMenu, gameModeFrame);
GameModeController gameModeController = new GameModeController(gameFrame,mainMenu);
CloseWindowListener gameModeWindowListener = new CloseWindowListener(Options.mainMenu, gameModeFrame);
GameModeController gameModeController = new GameModeController(gameFrame, Options.mainMenu, gameModeFrame);
GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController);
gameModeFrame.addWindowListener(gameModeWindowListener);
gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel);
gameModeFrame.add(gameModeSelectionPanel);
// Fenêtre des récompenses
CloseWindowListener rewardsWindowListener = new CloseWindowListener(mainMenu, rewardsFrame);
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.Dimension;
import fr.monkhanny.dorfromantik.gui.MainMenu;
public class Options {
@@ -54,11 +55,15 @@ public class Options {
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 final float SCORE_SIZE = 30f;
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 MainMenu mainMenu;
private Database database;
private JFrame gameModeFrame;
private static Board board;
// Constructeur sans le panneau
public GameModeController(JFrame gameFrame, MainMenu mainMenu) {
public GameModeController(JFrame gameFrame, MainMenu mainMenu, JFrame gameModeFrame) {
this.gameFrame = gameFrame;
this.mainMenu = mainMenu;
this.gameModeFrame = gameModeFrame;
// Connexion à la base de données
try {
@@ -86,18 +89,27 @@ public class GameModeController implements ActionListener {
}
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) {
gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Set frame to full screen
gameFrame.setUndecorated(true);
} else {
Dimension mainMenuSize = this.mainMenu.getSize();
Point mainMenuLocation = this.mainMenu.getLocation();
gameFrame.setSize(mainMenuSize);
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.add(board);
}
public static Board getGameModeBoard() {
return board;
}
}

View File

@@ -95,6 +95,7 @@ public class MainMenuButtonController implements ActionListener {
private void openRecompense() {
adjustFrameDisplay(this.rewardsFrame);
this.mainMenu.setVisible(false);
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.Fonts;
import fr.monkhanny.dorfromantik.enums.TileOrientation;
import fr.monkhanny.dorfromantik.controller.GameModeController;
import fr.monkhanny.dorfromantik.utils.Database;
import java.util.ArrayList;
@@ -335,7 +336,7 @@ public class Board extends JPanel{
} catch (Exception e) {
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().add(gameOverPanel); // Ajoute le GameOver
gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre
@@ -344,7 +345,6 @@ public class Board extends JPanel{
}
}
public void autoReFocus(Tile newlyPlacedTile) {
if (Options.AUTO_FOCUS) {
// Récupérer les coordonnées de la nouvelle tuile

View File

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

View File

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