init: finish implementation niveau dans le jeu

This commit is contained in:
2026-03-24 22:32:59 +01:00
parent f8cf66f731
commit ca614a198b
19 changed files with 329 additions and 82 deletions

View File

@@ -23,7 +23,13 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// Propriété listes de segements: Une ligne est constitué de plusieurs segments.
// Stockage des segments afin de pouvoir les afficher et les animer plus tard
protected ArrayList<Segment> listeSegments = new ArrayList<>();
// propriété de la vitesse de base de déplace de la ligne
protected int vitesseLigne = 5;
// On définit les limites (plafond et sol)
protected int plafond = 50; // Empêche de monter trop haut (Y=0 est le bord haut)
protected int sol = 550; // Empêche de descendre trop bas (Y=600, est le bas)
//-------------------------------------------------------------------------
// METHODES
@@ -33,27 +39,75 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// Constructeur de la classe
//-------------------------------------------------------------------------
public Ligne(){
}
// Méthode pour (RE)générer la ligne
public void generer(int nbSegments, int difficulte){
// On vide la ligne précédente
this.listeSegments.clear();
// Valeurs initiales pour la position de la Ligne
double x = 800;
double y = 200;
double dx,dy;
// Plus le niveau est grand plus dy peut-être grand (pics plus abrupts)
double amplitude = 30 * difficulte;
// On réduit la largeur des segments pour "serrer" les pics
// Plus dx est petit, plus les pics sont proches les uns des autres
double largeurMin = 100 - (difficulte * 15);
// Création de la liste de segments qui composent la ligne
Segment s;
for (int i=0; i<nbSegments; i++){
// définition d'un nouveau segment
dx = Math.random()*20+80;
dy = Math.random()*40-20;
dx = Math.random()*20 + largeurMin;
dy = Math.random()*(amplitude*2) - amplitude;
// Vérification plafond de l'écran
if(y + dy < plafond){
// On force le segment à s'arréter à 50
dy = plafond - y;
}
// Vérification sol de l'écran
if(y + dy > sol){
// Si ça dépasse en bas, on force le segment à s'arrêter à 550
dy = sol - y;
}
s = new Segment(x,y,dx,dy);
s.setCouleur(new Color(0.2f,0.2f,0.2f));
//Ajouter un segment dans la ligne
this.listeSegments.add(s);
x+=dx;
y+=dy;
x += dx;
y += dy;
}
// On remet le segment courant à zéro afin de ne pas avoir un retard sur un cycle
// Et repartir proprement
this.SegCourant = null;
}
//Méthode set pour modifier la vitesse de déplacement la ligne
public void setVitesseLigne(int new_vitesse){
this.vitesseLigne = new_vitesse;
}
// ------------------------------------------------------------------------
// Méthode pour réactualiser le segment courant
// ------------------------------------------------------------------------
public void actualiserSegCourant(){
this.SegCourant = null;
for(Segment s: this.listeSegments){
if( (xCercle >= s.x) && ( xCercle <= (s.x + s.xLong) ) ){
this.SegCourant = s;
break;
}
}
}
//-------------------------------------------------------------------------
// Redéfinition de la méthode Afficher, spécifiquement pour la classe Ligne
@@ -64,19 +118,10 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// On définit l'épaisseur du trait
Graphics2D g2D = (Graphics2D) g;
g2D.setStroke(new BasicStroke(3.0f));
this.actualiserSegCourant();
for(Segment s: this.listeSegments){
s.Afficher(g);
if(SegCourant == null){
if( (xCercle >= s.x) && ( xCercle <= (s.x + s.xLong) ) ){
this.SegCourant = s;
}
}else{
if( (this.SegCourant.x + this.SegCourant.xLong) < xCercle ){
if( (s.x <= xCercle) && ((s.x + s.xLong) >= xCercle) ){
this.SegCourant = s;
}
}
}
}
}
@@ -92,7 +137,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// vers la gauche
// On modifiera cette méthode en fonction du niveau de jeu
for(Segment s: this.listeSegments){
s.x -= 5;
s.x -= this.vitesseLigne;
}
}