game over ok

This commit is contained in:
2026-02-03 15:45:52 +01:00
parent 71a2eac8b2
commit a470a08504
8 changed files with 63 additions and 46 deletions

View File

@@ -1,42 +1,30 @@
### --- Java / Compilation Générique --- ### ### --- Java / JVM (Fichiers de compilation) ---
*.class
*.log
*.ctxt
*.mtj.tmp/
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
*.idea
*.out
### --- Dossiers de Build --- ###
target/
bin/ bin/
build/ build/
out/ out/
dist/ target/
*.class
*.jar
*.war
*.ear
### --- IntelliJ IDEA --- ### ### --- IntelliJ IDEA ---
.idea/ .idea/
*.iws .out/
*.iml *.iml
*.iws
*.ipr *.ipr
out/ # On garde parfois .idea/runConfigurations si on veut partager les configs de lancement,
# Si vous utilisez le plugin Task d'IntelliJ # mais dans le doute, mieux vaut tout ignorer.
.idea/tasks.xml
# Si vous utilisez des dictionnaires personnels
.idea/dictionaries
# On ignore les fichiers de cache et les logs d'indexation
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/modules.xml
### --- Logs et Temp --- ### ### --- Antigravity / Environnements locaux ---
# Dossiers de build spécifiques et logs
.antigravity/
logs/
*.log *.log
temp/
tmp/ tmp/
temp/
### --- Système / OS ---
.DS_Store
Thumbs.db

View File

@@ -124,8 +124,4 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl
} }
y+=depY; y+=depY;
} }
} }

View File

@@ -125,7 +125,7 @@ public class Jeu implements KeyListener, ActionListener{
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Démarrage du timer, qui rythmera l'animation // Démarrage du timer, qui rythmera l'animation
horloge = new Timer(20, this); horloge = new Timer(40, this);
horloge.start(); horloge.start();
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f)); demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
@@ -139,6 +139,18 @@ public class Jeu implements KeyListener, ActionListener{
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
ecran.traiterBoucleAnimation(); ecran.traiterBoucleAnimation();
double yLigne = laligne.getHauteurLigneA(400);
double yCercle = demiCercleAvant.getY();
if (Math.abs(yLigne - yCercle) > 30) {
gameOver();
}
}
public void gameOver() {
horloge.stop(); // On arrête le Timer
ecran.setGameOver(true); // On prévient la zone de dessin
} }
} }

View File

@@ -34,7 +34,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
public Ligne(){ public Ligne(){
// Valeurs initiales pour la position de la Ligne // Valeurs initiales pour la position de la Ligne
double x = 800; double x = 400;
double y = 200; double y = 200;
double xCourant = x; double xCourant = x;
@@ -93,4 +93,15 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
s.setX(s.getX() - vitesseDefilement); s.setX(s.getX() - vitesseDefilement);
} }
} }
public double getHauteurLigneA(double xCercle) {
for (Segment s : listSegments) {
// Si le segment couvre la position X du cercle
if (xCercle >= s.getX() && xCercle <= (s.getX() + s.xLong)) {
// Calcul de l'interpolation linéaire pour trouver le Y exact sur le segment
double ratio = (xCercle - s.getX()) / s.xLong;
return s.getY() + (ratio * s.yLong);
}
}
return -1; // Hors de la ligne
}
} }

View File

@@ -1,11 +1,6 @@
package linea; package linea;
import java.awt.BorderLayout; import java.awt.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.ArrayList; import java.util.ArrayList;
import javax.swing.JPanel; import javax.swing.JPanel;
@@ -22,6 +17,8 @@ public class ZoneDessin extends JPanel { // hérite d'une classe du frameWork st
// un booleen qui permet d'arreter l'animation (suspendre) // un booleen qui permet d'arreter l'animation (suspendre)
protected boolean estArrete = false; protected boolean estArrete = false;
protected boolean isGameOver = false;
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@@ -96,9 +93,22 @@ public class ZoneDessin extends JPanel { // hérite d'une classe du frameWork st
for (ObjetGraphique obj : listeObjets){ for (ObjetGraphique obj : listeObjets){
obj.Afficher(g); obj.Afficher(g);
} }
// à compléter if (isGameOver) {
g2D.setColor(new Color(0, 0, 0, 150)); // Fond noir transparent
g2D.fillRect(0, 0, getWidth(), getHeight());
g2D.setColor(Color.WHITE);
g2D.setFont(new Font("Arial", Font.BOLD, 50));
String msg = "GAME OVER";
int largeurTexte = g2D.getFontMetrics().stringWidth(msg);
g2D.drawString(msg, (getWidth() - largeurTexte) / 2, getHeight() / 2);
}
}
public void setGameOver(boolean state) {
this.isGameOver = state;
repaint();
} }
} }