mode 2 joueurs
This commit is contained in:
@@ -2,6 +2,7 @@ package linea;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.util.List;
|
||||
|
||||
public class Bonus extends ObjetGraphique {
|
||||
|
||||
@@ -10,14 +11,13 @@ public class Bonus extends ObjetGraphique {
|
||||
protected int compteurFrames = 0;
|
||||
protected boolean dejaCapture = false;
|
||||
|
||||
|
||||
protected Ligne maLigne;
|
||||
protected Cercle monCercle;
|
||||
protected List<Joueur> joueurs;
|
||||
protected Jeu monJeu;
|
||||
|
||||
public Bonus(Ligne l, Cercle c, Jeu j) {
|
||||
public Bonus(Ligne l, List<Joueur> joueurs, Jeu j) {
|
||||
this.maLigne = l;
|
||||
this.monCercle = c;
|
||||
this.joueurs = joueurs;
|
||||
this.monJeu = j;
|
||||
this.couleur = Color.GREEN;
|
||||
}
|
||||
@@ -25,11 +25,7 @@ public class Bonus extends ObjetGraphique {
|
||||
@Override
|
||||
void Afficher(Graphics g) {
|
||||
if (actif) {
|
||||
if (dejaCapture) {
|
||||
g.setColor(Color.BLUE);
|
||||
} else {
|
||||
g.setColor(this.couleur);
|
||||
}
|
||||
g.setColor(dejaCapture ? Color.BLUE : this.couleur);
|
||||
g.fillRect((int)Math.round(x), (int)Math.round(y), (int)taille, (int)taille);
|
||||
}
|
||||
}
|
||||
@@ -40,12 +36,9 @@ public class Bonus extends ObjetGraphique {
|
||||
compteurFrames++;
|
||||
}
|
||||
|
||||
|
||||
if (compteurFrames >= 220 && !actif) {
|
||||
|
||||
actif = true;
|
||||
dejaCapture = false;
|
||||
|
||||
x = 800;
|
||||
|
||||
double hauteurLigne = 300;
|
||||
@@ -69,26 +62,19 @@ public class Bonus extends ObjetGraphique {
|
||||
double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll();
|
||||
x -= vitesseLigne;
|
||||
|
||||
double centreX = x + (taille / 2.0);
|
||||
|
||||
if (centreX <= monCercle.x && centreX > monCercle.x - vitesseLigne) {
|
||||
|
||||
double hautCercle = monCercle.y - monCercle.getRayon();
|
||||
double basCercle = monCercle.y + monCercle.getRayon();
|
||||
|
||||
if (y > hautCercle && (y + taille) < basCercle) {
|
||||
|
||||
if (!dejaCapture) {
|
||||
monJeu.vies += 1;
|
||||
if (!dejaCapture) {
|
||||
for (Joueur joueur : joueurs) {
|
||||
if (joueur.verifierCollisionCollectible(x, y, taille, vitesseLigne)) {
|
||||
joueur.ajouterVie();
|
||||
dejaCapture = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Quand il sort de l'écran, on le désactive pour relancer le chrono !
|
||||
if (x + taille < 0) {
|
||||
actif = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,21 +2,22 @@ package linea;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.util.List;
|
||||
|
||||
public class BonusTaille extends ObjetGraphique {
|
||||
|
||||
protected double taille = 12;
|
||||
protected boolean actif = false;
|
||||
protected int compteurFrames = 200; // pour avoir une position differente des autres bonuss
|
||||
protected int compteurFrames = 200;
|
||||
protected boolean dejaCapture = false;
|
||||
|
||||
protected Ligne maLigne;
|
||||
protected Cercle monCercle;
|
||||
protected List<Joueur> joueurs;
|
||||
protected Jeu monJeu;
|
||||
|
||||
public BonusTaille(Ligne l, Cercle c, Jeu j) {
|
||||
public BonusTaille(Ligne l, List<Joueur> joueurs, Jeu j) {
|
||||
this.maLigne = l;
|
||||
this.monCercle = c;
|
||||
this.joueurs = joueurs;
|
||||
this.monJeu = j;
|
||||
this.couleur = Color.CYAN;
|
||||
}
|
||||
@@ -24,11 +25,7 @@ public class BonusTaille extends ObjetGraphique {
|
||||
@Override
|
||||
void Afficher(Graphics g) {
|
||||
if (actif) {
|
||||
if (dejaCapture) {
|
||||
g.setColor(new Color(255, 255, 255, 100));
|
||||
} else {
|
||||
g.setColor(this.couleur);
|
||||
}
|
||||
g.setColor(dejaCapture ? new Color(255, 255, 255, 100) : this.couleur);
|
||||
g.fillOval((int)Math.round(x), (int)Math.round(y), (int)taille, (int)taille);
|
||||
}
|
||||
}
|
||||
@@ -39,7 +36,6 @@ public class BonusTaille extends ObjetGraphique {
|
||||
compteurFrames++;
|
||||
}
|
||||
|
||||
|
||||
if (compteurFrames >= 320 && !actif) {
|
||||
actif = true;
|
||||
dejaCapture = false;
|
||||
@@ -66,16 +62,12 @@ public class BonusTaille extends ObjetGraphique {
|
||||
double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll();
|
||||
x -= vitesseLigne;
|
||||
|
||||
double centreX = x + (taille / 2.0);
|
||||
|
||||
if (centreX <= monCercle.x && centreX > monCercle.x - vitesseLigne) {
|
||||
double hautCercle = monCercle.y - monCercle.getRayon();
|
||||
double basCercle = monCercle.y + monCercle.getRayon();
|
||||
|
||||
if (y > hautCercle && (y + taille) < basCercle) {
|
||||
if (!dejaCapture) {
|
||||
monJeu.activerBonusTaille();
|
||||
if (!dejaCapture) {
|
||||
for (Joueur joueur : joueurs) {
|
||||
if (joueur.verifierCollisionCollectible(x, y, taille, vitesseLigne)) {
|
||||
joueur.activerBonusTaille();
|
||||
dejaCapture = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
210
src/Jeu.java
210
src/Jeu.java
@@ -8,6 +8,8 @@ import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
@@ -18,43 +20,34 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
|
||||
|
||||
protected ZoneDessin ecran = new ZoneDessin();
|
||||
|
||||
protected Cercle demiCercleAvant = new Cercle(90, -180); // celui qui est sur la ligne
|
||||
protected Cercle demiCercleArriere = new Cercle(90, 180); // celui qui est derrière la ligne
|
||||
|
||||
protected GestionnaireNiveau gestionnaireNiveau = new GestionnaireNiveau();
|
||||
protected Ligne lili = new Ligne(new NoiseGenerator(0), gestionnaireNiveau);
|
||||
|
||||
protected List<Joueur> joueurs = new ArrayList<>();
|
||||
protected boolean deuxJoueurs = false;
|
||||
|
||||
protected Timer horloge;
|
||||
|
||||
protected double score = 1;
|
||||
protected JLabel labScore;
|
||||
protected int vies = 3;
|
||||
|
||||
protected GestionnaireScore gestionnaireBDD = new GestionnaireScore();
|
||||
|
||||
protected GestionnaireFinDePartie gestionnaireFinDePartie;
|
||||
|
||||
protected int compteurFrames = 0;
|
||||
protected boolean enCollision = false;
|
||||
protected boolean estGameOver = false;
|
||||
protected JLabel labGameOver;
|
||||
protected int compteurInvincible = 0;
|
||||
public int typeInvincibilite = 0;
|
||||
public boolean invincibiliteRouge = false;
|
||||
|
||||
protected boolean bonusTailleActif = false;
|
||||
protected int compteurBonusTaille = 0;
|
||||
|
||||
protected String pseudo = "";
|
||||
protected JFrame fenetre;
|
||||
protected MenuPrincipal menu;
|
||||
|
||||
|
||||
public Jeu() {
|
||||
labScore = new JLabel();
|
||||
labScore.setForeground(Color.WHITE);
|
||||
labScore.setText("<html><h3>" + (int) score + "</h3></html>");
|
||||
labScore.setBounds(20, 0, 200, 50);
|
||||
labScore.setBounds(20, 0, 600, 50);
|
||||
ecran.add(labScore);
|
||||
|
||||
labGameOver = new JLabel("GAME OVER", SwingConstants.CENTER);
|
||||
@@ -70,31 +63,31 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
|
||||
ecran.traiterBoucleAnimation();
|
||||
}
|
||||
|
||||
private Joueur creerJoueur1() {
|
||||
return new Joueur(
|
||||
new Color(0.0f, 0.5f, 0.0f), new Color(0.8f, 0.0f, 0.0f),
|
||||
KeyEvent.VK_UP, KeyEvent.VK_DOWN
|
||||
);
|
||||
}
|
||||
|
||||
private Joueur creerJoueur2() {
|
||||
return new Joueur(
|
||||
new Color(0.0f, 0.3f, 0.8f), new Color(0.6f, 0.0f, 0.6f),
|
||||
KeyEvent.VK_Z, KeyEvent.VK_S
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
int keyCode = e.getKeyCode();
|
||||
|
||||
if (keyCode == 38) { // flèche haut
|
||||
demiCercleAvant.Monter();
|
||||
demiCercleArriere.Monter();
|
||||
}
|
||||
if (keyCode == 40) { // flèche bas
|
||||
demiCercleAvant.Descendre();
|
||||
demiCercleArriere.Descendre();
|
||||
for (Joueur joueur : joueurs) {
|
||||
joueur.appliquerTouche(e.getKeyCode(), true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
int keyCode = e.getKeyCode();
|
||||
|
||||
if (keyCode == 38) { // flèche haut
|
||||
demiCercleAvant.ArreterMonter();
|
||||
demiCercleArriere.ArreterMonter();
|
||||
}
|
||||
if (keyCode == 40) { // flèche bas
|
||||
demiCercleAvant.ArreterDescendre();
|
||||
demiCercleArriere.ArreterDescendre();
|
||||
for (Joueur joueur : joueurs) {
|
||||
joueur.appliquerTouche(e.getKeyCode(), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,20 +108,29 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
|
||||
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
}
|
||||
|
||||
public void lancerPartie(String pseudoSaisi) {
|
||||
public void lancerPartie(String pseudoSaisi, boolean modeDeuxJoueurs) {
|
||||
pseudo = pseudoSaisi;
|
||||
deuxJoueurs = modeDeuxJoueurs;
|
||||
|
||||
// lignes pour ajouter les bonus
|
||||
ecran.ajouterObjet(new Bonus(lili, demiCercleAvant, this));
|
||||
ecran.ajouterObjet(new Malus(lili, demiCercleAvant, this));
|
||||
ecran.ajouterObjet(new BonusTaille(lili, demiCercleAvant, this));
|
||||
joueurs.clear();
|
||||
joueurs.add(creerJoueur1());
|
||||
if (deuxJoueurs) {
|
||||
joueurs.add(creerJoueur2());
|
||||
}
|
||||
|
||||
for (Joueur joueur : joueurs) {
|
||||
ecran.ajouterObjet(joueur.demiCercleArriere);
|
||||
}
|
||||
|
||||
// A FAIRE : placer dans l'écran tous les objets graphiques nécessaires
|
||||
ecran.ajouterObjet(demiCercleArriere);
|
||||
ecran.ajouterObjet(lili);
|
||||
ecran.ajouterObjet(demiCercleAvant);
|
||||
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
|
||||
demiCercleAvant.setCouleur(new Color(0.0f, 0.5f, 0.0f));
|
||||
|
||||
for (Joueur joueur : joueurs) {
|
||||
ecran.ajouterObjet(joueur.demiCercleAvant);
|
||||
}
|
||||
|
||||
ecran.ajouterObjet(new Bonus(lili, joueurs, this));
|
||||
ecran.ajouterObjet(new Malus(lili, joueurs, this));
|
||||
ecran.ajouterObjet(new BonusTaille(lili, joueurs, this));
|
||||
|
||||
ecran.addKeyListener(this);
|
||||
ecran.setFocusable(true);
|
||||
@@ -140,124 +142,78 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
|
||||
|
||||
score = 1;
|
||||
compteurFrames = 0;
|
||||
vies = 3;
|
||||
enCollision = false;
|
||||
estGameOver = false;
|
||||
compteurInvincible = 0;
|
||||
invincibiliteRouge = false;
|
||||
bonusTailleActif = false;
|
||||
compteurBonusTaille = 0;
|
||||
gestionnaireNiveau.reinitialiser();
|
||||
gestionnaireFinDePartie.reinitialiser();
|
||||
|
||||
double posY = deuxJoueurs ? 250 : 200;
|
||||
for (int i = 0; i < joueurs.size(); i++) {
|
||||
joueurs.get(i).reinitialiser(posY + i * 100);
|
||||
}
|
||||
|
||||
ecran.demarrer();
|
||||
|
||||
if (horloge == null) {
|
||||
horloge = new Timer(40, this);
|
||||
}
|
||||
horloge.start();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void activerBonusTaille() {
|
||||
bonusTailleActif = true;
|
||||
// A 40ms par tick d'horloge, 150 frames = environ 6 secondes de bonus
|
||||
compteurBonusTaille = 150;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (estGameOver == true) {
|
||||
return;
|
||||
}
|
||||
if (estGameOver) return;
|
||||
|
||||
gestionnaireNiveau.mettreAJour();
|
||||
if (gestionnaireNiveau.aChangéDeNiveau()) {
|
||||
compteurInvincible = 0;
|
||||
invincibiliteRouge = false;
|
||||
for (Joueur joueur : joueurs) {
|
||||
joueur.resetInvincibilite();
|
||||
}
|
||||
}
|
||||
ecran.setCouleurFond(gestionnaireNiveau.getCouleurFondInterpolee());
|
||||
|
||||
double rayon = gestionnaireNiveau.getRayonCercle();
|
||||
double rayonBase = gestionnaireNiveau.getRayonCercle();
|
||||
|
||||
|
||||
if (bonusTailleActif == true) {
|
||||
rayon = rayon + 30;
|
||||
compteurBonusTaille = compteurBonusTaille - 1;
|
||||
|
||||
if (compteurBonusTaille <= 0) {
|
||||
bonusTailleActif = false;
|
||||
}
|
||||
for (Joueur joueur : joueurs) {
|
||||
joueur.mettreAJourRayon(rayonBase);
|
||||
joueur.mettreAJourInvincibilite();
|
||||
joueur.verifierCollisionLigne(lili);
|
||||
joueur.resterDansLigne(lili);
|
||||
}
|
||||
demiCercleAvant.setRayon(rayon);
|
||||
demiCercleArriere.setRayon(rayon);
|
||||
|
||||
ecran.traiterBoucleAnimation();
|
||||
|
||||
compteurFrames = compteurFrames + 1;
|
||||
compteurFrames++;
|
||||
if (compteurFrames >= 25) {
|
||||
score = score + 1;
|
||||
score++;
|
||||
compteurFrames = 0;
|
||||
}
|
||||
|
||||
if (compteurInvincible < 75) {
|
||||
compteurInvincible = compteurInvincible + 1;
|
||||
|
||||
// clignotement
|
||||
if (compteurInvincible % 10 < 5) {
|
||||
if (invincibiliteRouge) {
|
||||
// degats = rouge
|
||||
demiCercleArriere.setCouleur(new Color(1f, 0f, 0f));
|
||||
demiCercleAvant.setCouleur(new Color(1f, 0f, 0f));
|
||||
} else {
|
||||
// niveau/debut = blanc
|
||||
demiCercleArriere.setCouleur(new Color(255, 255, 255, 150));
|
||||
demiCercleAvant.setCouleur(new Color(255, 255, 255, 150));
|
||||
}
|
||||
} else {
|
||||
// Couleurs normales entre deux clignotements
|
||||
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
|
||||
demiCercleAvant.setCouleur(new Color(0.0f, 0.5f, 0.0f));
|
||||
}
|
||||
|
||||
} else {
|
||||
//couleur normale a la fin
|
||||
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
|
||||
demiCercleAvant.setCouleur(new Color(0.0f, 0.5f, 0.0f));
|
||||
|
||||
if (demiCercleArriere.VerifierCollision(lili)) {
|
||||
if (enCollision == false) {
|
||||
vies = vies - 1;
|
||||
enCollision = true;
|
||||
compteurInvincible = 0;
|
||||
invincibiliteRouge = true; // On a touché la ligne : on déclenche le ROUGE !
|
||||
}
|
||||
} else {
|
||||
enCollision = false;
|
||||
}
|
||||
|
||||
if (demiCercleArriere.VerifierCollision(lili)) {
|
||||
if (enCollision == false) {
|
||||
vies = vies - 1; // La nouvelle logique : on perd 1 vie
|
||||
enCollision = true;
|
||||
compteurInvincible = 0;
|
||||
}
|
||||
} else {
|
||||
enCollision = false;
|
||||
boolean tousMotrs = true;
|
||||
for (Joueur joueur : joueurs) {
|
||||
if (!joueur.estMort) {
|
||||
tousMotrs = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (vies <= 0) {
|
||||
vies = 0;
|
||||
if (tousMotrs) {
|
||||
estGameOver = true;
|
||||
// Le gestionnaire s'occupe d'arrêter l'écran, afficher le label et sauvegarder
|
||||
gestionnaireFinDePartie.declencherGameOver(ecran, pseudo, (int) score);
|
||||
}
|
||||
|
||||
labScore.setText("<html><h3>Score : " + (int) score + " | Vies : " + vies + " | Niv. " + gestionnaireNiveau.getNumeroNiveau() + "</h3></html>");
|
||||
mettreAJourLabel();
|
||||
}
|
||||
|
||||
demiCercleArriere.ResterDansLigne(lili);
|
||||
demiCercleAvant.ResterDansLigne(lili);
|
||||
private void mettreAJourLabel() {
|
||||
StringBuilder sb = new StringBuilder("<html><h3>Score : " + (int) score + " | ");
|
||||
if (deuxJoueurs) {
|
||||
sb.append("J1 : ").append(joueurs.get(0).vies).append(" | ");
|
||||
sb.append("J2 : ").append(joueurs.get(1).vies).append(" | ");
|
||||
} else {
|
||||
sb.append("Vies : ").append(joueurs.get(0).vies).append(" | ");
|
||||
}
|
||||
sb.append("Niv. ").append(gestionnaireNiveau.getNumeroNiveau()).append("</h3></html>");
|
||||
labScore.setText(sb.toString());
|
||||
}
|
||||
|
||||
private void retourMenu() {
|
||||
@@ -267,11 +223,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
|
||||
|
||||
gestionnaireNiveau.reinitialiser();
|
||||
lili = new Ligne(new NoiseGenerator(0), gestionnaireNiveau);
|
||||
|
||||
demiCercleAvant.y = 200;
|
||||
demiCercleAvant.vitesse = -1.0;
|
||||
demiCercleArriere.y = 200;
|
||||
demiCercleArriere.vitesse = -1.0;
|
||||
joueurs.clear();
|
||||
|
||||
ecran.viderObjets();
|
||||
menu.afficher(pseudo);
|
||||
@@ -283,7 +235,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (estGameOver == true) {
|
||||
if (estGameOver) {
|
||||
retourMenu();
|
||||
}
|
||||
}
|
||||
|
||||
187
src/Joueur.java
Normal file
187
src/Joueur.java
Normal file
@@ -0,0 +1,187 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package linea;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.util.List;
|
||||
|
||||
public class Malus extends ObjetGraphique {
|
||||
|
||||
@@ -11,12 +12,12 @@ public class Malus extends ObjetGraphique {
|
||||
protected boolean dejaCapture = false;
|
||||
|
||||
protected Ligne maLigne;
|
||||
protected Cercle monCercle;
|
||||
protected List<Joueur> joueurs;
|
||||
protected Jeu monJeu;
|
||||
|
||||
public Malus(Ligne l, Cercle c, Jeu j) {
|
||||
public Malus(Ligne l, List<Joueur> joueurs, Jeu j) {
|
||||
this.maLigne = l;
|
||||
this.monCercle = c;
|
||||
this.joueurs = joueurs;
|
||||
this.monJeu = j;
|
||||
this.couleur = Color.RED;
|
||||
}
|
||||
@@ -24,11 +25,7 @@ public class Malus extends ObjetGraphique {
|
||||
@Override
|
||||
void Afficher(Graphics g) {
|
||||
if (actif) {
|
||||
if (dejaCapture) {
|
||||
g.setColor(Color.black);
|
||||
} else {
|
||||
g.setColor(this.couleur);
|
||||
}
|
||||
g.setColor(dejaCapture ? Color.BLACK : this.couleur);
|
||||
g.fillRect((int)Math.round(x), (int)Math.round(y), (int)taille, (int)taille);
|
||||
}
|
||||
}
|
||||
@@ -40,10 +37,8 @@ public class Malus extends ObjetGraphique {
|
||||
}
|
||||
|
||||
if (compteurFrames >= 250 && !actif) {
|
||||
|
||||
actif = true;
|
||||
dejaCapture = false;
|
||||
|
||||
x = 800;
|
||||
|
||||
double hauteurLigne = 300;
|
||||
@@ -67,20 +62,12 @@ public class Malus extends ObjetGraphique {
|
||||
double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll();
|
||||
x -= vitesseLigne;
|
||||
|
||||
double centreX = x + (taille / 2.0);
|
||||
|
||||
if (centreX <= monCercle.x && centreX > monCercle.x - vitesseLigne) {
|
||||
|
||||
double hautCercle = monCercle.y - monCercle.getRayon();
|
||||
double basCercle = monCercle.y + monCercle.getRayon();
|
||||
|
||||
if (y > hautCercle && (y + taille) < basCercle) {
|
||||
|
||||
if (!dejaCapture) {
|
||||
monJeu.vies -= 1;
|
||||
if (!dejaCapture) {
|
||||
for (Joueur joueur : joueurs) {
|
||||
if (joueur.verifierCollisionCollectible(x, y, taille, vitesseLigne)) {
|
||||
joueur.retirerVie();
|
||||
dejaCapture = true;
|
||||
monJeu.invincibiliteRouge = true;
|
||||
monJeu.compteurInvincible = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -90,4 +77,4 @@ public class Malus extends ObjetGraphique {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
// Classe qui représente le menu principal du jeu (affiché au lancement).
|
||||
public class MenuPrincipal {
|
||||
|
||||
private JFrame fenetre;
|
||||
@@ -25,33 +24,36 @@ public class MenuPrincipal {
|
||||
this.jeu = jeu;
|
||||
}
|
||||
|
||||
// Construit et affiche le panneau du menu dans la fenêtre
|
||||
public void afficher(String pseudoActuel) {
|
||||
|
||||
JPanel panneau = new JPanel(new GridLayout(6, 1, 10, 10));
|
||||
JPanel panneau = new JPanel(new GridLayout(7, 1, 10, 10));
|
||||
|
||||
JLabel titre = new JLabel("LINEA", SwingConstants.CENTER);
|
||||
champPseudo = new JTextField(pseudoActuel, 15);
|
||||
|
||||
JButton boutonJouer = new JButton("Jouer");
|
||||
JButton bouton1Joueur = new JButton("1 Joueur");
|
||||
JButton bouton2Joueurs = new JButton("2 Joueurs");
|
||||
JButton boutonClassement = new JButton("Classement");
|
||||
JButton boutonQuitter = new JButton("Quitter");
|
||||
|
||||
boutonJouer.addActionListener(new ActionListener() {
|
||||
bouton1Joueur.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
jeu.lancerPartie(champPseudo.getText());
|
||||
jeu.lancerPartie(champPseudo.getText(), false);
|
||||
}
|
||||
});
|
||||
|
||||
bouton2Joueurs.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
jeu.lancerPartie(champPseudo.getText(), true);
|
||||
}
|
||||
});
|
||||
|
||||
boutonClassement.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
// 1. On récupère les scores depuis la BDD via l'objet 'jeu'
|
||||
String scores = jeu.getGestionnaireBDD().getTopScores();
|
||||
|
||||
// 2. On affiche le résultat dans la petite fenêtre popup
|
||||
JOptionPane.showMessageDialog(fenetre, scores, "Meilleurs Scores", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
});
|
||||
@@ -65,12 +67,12 @@ public class MenuPrincipal {
|
||||
|
||||
panneau.add(titre);
|
||||
panneau.add(champPseudo);
|
||||
panneau.add(boutonJouer);
|
||||
panneau.add(bouton1Joueur);
|
||||
panneau.add(bouton2Joueurs);
|
||||
panneau.add(boutonClassement);
|
||||
panneau.add(boutonQuitter);
|
||||
|
||||
// panneau centré dans la fenêtre
|
||||
JPanel conteneur = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 150));
|
||||
JPanel conteneur = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 130));
|
||||
conteneur.add(panneau);
|
||||
|
||||
fenetre.setContentPane(conteneur);
|
||||
|
||||
Reference in New Issue
Block a user