diff --git a/linea_bdd.db b/linea_bdd.db index 6f83958..47c8e38 100644 Binary files a/linea_bdd.db and b/linea_bdd.db differ 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(); }