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(); } }