From eb1ecdf405cad779da1b295a3bfab1440e2f9b6b Mon Sep 17 00:00:00 2001 From: matthew-java Date: Tue, 10 Mar 2026 16:23:20 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20des=20parametres=20dans=20la=20base=20d?= =?UTF-8?q?e=20donn=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/linea/GestionnaireBDD.java | 104 +++++++++++++++++++-------------- src/linea/Jeu.java | 8 +-- 2 files changed, 64 insertions(+), 48 deletions(-) diff --git a/src/linea/GestionnaireBDD.java b/src/linea/GestionnaireBDD.java index 9999ce3..36bca5b 100644 --- a/src/linea/GestionnaireBDD.java +++ b/src/linea/GestionnaireBDD.java @@ -1,80 +1,96 @@ package linea; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; public class GestionnaireBDD { private Connection conn = null; - private static final String DB_FILE = "linea_scores.db"; - + // On utilise une base de données SQLite, qui est un simple fichier. + private final String DB_URL = "jdbc:sqlite:linea.db"; public GestionnaireBDD() { try { - // URL de connexion pour SQLite - String url = "jdbc:sqlite:" + DB_FILE; - // Établir la connexion - conn = DriverManager.getConnection(url); + // Le pilote JDBC pour SQLite doit être ajouté à votre projet. + Class.forName("org.sqlite.JDBC"); + conn = DriverManager.getConnection(DB_URL); System.out.println("Connexion à la base de données SQLite établie."); - // S'assurer que la table pour les scores existe - creerTableSiNecessaire(); } catch (SQLException e) { - System.err.println("Erreur de connexion à la base de données : " + e.getMessage()); + System.out.println("Erreur de connexion à la BDD : " + e.getMessage()); + } catch (ClassNotFoundException e) { + System.out.println("Le pilote JDBC SQLite n'a pas été trouvé. Veuillez l'ajouter à votre projet."); } } - - private void creerTableSiNecessaire() { - String sql = "CREATE TABLE IF NOT EXISTS parties (\n" - + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n" - + " duree_secondes INTEGER NOT NULL,\n" - + " campagne_id INTEGER NOT NULL,\n" - + " difficulte_id INTEGER NOT NULL,\n" - + " score INTEGER NOT NULL,\n" - + " date_partie TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n" - + ");"; - - // 'try-with-resources' assure que le Statement est bien fermé + public void initialiserBaseDeDonnees() { + // Crée les tables si elles n'existent pas et insère les données de difficulté. try (Statement stmt = conn.createStatement()) { - stmt.execute(sql); + // Table pour les difficultés + stmt.execute("CREATE TABLE IF NOT EXISTS difficultes (" + + "id_difficulte INT PRIMARY KEY, " + + "vitesse REAL NOT NULL, " + + "pente REAL NOT NULL)"); + + // Table pour les scores des parties + stmt.execute("CREATE TABLE IF NOT EXISTS parties (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + + "duree INT, " + + "campagne_id INT, " + + "difficulte_id INT, " + + "score INT, " + + "date_partie TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); + + // Insertion des valeurs de difficulté par défaut + // L'instruction "INSERT OR IGNORE" est spécifique à SQLite et évite les doublons. + stmt.execute("INSERT OR IGNORE INTO difficultes (id_difficulte, vitesse, pente) VALUES (1, 6, 20);"); + stmt.execute("INSERT OR IGNORE INTO difficultes (id_difficulte, vitesse, pente) VALUES (2, 7, 45);"); + stmt.execute("INSERT OR IGNORE INTO difficultes (id_difficulte, vitesse, pente) VALUES (3, 8, 70);"); + } catch (SQLException e) { - System.err.println("Erreur lors de la création de la table : " + e.getMessage()); + System.out.println("Erreur lors de l'initialisation de la base de données : " + e.getMessage()); } } - - public void enregistrerPartie(int dureePartie, int idCampagne, int idDifficulte, int score) { - if (conn == null) { - System.err.println("Impossible d'enregistrer la partie : pas de connexion à la BDD."); - return; - } - - String sql = "INSERT INTO parties(duree_secondes, campagne_id, difficulte_id, score) VALUES(?,?,?,?)"; + public double[] getParametresDifficulte(int difficulteId) { + // Par défaut (si non trouvé), on retourne les valeurs pour la difficulté 1. + double[] params = {6.0, 20.0}; + String sql = "SELECT vitesse, pente FROM difficultes WHERE id_difficulte = ?"; + try (PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setInt(1, difficulteId); + ResultSet rs = pstmt.executeQuery(); + + if (rs.next()) { + params[0] = rs.getDouble("vitesse"); + params[1] = rs.getDouble("pente"); + } + } catch (SQLException e) { + System.out.println("Erreur lors de la récupération des paramètres de difficulté : " + e.getMessage()); + } + return params; + } + + public void enregistrerPartie(int dureePartie, int idCampagneActive, int difficulteActive, int score) { + String sql = "INSERT INTO parties(duree, campagne_id, difficulte_id, score) VALUES(?,?,?,?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, dureePartie); - pstmt.setInt(2, idCampagne); - pstmt.setInt(3, idDifficulte); + pstmt.setInt(2, idCampagneActive); + pstmt.setInt(3, difficulteActive); pstmt.setInt(4, score); pstmt.executeUpdate(); - System.out.println("Partie enregistrée avec succès ! Score : " + score); + System.out.println("Partie enregistrée avec succès."); } catch (SQLException e) { - System.err.println("Erreur lors de l'enregistrement de la partie : " + e.getMessage()); + System.out.println("Erreur lors de l'enregistrement de la partie : " + e.getMessage()); } } - public void fermerConnexion() { try { - if (conn != null && !conn.isClosed()) { + if (conn != null) { conn.close(); - System.out.println("Connexion à la base de données fermée."); + System.out.println("Connexion BDD fermée."); } } catch (SQLException ex) { - System.err.println("Erreur lors de la fermeture de la connexion BDD : " + ex.getMessage()); + System.out.println(ex.getMessage()); } } } \ No newline at end of file diff --git a/src/linea/Jeu.java b/src/linea/Jeu.java index 195c40a..0cceb0c 100644 --- a/src/linea/Jeu.java +++ b/src/linea/Jeu.java @@ -45,7 +45,7 @@ public class Jeu implements KeyListener, ActionListener { menuCampagne = new MenuCampagne(this); // Initialisation initiale - resetPartie(); + resetPartie(6,20); // On ajoute l'action au bouton "Retour" de la ZoneDessin (Game Over) ecran.btnRetour.addActionListener(new ActionListener() { @@ -106,14 +106,13 @@ public class Jeu implements KeyListener, ActionListener { } public void lancerPartie() { - resetPartie(); layout.show(conteneurPrincipal, "JEU"); ecran.setFocusable(true); ecran.requestFocusInWindow(); horloge.start(); } - private void resetPartie() { + public void resetPartie(double vitesse, double pente) { if(horloge != null) { horloge.stop(); } @@ -123,7 +122,7 @@ public class Jeu implements KeyListener, ActionListener { demiCercleAvant = new Cercle(90, -180); demiCercleArriere = new Cercle(90, 180); - laligne = new Ligne(); + laligne = new Ligne(vitesse, pente); demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f)); demiCercleAvant.setCouleur(new Color(1.0f, 0.2f, 0.2f)); @@ -139,6 +138,7 @@ public class Jeu implements KeyListener, ActionListener { labScore.setText("

score : 0

"); } + @Override public void actionPerformed(ActionEvent e) { ecran.traiterBoucleAnimation();