This commit is contained in:
MOISOIU Stefan-Mihai
2026-03-04 15:00:31 +01:00
5 changed files with 84 additions and 5 deletions

View File

@@ -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();
}
}

View File

@@ -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("<html><h3>" + (int) score + "</h3></html>");
labScore.setText("<html><h3>Score : " + (int) score + " | Vies : " + vies + "</h3></html>");
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;
}
}

View File

@@ -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);
}
});