init: finish implementation niveau dans le jeu

This commit is contained in:
2026-03-24 22:32:59 +01:00
parent f8cf66f731
commit ca614a198b
19 changed files with 329 additions and 82 deletions

View File

@@ -1,6 +1,6 @@
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
@@ -11,6 +11,8 @@ public class NiveauxDataConnect {
//Création d'une variable de connexion à la base de données
private static final String url = "jdbc:sqlite:Niveaux.db";
private static boolean tablesCreees = false; // Variable pour vérifier si les tables ont été créées
private static NiveauxDataConnect instance; // Instance unique de la classe NiveauDataConnect
private static Connection maConnexion; // Objet connexion à partager
@@ -23,45 +25,68 @@ public class NiveauxDataConnect {
// Il est nécessaire de l'initialiser afin de pouvoir le lire et écrire dessus
// Car dans la .jar il est en lecture seule
// Il faut donc le copier dans un endroit où il peut être modifié, par exemple dans le dossier du projet
// Mon constructeur est en privé car personne ne doit pouvoir faire new NiveauDataConnect
// ----------------------------------------------------------------
public NiveauxDataConnect() throws ClassNotFoundException, SQLException {
private NiveauxDataConnect() throws ClassNotFoundException, SQLException {
// Initialisation de la connexion à la base de données
Connection conn = getConnection();
if (conn != null) {
System.out.println("Connexion à la base de données réussie !");
maConnexion = getConnection();
if (maConnexion != null) {
System.out.println("Instance du singleton créée et connexion prête.");
} else {
System.out.println("Connexion échouée !");
}
}
//--------------------------------------------------------------------------
// Point d'accès global pour obtenir l'instance du singleton
// On utilise synchronized pour éviter les problèmes si deux threads appellent
// la méthode au démarrage en même temps
//--------------------------------------------------------------------------
public static synchronized NiveauxDataConnect getInstance(){
try{
if(instance == null){
instance = new NiveauxDataConnect();
}
return instance;
}catch(Exception e){
e.printStackTrace();
}
return instance;
}
// -------------------------------------------------------------------------
// Méthode de connexion à la base de données Niveaux.db
// -------------------------------------------------------------------------
public static Connection getConnection(){
public static Connection getConnection() throws SQLException{
// On vérifie si ma connexion, singleton existe déjà et à déjà une valeur
// Ou si elle a été fermé
if(maConnexion == null || maConnexion.isClosed()){
// On vérifiera si la BDD est déjà créé et possède déjà des données à l'intérieur
// On devra ainsi l'extraire depuis le .jar
boolean baseExiste = bddInit.init();
try{
Connection conn = DriverManager.getConnection(url);
System.out.println("Connexion à la base de données réussie !");
if(!baseExiste){
// Vérifier si les tables ont déjà été créées pour éviter de les recréer à chaque connexion
if (!tablesCreees) {
// Créer la table niveau si elle n'existe pas déjà
CreerTableNiveaux(conn);
tablesCreees = true; // Marquer les tables comme créées
// Insérer les niveaux dans la table niveau
insererNiveau(conn);
boolean baseExiste = bddInit.init();
try{
maConnexion = DriverManager.getConnection(url);
System.out.println("Connexion à la base de données réussie !");
if(!baseExiste){
// Vérifier si les tables ont déjà été créées pour éviter de les recréer à chaque connexion
if (!tablesCreees) {
// Créer la table niveau si elle n'existe pas déjà
CreerTableNiveaux(maConnexion);
tablesCreees = true; // Marquer les tables comme créées
// Insérer les niveaux dans la table niveau
insererNiveau(maConnexion);
}
}
return maConnexion;
}catch(Exception e){
e.printStackTrace();
}
return conn;
}catch(Exception e){
e.printStackTrace();
}
return null;
return maConnexion;
}
@@ -97,6 +122,7 @@ public class NiveauxDataConnect {
// Les niveaux sont connus à l'avance et sont insérés directement
// dans la base de données pour éviter de les insérer à chaque fois que
// le jeu est lancé
// Pour corser le jeu, on utilisera l'id du niveau qui nous servira de difficulté
// --------------------------------Niveau 1 --------------------------------
// nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 1, couleur_cercle = "bleu"
// --------------------------------Niveau 2 --------------------------------
@@ -137,17 +163,20 @@ public class NiveauxDataConnect {
Niveau niveauRecup = null;
String sql = "SELECT * FROM niveau WHERE id = ?;";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
int id1 = rs.getInt("id");
String nom = rs.getString("nom");
int vitesse_ligne = rs.getInt("vitesse_ligne");
int nb_segments = rs.getInt("nb_segments");
String image = rs.getString("image");
int multiplicateur_score = rs.getInt("multiplicateur_score");
String couleur_cercle = rs.getString("couleur_cercle");
niveauRecup = new Niveau(id1, nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle);
try (PreparedStatement pstmt = conn.prepareStatement(sql)){
pstmt.setInt(1, id); // On remplace le 1er ? par l'id
try(ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
int id1 = rs.getInt("id");
String nom = rs.getString("nom");
int vitesse_ligne = rs.getInt("vitesse_ligne");
int nb_segments = rs.getInt("nb_segments");
String image = rs.getString("image");
int multiplicateur_score = rs.getInt("multiplicateur_score");
String couleur_cercle = rs.getString("couleur_cercle");
niveauRecup = new Niveau(id1, nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle);
}
}
} catch (SQLException e) {