Files
projet-dev/src/Jeu.java

247 lines
6.1 KiB
Java
Raw Normal View History

2026-02-02 11:40:03 +01:00
package linea;
2026-02-02 11:19:18 +01:00
import java.awt.Color;
2026-02-23 10:29:41 +01:00
import java.awt.Font;
2026-02-02 11:19:18 +01:00
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
2026-02-23 11:03:22 +01:00
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
2026-02-02 11:19:18 +01:00
import javax.swing.JFrame;
import javax.swing.JLabel;
2026-02-23 10:29:41 +01:00
import javax.swing.SwingConstants;
2026-02-02 11:19:18 +01:00
import javax.swing.Timer;
2026-02-23 11:03:22 +01:00
public class Jeu implements KeyListener, ActionListener, MouseListener {
2026-02-23 10:29:41 +01:00
2026-02-02 11:19:18 +01:00
protected ZoneDessin ecran = new ZoneDessin();
2026-02-23 10:29:41 +01:00
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
2026-03-16 16:09:19 +01:00
protected GestionnaireNiveau gestionnaireNiveau = new GestionnaireNiveau();
protected Ligne lili = new Ligne(new NoiseGenerator(0), gestionnaireNiveau);
2026-02-02 11:19:18 +01:00
protected Timer horloge;
2026-02-23 10:29:41 +01:00
protected double score = 1;
protected JLabel labScore;
protected int vies = 3;
2026-02-23 10:29:41 +01:00
2026-03-04 14:58:03 +01:00
protected GestionnaireScore gestionnaireBDD = new GestionnaireScore();
protected GestionnaireFinDePartie gestionnaireFinDePartie;
2026-02-23 10:29:41 +01:00
protected int compteurFrames = 0;
protected boolean enCollision = false;
protected boolean estGameOver = false;
protected JLabel labGameOver;
protected int compteurInvincible = 0;
2026-02-23 11:03:22 +01:00
protected String pseudo = "";
protected JFrame fenetre;
protected MenuPrincipal menu;
2026-03-04 14:58:03 +01:00
2026-02-23 10:29:41 +01:00
public Jeu() {
2026-02-02 11:19:18 +01:00
labScore = new JLabel();
2026-02-23 09:58:09 +01:00
labScore.setForeground(Color.WHITE);
2026-02-23 10:29:41 +01:00
labScore.setText("<html><h3>" + (int) score + "</h3></html>");
2026-02-02 11:19:18 +01:00
labScore.setBounds(20, 0, 200, 50);
2026-02-23 10:29:41 +01:00
ecran.add(labScore);
2026-02-23 11:04:01 +01:00
labGameOver = new JLabel("GAME OVER", SwingConstants.CENTER);
2026-02-23 10:29:41 +01:00
labGameOver.setForeground(Color.WHITE);
2026-02-23 11:03:22 +01:00
labGameOver.setFont(new Font("Arial", Font.BOLD, 40));
2026-02-23 10:29:41 +01:00
labGameOver.setBounds(0, 200, 800, 100);
labGameOver.setVisible(false);
ecran.add(labGameOver);
2026-02-23 09:58:09 +01:00
gestionnaireFinDePartie = new GestionnaireFinDePartie(labGameOver, gestionnaireBDD);
2026-02-23 11:03:22 +01:00
ecran.addMouseListener(this);
2026-02-10 14:56:22 +01:00
ecran.traiterBoucleAnimation();
2026-02-02 11:19:18 +01:00
}
2026-02-23 10:29:41 +01:00
2026-02-02 11:19:18 +01:00
@Override
2026-02-23 10:29:41 +01:00
public void keyPressed(KeyEvent e) {
2026-02-02 11:19:18 +01:00
int keyCode = e.getKeyCode();
2026-02-23 10:29:41 +01:00
2026-03-04 13:55:48 +01:00
if (keyCode == 38) { // flèche haut
2026-02-02 11:19:18 +01:00
demiCercleAvant.Monter();
demiCercleArriere.Monter();
2026-02-23 10:29:41 +01:00
}
2026-03-16 16:09:19 +01:00
if (keyCode == 40) { // flèche bas
demiCercleAvant.Descendre();
demiCercleArriere.Descendre();
}
2026-02-02 11:19:18 +01:00
}
@Override
2026-02-23 10:29:41 +01:00
public void keyReleased(KeyEvent e) {
2026-02-02 11:19:18 +01:00
int keyCode = e.getKeyCode();
2026-02-23 10:29:41 +01:00
2026-03-16 16:09:19 +01:00
if (keyCode == 38) { // flèche haut
2026-02-02 11:19:18 +01:00
demiCercleAvant.ArreterMonter();
demiCercleArriere.ArreterMonter();
}
2026-03-16 16:09:19 +01:00
if (keyCode == 40) { // flèche bas
demiCercleAvant.ArreterDescendre();
demiCercleArriere.ArreterDescendre();
}
2026-02-02 11:19:18 +01:00
}
@Override
public void keyTyped(KeyEvent e) {
}
2026-02-23 10:29:41 +01:00
public void demarrer() {
2026-02-23 11:03:22 +01:00
fenetre = new JFrame("Linea");
menu = new MenuPrincipal(fenetre, this);
menu.afficher(pseudo);
2026-02-23 11:03:22 +01:00
fenetre.setSize(800, 600);
fenetre.setResizable(false);
2026-03-04 13:55:48 +01:00
fenetre.setLocationRelativeTo(null);
2026-02-23 11:03:22 +01:00
fenetre.setVisible(true);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void lancerPartie(String pseudoSaisi) {
pseudo = pseudoSaisi;
2026-02-23 10:29:41 +01:00
// C'est cette ligne qui donne vie au bonus !
ecran.ajouterObjet(new Bonus(lili, demiCercleAvant, this));
ecran.ajouterObjet(new Malus(lili, demiCercleAvant, this));
2026-03-04 13:55:48 +01:00
// A FAIRE : placer dans l'écran tous les objets graphiques nécessaires
2026-02-10 14:56:22 +01:00
ecran.ajouterObjet(demiCercleArriere);
ecran.ajouterObjet(lili);
2026-02-23 09:15:05 +01:00
ecran.ajouterObjet(demiCercleAvant);
demiCercleArriere.setCouleur(new Color(0.0f, 0.4f, 0.0f));
demiCercleAvant.setCouleur(new Color(0.0f, 0.5f, 0.0f));
2026-02-02 11:19:18 +01:00
ecran.addKeyListener(this);
ecran.setFocusable(true);
2026-02-23 11:03:22 +01:00
2026-02-02 11:19:18 +01:00
fenetre.setContentPane(ecran);
2026-02-23 11:03:22 +01:00
fenetre.revalidate();
fenetre.repaint();
ecran.requestFocusInWindow();
score = 1;
compteurFrames = 0;
vies = 3;
2026-02-23 11:03:22 +01:00
enCollision = false;
estGameOver = false;
compteurInvincible = 0;
2026-03-16 16:09:19 +01:00
gestionnaireNiveau.reinitialiser();
gestionnaireFinDePartie.reinitialiser();
2026-02-23 11:03:22 +01:00
ecran.demarrer();
2026-02-02 11:19:18 +01:00
2026-02-23 11:03:22 +01:00
if (horloge == null) {
horloge = new Timer(40, this);
}
2026-02-02 11:19:18 +01:00
horloge.start();
2026-02-23 10:29:41 +01:00
2026-03-04 13:55:48 +01:00
// A FAIRE : donner la couleur des 2 demi-cercles
// demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
2026-02-23 10:29:41 +01:00
demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f));
2026-02-02 11:19:18 +01:00
}
@Override
public void actionPerformed(ActionEvent e) {
2026-02-23 10:29:41 +01:00
if (estGameOver == true) {
return;
}
2026-03-16 16:09:19 +01:00
gestionnaireNiveau.mettreAJour();
ecran.setCouleurFond(gestionnaireNiveau.getCouleurFondInterpolee());
double rayon = gestionnaireNiveau.getRayonCercle();
demiCercleAvant.setRayon(rayon);
demiCercleArriere.setRayon(rayon);
2026-02-10 14:56:22 +01:00
ecran.traiterBoucleAnimation();
2026-02-23 10:29:41 +01:00
compteurFrames = compteurFrames + 1;
if (compteurFrames >= 25) {
score = score + 1;
compteurFrames = 0;
}
if (compteurInvincible < 75) {
compteurInvincible = compteurInvincible + 1;
} else {
if (demiCercleArriere.VerifierCollision(lili)) {
if (enCollision == false) {
vies = vies - 1; // La nouvelle logique : on perd 1 vie
2026-02-23 10:29:41 +01:00
enCollision = true;
compteurInvincible = 0;
2026-02-23 10:29:41 +01:00
}
} else {
enCollision = false;
}
}
if (vies <= 0) {
vies = 0;
2026-02-23 10:29:41 +01:00
estGameOver = true;
// Le gestionnaire s'occupe d'arrêter l'écran, afficher le label et sauvegarder
gestionnaireFinDePartie.declencherGameOver(ecran, pseudo, (int) score);
2026-02-23 10:29:41 +01:00
}
2026-03-16 16:09:19 +01:00
labScore.setText("<html><h3>Score : " + (int) score + " | Vies : " + vies + " | Niv. " + gestionnaireNiveau.getNumeroNiveau() + "</h3></html>");
2026-02-23 09:42:07 +01:00
2026-02-23 10:07:29 +01:00
demiCercleArriere.ResterDansLigne(lili);
demiCercleAvant.ResterDansLigne(lili);
2026-02-23 09:42:07 +01:00
}
2026-02-23 11:03:22 +01:00
private void retourMenu() {
if (horloge != null) {
horloge.stop();
}
2026-03-16 16:09:19 +01:00
gestionnaireNiveau.reinitialiser();
lili = new Ligne(new NoiseGenerator(0), gestionnaireNiveau);
2026-02-23 10:29:41 +01:00
demiCercleAvant.y = 200;
demiCercleAvant.vitesse = -1.0;
demiCercleArriere.y = 200;
demiCercleArriere.vitesse = -1.0;
ecran.viderObjets();
menu.afficher(pseudo);
2026-02-02 11:19:18 +01:00
}
2026-02-23 10:29:41 +01:00
2026-02-23 11:03:22 +01:00
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if (estGameOver == true) {
retourMenu();
}
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
2026-03-04 14:58:03 +01:00
public GestionnaireScore getGestionnaireBDD() {
return gestionnaireBDD;
}
2026-02-02 11:19:18 +01:00
}