From 3f06f179a52c21fda64b4b4e59317a2c1181acce Mon Sep 17 00:00:00 2001 From: Moncef STITI Date: Sun, 24 Nov 2024 00:46:22 +0100 Subject: [PATCH] Ajout de la fin d'une partie avec ajout dans la BDD --- .../fr/monkhanny/dorfromantik/Options.java | 2 + .../controller/GameModeController.java | 5 +- .../fr/monkhanny/dorfromantik/game/Board.java | 15 ++++- .../monkhanny/dorfromantik/game/GameOver.java | 64 +++++++++++++++++++ .../dorfromantik/utils/Database.java | 14 ++++ 5 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java diff --git a/TestV2/src/fr/monkhanny/dorfromantik/Options.java b/TestV2/src/fr/monkhanny/dorfromantik/Options.java index f4e7a67..f98cbc4 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/Options.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/Options.java @@ -59,4 +59,6 @@ public class Options { public static boolean FULL_SCREEN = false; public static final float SCORE_SIZE = 30f; + + public static long SEED = 0; } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java b/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java index 223a255..aa4a86b 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java @@ -67,7 +67,8 @@ public class GameModeController implements ActionListener { private long getSeedFromDatabaseByName(String modeName) { try { - return this.database.getSeedByName(modeName); + Options.SEED = this.database.getSeedByName(modeName); + return Options.SEED; } catch (SQLException e) { e.printStackTrace(); return -1; // Retourner une valeur par défaut si une erreur survient @@ -76,8 +77,8 @@ public class GameModeController implements ActionListener { private void addCustomSeedToDatabase(String name, long seed) { try { + Options.SEED = seed; this.database.addCustomSeed(name, seed); - System.out.println("Seed custom ajoutée avec succès à la base de données."); } catch (SQLException e) { e.printStackTrace(); System.err.println("Erreur lors de l'ajout de la seed custom."); diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java index 1451181..0816607 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java @@ -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.utils.Database; import java.util.ArrayList; import java.util.List; @@ -46,6 +47,7 @@ public class Board extends JPanel{ private Point mousePosition; private ScoreManager scoreManager; private int currentScore; + private Database database; // Constructeur avec seed public Board(JFrame gameFrame, long seed) { @@ -325,12 +327,19 @@ public class Board extends JPanel{ // Initialiser une nouvelle nextTile pour le prochain tour initializeNextTile(); - } } else { - // NOMBRE DE TUILES MAXIMUM ATTEINT - // FIN DE LA PARTIE + try { + this.database = new Database(); + } 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); + gameFrame.getContentPane().removeAll(); // Supprime l'ancien contenu + gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver + gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre + gameFrame.repaint(); // Repaint pour afficher les modifications } } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java b/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java new file mode 100644 index 0000000..a8afaa4 --- /dev/null +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java @@ -0,0 +1,64 @@ +package fr.monkhanny.dorfromantik.game; + +import fr.monkhanny.dorfromantik.utils.Database; +import fr.monkhanny.dorfromantik.Options; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class GameOver extends JPanel { + private JFrame gameFrame; + private int finalScore; + private Database database; + + public GameOver(JFrame gameFrame, int finalScore, Database database) { + this.gameFrame = gameFrame; + this.finalScore = finalScore; + this.database = database; + + setLayout(new BorderLayout()); + + // Message de fin de jeu + JLabel messageLabel = new JLabel("Partie terminée ! Votre score est : " + finalScore, JLabel.CENTER); + messageLabel.setFont(new Font("Arial", Font.BOLD, 24)); + add(messageLabel, BorderLayout.CENTER); + + // Panneau pour entrer le pseudo + JPanel inputPanel = new JPanel(); + inputPanel.setLayout(new FlowLayout()); + JLabel nameLabel = new JLabel("Entrez votre pseudo :"); + JTextField nameField = new JTextField(20); + JButton submitButton = new JButton("Soumettre"); + + inputPanel.add(nameLabel); + inputPanel.add(nameField); + inputPanel.add(submitButton); + add(inputPanel, BorderLayout.SOUTH); + + // Action pour soumettre le pseudo et enregistrer dans la base de données + submitButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String username = nameField.getText().trim(); + if (username.isEmpty()) { + username = "Anonyme"; // Si aucun pseudo n'est donné, on utilise "Anonyme" + } + + // Enregistrer le score dans la base de données + try { + long seriesId = Options.SEED; // Remplacer par l'ID de la série ou du mode de jeu + database.addScore(username, seriesId, finalScore); + JOptionPane.showMessageDialog(gameFrame, "Score enregistré avec succès !"); + } catch (Exception ex) { + JOptionPane.showMessageDialog(gameFrame, "Erreur lors de l'enregistrement du score : " + ex.getMessage()); + } + + // Retourner au menu principal ou à une autre vue après la fin du jeu + gameFrame.setVisible(false); + // Ajoutez ici le code pour retourner à l'écran principal, ou démarrer une nouvelle partie. + } + }); + } +} diff --git a/TestV2/src/fr/monkhanny/dorfromantik/utils/Database.java b/TestV2/src/fr/monkhanny/dorfromantik/utils/Database.java index f5479f3..698cc45 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/utils/Database.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/utils/Database.java @@ -80,6 +80,20 @@ public class Database { return seed; } + public void addScore(String username, long seriesId, int score) throws SQLException { + String insertQuery = "INSERT INTO Scores (username, series_id, score) VALUES (?, ?, ?)"; + try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) { + stmt.setString(1, username); + stmt.setLong(2, seriesId); + stmt.setInt(3, score); + stmt.executeUpdate(); + } catch (SQLException e) { + System.err.println("Erreur lors de l'ajout du score: " + e.getMessage()); + throw e; + } + } + + public void addCustomSeed(String name, long customSeed) throws SQLException { // Vérifier si la seed existe déjà String checkQuery = "SELECT COUNT(*) FROM Series WHERE series_id = ?";