diff --git a/.idea/libraries/sqlite_jdbc_3_45_1_0.xml b/.idea/libraries/sqlite_jdbc_3_45_1_0.xml
new file mode 100644
index 0000000..807f484
--- /dev/null
+++ b/.idea/libraries/sqlite_jdbc_3_45_1_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projet-dev.iml b/projet-dev.iml
index d851184..80415a1 100644
--- a/projet-dev.iml
+++ b/projet-dev.iml
@@ -7,5 +7,6 @@
+
\ No newline at end of file
diff --git a/src/GestionnaireScore.java b/src/GestionnaireScore.java
new file mode 100644
index 0000000..5b937b7
--- /dev/null
+++ b/src/GestionnaireScore.java
@@ -0,0 +1,51 @@
+package linea;
+
+import java.sql.*;
+
+public class GestionnaireScore {
+ private String url = "jdbc:sqlite:linea_scores.db";
+
+ public GestionnaireScore() {
+ // Au démarrage, on crée la table si elle n'existe pas
+ try (Connection conn = DriverManager.getConnection(url)) {
+ String sql = "CREATE TABLE IF NOT EXISTS scores (" +
+ "id INTEGER PRIMARY KEY AUTOINCREMENT," +
+ "nom TEXT," +
+ "points INTEGER);";
+ Statement stmt = conn.createStatement();
+ stmt.execute(sql);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void sauvegarderScore(String nom, int points) {
+ String sql = "INSERT INTO scores(nom, points) VALUES(?, ?)";
+ try (Connection conn = DriverManager.getConnection(url);
+ PreparedStatement pstmt = conn.prepareStatement(sql)) {
+ pstmt.setString(1, nom);
+ pstmt.setInt(2, points);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public String getTopScores() {
+ StringBuilder sb = new StringBuilder("--- TOP 10 SCORES ---\n");
+ String sql = "SELECT nom, points FROM scores ORDER BY points DESC LIMIT 10";
+
+ try (Connection conn = DriverManager.getConnection(url);
+ Statement stmt = conn.createStatement();
+ ResultSet rs = stmt.executeQuery(sql)) {
+
+ while (rs.next()) {
+ sb.append(rs.getString("nom")).append(" : ")
+ .append(rs.getInt("points")).append("\n");
+ }
+ } catch (SQLException e) {
+ return "Erreur lors de la lecture des scores.";
+ }
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/src/Jeu.java b/src/Jeu.java
index bb8c03c..9705bb0 100644
--- a/src/Jeu.java
+++ b/src/Jeu.java
@@ -28,6 +28,9 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
protected double score = 1;
protected JLabel labScore;
+ protected int vies = 3;
+
+ protected GestionnaireScore gestionnaireBDD = new GestionnaireScore();
protected int compteurFrames = 0;
protected boolean enCollision = false;
@@ -39,6 +42,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
protected JFrame fenetre;
protected MenuPrincipal menu;
+
public Jeu() {
labScore = new JLabel();
labScore.setForeground(Color.WHITE);
@@ -114,6 +118,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
score = 1;
compteurFrames = 0;
+ vies = 3;
enCollision = false;
estGameOver = false;
compteurInvincible = 0;
@@ -149,22 +154,27 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
} else {
if (demiCercleArriere.VerifierCollision(lili)) {
if (enCollision == false) {
- score = score - 5;
+ vies = vies - 1; // La nouvelle logique : on perd 1 vie
enCollision = true;
+ compteurInvincible = 0;
}
} else {
enCollision = false;
}
}
- if (score <= 0) {
- score = 0;
+ if (vies <= 0) {
+ vies = 0;
estGameOver = true;
ecran.arreter();
labGameOver.setVisible(true);
+
+ if (pseudo != null && !pseudo.isEmpty()) {
+ gestionnaireBDD.sauvegarderScore(pseudo, (int) score);
+ }
}
- labScore.setText("
" + (int) score + "
");
+ labScore.setText("Score : " + (int) score + " | Vies : " + vies + "
");
demiCercleArriere.ResterDansLigne(lili);
demiCercleAvant.ResterDansLigne(lili);
@@ -208,4 +218,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
@Override
public void mouseExited(MouseEvent e) {
}
+ public GestionnaireScore getGestionnaireBDD() {
+ return gestionnaireBDD;
+ }
}
diff --git a/src/MenuPrincipal.java b/src/MenuPrincipal.java
index 807e856..716f04f 100644
--- a/src/MenuPrincipal.java
+++ b/src/MenuPrincipal.java
@@ -47,7 +47,12 @@ public class MenuPrincipal {
boutonClassement.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- JOptionPane.showMessageDialog(fenetre, "TOP SCORES", "Classement", JOptionPane.INFORMATION_MESSAGE);
+
+ // 1. On récupère les scores depuis la BDD via l'objet 'jeu'
+ String scores = jeu.getGestionnaireBDD().getTopScores();
+
+ // 2. On affiche le résultat dans la petite fenêtre popup
+ JOptionPane.showMessageDialog(fenetre, scores, "Meilleurs Scores", JOptionPane.INFORMATION_MESSAGE);
}
});