From 6de8ca830e6dc7d34d1c2505a43ac3aeee399f21 Mon Sep 17 00:00:00 2001 From: tit-exe Date: Sat, 28 Mar 2026 07:43:33 +0100 Subject: [PATCH] ajout de temps de jeu dans l'historique + commentaires --- linea_bdd.db | Bin 20480 -> 20480 bytes src/GestionnaireFinDePartie.java | 7 ++++--- src/GestionnaireHistorique.java | 15 ++++++++++----- src/Jeu.java | 5 +++++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/linea_bdd.db b/linea_bdd.db index 6f83958bddc4c3869481a7927537a7f3c303da94..47c8e38d4d199305bb95ea5649ac4eb66bf6fccf 100644 GIT binary patch delta 170 zcmZozz}T>Wae}mqH%6QFR8rvQA#05DTv(1AimGKJPPL$Bm6=dAJ&t zSlGoC6&aiOC#Uc>O6n-2loq9?DtP*ZxVpOrDY&@0IfnX#C>U&h%FCz3$iDfDzJP!b zJHIsp{}=wN{M-1a^H=l7@LO+I6j0??lxJsSkY?0nbj-`otISQ6FtX4$FxEFRFfvmx OFt;+YkeD3fzXSjSj3&ka delta 109 zcmZozz}T>Wae}m{R zIa%1n6%`p9V<&s_Hg0~(%csQ1w)u;`fPerSe+&cv7yhgK+xVyRSM$dJHF)q(j`3dt E0E4g?^Z)<= diff --git a/src/GestionnaireFinDePartie.java b/src/GestionnaireFinDePartie.java index 221096f..88aa166 100644 --- a/src/GestionnaireFinDePartie.java +++ b/src/GestionnaireFinDePartie.java @@ -17,14 +17,15 @@ public class GestionnaireFinDePartie { public void declencherGameOver(ZoneDessin ecran, String pseudo, int score) { estGameOver = true; - ecran.arreter(); + ecran.arreter(); // on fige tout, plus d'animation labGameOver.setVisible(true); - //sauvegarde dans le top score seulement si ya un pseudo + // on enregistre dans le classement seulement si y'a un pseudo if (pseudo != null && !pseudo.isEmpty()) { gestionnaireBDD.sauvegarderScore(pseudo, score); } - gestionnaireHistorique.sauvegarderPartie(pseudo, score); + // score == durée en secondes (1 pt par seconde, voir Jeu.actionPerformed) + gestionnaireHistorique.sauvegarderPartie(pseudo, score, score); } public boolean estGameOver() { diff --git a/src/GestionnaireHistorique.java b/src/GestionnaireHistorique.java index 7f991b6..c7402b9 100644 --- a/src/GestionnaireHistorique.java +++ b/src/GestionnaireHistorique.java @@ -17,10 +17,11 @@ public class GestionnaireHistorique { } } - public void sauvegarderPartie(String nom, int points) { + // enregistre la partie peu importe si le joueur a mis un pseudo ou pas + public void sauvegarderPartie(String nom, int points, int duree) { String pseudoFinal = (nom == null || nom.trim().isEmpty()) ? "Anonyme" : nom.trim(); String dateActuelle = new SimpleDateFormat("dd/MM/yyyy HH:mm").format(new Date()); - String sql = "INSERT INTO historique(nom, points, date_partie) VALUES(?, ?, ?)"; + String sql = "INSERT INTO historique(nom, points, date_partie, duree) VALUES(?, ?, ?, ?)"; try (Connection conn = DriverManager.getConnection(URL); PreparedStatement pstmt = conn.prepareStatement(sql)) { @@ -28,6 +29,7 @@ public class GestionnaireHistorique { pstmt.setString(1, pseudoFinal); pstmt.setInt(2, points); pstmt.setString(3, dateActuelle); + pstmt.setInt(4, duree); pstmt.executeUpdate(); } catch (SQLException e) { @@ -36,9 +38,11 @@ public class GestionnaireHistorique { } public DefaultTableModel getModeleTableau() { - String[] nomsColonnes = { "Partie N°", "Date", "Pseudo", "Score" }; + // colonnes affichées dans la popup historique du menu + String[] nomsColonnes = { "Partie N°", "Date", "Pseudo", "Score", "Durée (s)" }; DefaultTableModel modele = new DefaultTableModel(nomsColonnes, 0); - String sql = "SELECT id, date_partie, nom, points FROM historique ORDER BY id DESC"; + // les plus récentes en haut + String sql = "SELECT id, date_partie, nom, points, duree FROM historique ORDER BY id DESC"; try (Connection conn = DriverManager.getConnection(URL); Statement stmt = conn.createStatement(); @@ -53,7 +57,8 @@ public class GestionnaireHistorique { rs.getInt("id"), dateRecup, rs.getString("nom"), - rs.getInt("points") + rs.getInt("points"), + rs.getInt("duree") }; modele.addRow(ligne); } diff --git a/src/Jeu.java b/src/Jeu.java index de285c4..82e9ae4 100644 --- a/src/Jeu.java +++ b/src/Jeu.java @@ -159,6 +159,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { ecran.demarrer(); if (horloge == null) { + // 40ms par frame, environ 25fps horloge = new Timer(40, this); } horloge.start(); @@ -188,6 +189,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { ecran.traiterBoucleAnimation(); compteurFrames++; + // 25 frames à 40ms = 1 seconde, donc score ≈ durée en secondes if (compteurFrames >= 25) { score++; compteurFrames = 0; @@ -202,6 +204,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { } if (tousMotrs) { + // tous les joueurs sont morts, on déclenche le game over estGameOver = true; gestionnaireFinDePartie.declencherGameOver(ecran, pseudo, (int) score); } @@ -226,6 +229,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { horloge.stop(); } + // on repart de zéro : nouvelle ligne, nouveaux joueurs gestionnaireNiveau.reinitialiser(); lili = new Ligne(new NoiseGenerator(0), gestionnaireNiveau); joueurs.clear(); @@ -240,6 +244,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { @Override public void mousePressed(MouseEvent e) { + // un clic n'importe où à la fin de la partie pour revenir au menu if (estGameOver) { retourMenu(); }