Files
projet-dev/src/Joueur.java

188 lines
4.3 KiB
Java
Raw Normal View History

2026-03-26 20:08:52 +01:00
package linea;
import java.awt.Color;
public class Joueur {
protected Cercle demiCercleAvant;
protected Cercle demiCercleArriere;
protected int vies = 3;
protected boolean enCollision = false;
protected int compteurInvincible = 0;
protected boolean invincibiliteRouge = false;
protected boolean bonusTailleActif = false;
protected int compteurBonusTaille = 0;
protected boolean estMort = false;
protected Color couleurAvant;
protected Color couleurArriere;
protected int toucheHaut;
protected int toucheBas;
public Joueur(Color couleurAvant, Color couleurArriere, int toucheHaut, int toucheBas) {
this.demiCercleAvant = new Cercle(90, -180);
this.demiCercleArriere = new Cercle(90, 180);
this.couleurAvant = couleurAvant;
this.couleurArriere = couleurArriere;
this.toucheHaut = toucheHaut;
this.toucheBas = toucheBas;
appliquerCouleurs();
}
public void appliquerTouche(int keyCode, boolean pressed) {
if (estMort) return;
if (keyCode == toucheHaut) {
if (pressed) {
demiCercleAvant.Monter();
demiCercleArriere.Monter();
} else {
demiCercleAvant.ArreterMonter();
demiCercleArriere.ArreterMonter();
}
}
if (keyCode == toucheBas) {
if (pressed) {
demiCercleAvant.Descendre();
demiCercleArriere.Descendre();
} else {
demiCercleAvant.ArreterDescendre();
demiCercleArriere.ArreterDescendre();
}
}
}
public void mettreAJourRayon(double rayonBase) {
double rayon = rayonBase;
if (bonusTailleActif) {
rayon += 30;
compteurBonusTaille--;
if (compteurBonusTaille <= 0) {
bonusTailleActif = false;
}
}
demiCercleAvant.setRayon(rayon);
demiCercleArriere.setRayon(rayon);
}
public void mettreAJourInvincibilite() {
if (estMort) {
demiCercleAvant.setCouleur(new Color(0, 0, 0, 0));
demiCercleArriere.setCouleur(new Color(0, 0, 0, 0));
return;
}
if (compteurInvincible < 75) {
compteurInvincible++;
if (compteurInvincible % 10 < 5) {
if (invincibiliteRouge) {
demiCercleArriere.setCouleur(new Color(1f, 0f, 0f));
demiCercleAvant.setCouleur(new Color(1f, 0f, 0f));
} else {
demiCercleArriere.setCouleur(new Color(255, 255, 255, 150));
demiCercleAvant.setCouleur(new Color(255, 255, 255, 150));
}
} else {
appliquerCouleurs();
}
} else {
appliquerCouleurs();
}
}
public boolean estInvincible() {
return compteurInvincible < 75;
}
public void verifierCollisionLigne(Ligne li) {
if (estMort || estInvincible()) return;
if (demiCercleArriere.VerifierCollision(li)) {
if (!enCollision) {
vies--;
enCollision = true;
compteurInvincible = 0;
invincibiliteRouge = true;
}
} else {
enCollision = false;
}
if (vies <= 0) {
vies = 0;
estMort = true;
}
}
public boolean verifierCollisionCollectible(double itemX, double itemY, double itemTaille, double vitesseLigne) {
if (estMort) return false;
double centreX = itemX + (itemTaille / 2.0);
if (centreX <= demiCercleAvant.x && centreX > demiCercleAvant.x - vitesseLigne) {
double hautCercle = demiCercleAvant.y - demiCercleAvant.getRayon();
double basCercle = demiCercleAvant.y + demiCercleAvant.getRayon();
return itemY > hautCercle && (itemY + itemTaille) < basCercle;
}
return false;
}
public void resterDansLigne(Ligne li) {
if (estMort) return;
demiCercleArriere.ResterDansLigne(li);
demiCercleAvant.ResterDansLigne(li);
}
public void activerBonusTaille() {
bonusTailleActif = true;
compteurBonusTaille = 150;
}
public void ajouterVie() {
vies++;
}
public void retirerVie() {
vies--;
invincibiliteRouge = true;
compteurInvincible = 0;
if (vies <= 0) {
vies = 0;
estMort = true;
}
}
public void resetInvincibilite() {
compteurInvincible = 0;
invincibiliteRouge = false;
}
public void appliquerCouleurs() {
demiCercleArriere.setCouleur(couleurArriere);
demiCercleAvant.setCouleur(couleurAvant);
}
public void ajouterDansEcran(ZoneDessin ecran) {
ecran.ajouterObjet(demiCercleArriere);
ecran.ajouterObjet(demiCercleAvant);
}
public void reinitialiser(double posY) {
vies = 3;
enCollision = false;
compteurInvincible = 0;
invincibiliteRouge = false;
bonusTailleActif = false;
compteurBonusTaille = 0;
estMort = false;
demiCercleAvant.y = posY;
demiCercleAvant.vitesse = -1.0;
demiCercleArriere.y = posY;
demiCercleArriere.vitesse = -1.0;
appliquerCouleurs();
}
}