188 lines
4.3 KiB
Java
188 lines
4.3 KiB
Java
|
|
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();
|
||
|
|
}
|
||
|
|
}
|