Compare commits

..

3 Commits

Author SHA1 Message Date
4ed39dd92a commentaires 2026-03-28 16:37:07 +01:00
B00M360
5660a6c5c6 Merge branch 'main' of https://titi.koxi.nl/blodat/projet-dev 2026-03-28 14:38:28 +01:00
B00M360
607ee1fff4 carré 2026-03-28 14:37:13 +01:00
7 changed files with 23 additions and 11 deletions

View File

@@ -14,18 +14,19 @@ public class Bonus extends ObjetCollectible {
@Override protected int getSeuilActivation() { return 220; }
@Override protected Color getCouleurCapture() { return Color.BLUE; }
@Override protected Color getCouleurCapture() { return Color.BLUE; } // couleur après avoir été ramasssé
@Override
protected double calculerY(double hauteurLigne) {
if (Math.random() > 0.5) return hauteurLigne - 10 - (Math.random() * 50);
if (Math.random() > 0.5) return hauteurLigne - 10 - (Math.random() * 50); // position du bonus
else return hauteurLigne + 10 + (Math.random() * 50);
}
@Override
protected void appliquerEffet(Joueur joueur) {
if (!monJeu.cheatMode) joueur.ajouterVie();
}
} // En cheat mode, le bonus ne sert à rien (on a déjà l'invincibilité)
@Override
protected void dessiner(Graphics g) {

View File

@@ -19,7 +19,7 @@ public class BonusTaille extends ObjetCollectible {
@Override
protected double calculerY(double hauteurLigne) {
if (Math.random() > 0.5) return hauteurLigne - 8 - (Math.random() * 45);
if (Math.random() > 0.5) return hauteurLigne - 8 - (Math.random() * 45); // position du bonus
else return hauteurLigne + 8 + (Math.random() * 45);
}

View File

@@ -20,6 +20,7 @@ public class GestionnaireNiveau {
public GestionnaireNiveau() {
try {
//chargement driver
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
System.err.println("[BDD] Impossible de charger le driver SQLite.");
@@ -79,6 +80,7 @@ public class GestionnaireNiveau {
}
return false;
}
//transition smooth entre les niveau
public Niveau getNiveauActuel() {
return niveaux.get(indexNiveau);

View File

@@ -8,6 +8,7 @@ public class GestionnaireScore {
public GestionnaireScore() {
try {
//chargement driver SQLite
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
System.err.println("[BDD] Impossible de charger le driver SQLite.");
@@ -25,6 +26,7 @@ public class GestionnaireScore {
try (Connection conn = DriverManager.getConnection(URL);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
//contre injection SQL
pstmt.setString(1, nom.trim());
pstmt.setInt(2, points);
pstmt.executeUpdate();

View File

@@ -182,7 +182,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
for (Joueur joueur : joueurs) {
joueur.mettreAJourRayon(rayonBase);
joueur.mettreAJourInvincibilite();
if (!cheatMode) joueur.verifierCollisionLigne(lili);
if (!cheatMode) joueur.verifierCollisionLigne(lili); // si cheat mode activé : plus de perte de vie
joueur.resterDansLigne(lili);
}

View File

@@ -19,12 +19,13 @@ public class Malus extends ObjetCollectible {
@Override
protected double calculerY(double hauteurLigne) {
if (Math.random() > 0.5) return hauteurLigne - 75 - (Math.random() * 30);
if (Math.random() > 0.5) return hauteurLigne - 75 - (Math.random() * 30); // position du malus
else return hauteurLigne + 75 + (Math.random() * 30);
}
@Override
protected void appliquerEffet(Joueur joueur) {
// On ne punit pas si le joueur est en cheat mode ou en période d'invincibilité (clignotement)
if (!monJeu.cheatMode && !joueur.estInvincible()) joueur.retirerVie();
}

View File

@@ -4,9 +4,11 @@ import java.awt.Color;
import java.awt.Graphics;
import java.util.List;
// Classe de base pour tous les objets qu'on peut ramasser (bonus, malus...)
// Elle gère toute la logique commune : apparition, déplacement, collision
public abstract class ObjetCollectible extends ObjetGraphique {
protected double taille;
protected boolean actif = false;
protected int compteurFrames = 0;
@@ -21,6 +23,7 @@ public abstract class ObjetCollectible extends ObjetGraphique {
this.joueurs = joueurs;
this.monJeu = j;
}
// Chaque sous-classe décide quand elle apparaît, où, quel effet elle a et comment elle se dessine
protected abstract int getSeuilActivation();
protected abstract double calculerY(double hauteurLigne);
@@ -44,6 +47,8 @@ public abstract class ObjetCollectible extends ObjetGraphique {
if (!actif) compteurFrames++;
if (compteurFrames >= getSeuilActivation() && !actif) {
// Quand on a attendu assez longtemps, l'objet spawn à droite de l'écran
actif = true;
dejaCapture = false;
x = 800;
@@ -58,12 +63,13 @@ public abstract class ObjetCollectible extends ObjetGraphique {
if (actif) {
double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll();
x -= vitesseLigne;
x -= vitesseLigne; // l'objet suit la vitesse du niveau
if (!dejaCapture) {
for (Joueur joueur : joueurs) {
if (joueur.verifierCollisionCollectible(x, y, taille, vitesseLigne)) {
appliquerEffet(joueur);
dejaCapture = true;
appliquerEffet(joueur); // délégué à la sous-classe
dejaCapture = true; // évite d'appliquer l'effet plusieurs fois
break;
}
}