From 60b656d394516bb635fe88a119e697aba549456e Mon Sep 17 00:00:00 2001 From: Gw3nd4l Date: Fri, 27 Mar 2026 10:46:24 +0100 Subject: [PATCH] inversion de sens du jeu --- src/linea/CampagneAutoroute.java | 1 + src/linea/CampagneEspace.java | 1 + src/linea/CampagneOcean.java | 1 + src/linea/Inversion.java | 29 +++++++++++++++++++++++++++++ src/linea/Jeu.java | 31 ++++++++++++++++++++++++++++--- 5 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/linea/Inversion.java diff --git a/src/linea/CampagneAutoroute.java b/src/linea/CampagneAutoroute.java index e0d437f..b009418 100644 --- a/src/linea/CampagneAutoroute.java +++ b/src/linea/CampagneAutoroute.java @@ -44,6 +44,7 @@ public class CampagneAutoroute { jeu.prochainBonusScore = 100 + jeu.random.nextInt(36); jeu.prochainMalusScore = 100 + jeu.random.nextInt(46); + jeu.prochainInversionScore = 150 + jeu.random.nextInt(100); jeu.layout.show(jeu.conteneurPrincipal, "JEU"); jeu.ecran.setFocusable(true); diff --git a/src/linea/CampagneEspace.java b/src/linea/CampagneEspace.java index e8be02f..50c6e72 100644 --- a/src/linea/CampagneEspace.java +++ b/src/linea/CampagneEspace.java @@ -46,6 +46,7 @@ public class CampagneEspace { jeu.prochainBonusScore = 100 + jeu.random.nextInt(26); jeu.prochainMalusScore = 100 + jeu.random.nextInt(26); + jeu.prochainInversionScore = 150 + jeu.random.nextInt(100); jeu.layout.show(jeu.conteneurPrincipal, "JEU"); jeu.ecran.setFocusable(true); diff --git a/src/linea/CampagneOcean.java b/src/linea/CampagneOcean.java index 602b3c5..5426ab5 100644 --- a/src/linea/CampagneOcean.java +++ b/src/linea/CampagneOcean.java @@ -47,6 +47,7 @@ public class CampagneOcean { jeuPrincipal.prochainBonusScore = 100 + jeuPrincipal.random.nextInt(26); jeuPrincipal.prochainMalusScore = 100 + jeuPrincipal.random.nextInt(26); + jeuPrincipal.prochainInversionScore = 150 + jeuPrincipal.random.nextInt(100); jeuPrincipal.layout.show(jeuPrincipal.conteneurPrincipal, "JEU"); jeuPrincipal.ecran.setFocusable(true); diff --git a/src/linea/Inversion.java b/src/linea/Inversion.java new file mode 100644 index 0000000..8b619e2 --- /dev/null +++ b/src/linea/Inversion.java @@ -0,0 +1,29 @@ +package linea; + +import java.awt.Color; +import java.awt.Graphics; + +public class Inversion extends ObjetGraphique { + + private int largeur = 20; + private int hauteur = 20; + private double vitesseDefilement; + + public Inversion(double x, double y, double vitesse) { + this.x = x; + this.y = y; + this.vitesseDefilement = vitesse; + this.couleur = new Color(128, 0, 255); + } + + @Override + public void Afficher(Graphics g) { + g.setColor(this.couleur); + g.fillRect((int)x, (int)y, largeur, hauteur); + } + + @Override + void Animer() { + this.x -= vitesseDefilement; + } +} \ No newline at end of file diff --git a/src/linea/Jeu.java b/src/linea/Jeu.java index 777f5c1..af13f78 100644 --- a/src/linea/Jeu.java +++ b/src/linea/Jeu.java @@ -32,6 +32,10 @@ public class Jeu implements KeyListener, ActionListener { protected Random random = new Random(); protected int prochainBonusScore; protected int prochainMalusScore; + protected int prochainInversionScore; + protected boolean inversionActive = false; + protected int inversionTimer = 0; + protected int utilisateurIdConnecte = -1; protected String identifiantUtilisateurConnecte; @@ -177,6 +181,7 @@ public class Jeu implements KeyListener, ActionListener { this.prochainBonusScore = 100 + random.nextInt(36); this.prochainMalusScore = 100 + random.nextInt(46); + this.prochainInversionScore = 500 + random.nextInt(200); } @Override @@ -215,9 +220,26 @@ public class Jeu implements KeyListener, ActionListener { } } + if (score == prochainInversionScore) { + double xSpawn = 810; + double yLigne = laligne.getHauteurLigneA(xSpawn); + if (yLigne != -1) { + ecran.ajouterObjet(new Inversion(xSpawn, yLigne - 10, laligne.vitesseDefilement)); + prochainInversionScore = score + 250 + random.nextInt(150); + } + } + + if (inversionActive) { + inversionTimer--; + laligne.vitesseDefilement = -Math.abs(laligne.vitesseDefilement); + if (inversionTimer <= 0) { + inversionActive = false; + laligne.vitesseDefilement = Math.abs(laligne.vitesseDefilement); + } + } for (int i = ecran.listeObjets.size() - 1; i >= 0; i--) { ObjetGraphique obj = ecran.listeObjets.get(i); - if (obj instanceof Bonus || obj instanceof Malus) { + if (obj instanceof Bonus || obj instanceof Malus || obj instanceof Inversion) { double itemLargeur = 20.0; double itemHauteur = 20.0; @@ -238,12 +260,15 @@ public class Jeu implements KeyListener, ActionListener { double newRayon = demiCercleAvant.getRayon() + 3; demiCercleAvant.setRayon(newRayon); demiCercleArriere.setRayon(newRayon); - } else { + } else if(obj instanceof Malus){ double newRayon = demiCercleAvant.getRayon() - 3; if (newRayon < 10) newRayon = 10; demiCercleAvant.setRayon(newRayon); demiCercleArriere.setRayon(newRayon); + } else if(obj instanceof Inversion){ + inversionActive = true; + inversionTimer = 75 + random.nextInt(50); } ecran.listeObjets.remove(i); } @@ -260,7 +285,7 @@ public class Jeu implements KeyListener, ActionListener { if (!modeInvincible) gameOver(); } } else { - victoire(); + if (!inversionActive) victoire(); } }