diff --git a/README.md b/README.md index dbfc160..56ec997 100644 --- a/README.md +++ b/README.md @@ -1,2 +1 @@ -# Projet_Dev_Java - +# Projet_Dev_Java \ No newline at end of file diff --git a/linea/linea/GestionBDD.java b/linea/linea/GestionBDD.java new file mode 100644 index 0000000..cc73131 --- /dev/null +++ b/linea/linea/GestionBDD.java @@ -0,0 +1,96 @@ +package linea; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class GestionBDD { + + private static final String URL = "jdbc:sqlite:score.db"; + + //connexion bdd + private static Connection connecter() throws SQLException { + return DriverManager.getConnection(URL); + } + + //creation de la table score a ca premiere execution + public static void creerTableSiAbsente() { + + String sql = """ + CREATE TABLE IF NOT EXISTS scores ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + score INTEGER NOT NULL, + date TEXT NOT NULL + ); + """; + + try (Connection connexion = connecter(); + Statement statement = connexion.createStatement()) { + + statement.execute(sql); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + // Ajouter un score a la fin de la partie + public static void ajouterScore(int score) { + + String sql = "INSERT INTO scores(score, date) VALUES(?, ?)"; + + try (Connection connexion = connecter(); + PreparedStatement requete = connexion.prepareStatement(sql)) { + + requete.setInt(1, score); + requete.setString(2, java.time.LocalDate.now().toString()); + + requete.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + // Récupérer tous les scores + public static List recupererTousLesScores() { + + List listeScores = new ArrayList<>(); + + String sql = "SELECT score FROM scores ORDER BY date DESC"; + + try (Connection connexion = connecter(); + Statement statement = connexion.createStatement(); + ResultSet resultat = statement.executeQuery(sql)) { + + while (resultat.next()) { + listeScores.add(resultat.getInt("score")); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return listeScores; + } + + // Récupérer le meilleur score + public static int recupererMeilleurScore() { + + String sql = "SELECT MAX(score) AS meilleur FROM scores"; + + try (Connection connexion = connecter(); + Statement statement = connexion.createStatement(); + ResultSet resultat = statement.executeQuery(sql)) { + + if (resultat.next()) { + return resultat.getInt("meilleur"); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return 0; + } +} diff --git a/linea/linea/Jeu.java b/linea/linea/Jeu.java index b720dba..3bb7d53 100644 --- a/linea/linea/Jeu.java +++ b/linea/linea/Jeu.java @@ -130,6 +130,45 @@ public class Jeu implements KeyListener, ActionListener{ fenetre.setVisible(true); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // 🔹 Création du bouton Voir Scores + javax.swing.JButton boutonScores = new javax.swing.JButton("Voir mes scores"); + boutonScores.setBackground(Color.BLACK); // Couleur fond + boutonScores.setForeground(Color.WHITE); // Couleur texte + //boutonScores.setFont(new Font("Arial", Font.BOLD, 14)); // Police + + // Position du bouton + boutonScores.setBounds(300, 20, 160, 30); + + // Action quand on clique + boutonScores.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + java.util.List scores = GestionBDD.recupererTousLesScores(); + int meilleurScore = GestionBDD.recupererMeilleurScore(); + + StringBuilder message = new StringBuilder(); + message.append("Meilleur score : ").append(meilleurScore).append("\n\n"); + message.append("Tous les scores :\n"); + + for (int score : scores) { + message.append(score).append("\n"); + } + + javax.swing.JOptionPane.showMessageDialog( + fenetre, + message.toString(), + "Mes Scores", + javax.swing.JOptionPane.INFORMATION_MESSAGE + ); + } + }); + + // affichier le bouton à l'écran + ecran.setLayout(null); + ecran.add(boutonScores); + + // Démarrage du timer, qui rythmera l'animation horloge = new Timer(40, this); horloge.start(); @@ -166,6 +205,8 @@ public class Jeu implements KeyListener, ActionListener{ this.horloge.stop(); // 1. Arrêter le temps this.ecran.partiePerdue = true; // 2. Signaler à l'écran this.ecran.repaint(); // 3. Forcer l'affichage du texte + + GestionBDD.ajouterScore((int)this.score);// enregistrement du score dans la base de donne } } labScore.setText("

score : " + this.score + "

"); diff --git a/linea/linea/LineaAppli.java b/linea/linea/LineaAppli.java index 6ad9e01..9914ca7 100644 --- a/linea/linea/LineaAppli.java +++ b/linea/linea/LineaAppli.java @@ -7,6 +7,8 @@ public class LineaAppli { //------------------------------------------------------------------------- public static void main(String[] arg) { + GestionBDD.creerTableSiAbsente(); + Jeu jeu = new Jeu(); jeu.demarrer(); diff --git a/score.db b/score.db new file mode 100644 index 0000000..2c6428b Binary files /dev/null and b/score.db differ