package linea; import java.util.List; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.UIManager; public class LineaAppli { private static String choisirPseudo(DatabaseConnection db, String message, int messageType) { List pseudos = db.getPseudos(); if (pseudos.isEmpty()) { JOptionPane.showMessageDialog(null, "Aucun compte disponible."); return null; } return (String) JOptionPane.showInputDialog( null, message, "Comptes", messageType, null, pseudos.toArray(String[]::new), pseudos.get(0) ); } private static int choisirNiveau() { // Générer les niveaux dynamiquement jusqu'à 100 String[] niveaux = new String[100]; for (int i = 1; i <= 100; i++) { niveaux[i - 1] = genererLabelNiveau(i); } JList list = new JList<>(niveaux); list.setSelectedIndex(0); list.setVisibleRowCount(15); JScrollPane scrollPane = new JScrollPane(list); scrollPane.setPreferredSize(new java.awt.Dimension(350, 350)); int result = JOptionPane.showConfirmDialog( null, scrollPane, "🎮 Sélection du Niveau - Linea", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE ); if (result == JOptionPane.OK_OPTION) { return list.getSelectedIndex() + 1; } return 1; } private static String genererLabelNiveau(int niveau) { if (niveau <= 2) { return "⭐ Niveau " + niveau + " - Facile" + (niveau == 2 ? "+" : ""); } else if (niveau <= 4) { return "⭐⭐ Niveau " + niveau + " - Moyen" + (niveau == 4 ? "+" : ""); } else if (niveau <= 6) { return "⭐⭐⭐ Niveau " + niveau + " - Difficile" + (niveau == 6 ? "+" : ""); } else if (niveau <= 8) { return "⭐⭐⭐⭐ Niveau " + niveau + " - Très Difficile" + (niveau == 8 ? "+" : ""); } else if (niveau <= 10) { return "⭐⭐⭐⭐⭐ Niveau " + niveau + " - Expert" + (niveau == 10 ? "+" : ""); } else if (niveau <= 12) { return "🔥 Niveau " + niveau + " - Cauchemar" + (niveau == 12 ? "+" : ""); } else if (niveau <= 14) { return "🔥 Niveau " + niveau + " - Chaos" + (niveau == 14 ? "+" : ""); } else if (niveau <= 16) { return "💀 Niveau " + niveau + " - Infernal" + (niveau == 16 ? "+" : ""); } else if (niveau <= 18) { return "💀 Niveau " + niveau + " - Apocalypse" + (niveau == 18 ? "+" : ""); } else if (niveau <= 20) { return "⚡ Niveau " + niveau + " - Extrême" + (niveau == 20 ? "+" : ""); } else if (niveau <= 30) { return "⚡ Niveau " + niveau + " - Infini"; } else if (niveau <= 50) { return "∞ Niveau " + niveau + " - Au-delà"; } else { return "🌌 Niveau " + niveau + " - Cosmos"; } } private static Integer menuComptes(DatabaseConnection db) { while (true) { Object[] options = {"Sélectionner", "Créer", "Supprimer", "Retour"}; int choix = JOptionPane.showOptionDialog( null, "Gestion des comptes :", "Comptes", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0] ); if (choix == JOptionPane.CLOSED_OPTION || choix == 3) return null; switch (choix) { case 0 -> { String pseudo = choisirPseudo(db, "Sélectionnez un compte :", JOptionPane.QUESTION_MESSAGE); if (pseudo != null) return db.getIdParPseudo(pseudo); } case 1 -> { String pseudo = JOptionPane.showInputDialog(null, "Nouveau pseudo :"); if (pseudo == null || pseudo.trim().isEmpty()) continue; pseudo = pseudo.trim(); int id = db.getIdParPseudo(pseudo); return id > 0 ? id : db.creerCompte(pseudo); } case 2 -> { String pseudo = choisirPseudo(db, "Sélectionnez le compte à supprimer :", JOptionPane.WARNING_MESSAGE); if (pseudo == null) continue; int confirm = JOptionPane.showConfirmDialog( null, "Supprimer le compte \"" + pseudo + "\" et toute sa progression ?", "Confirmation", JOptionPane.YES_NO_OPTION ); if (confirm == JOptionPane.YES_OPTION) { int id = db.getIdParPseudo(pseudo); if (id > 0) db.supprimerCompte(id); } } } } } //------------------------------------------------------------------------- // Classe de base de l'application, rien à modifier ici //------------------------------------------------------------------------- public static void main(String[] arg) { UIManager.put("OptionPane.cancelButtonText", "Retour"); DatabaseConnection db = new DatabaseConnection(); db.connect(); db.createTables(); while (true) { Object[] options = {"Comptes", "Sans compte", "Quitter"}; int choix = JOptionPane.showOptionDialog(null, "Choisissez une action :", "Menu", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if (choix == JOptionPane.CLOSED_OPTION || choix == 2) { return; } switch (choix) { case 1 -> { int niveau = choisirNiveau(); new Jeu(db, -1, niveau).demarrer(); return; } case 0 -> { Integer idCompte = menuComptes(db); if (idCompte != null) { int niveau = choisirNiveau(); new Jeu(db, idCompte, niveau).demarrer(); return; } } } } } }