Compare commits
22 Commits
17a0ecb022
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 427c70663a | |||
| 47e184c419 | |||
| d66337a158 | |||
| 60b656d394 | |||
| 0c1aa718b8 | |||
| 4551f8bf62 | |||
| d792ad1a33 | |||
| 27581b2842 | |||
| a179611f29 | |||
| 8444aa7aa7 | |||
| 46a8b04ab3 | |||
| 7e61100fd5 | |||
| fdc3892ef4 | |||
| 1734bf2ab4 | |||
| 75b32adf77 | |||
| 1d6f77cb28 | |||
| 805bb6583f | |||
| 25a9449a38 | |||
| 52baf74b12 | |||
| e1f022a5a2 | |||
| 0074e735a8 | |||
| 122480a400 |
29
src/linea/Bonus.java
Normal file
29
src/linea/Bonus.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package linea;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
|
||||||
|
public class Bonus extends ObjetGraphique {
|
||||||
|
|
||||||
|
private int largeur = 20;
|
||||||
|
private int hauteur = 20;
|
||||||
|
private double vitesseDefilement;
|
||||||
|
|
||||||
|
public Bonus(double x, double y, double vitesse) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.vitesseDefilement = vitesse;
|
||||||
|
this.couleur = Color.GREEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void Afficher(Graphics g) {
|
||||||
|
g.setColor(this.couleur);
|
||||||
|
g.fillRect((int)x, (int)y, largeur, hauteur);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void Animer() {
|
||||||
|
this.x -= vitesseDefilement;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,29 +18,17 @@ public class CampagneAutoroute {
|
|||||||
jeu.horloge = new Timer(40, jeu);
|
jeu.horloge = new Timer(40, jeu);
|
||||||
jeu.ecran.viderObjets();
|
jeu.ecran.viderObjets();
|
||||||
|
|
||||||
// --- 1. CONFIGURATION DE LA DIFFICULTÉ ---
|
// On récupère les paramètres depuis la BDD
|
||||||
double vitesse = 5.0;
|
double[] params = jeu.bdd.getParametresDifficulte(difficulte);
|
||||||
double pente = 30.0;
|
double vitesse = params[0];
|
||||||
|
double pente = params[1];
|
||||||
|
int segments = (int) params[2];
|
||||||
|
|
||||||
if (difficulte == 1) { // FACILE
|
|
||||||
vitesse = 6.0;
|
|
||||||
pente = 20.0;
|
|
||||||
} else if (difficulte == 2) { // MOYEN
|
|
||||||
vitesse = 7.0;
|
|
||||||
pente = 45.0;
|
|
||||||
} else if (difficulte == 3) { // DIFFICILE
|
|
||||||
vitesse = 8.0;
|
|
||||||
pente = 70.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- 2. CRÉATION DES OBJETS
|
|
||||||
|
|
||||||
// On passe la vitesse au fond pour qu'il défile au même rythme !
|
|
||||||
FondAutoroute fond = new FondAutoroute(vitesse);
|
FondAutoroute fond = new FondAutoroute(vitesse);
|
||||||
jeu.ecran.ajouterObjet(fond);
|
jeu.ecran.ajouterObjet(fond);
|
||||||
|
|
||||||
// On passe aussi la vitesse (et la pente) à la ligne
|
jeu.laligne = new Ligne(vitesse, pente, segments);
|
||||||
jeu.laligne = new Ligne(vitesse, pente);
|
|
||||||
jeu.ecran.ajouterObjet(jeu.laligne);
|
jeu.ecran.ajouterObjet(jeu.laligne);
|
||||||
|
|
||||||
Voiture maVoiture = new Voiture();
|
Voiture maVoiture = new Voiture();
|
||||||
@@ -50,9 +38,13 @@ public class CampagneAutoroute {
|
|||||||
jeu.demiCercleArriere = maVoiture;
|
jeu.demiCercleArriere = maVoiture;
|
||||||
|
|
||||||
jeu.ecran.setGameOver(false);
|
jeu.ecran.setGameOver(false);
|
||||||
|
jeu.ecran.setVictoire(false);
|
||||||
jeu.score = 0;
|
jeu.score = 0;
|
||||||
jeu.labScore.setText("<html><h3 style='color:white;'>score : 0</h3></html>");
|
jeu.labScore.setText("<html><h3 style='color:white;'>score : 0</h3></html>");
|
||||||
|
|
||||||
|
jeu.prochainBonusScore = 100 + jeu.random.nextInt(36);
|
||||||
|
jeu.prochainMalusScore = 100 + jeu.random.nextInt(46);
|
||||||
|
|
||||||
jeu.layout.show(jeu.conteneurPrincipal, "JEU");
|
jeu.layout.show(jeu.conteneurPrincipal, "JEU");
|
||||||
jeu.ecran.setFocusable(true);
|
jeu.ecran.setFocusable(true);
|
||||||
jeu.ecran.requestFocusInWindow();
|
jeu.ecran.requestFocusInWindow();
|
||||||
|
|||||||
@@ -19,41 +19,34 @@ public class CampagneEspace {
|
|||||||
|
|
||||||
jeu.ecran.viderObjets();
|
jeu.ecran.viderObjets();
|
||||||
|
|
||||||
double vitesse = 5.0;
|
// On récupère les paramètres depuis la BDD
|
||||||
double pente = 30.0;
|
double[] params = jeu.bdd.getParametresDifficulte(difficulte);
|
||||||
|
double vitesse = params[0];
|
||||||
|
double pente = params[1];
|
||||||
|
int segments = (int) params[2];
|
||||||
|
|
||||||
if (difficulte == 1) { // FACILE
|
|
||||||
vitesse = 6.0;
|
|
||||||
pente = 20.0;
|
|
||||||
} else if (difficulte == 2) { // MOYEN
|
|
||||||
vitesse = 7.0;
|
|
||||||
pente = 45.0;
|
|
||||||
} else if (difficulte == 3) { // DIFFICILE
|
|
||||||
vitesse = 8.0;
|
|
||||||
pente = 70.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1. Fond étoilé
|
|
||||||
FondEspace fond = new FondEspace();
|
FondEspace fond = new FondEspace();
|
||||||
jeu.ecran.ajouterObjet(fond);
|
jeu.ecran.ajouterObjet(fond);
|
||||||
|
|
||||||
// 2. Ligne de trajectoire
|
jeu.laligne = new Ligne(vitesse, pente, segments);
|
||||||
jeu.laligne = new Ligne(vitesse, pente);
|
|
||||||
jeu.ecran.ajouterObjet(jeu.laligne);
|
jeu.ecran.ajouterObjet(jeu.laligne);
|
||||||
|
|
||||||
// 3. Cercle Espace avec physique Lunaire (niveau 1)
|
|
||||||
CercleEspace halo = new CercleEspace(0, 360, 1);
|
CercleEspace halo = new CercleEspace(0, 360, 1);
|
||||||
jeu.ecran.ajouterObjet(halo);
|
jeu.ecran.ajouterObjet(halo);
|
||||||
|
|
||||||
// Liaisons contrôles
|
|
||||||
jeu.demiCercleAvant = halo;
|
jeu.demiCercleAvant = halo;
|
||||||
jeu.demiCercleArriere = halo;
|
jeu.demiCercleArriere = halo;
|
||||||
|
|
||||||
// UI et lancement
|
|
||||||
jeu.ecran.setGameOver(false);
|
jeu.ecran.setGameOver(false);
|
||||||
|
jeu.ecran.setVictoire(false);
|
||||||
jeu.score = 0;
|
jeu.score = 0;
|
||||||
jeu.labScore.setText("<html><h3 style='color:white;'>LUNE - score : 0</h3></html>");
|
jeu.labScore.setText("<html><h3 style='color:white;'>LUNE - score : 0</h3></html>");
|
||||||
|
|
||||||
|
jeu.prochainBonusScore = 100 + jeu.random.nextInt(26);
|
||||||
|
jeu.prochainMalusScore = 100 + jeu.random.nextInt(26);
|
||||||
|
|
||||||
jeu.layout.show(jeu.conteneurPrincipal, "JEU");
|
jeu.layout.show(jeu.conteneurPrincipal, "JEU");
|
||||||
jeu.ecran.setFocusable(true);
|
jeu.ecran.setFocusable(true);
|
||||||
jeu.ecran.requestFocusInWindow();
|
jeu.ecran.requestFocusInWindow();
|
||||||
|
|||||||
@@ -18,26 +18,18 @@ public class CampagneOcean {
|
|||||||
jeuPrincipal.horloge.stop();
|
jeuPrincipal.horloge.stop();
|
||||||
}
|
}
|
||||||
jeuPrincipal.horloge = new Timer(40, jeuPrincipal);
|
jeuPrincipal.horloge = new Timer(40, jeuPrincipal);
|
||||||
double vitesse = 5.0;
|
// On récupère les paramètres depuis la BDD
|
||||||
double pente = 30.0;
|
double[] params = jeuPrincipal.bdd.getParametresDifficulte(difficulte);
|
||||||
|
double vitesse = params[0];
|
||||||
if (difficulte == 1) { // FACILE
|
double pente = params[1];
|
||||||
vitesse = 6.0;
|
int segments = (int) params[2];
|
||||||
pente = 20.0;
|
|
||||||
} else if (difficulte == 2) { // MOYEN
|
|
||||||
vitesse = 7.0;
|
|
||||||
pente = 45.0;
|
|
||||||
} else if (difficulte == 3) { // DIFFICILE
|
|
||||||
vitesse = 8.0;
|
|
||||||
pente = 70.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
jeuPrincipal.ecran.viderObjets();
|
jeuPrincipal.ecran.viderObjets();
|
||||||
|
|
||||||
FondOcean monFond = new FondOcean();
|
FondOcean monFond = new FondOcean();
|
||||||
jeuPrincipal.ecran.ajouterObjet(monFond);
|
jeuPrincipal.ecran.ajouterObjet(monFond);
|
||||||
|
|
||||||
jeuPrincipal.laligne = new Ligne(vitesse, pente);
|
jeuPrincipal.laligne = new Ligne(vitesse, pente, segments);
|
||||||
|
|
||||||
jeuPrincipal.ecran.ajouterObjet(jeuPrincipal.laligne);
|
jeuPrincipal.ecran.ajouterObjet(jeuPrincipal.laligne);
|
||||||
|
|
||||||
@@ -49,9 +41,13 @@ public class CampagneOcean {
|
|||||||
jeuPrincipal.demiCercleArriere = joueur;
|
jeuPrincipal.demiCercleArriere = joueur;
|
||||||
|
|
||||||
jeuPrincipal.ecran.setGameOver(false);
|
jeuPrincipal.ecran.setGameOver(false);
|
||||||
|
jeuPrincipal.ecran.setVictoire(false);
|
||||||
jeuPrincipal.score = 0;
|
jeuPrincipal.score = 0;
|
||||||
jeuPrincipal.labScore.setText("<html><h3 style='color:white;'>Oxygène : 0</h3></html>");
|
jeuPrincipal.labScore.setText("<html><h3 style='color:white;'>Oxygène : 0</h3></html>");
|
||||||
|
|
||||||
|
jeuPrincipal.prochainBonusScore = 100 + jeuPrincipal.random.nextInt(26);
|
||||||
|
jeuPrincipal.prochainMalusScore = 100 + jeuPrincipal.random.nextInt(26);
|
||||||
|
|
||||||
jeuPrincipal.layout.show(jeuPrincipal.conteneurPrincipal, "JEU");
|
jeuPrincipal.layout.show(jeuPrincipal.conteneurPrincipal, "JEU");
|
||||||
jeuPrincipal.ecran.setFocusable(true);
|
jeuPrincipal.ecran.setFocusable(true);
|
||||||
jeuPrincipal.ecran.requestFocusInWindow();
|
jeuPrincipal.ecran.requestFocusInWindow();
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl
|
|||||||
return rayon;
|
return rayon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRayon(double rayon){
|
||||||
|
this.rayon = rayon;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Méthode qui note que up a été appuyée
|
// Méthode qui note que up a été appuyée
|
||||||
|
|||||||
@@ -6,10 +6,8 @@ import java.awt.Graphics;
|
|||||||
public class FondAutoroute extends ObjetGraphique {
|
public class FondAutoroute extends ObjetGraphique {
|
||||||
|
|
||||||
private double decalage = 0;
|
private double decalage = 0;
|
||||||
// On ajoute une variable pour mémoriser la vitesse
|
|
||||||
private double vitesseDefilement;
|
private double vitesseDefilement;
|
||||||
|
|
||||||
// On modifie le constructeur pour accepter la vitesse
|
|
||||||
public FondAutoroute(double vitesse) {
|
public FondAutoroute(double vitesse) {
|
||||||
super();
|
super();
|
||||||
this.vitesseDefilement = vitesse;
|
this.vitesseDefilement = vitesse;
|
||||||
@@ -17,12 +15,10 @@ public class FondAutoroute extends ObjetGraphique {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
void Afficher(Graphics g) {
|
void Afficher(Graphics g) {
|
||||||
// ... (Garde exactement ton code d'affichage actuel avec les couleurs et les boucles for) ...
|
|
||||||
// Ciel de nuit urbaine
|
|
||||||
g.setColor(new Color(20, 20, 45));
|
g.setColor(new Color(20, 20, 45));
|
||||||
g.fillRect(0, 0, 800, 50);
|
g.fillRect(0, 0, 800, 50);
|
||||||
|
|
||||||
// Asphalte de l'autoroute en bas
|
// Asphalte de l'autoroute
|
||||||
g.setColor(new Color(30, 30, 30));
|
g.setColor(new Color(30, 30, 30));
|
||||||
g.fillRect(0, 50, 800, 500);
|
g.fillRect(0, 50, 800, 500);
|
||||||
|
|
||||||
@@ -39,7 +35,6 @@ public class FondAutoroute extends ObjetGraphique {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
void Animer() {
|
void Animer() {
|
||||||
// On utilise la vitesse dynamique au lieu du 5.0 fixe
|
|
||||||
decalage += vitesseDefilement;
|
decalage += vitesseDefilement;
|
||||||
|
|
||||||
if (decalage >= 120) {
|
if (decalage >= 120) {
|
||||||
|
|||||||
@@ -1,19 +1,25 @@
|
|||||||
package linea;
|
package linea;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class GestionnaireBDD {
|
public class GestionnaireBDD {
|
||||||
|
|
||||||
private Connection conn = null;
|
private Connection conn = null;
|
||||||
// On utilise une base de données SQLite, qui est un simple fichier.
|
private Connection connDifficulte = null;
|
||||||
private final String DB_URL = "jdbc:sqlite:linea.db";
|
private final String DB_URL = "jdbc:sqlite:linea.db";
|
||||||
|
private final String DB_DIFFICULTE_URL = "jdbc:sqlite:difficultes.db";
|
||||||
|
|
||||||
|
|
||||||
public GestionnaireBDD() {
|
public GestionnaireBDD() {
|
||||||
try {
|
try {
|
||||||
// Le pilote JDBC pour SQLite doit être ajouté à votre projet.
|
|
||||||
Class.forName("org.sqlite.JDBC");
|
Class.forName("org.sqlite.JDBC");
|
||||||
conn = DriverManager.getConnection(DB_URL);
|
conn = DriverManager.getConnection(DB_URL);
|
||||||
System.out.println("Connexion à la base de données SQLite établie.");
|
System.out.println("Connexion à la base de données SQLite établie.");
|
||||||
|
|
||||||
|
connDifficulte = DriverManager.getConnection(DB_DIFFICULTE_URL);
|
||||||
|
System.out.println("Connexion à la base de données SQLite pour les difficultés établie.");
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println("Erreur de connexion à la BDD : " + e.getMessage());
|
System.out.println("Erreur de connexion à la BDD : " + e.getMessage());
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
@@ -24,11 +30,6 @@ public class GestionnaireBDD {
|
|||||||
public void initialiserBaseDeDonnees() {
|
public void initialiserBaseDeDonnees() {
|
||||||
// Crée les tables si elles n'existent pas et insère les données de difficulté.
|
// Crée les tables si elles n'existent pas et insère les données de difficulté.
|
||||||
try (Statement stmt = conn.createStatement()) {
|
try (Statement stmt = conn.createStatement()) {
|
||||||
// Table pour les difficultés
|
|
||||||
stmt.execute("CREATE TABLE IF NOT EXISTS difficultes (" +
|
|
||||||
"id_difficulte INT PRIMARY KEY, " +
|
|
||||||
"vitesse REAL NOT NULL, " +
|
|
||||||
"pente REAL NOT NULL)");
|
|
||||||
|
|
||||||
// Table pour les scores des parties
|
// Table pour les scores des parties
|
||||||
stmt.execute("CREATE TABLE IF NOT EXISTS parties (" +
|
stmt.execute("CREATE TABLE IF NOT EXISTS parties (" +
|
||||||
@@ -37,36 +38,65 @@ public class GestionnaireBDD {
|
|||||||
"campagne_id INT, " +
|
"campagne_id INT, " +
|
||||||
"difficulte_id INT, " +
|
"difficulte_id INT, " +
|
||||||
"score INT, " +
|
"score INT, " +
|
||||||
"date_partie TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
|
"utilisateur_id INT, " +
|
||||||
|
"date_partie TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " +
|
||||||
|
"FOREIGN KEY(utilisateur_id) REFERENCES utilisateurs(id))");
|
||||||
|
|
||||||
// NOUVELLE TABLE POUR LES UTILISATEURS
|
// TABLE POUR LES UTILISATEURS
|
||||||
stmt.execute("CREATE TABLE IF NOT EXISTS utilisateurs (" +
|
stmt.execute("CREATE TABLE IF NOT EXISTS utilisateurs (" +
|
||||||
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||||
"identifiant TEXT UNIQUE NOT NULL, " +
|
"identifiant TEXT UNIQUE NOT NULL, " +
|
||||||
"mot_de_passe TEXT NOT NULL)");
|
"mot_de_passe TEXT NOT NULL)");
|
||||||
|
|
||||||
|
try { stmt.execute("ALTER TABLE utilisateurs ADD COLUMN is_admin INTEGER DEFAULT 0"); } catch (SQLException e) {}
|
||||||
|
stmt.execute("INSERT OR IGNORE INTO utilisateurs(identifiant, mot_de_passe, is_admin) VALUES('admin', 'admin', 1)");
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
System.out.println("Erreur lors de l'initialisation de la base de données principale : " + e.getMessage());
|
||||||
|
}
|
||||||
|
try (Statement stmtDiff = connDifficulte.createStatement()) {
|
||||||
|
stmtDiff.execute("CREATE TABLE IF NOT EXISTS difficultes (" +
|
||||||
|
"id_difficulte INT PRIMARY KEY, " +
|
||||||
|
"vitesse REAL NOT NULL, " +
|
||||||
|
"pente REAL NOT NULL, " +
|
||||||
|
"segments INT NOT NULL DEFAULT 50)");
|
||||||
|
try {
|
||||||
|
stmtDiff.execute("ALTER TABLE difficultes ADD COLUMN segments INT NOT NULL DEFAULT 50");
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// Ignorer si la colonne existe déjà
|
||||||
|
}
|
||||||
// Insertion des valeurs de difficulté par défaut
|
// Insertion des valeurs de difficulté par défaut
|
||||||
// L'instruction "INSERT OR IGNORE" est spécifique à SQLite et évite les doublons.
|
// On utilise INSERT OR REPLACE pour mettre à jour les valeurs si elles existent déjà
|
||||||
stmt.execute("INSERT OR IGNORE INTO difficultes (id_difficulte, vitesse, pente) VALUES (1, 6, 20);");
|
stmtDiff.execute("INSERT OR REPLACE INTO difficultes (id_difficulte, vitesse, pente, segments) VALUES (1, 6, 20, 35);");
|
||||||
stmt.execute("INSERT OR IGNORE INTO difficultes (id_difficulte, vitesse, pente) VALUES (2, 7, 45);");
|
stmtDiff.execute("INSERT OR REPLACE INTO difficultes (id_difficulte, vitesse, pente, segments) VALUES (2, 7, 45, 50);");
|
||||||
stmt.execute("INSERT OR IGNORE INTO difficultes (id_difficulte, vitesse, pente) VALUES (3, 8, 70);");
|
stmtDiff.execute("INSERT OR REPLACE INTO difficultes (id_difficulte, vitesse, pente, segments) VALUES (3, 8, 60, 85);");
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println("Erreur lors de l'initialisation de la base de données : " + e.getMessage());
|
System.out.println("Erreur lors de l'initialisation de la base de données : " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean verifierUtilisateur(String identifiant, String motDePasse) {
|
public int verifierUtilisateur(String identifiant, String motDePasse) {
|
||||||
String sql = "SELECT id FROM utilisateurs WHERE identifiant = ? AND mot_de_passe = ?";
|
String sql = "SELECT id FROM utilisateurs WHERE identifiant = ? AND mot_de_passe = ?";
|
||||||
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||||
pstmt.setString(1, identifiant);
|
pstmt.setString(1, identifiant);
|
||||||
pstmt.setString(2, motDePasse);
|
pstmt.setString(2, motDePasse);
|
||||||
// Si rs.next() est vrai, cela signifie que la requête a trouvé une correspondance.
|
ResultSet rs = pstmt.executeQuery();
|
||||||
return pstmt.executeQuery().next();
|
if (rs.next()) {
|
||||||
|
return rs.getInt("id");
|
||||||
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println("Erreur lors de la vérification des identifiants : " + e.getMessage());
|
System.out.println("Erreur lors de la vérification des identifiants : " + e.getMessage());
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean estAdmin(int userId) {
|
||||||
|
try (PreparedStatement p = conn.prepareStatement("SELECT is_admin FROM utilisateurs WHERE id = ?")) {
|
||||||
|
p.setInt(1, userId);
|
||||||
|
ResultSet rs = p.executeQuery();
|
||||||
|
return rs.next() && rs.getInt("is_admin") == 1;
|
||||||
|
} catch (SQLException e) { return false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean creerCompte(String identifiant, String motDePasse) {
|
public boolean creerCompte(String identifiant, String motDePasse) {
|
||||||
@@ -96,16 +126,17 @@ public class GestionnaireBDD {
|
|||||||
}
|
}
|
||||||
public double[] getParametresDifficulte(int difficulteId) {
|
public double[] getParametresDifficulte(int difficulteId) {
|
||||||
// Par défaut (si non trouvé), on retourne les valeurs pour la difficulté 1.
|
// Par défaut (si non trouvé), on retourne les valeurs pour la difficulté 1.
|
||||||
double[] params = {6.0, 20.0};
|
double[] params = {6.0, 20.0, 50.0};
|
||||||
String sql = "SELECT vitesse, pente FROM difficultes WHERE id_difficulte = ?";
|
String sql = "SELECT vitesse, pente, segments FROM difficultes WHERE id_difficulte = ?";
|
||||||
|
|
||||||
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
try (PreparedStatement pstmt = connDifficulte.prepareStatement(sql)) {
|
||||||
pstmt.setInt(1, difficulteId);
|
pstmt.setInt(1, difficulteId);
|
||||||
ResultSet rs = pstmt.executeQuery();
|
ResultSet rs = pstmt.executeQuery();
|
||||||
|
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
params[0] = rs.getDouble("vitesse");
|
params[0] = rs.getDouble("vitesse");
|
||||||
params[1] = rs.getDouble("pente");
|
params[1] = rs.getDouble("pente");
|
||||||
|
params[2] = rs.getDouble("segments");
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println("Erreur lors de la récupération des paramètres de difficulté : " + e.getMessage());
|
System.out.println("Erreur lors de la récupération des paramètres de difficulté : " + e.getMessage());
|
||||||
@@ -113,26 +144,86 @@ public class GestionnaireBDD {
|
|||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enregistrerPartie(int dureePartie, int idCampagneActive, int difficulteActive, int score) {
|
public void enregistrerPartie(int dureePartie, int idCampagneActive, int difficulteActive, int score, int utilisateurId) {
|
||||||
String sql = "INSERT INTO parties(duree, campagne_id, difficulte_id, score) VALUES(?,?,?,?)";
|
if (utilisateurId == -1) {
|
||||||
|
System.out.println("Partie non enregistrée : aucun utilisateur connecté.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String sql = "INSERT INTO parties(duree, campagne_id, difficulte_id, score, utilisateur_id) VALUES(?,?,?,?,?)";
|
||||||
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||||
pstmt.setInt(1, dureePartie);
|
pstmt.setInt(1, dureePartie);
|
||||||
pstmt.setInt(2, idCampagneActive);
|
pstmt.setInt(2, idCampagneActive);
|
||||||
pstmt.setInt(3, difficulteActive);
|
pstmt.setInt(3, difficulteActive);
|
||||||
pstmt.setInt(4, score);
|
pstmt.setInt(4, score);
|
||||||
|
pstmt.setInt(5, utilisateurId);
|
||||||
pstmt.executeUpdate();
|
pstmt.executeUpdate();
|
||||||
System.out.println("Partie enregistrée avec succès.");
|
System.out.println("Partie enregistrée pour l'utilisateur ID " + utilisateurId);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println("Erreur lors de l'enregistrement de la partie : " + e.getMessage());
|
System.out.println("Erreur lors de l'enregistrement de la partie : " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object[][] getLeaderboardData() {
|
||||||
|
String sql = "SELECT u.identifiant, MAX(p.score) AS score, p.date_partie, p.campagne_id, p.difficulte_id " +
|
||||||
|
"FROM parties p " +
|
||||||
|
"JOIN utilisateurs u ON p.utilisateur_id = u.id " +
|
||||||
|
"GROUP BY u.identifiant, p.campagne_id, p.difficulte_id " +
|
||||||
|
"ORDER BY u.identifiant";
|
||||||
|
List<Object[]> data = new ArrayList<>();
|
||||||
|
try (Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery(sql)) {
|
||||||
|
while (rs.next()) {
|
||||||
|
Object[] row = {
|
||||||
|
rs.getString("identifiant"),
|
||||||
|
rs.getInt("score"),
|
||||||
|
new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm").format(rs.getTimestamp("date_partie")),
|
||||||
|
rs.getInt("campagne_id"),
|
||||||
|
rs.getInt("difficulte_id")
|
||||||
|
};
|
||||||
|
data.add(row);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
System.out.println("Erreur lors de la récupération du leaderboard : " + e.getMessage());
|
||||||
|
}
|
||||||
|
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<Object[]> 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() {
|
public void fermerConnexion() {
|
||||||
try {
|
try {
|
||||||
if (conn != null) {
|
if (conn != null) {
|
||||||
conn.close();
|
conn.close();
|
||||||
System.out.println("Connexion BDD fermée.");
|
System.out.println("Connexion BDD fermée.");
|
||||||
}
|
}
|
||||||
|
if (connDifficulte != null) {
|
||||||
|
connDifficulte.close();
|
||||||
|
System.out.println("Connexion BDD difficultés fermée.");
|
||||||
|
}
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
System.out.println(ex.getMessage());
|
System.out.println(ex.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package linea;
|
|||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
import java.util.Random;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
public class Jeu implements KeyListener, ActionListener {
|
public class Jeu implements KeyListener, ActionListener {
|
||||||
@@ -15,6 +16,8 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
protected MenuLogin menuLogin;
|
protected MenuLogin menuLogin;
|
||||||
protected MenuPrincipal menu;
|
protected MenuPrincipal menu;
|
||||||
protected MenuCampagne menuCampagne;
|
protected MenuCampagne menuCampagne;
|
||||||
|
protected MenuLeaderboard menuLeaderboard;
|
||||||
|
protected MenuHistorique menuHistorique;
|
||||||
|
|
||||||
protected Cercle demiCercleAvant;
|
protected Cercle demiCercleAvant;
|
||||||
protected Cercle demiCercleArriere;
|
protected Cercle demiCercleArriere;
|
||||||
@@ -23,13 +26,21 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
protected JLabel labScore;
|
protected JLabel labScore;
|
||||||
protected int score;
|
protected int score;
|
||||||
|
|
||||||
//base de données
|
// base de données
|
||||||
protected GestionnaireBDD bdd = new GestionnaireBDD();
|
protected GestionnaireBDD bdd = new GestionnaireBDD();
|
||||||
|
|
||||||
public int idCampagneActive = 0; // Retient la campagne (1 = Autoroute, etc.)
|
protected Random random = new Random();
|
||||||
public int difficulteActive = 0; // Retient la difficulté (1=Facile, 2=Moyen, 3=Difficile)
|
protected int prochainBonusScore;
|
||||||
|
protected int prochainMalusScore;
|
||||||
|
|
||||||
public Jeu(){
|
protected int utilisateurIdConnecte = -1;
|
||||||
|
protected String identifiantUtilisateurConnecte;
|
||||||
|
public int idCampagneActive = 0;
|
||||||
|
public int difficulteActive = 0;
|
||||||
|
public boolean modeInvincible = false;
|
||||||
|
|
||||||
|
|
||||||
|
public Jeu() {
|
||||||
score = 0;
|
score = 0;
|
||||||
labScore = new JLabel("<html><h3>score : 0</h3></html>");
|
labScore = new JLabel("<html><h3>score : 0</h3></html>");
|
||||||
labScore.setBounds(20, 540, 200, 50);
|
labScore.setBounds(20, 540, 200, 50);
|
||||||
@@ -48,11 +59,9 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
menuLogin = new MenuLogin(this);
|
menuLogin = new MenuLogin(this);
|
||||||
menu = new MenuPrincipal(this);
|
menu = new MenuPrincipal(this);
|
||||||
menuCampagne = new MenuCampagne(this);
|
menuCampagne = new MenuCampagne(this);
|
||||||
|
menuLeaderboard = new MenuLeaderboard(this);
|
||||||
|
menuHistorique = new MenuHistorique(this);
|
||||||
|
|
||||||
// Initialisation initiale
|
|
||||||
resetPartie(6,20);
|
|
||||||
|
|
||||||
// On ajoute l'action au bouton "Retour" de la ZoneDessin (Game Over)
|
|
||||||
ecran.btnRetour.addActionListener(new ActionListener() {
|
ecran.btnRetour.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
@@ -66,6 +75,8 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
conteneurPrincipal.add(menuLogin, "LOGIN");
|
conteneurPrincipal.add(menuLogin, "LOGIN");
|
||||||
conteneurPrincipal.add(menu, "MENU");
|
conteneurPrincipal.add(menu, "MENU");
|
||||||
conteneurPrincipal.add(menuCampagne, "CAMPAGNE");
|
conteneurPrincipal.add(menuCampagne, "CAMPAGNE");
|
||||||
|
conteneurPrincipal.add(menuLeaderboard, "LEADERBOARD");
|
||||||
|
conteneurPrincipal.add(menuHistorique, "HISTORIQUE");
|
||||||
conteneurPrincipal.add(ecran, "JEU");
|
conteneurPrincipal.add(ecran, "JEU");
|
||||||
|
|
||||||
fenetre.setContentPane(conteneurPrincipal);
|
fenetre.setContentPane(conteneurPrincipal);
|
||||||
@@ -85,6 +96,23 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setUtilisateurConnecte(int id, String identifiant) {
|
||||||
|
this.utilisateurIdConnecte = id;
|
||||||
|
this.identifiantUtilisateurConnecte = identifiant;
|
||||||
|
this.modeInvincible = bdd.estAdmin(id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void afficherLeaderboard() {
|
||||||
|
menuLeaderboard.rafraichirLeaderboard();
|
||||||
|
layout.show(conteneurPrincipal, "LEADERBOARD");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void afficherMenuHistorique() {
|
||||||
|
menuHistorique.rafraichirHistorique();
|
||||||
|
layout.show(conteneurPrincipal, "HISTORIQUE");
|
||||||
|
}
|
||||||
|
|
||||||
public void afficherMenuCampagne() {
|
public void afficherMenuCampagne() {
|
||||||
layout.show(conteneurPrincipal, "CAMPAGNE");
|
layout.show(conteneurPrincipal, "CAMPAGNE");
|
||||||
}
|
}
|
||||||
@@ -102,12 +130,10 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
} else if (idCampagneActive == 2) {
|
} else if (idCampagneActive == 2) {
|
||||||
CampagneEspace campagne = new CampagneEspace(this);
|
CampagneEspace campagne = new CampagneEspace(this);
|
||||||
campagne.lancerNiveauLune(numeroNiveau);
|
campagne.lancerNiveauLune(numeroNiveau);
|
||||||
}
|
} else if (idCampagneActive == 3) {
|
||||||
else if (idCampagneActive == 3) {
|
|
||||||
CampagneOcean campagne = new CampagneOcean(this);
|
CampagneOcean campagne = new CampagneOcean(this);
|
||||||
campagne.lancerNiveau(numeroNiveau);
|
campagne.lancerNiveau(numeroNiveau);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
lancerPartie();
|
lancerPartie();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,7 +146,11 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void resetPartie(double vitesse, double pente) {
|
public void resetPartie(double vitesse, double pente) {
|
||||||
if(horloge != null) {
|
resetPartie(vitesse, pente, 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetPartie(double vitesse, double pente, int segments) {
|
||||||
|
if (horloge != null) {
|
||||||
horloge.stop();
|
horloge.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +159,7 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
demiCercleAvant = new Cercle(90, -180);
|
demiCercleAvant = new Cercle(90, -180);
|
||||||
demiCercleArriere = new Cercle(90, 180);
|
demiCercleArriere = new Cercle(90, 180);
|
||||||
|
|
||||||
laligne = new Ligne(vitesse, pente);
|
laligne = new Ligne(vitesse, pente, segments);
|
||||||
|
|
||||||
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
|
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
|
||||||
demiCercleAvant.setCouleur(new Color(1.0f, 0.2f, 0.2f));
|
demiCercleAvant.setCouleur(new Color(1.0f, 0.2f, 0.2f));
|
||||||
@@ -140,45 +170,116 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
ecran.ajouterObjet(laligne);
|
ecran.ajouterObjet(laligne);
|
||||||
|
|
||||||
ecran.setGameOver(false);
|
ecran.setGameOver(false);
|
||||||
|
ecran.setVictoire(false);
|
||||||
|
|
||||||
score = 0;
|
score = 0;
|
||||||
labScore.setText("<html><h3>score : 0</h3></html>");
|
labScore.setText("<html><h3>score : 0</h3></html>");
|
||||||
}
|
|
||||||
|
|
||||||
|
this.prochainBonusScore = 100 + random.nextInt(36);
|
||||||
|
this.prochainMalusScore = 100 + random.nextInt(46);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
ecran.traiterBoucleAnimation();
|
ecran.traiterBoucleAnimation();
|
||||||
|
|
||||||
score ++;
|
score++;
|
||||||
|
|
||||||
labScore.setText("<html><h3>score : " + score+"</h3></html>");
|
if (score == prochainBonusScore) {
|
||||||
|
double xSpawn = 810;
|
||||||
|
double yLigne = laligne.getHauteurLigneA(xSpawn);
|
||||||
|
|
||||||
|
if (yLigne != -1) {
|
||||||
|
double yOffset = random.nextBoolean() ? -40 : 40;
|
||||||
|
double yBonus = yLigne + yOffset;
|
||||||
|
|
||||||
|
Bonus bonus = new Bonus(xSpawn, yBonus, laligne.vitesseDefilement);
|
||||||
|
ecran.ajouterObjet(bonus);
|
||||||
|
|
||||||
|
this.prochainBonusScore = score + 40 + random.nextInt(31);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (score == prochainMalusScore) {
|
||||||
|
double xSpawn = 810;
|
||||||
|
double yLigne = laligne.getHauteurLigneA(xSpawn);
|
||||||
|
|
||||||
|
if (yLigne != -1) {
|
||||||
|
double yOffset = random.nextBoolean() ? -40 : 40;
|
||||||
|
double yMalus = yLigne + yOffset;
|
||||||
|
|
||||||
|
Malus malus = new Malus(xSpawn, yMalus, laligne.vitesseDefilement);
|
||||||
|
ecran.ajouterObjet(malus);
|
||||||
|
|
||||||
|
this.prochainMalusScore = score + 60 + random.nextInt(41);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = ecran.listeObjets.size() - 1; i >= 0; i--) {
|
||||||
|
ObjetGraphique obj = ecran.listeObjets.get(i);
|
||||||
|
if (obj instanceof Bonus || obj instanceof Malus) {
|
||||||
|
double itemLargeur = 20.0;
|
||||||
|
double itemHauteur = 20.0;
|
||||||
|
|
||||||
|
double cercleX = demiCercleAvant.getX();
|
||||||
|
double cercleY = demiCercleAvant.getY();
|
||||||
|
double cercleRayon = demiCercleAvant.getRayon();
|
||||||
|
|
||||||
|
|
||||||
|
double pointPlusProcheX = Math.max(obj.getX(), Math.min(cercleX, obj.getX() + itemLargeur));
|
||||||
|
double pointPlusProcheY = Math.max(obj.getY(), Math.min(cercleY, obj.getY() + itemHauteur));
|
||||||
|
|
||||||
|
double distanceX = cercleX - pointPlusProcheX;
|
||||||
|
double distanceY = cercleY - pointPlusProcheY;
|
||||||
|
double distanceAuCarre = (distanceX * distanceX) + (distanceY * distanceY);
|
||||||
|
|
||||||
|
if (distanceAuCarre < (cercleRayon * cercleRayon)) {
|
||||||
|
if (obj instanceof Bonus) {
|
||||||
|
double newRayon = demiCercleAvant.getRayon() + 3;
|
||||||
|
demiCercleAvant.setRayon(newRayon);
|
||||||
|
demiCercleArriere.setRayon(newRayon);
|
||||||
|
} else {
|
||||||
|
double newRayon = demiCercleAvant.getRayon() - 3;
|
||||||
|
if (newRayon < 10)
|
||||||
|
newRayon = 10;
|
||||||
|
demiCercleAvant.setRayon(newRayon);
|
||||||
|
demiCercleArriere.setRayon(newRayon);
|
||||||
|
}
|
||||||
|
ecran.listeObjets.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
labScore.setText("<html><h3>score : " + score + "</h3></html>");
|
||||||
// Gestion collision simple
|
// Gestion collision simple
|
||||||
double hauteurLigne = laligne.getHauteurLigneA(400);
|
double hauteurLigne = laligne.getHauteurLigneA(400);
|
||||||
if (hauteurLigne != -1) {
|
if (hauteurLigne != -1) {
|
||||||
// calcule de la distance entre le centre du cercle et la ligne
|
// calcule de la distance entre le centre du cercle et la ligne
|
||||||
double distance = Math.abs(hauteurLigne - demiCercleAvant.getY());
|
double distance = Math.abs(hauteurLigne - demiCercleAvant.getY());
|
||||||
|
|
||||||
// Si cette distance est strictement supérieure au rayon du bouclier,
|
|
||||||
// cela signifie que la ligne est sortie de la bulle !
|
|
||||||
if (distance > demiCercleAvant.getRayon()) {
|
if (distance > demiCercleAvant.getRayon()) {
|
||||||
gameOver();
|
if (!modeInvincible) gameOver();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Si on arrive au bout de la ligne
|
victoire();
|
||||||
gameOver();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void victoire() {
|
||||||
|
horloge.stop();
|
||||||
|
ecran.setVictoire(true);
|
||||||
|
|
||||||
|
int dureePartie = score / 25;
|
||||||
|
|
||||||
|
bdd.enregistrerPartie(dureePartie, idCampagneActive, difficulteActive, score, utilisateurIdConnecte);
|
||||||
|
}
|
||||||
|
|
||||||
public void gameOver() {
|
public void gameOver() {
|
||||||
horloge.stop();
|
horloge.stop();
|
||||||
ecran.setGameOver(true); // Affiche "Game Over" et le bouton Retour
|
ecran.setGameOver(true);
|
||||||
|
|
||||||
int dureePartie = score / 25; // Exemple : 25 frames par seconde
|
int dureePartie = score / 25;
|
||||||
|
|
||||||
// On utilise nos deux variables pour la sauvegarde !
|
bdd.enregistrerPartie(dureePartie, idCampagneActive, difficulteActive, score, utilisateurIdConnecte);
|
||||||
// L'appel est maintenant plus robuste grâce au nouveau GestionnaireBDD
|
|
||||||
bdd.enregistrerPartie(dureePartie, idCampagneActive, difficulteActive, score);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gestion touches...
|
// Gestion touches...
|
||||||
@@ -189,6 +290,7 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
demiCercleArriere.Monter();
|
demiCercleArriere.Monter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void keyReleased(KeyEvent e) {
|
public void keyReleased(KeyEvent e) {
|
||||||
if (e.getKeyCode() == 38) {
|
if (e.getKeyCode() == 38) {
|
||||||
@@ -196,5 +298,8 @@ public class Jeu implements KeyListener, ActionListener {
|
|||||||
demiCercleArriere.ArreterMonter();
|
demiCercleArriere.ArreterMonter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override public void keyTyped(KeyEvent e) {}
|
|
||||||
|
@Override
|
||||||
|
public void keyTyped(KeyEvent e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
|
|||||||
|
|
||||||
|
|
||||||
// nb de Segments qui composent la ligne
|
// nb de Segments qui composent la ligne
|
||||||
protected int nbSegments = 400;
|
protected int nbSegments = 50;
|
||||||
|
|
||||||
// amplitude maximale de l'inclinaison verticale des segments (dy)
|
// amplitude maximale de l'inclinaison verticale des segments (dy)
|
||||||
protected double inclinaisonMax = 30.0;
|
protected double inclinaisonMax = 30.0;
|
||||||
@@ -39,13 +39,18 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
|
|||||||
// Constructeur de la classe
|
// Constructeur de la classe
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
public Ligne() {
|
public Ligne() {
|
||||||
// Par défaut, si on ne précise rien, on met vitesse 5 et pente 30
|
// Par défaut, si on ne précise rien, on met vitesse 5 et pente 30 et 50 segments
|
||||||
this(5.0, 30.0);
|
this(5.0, 30.0, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ligne(double vitesse, double penteMax) {
|
public Ligne(double vitesse, double penteMax) {
|
||||||
|
this(vitesse, penteMax, 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Ligne(double vitesse, double penteMax, int segments) {
|
||||||
this.vitesseDefilement = vitesse;
|
this.vitesseDefilement = vitesse;
|
||||||
this.inclinaisonMax = penteMax;
|
this.inclinaisonMax = penteMax;
|
||||||
|
this.nbSegments = segments;
|
||||||
|
|
||||||
double x = 400;
|
double x = 400;
|
||||||
double y = 200;
|
double y = 200;
|
||||||
@@ -62,13 +67,13 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
|
|||||||
} else {
|
} else {
|
||||||
dy = (Math.random() * (2.0 * inclinaisonMax)) - inclinaisonMax;
|
dy = (Math.random() * (2.0 * inclinaisonMax)) - inclinaisonMax;
|
||||||
|
|
||||||
if (y + dy < 0 || y + dy > 600) {
|
if (y + dy < 50 || y + dy > 550) {
|
||||||
dy = -dy;
|
dy = -dy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s = new Segment(x, y, dx, dy);
|
s = new Segment(x, y, dx, dy);
|
||||||
s.setCouleur(new Color(0.2f, 0.2f, 0.2f));
|
s.setCouleur(new Color(0.5f, 0.5f, 0.5f));
|
||||||
|
|
||||||
x += dx;
|
x += dx;
|
||||||
y += dy;
|
y += dy;
|
||||||
|
|||||||
29
src/linea/Malus.java
Normal file
29
src/linea/Malus.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package linea;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
|
||||||
|
public class Malus extends ObjetGraphique {
|
||||||
|
|
||||||
|
private int largeur = 20;
|
||||||
|
private int hauteur = 20;
|
||||||
|
private double vitesseDefilement;
|
||||||
|
|
||||||
|
public Malus(double x, double y, double vitesse) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.vitesseDefilement = vitesse;
|
||||||
|
this.couleur = Color.RED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void Afficher(Graphics g) {
|
||||||
|
g.setColor(this.couleur);
|
||||||
|
g.fillRect((int)x, (int)y, largeur, hauteur);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void Animer() {
|
||||||
|
this.x -= vitesseDefilement;
|
||||||
|
}
|
||||||
|
}
|
||||||
58
src/linea/MenuHistorique.java
Normal file
58
src/linea/MenuHistorique.java
Normal file
@@ -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)"};
|
||||||
|
// DefaultTableModel = rendre les cellules non éditables
|
||||||
|
tableHistorique.setModel(new DefaultTableModel(data, columnNames) {
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int row, int column) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
58
src/linea/MenuLeaderboard.java
Normal file
58
src/linea/MenuLeaderboard.java
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
package linea;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.DefaultTableModel;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class MenuLeaderboard extends JPanel {
|
||||||
|
private JTable leaderboardTable;
|
||||||
|
private final Jeu jeu;
|
||||||
|
|
||||||
|
public MenuLeaderboard(Jeu jeu) {
|
||||||
|
this.jeu = jeu;
|
||||||
|
setLayout(new BorderLayout(10, 10));
|
||||||
|
setBackground(new Color(45, 45, 45));
|
||||||
|
|
||||||
|
JLabel titre = new JLabel("LEADERBOARD", SwingConstants.CENTER);
|
||||||
|
titre.setForeground(Color.WHITE);
|
||||||
|
titre.setFont(new Font("SansSerif", Font.BOLD, 40));
|
||||||
|
add(titre, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
// Configuration du tableau
|
||||||
|
leaderboardTable = new JTable();
|
||||||
|
leaderboardTable.setFont(new Font("SansSerif", Font.PLAIN, 16));
|
||||||
|
leaderboardTable.setRowHeight(25);
|
||||||
|
leaderboardTable.setBackground(new Color(60, 60, 60));
|
||||||
|
leaderboardTable.setForeground(Color.WHITE);
|
||||||
|
leaderboardTable.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 18));
|
||||||
|
leaderboardTable.getTableHeader().setBackground(new Color(30, 30, 30));
|
||||||
|
leaderboardTable.getTableHeader().setForeground(Color.WHITE);
|
||||||
|
|
||||||
|
JScrollPane scrollPane = new JScrollPane(leaderboardTable);
|
||||||
|
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 rafraichirLeaderboard() {
|
||||||
|
Object[][] data = jeu.bdd.getLeaderboardData();
|
||||||
|
String[] columnNames = {"Identifiant", "Score", "Date", "Campagne", "Difficulté"};
|
||||||
|
// DefaultTableModel = rendre les cellules non éditables
|
||||||
|
leaderboardTable.setModel(new DefaultTableModel(data, columnNames) {
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int row, int column) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,7 +29,8 @@ public class MenuLogin extends JPanel {
|
|||||||
fieldsPanel.add(identifiantField);
|
fieldsPanel.add(identifiantField);
|
||||||
fieldsPanel.add(new JLabel("Mot de passe :") {{ setForeground(Color.WHITE); setFont(new Font("SansSerif", Font.BOLD, 16)); }});
|
fieldsPanel.add(new JLabel("Mot de passe :") {{ setForeground(Color.WHITE); setFont(new Font("SansSerif", Font.BOLD, 16)); }});
|
||||||
fieldsPanel.add(motDePasseField);
|
fieldsPanel.add(motDePasseField);
|
||||||
// Boutons
|
|
||||||
|
// Boutons
|
||||||
JButton btnLogin = creerBouton("Se connecter");
|
JButton btnLogin = creerBouton("Se connecter");
|
||||||
JButton btnSignup = creerBouton("Créer un compte");
|
JButton btnSignup = creerBouton("Créer un compte");
|
||||||
JButton btnQuit = creerBouton("Quitter");
|
JButton btnQuit = creerBouton("Quitter");
|
||||||
@@ -44,7 +45,9 @@ public class MenuLogin extends JPanel {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jeu.bdd.verifierUtilisateur(identifiant, motDePasse)) {
|
int utilisateurId = jeu.bdd.verifierUtilisateur(identifiant, motDePasse);
|
||||||
|
if (utilisateurId != -1) {
|
||||||
|
jeu.setUtilisateurConnecte(utilisateurId, identifiant);
|
||||||
JOptionPane.showMessageDialog(this, "Connexion réussie ! Bienvenue " + identifiant + ".");
|
JOptionPane.showMessageDialog(this, "Connexion réussie ! Bienvenue " + identifiant + ".");
|
||||||
jeu.afficherMenuPrincipal();
|
jeu.afficherMenuPrincipal();
|
||||||
} else {
|
} else {
|
||||||
@@ -68,7 +71,6 @@ public class MenuLogin extends JPanel {
|
|||||||
JOptionPane.showMessageDialog(this, "Cet identifiant est déjà pris ou une erreur est survenue.", "Erreur", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(this, "Cet identifiant est déjà pris ou une erreur est survenue.", "Erreur", JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Action pour quitter
|
|
||||||
btnQuit.addActionListener(e -> {
|
btnQuit.addActionListener(e -> {
|
||||||
jeu.bdd.fermerConnexion();
|
jeu.bdd.fermerConnexion();
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import java.awt.*;
|
|||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
public class MenuPrincipal extends JPanel {
|
public class MenuPrincipal extends JPanel {
|
||||||
private JButton btnPlay;
|
private JButton btnCampaign;
|
||||||
private JButton btnCampaign; // Nouveau bouton
|
private JButton btnLeaderboard;
|
||||||
private JButton btnSettings;
|
private JButton btnHistorique;
|
||||||
private JButton btnQuit;
|
private JButton btnQuit;
|
||||||
|
|
||||||
public MenuPrincipal(Jeu jeu) {
|
public MenuPrincipal(Jeu jeu) {
|
||||||
@@ -20,30 +20,29 @@ public class MenuPrincipal extends JPanel {
|
|||||||
titre.setAlignmentX(Component.CENTER_ALIGNMENT);
|
titre.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||||
|
|
||||||
// Création des Boutons
|
// Création des Boutons
|
||||||
btnPlay = creerBouton("PLAY");
|
btnCampaign = creerBouton("CAMPAGNES");
|
||||||
btnCampaign = creerBouton("CAMPAGNES"); // Création
|
btnLeaderboard = creerBouton("LEADERBOARD");
|
||||||
btnSettings = creerBouton("SETTINGS");
|
btnHistorique = creerBouton("HISTORIQUE");
|
||||||
btnQuit = creerBouton("QUIT");
|
btnQuit = creerBouton("QUIT");
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
btnPlay.addActionListener(e -> jeu.lancerPartie());
|
|
||||||
|
|
||||||
// Action pour aller vers le menu campagne
|
|
||||||
// (Assure-toi d'avoir cette méthode dans ta classe Jeu)
|
|
||||||
btnCampaign.addActionListener(e -> jeu.afficherMenuCampagne());
|
btnCampaign.addActionListener(e -> jeu.afficherMenuCampagne());
|
||||||
|
|
||||||
btnSettings.addActionListener(e -> JOptionPane.showMessageDialog(this, "Options bientôt disponibles !"));
|
btnLeaderboard.addActionListener(e -> jeu.afficherLeaderboard());
|
||||||
|
|
||||||
|
btnHistorique.addActionListener(e->jeu.afficherMenuHistorique());
|
||||||
|
|
||||||
btnQuit.addActionListener(e -> System.exit(0));
|
btnQuit.addActionListener(e -> System.exit(0));
|
||||||
|
|
||||||
// Mise en page (espacement vertical)
|
// Mise en page (espacement vertical)
|
||||||
add(Box.createVerticalGlue());
|
add(Box.createVerticalGlue());
|
||||||
add(titre);
|
add(titre);
|
||||||
add(Box.createRigidArea(new Dimension(0, 50)));
|
|
||||||
add(btnPlay);
|
|
||||||
add(Box.createRigidArea(new Dimension(0, 15)));
|
add(Box.createRigidArea(new Dimension(0, 15)));
|
||||||
add(btnCampaign); // Ajout à l'affichage
|
add(btnCampaign);
|
||||||
add(Box.createRigidArea(new Dimension(0, 15)));
|
add(Box.createRigidArea(new Dimension(0, 15)));
|
||||||
add(btnSettings);
|
add(btnLeaderboard);
|
||||||
|
add(Box.createRigidArea(new Dimension(0, 15)));
|
||||||
|
add(btnHistorique);
|
||||||
add(Box.createRigidArea(new Dimension(0, 15)));
|
add(Box.createRigidArea(new Dimension(0, 15)));
|
||||||
add(btnQuit);
|
add(btnQuit);
|
||||||
add(Box.createVerticalGlue());
|
add(Box.createVerticalGlue());
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public class Voiture extends Cercle {
|
|||||||
|
|
||||||
public Voiture() {
|
public Voiture() {
|
||||||
super();
|
super();
|
||||||
this.rayon = 25;
|
this.rayon = 27;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -22,12 +22,10 @@ public class Voiture extends Cercle {
|
|||||||
Graphics2D g2D = (Graphics2D) g;
|
Graphics2D g2D = (Graphics2D) g;
|
||||||
g2D.setStroke(new BasicStroke(5.0f));
|
g2D.setStroke(new BasicStroke(5.0f));
|
||||||
|
|
||||||
// DESSINER LE DEMI-CERCLE ARRIERE (Au fond)
|
|
||||||
g2D.setColor(couleurArriere);
|
g2D.setColor(couleurArriere);
|
||||||
// Utilisation de rayon*2 pour la largeur et hauteur (cercle parfait)
|
g2D.draw(new Arc2D.Double(x - rayon, y - rayon, rayon * 2, rayon * 2, 90, 180, Arc2D.OPEN)); //(cercle parfait)
|
||||||
g2D.draw(new Arc2D.Double(x - rayon, y - rayon, rayon * 2, rayon * 2, 90, 180, Arc2D.OPEN));
|
|
||||||
|
|
||||||
// DESSINER LA VOITURE (Au milieu)
|
// DESSINER LA VOITURE
|
||||||
g.setColor(new Color(150, 50, 200));
|
g.setColor(new Color(150, 50, 200));
|
||||||
g.fillRect((int)x - 20, (int)y - 5, 40, 12);
|
g.fillRect((int)x - 20, (int)y - 5, 40, 12);
|
||||||
|
|
||||||
@@ -41,7 +39,6 @@ public class Voiture extends Cercle {
|
|||||||
g.setColor(Color.YELLOW);
|
g.setColor(Color.YELLOW);
|
||||||
g.fillOval((int)x + 15, (int)y - 2, 6, 6);
|
g.fillOval((int)x + 15, (int)y - 2, 6, 6);
|
||||||
|
|
||||||
// DESSINER LE DEMI-CERCLE AVANT (Par-dessus)
|
|
||||||
g2D.setColor(couleurAvant);
|
g2D.setColor(couleurAvant);
|
||||||
g2D.draw(new Arc2D.Double(x - rayon, y - rayon, rayon * 2, rayon * 2, 90, -180, Arc2D.OPEN));
|
g2D.draw(new Arc2D.Double(x - rayon, y - rayon, rayon * 2, rayon * 2, 90, -180, Arc2D.OPEN));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,35 +12,40 @@ public class ZoneDessin extends JPanel {
|
|||||||
// Etats du jeu
|
// Etats du jeu
|
||||||
protected boolean estArrete = false;
|
protected boolean estArrete = false;
|
||||||
protected boolean isGameOver = false;
|
protected boolean isGameOver = false;
|
||||||
|
protected boolean isVictoire = false;
|
||||||
|
|
||||||
// LE BOUTON DOIT ÊTRE PUBLIC POUR ÊTRE ACCESSIBLE DEPUIS JEU.JAVA
|
// LE BOUTON DOIT ÊTRE PUBLIC POUR ÊTRE ACCESSIBLE DEPUIS JEU.JAVA
|
||||||
public JButton btnRetour;
|
public JButton btnRetour;
|
||||||
|
|
||||||
public ZoneDessin(){
|
public ZoneDessin() {
|
||||||
// Layout null pour positionner le bouton pixel par pixel
|
// Layout null pour positionner le bouton pixel par pixel
|
||||||
setLayout(null);
|
setLayout(null);
|
||||||
setPreferredSize(new Dimension(800, 600));
|
setPreferredSize(new Dimension(800, 600));
|
||||||
setBackground(new Color(100,100,100));
|
setBackground(new Color(100, 100, 100));
|
||||||
|
|
||||||
// 2. Création et configuration du bouton
|
|
||||||
btnRetour = new JButton("Back to Menu");
|
btnRetour = new JButton("Back to Menu");
|
||||||
// x, y, largeur, hauteur (centré horizontalement pour une fenêtre de 800px)
|
// entré horizontalement pour une fenêtre de 800px
|
||||||
btnRetour.setBounds(300, 350, 200, 50);
|
btnRetour.setBounds(300, 350, 200, 50);
|
||||||
btnRetour.setFont(new Font("Arial", Font.BOLD, 16));
|
btnRetour.setFont(new Font("Arial", Font.BOLD, 16));
|
||||||
btnRetour.setFocusable(false); // Important pour ne pas gêner le clavier
|
btnRetour.setFocusable(false);
|
||||||
btnRetour.setVisible(false); // Caché au début
|
btnRetour.setVisible(false);
|
||||||
|
|
||||||
this.add(btnRetour);
|
this.add(btnRetour);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ... (méthodes ajouterObjet, viderObjets, arreter, demarrer restent pareilles) ...
|
public void ajouterObjet(ObjetGraphique unObjet) {
|
||||||
public void ajouterObjet(ObjetGraphique unObjet) { this.listeObjets.add(unObjet); }
|
this.listeObjets.add(unObjet);
|
||||||
public void viderObjets() { this.listeObjets.clear(); }
|
}
|
||||||
|
|
||||||
public void traiterBoucleAnimation(){
|
public void viderObjets() {
|
||||||
if (estArrete || isGameOver) return;
|
this.listeObjets.clear();
|
||||||
|
}
|
||||||
|
|
||||||
for (ObjetGraphique obj : listeObjets){
|
public void traiterBoucleAnimation() {
|
||||||
|
if (estArrete || isGameOver || isVictoire)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (ObjetGraphique obj : listeObjets) {
|
||||||
obj.Animer();
|
obj.Animer();
|
||||||
}
|
}
|
||||||
repaint();
|
repaint();
|
||||||
@@ -49,15 +54,15 @@ public class ZoneDessin extends JPanel {
|
|||||||
public void paintComponent(Graphics g) {
|
public void paintComponent(Graphics g) {
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
Graphics2D g2D = (Graphics2D) g;
|
Graphics2D g2D = (Graphics2D) g;
|
||||||
g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
|
g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
|
||||||
for (ObjetGraphique obj : listeObjets){
|
for (ObjetGraphique obj : listeObjets) {
|
||||||
obj.Afficher(g);
|
obj.Afficher(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affichage de l'écran Game Over
|
// Affichage de l'écran Game Over
|
||||||
if (isGameOver) {
|
if (isGameOver) {
|
||||||
g2D.setColor(new Color(0, 0, 0, 150)); // Fond sombre
|
g2D.setColor(new Color(0, 0, 0, 150));
|
||||||
g2D.fillRect(0, 0, getWidth(), getHeight());
|
g2D.fillRect(0, 0, getWidth(), getHeight());
|
||||||
|
|
||||||
g2D.setColor(Color.WHITE);
|
g2D.setColor(Color.WHITE);
|
||||||
@@ -65,12 +70,27 @@ public class ZoneDessin extends JPanel {
|
|||||||
String msg = "GAME OVER";
|
String msg = "GAME OVER";
|
||||||
int largeur = g2D.getFontMetrics().stringWidth(msg);
|
int largeur = g2D.getFontMetrics().stringWidth(msg);
|
||||||
g2D.drawString(msg, (getWidth() - largeur) / 2, getHeight() / 2 - 50);
|
g2D.drawString(msg, (getWidth() - largeur) / 2, getHeight() / 2 - 50);
|
||||||
|
} else if (isVictoire) {
|
||||||
|
g2D.setColor(new Color(0, 0, 0, 150));
|
||||||
|
g2D.fillRect(0, 0, getWidth(), getHeight());
|
||||||
|
|
||||||
|
g2D.setColor(Color.GREEN);
|
||||||
|
g2D.setFont(new Font("Arial", Font.BOLD, 50));
|
||||||
|
String msg = "VICTOIRE";
|
||||||
|
int largeur = g2D.getFontMetrics().stringWidth(msg);
|
||||||
|
g2D.drawString(msg, (getWidth() - largeur) / 2, getHeight() / 2 - 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGameOver(boolean state) {
|
public void setGameOver(boolean state) {
|
||||||
this.isGameOver = state;
|
this.isGameOver = state;
|
||||||
// 3. C'est ici qu'on affiche ou cache le bouton
|
btnRetour.setVisible(state);
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVictoire(boolean state) {
|
||||||
|
this.isVictoire = state;
|
||||||
btnRetour.setVisible(state);
|
btnRetour.setVisible(state);
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user