diff --git a/src/linea/GestionnaireBDD.java b/src/linea/GestionnaireBDD.java index 7faad59..75d5e33 100644 --- a/src/linea/GestionnaireBDD.java +++ b/src/linea/GestionnaireBDD.java @@ -169,6 +169,32 @@ public class GestionnaireBDD { return data.toArray(new Object[0][]); } + public Object[][] getHistoriqueParties() { + String sql = "SELECT u.identifiant, p.date_partie, p.score, p.campagne_id, p.difficulte_id, p.duree " + + "FROM parties p " + + "JOIN utilisateurs u ON p.utilisateur_id = u.id " + + "ORDER BY p.date_partie DESC"; + List data = new ArrayList<>(); + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + Object[] row = { + rs.getString("identifiant"), + new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm").format(rs.getTimestamp("date_partie")), + rs.getInt("score"), + rs.getInt("campagne_id"), + rs.getInt("difficulte_id"), + rs.getInt("duree") + }; + data.add(row); + } + } catch (SQLException e) { + System.out.println("Erreur lors de la récupération de l'historique : " + e.getMessage()); + } + return data.toArray(new Object[0][]); + } + + public void fermerConnexion() { try { if (conn != null) { diff --git a/src/linea/Jeu.java b/src/linea/Jeu.java index 1dc9fe8..e015738 100644 --- a/src/linea/Jeu.java +++ b/src/linea/Jeu.java @@ -17,6 +17,7 @@ public class Jeu implements KeyListener, ActionListener { protected MenuPrincipal menu; protected MenuCampagne menuCampagne; protected MenuLeaderboard menuLeaderboard; + protected MenuHistorique menuHistorique; protected Cercle demiCercleAvant; protected Cercle demiCercleArriere; @@ -57,6 +58,7 @@ public class Jeu implements KeyListener, ActionListener { menu = new MenuPrincipal(this); menuCampagne = new MenuCampagne(this); menuLeaderboard = new MenuLeaderboard(this); + menuHistorique = new MenuHistorique(this); // Initialisation initiale resetPartie(6, 20); @@ -75,6 +77,7 @@ public class Jeu implements KeyListener, ActionListener { conteneurPrincipal.add(menu, "MENU"); conteneurPrincipal.add(menuCampagne, "CAMPAGNE"); conteneurPrincipal.add(menuLeaderboard, "LEADERBOARD"); + conteneurPrincipal.add(menuHistorique, "HISTORIQUE"); conteneurPrincipal.add(ecran, "JEU"); fenetre.setContentPane(conteneurPrincipal); @@ -104,6 +107,11 @@ public class Jeu implements KeyListener, ActionListener { layout.show(conteneurPrincipal, "LEADERBOARD"); } + public void afficherMenuHistorique() { + menuHistorique.rafraichirHistorique(); + layout.show(conteneurPrincipal, "HISTORIQUE"); + } + public void afficherMenuCampagne() { layout.show(conteneurPrincipal, "CAMPAGNE"); } diff --git a/src/linea/MenuHistorique.java b/src/linea/MenuHistorique.java new file mode 100644 index 0000000..1a3aaca --- /dev/null +++ b/src/linea/MenuHistorique.java @@ -0,0 +1,58 @@ +package linea; + +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import java.awt.*; + +public class MenuHistorique extends JPanel { + private JTable tableHistorique; + private final Jeu jeu; + + public MenuHistorique(Jeu jeu) { + this.jeu = jeu; + setLayout(new BorderLayout(10, 10)); + setBackground(new Color(45, 45, 45)); + + JLabel titre = new JLabel("HISTORIQUE DES PARTIES", SwingConstants.CENTER); + titre.setForeground(Color.WHITE); + titre.setFont(new Font("SansSerif", Font.BOLD, 40)); + add(titre, BorderLayout.NORTH); + + // Configuration du tableau + tableHistorique = new JTable(); + tableHistorique.setFont(new Font("SansSerif", Font.PLAIN, 16)); + tableHistorique.setRowHeight(25); + tableHistorique.setBackground(new Color(60, 60, 60)); + tableHistorique.setForeground(Color.WHITE); + tableHistorique.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 18)); + tableHistorique.getTableHeader().setBackground(new Color(30, 30, 30)); + tableHistorique.getTableHeader().setForeground(Color.WHITE); + + JScrollPane scrollPane = new JScrollPane(tableHistorique); + scrollPane.getViewport().setBackground(new Color(45, 45, 45)); + scrollPane.setBorder(BorderFactory.createEmptyBorder(20, 50, 20, 50)); + add(scrollPane, BorderLayout.CENTER); + + // Bouton de retour + JButton btnRetour = new JButton("Retour"); + btnRetour.setFont(new Font("SansSerif", Font.PLAIN, 18)); + btnRetour.addActionListener(e -> jeu.afficherMenuPrincipal()); + + JPanel southPanel = new JPanel(); + southPanel.setBackground(new Color(45, 45, 45)); + southPanel.add(btnRetour); + add(southPanel, BorderLayout.SOUTH); + } + + public void rafraichirHistorique() { + Object[][] data = jeu.bdd.getHistoriqueParties(); + String[] columnNames = {"Identifiant", "Date", "Score", "Campagne", "Difficulté", "Durée (s)"}; + // Utilisation d'un DefaultTableModel pour rendre les cellules non éditables + tableHistorique.setModel(new DefaultTableModel(data, columnNames) { + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }); + } +} diff --git a/src/linea/MenuPrincipal.java b/src/linea/MenuPrincipal.java index df45469..910c793 100644 --- a/src/linea/MenuPrincipal.java +++ b/src/linea/MenuPrincipal.java @@ -7,6 +7,7 @@ public class MenuPrincipal extends JPanel { private JButton btnPlay; private JButton btnCampaign; private JButton btnLeaderboard; + private JButton btnHistorique; private JButton btnQuit; public MenuPrincipal(Jeu jeu) { @@ -23,6 +24,7 @@ public class MenuPrincipal extends JPanel { btnPlay = creerBouton("PLAY"); btnCampaign = creerBouton("CAMPAGNES"); btnLeaderboard = creerBouton("LEADERBOARD"); + btnHistorique = creerBouton("HISTORIQUE"); btnQuit = creerBouton("QUIT"); // Actions @@ -32,6 +34,9 @@ public class MenuPrincipal extends JPanel { btnCampaign.addActionListener(e -> jeu.afficherMenuCampagne()); btnLeaderboard.addActionListener(e -> jeu.afficherLeaderboard()); + + btnHistorique.addActionListener(e->jeu.afficherMenuHistorique()); + btnQuit.addActionListener(e -> System.exit(0)); // Mise en page (espacement vertical) @@ -44,6 +49,8 @@ public class MenuPrincipal extends JPanel { add(Box.createRigidArea(new Dimension(0, 15))); add(btnLeaderboard); add(Box.createRigidArea(new Dimension(0, 15))); + add(btnHistorique); + add(Box.createRigidArea(new Dimension(0, 15))); add(btnQuit); add(Box.createVerticalGlue()); }