init: finish implementation niveau dans le jeu
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user