Merge branch 'Niveau_jeu'

This commit is contained in:
2026-02-17 14:37:44 +01:00
9 changed files with 142 additions and 6 deletions

8
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,8 @@
{
"java.project.sourcePaths": [
"linea"
],
"java.project.referencedLibraries": [
"sqlite-jdbc-3.49.1.0.jar"
]
}

View File

@@ -47,12 +47,17 @@ public class Jeu implements KeyListener, ActionListener{
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
public Jeu(){ public Jeu(){
// Gestion du score : a réactiver en fin de TP, inutile au début // Gestion du score : a réactiver en fin de TP, inutile au début
// Ajout du niveau du jeu
labLevel = new JLabel();
labLevel.setText("<html><h3>niveau : 1</h3></html>");
labLevel.setBounds(20, 50, 200, 50);
ecran.add(labLevel);
labScore = new JLabel(); labScore = new JLabel();
labScore.setText("<html><h3>score : 0</h3></html>"); labScore.setText("<html><h3>score : 0</h3></html>");
labScore.setBounds(20, 0, 200, 50); labScore.setBounds(20, 0, 200, 50);
ecran.add(labScore); ecran.add(labScore);
} }
@@ -149,12 +154,11 @@ public class Jeu implements KeyListener, ActionListener{
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
this.ecran.traiterBoucleAnimation(); this.ecran.traiterBoucleAnimation();
boolean verification = this.laLigne.estDansCercle(this.demiCercleAvant); boolean verification = this.laLigne.estDansCercle(this.demiCercleAvant);
// A FAIRE : si la ligne est dans le cercle, on augmente le score, sinon on le remet à 0
if(verification){ if(verification){
this.score += 10; this.score += 5;
this.jeuCommence = true; // Le jeu commence dès que la ligne est dans le cercle
}else{ }else{
this.score = this.score; // Le score reste identique
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
// A FAIRE: Le jeu peut s'arrêter si la ligne n'est pas dans le cercle // A FAIRE: Le jeu peut s'arrêter si la ligne n'est pas dans le cercle

View File

@@ -91,6 +91,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// Principe : // Principe :
// on parcourt tous les segments et on décale chacun de 10 pixels (par exemple) // on parcourt tous les segments et on décale chacun de 10 pixels (par exemple)
// vers la gauche // vers la gauche
// On modifiera cette méthode en fonction du niveau de jeu
for(Segment s: this.listeSegments){ for(Segment s: this.listeSegments){
s.x -= 5; s.x -= 5;
} }
@@ -102,7 +103,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// Principe: On a le rayon du cercle qui ne varie pas // Principe: On a le rayon du cercle qui ne varie pas
// On parcourt tous les points du segment courant // On parcourt tous les points du segment courant
// Et on calcule la distance entre chacun de ces points et le centre du cercle // Et on calcule la distance entre chacun de ces points et le centre du cercle
// Si la distance est supérieure au rayon du cercle, alors le point n'est pas dans le cercle // Si la distance est supérieure au rayon du cercle, alors le point n'est pas dans le cercle(GAME OVER)
// Sinon le segment courant est dans le cercle // Sinon le segment courant est dans le cercle
// Remarque: On a définit la position du cercle grâce à son centre // Remarque: On a définit la position du cercle grâce à son centre
// Autrement dit, les coordonnées du centre du cercle sont la position du cercle // Autrement dit, les coordonnées du centre du cercle sont la position du cercle

View File

@@ -0,0 +1,123 @@
package linea;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
// Cette classe est celle qui gère la connexion à la base de données Niveaux.db
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
// ------------- Constructeur de la classe ------------------------
// Il initialise la connexion à la base de données
// Il crée la table niveau si elle n'existe pas déjà
// Il insérer les niveaux dans la table niveau directement
// Pour éviter à le faire à chaque fois que le jeu est lancé
// ----------------------------------------------------------------
public NiveauxDataConnect() throws ClassNotFoundException {
// 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 !");
} else {
System.out.println("Connexion échouée !");
}
}
// -------------------------------------------------------------------------
// Méthode de connexion à la base de données Niveaux.db
// -------------------------------------------------------------------------
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(url);
System.out.println("Connexion à la base de données réussie !");
// 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);
}
return conn;
} catch (SQLException e) {
System.out.println("Erreur lors de la connexion à la base de données : " + e.getMessage());
return null;
}
}
// -------------------------------------------------------------------------
// Méthode pour créer la table Niveaux si elle n'existe pas déjà
// -------------------------------------------------------------------------
private static void CreerTableNiveaux(Connection conn) {
String sql = "CREATE TABLE IF NOT EXISTS niveau( "
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "nom TEXT NOT NULL, " /*nom du niveau*/
+ "vitesse_ligne INTEGER NOT NULL, " /*vitesse de la ligne*/
+ "nb_segments INTEGER NOT NULL, " /*nombre de segments à faire passer au joueur pour réussir le niveau*/
+ "image TEXT NOT NULL, " /*image du niveau*/
+ "multiplicateur_score INTEGER, " /*multiplier le score en fonction du niveau*/
+ "couleur_cercle TEXT NOT NULL, " /*Couleur du cercle en fonctiond du niveau */
+");" ;
try (Statement stmt = conn.createStatement()) {
stmt.execute(sql);
stmt.close();
} catch (SQLException e) {
System.err.println("Erreur lors de la création de la table Niveaux : " + e.getMessage());
System.out.println("Connexion échouée !");
e.printStackTrace();
}
}
// -------------------------------------------------------------------------
// Méthode pour insérer les niveaux dans la base de données
// 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é
// --------------------------------Niveau 1 --------------------------------
// nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 1, couleur_cercle = "bleu"
// --------------------------------Niveau 2 --------------------------------
// nom = "intermédaire", vitesse_ligne = 2, nb_segments = 100, image = "images\montagnes.jpg", multiplicateur_score = 2, couleur_cercle = "gris"
// --------------------------------Niveau 3 --------------------------------
// nom = "Difficile", vitesse_ligne = 3, nb_segments = 100, image = "images\volcan.jpg", multiplicateur_score = 3, couleur_cercle = "marron"
// --------------------------------Niveau 4 --------------------------------
// nom = "Ultime", vitesse_ligne = 4, nb_segments = 150, image = "images\espace.jpg", multiplicateur_score = 4, couleur_cercle = "violet"
// -------------------------------------------------------------------------
public static void insererNiveau(Connection conn) {
String query1 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
+ "VALUES('Facile', 5, 50, 'images\\ciel.jpeg', 1, '#0000FF');";
String query2 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
+ "VALUES('Intermédiaire', 2, 100, 'images\\montagnes.jpg', 2, '#808080');";
String query3 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
+ "VALUES('Difficile', 3, 100, 'images\\volcan.jpg', 3, '#8B4513');";
String query4 = "INSERT INTO niveau(nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle) "
+ "VALUES('Ultime', 4, 150, 'images\\espace.jpg', 4, '#9400D3');";
try (Statement stmt = conn.createStatement()) {
stmt.execute(query1);
stmt.execute(query2);
stmt.execute(query3);
stmt.execute(query4);
stmt.close();
} catch (SQLException e) {
System.err.println("Erreur lors de l'insertion des niveaux : " + e.getMessage());
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 KiB

BIN
sqlite-jdbc-3.49.1.0.jar Normal file

Binary file not shown.