From eb39ea8b29e22e8e9428eb5f9820434dd0b22960 Mon Sep 17 00:00:00 2001 From: tit-exe Date: Wed, 4 Mar 2026 13:55:48 +0100 Subject: [PATCH] clean --- .gitignore | 115 +++++++++------------------------------- .idea/.gitignore | 10 ++++ src/Cercle.java | 134 +++++++++++++++-------------------------------- src/Jeu.java | 91 ++------------------------------ 4 files changed, 83 insertions(+), 267 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.gitignore b/.gitignore index fc87292..14392bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,100 +1,35 @@ -# ============================================================================== -# 1. SPECIFIQUE A TON PROJET (Ce qu'on voit sur le screenshot) -# ============================================================================== -# Dossiers de compilation (IntelliJ génère 'out', Eclipse génère 'bin') +# ======================== +# 1. COMPILATION (A ignorer absolument) +# ======================== out/ bin/ - -# Fichiers de configuration de module IntelliJ -*.iml - -# Dossier de configuration projet IntelliJ -# (On ignore tout le dossier car il contient souvent des chemins locaux spécifiques à ta machine) -.idea/ - -# ============================================================================== -# 2. JAVA (Standard) -# ============================================================================== -# Fichiers compilés *.class -# Archives packagées -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar +# ======================== +# 2. INTELLIJ (LA PARTIE CRITIQUE) +# ======================== +# On ignore les fichiers PERSONNELS de l'utilisateur +.idea/workspace.xml +.idea/usage.statistics.xml +.idea/dictionaries +.idea/shelf +.idea/tasks.xml +.idea/httpRequests -# Logs et fichiers temporaires -*.log -*.lock +# ⚠️ ON GARDE TOUT LE RESTE DE .idea/ ⚠️ +# C'est vital pour que le bouton "Run" marche chez tes collègues. +# On garde aussi les .iml +# (Pas de ligne pour ignorer *.iml ou le dossier .idea/) -# ============================================================================== -# 3. INTELLIJ IDEA (JetBrains) - Le "Overkill" pour être sûr -# ============================================================================== -# Couvre IntelliJ, PyCharm, PhpStorm, Android Studio, etc. -*.iws -*.ipr -*.jwks -.idea_modules/ - -# ============================================================================== -# 4. ECLIPSE -# ============================================================================== -.metadata -.classpath -.project -.settings/ -.loadpath -.recommenders -.factorypath - -# ============================================================================== -# 5. VISUAL STUDIO CODE -# ============================================================================== +# ======================== +# 3. ANTIGRAVITY / VSCODE +# ======================== .vscode/ +.antigravity/ *.code-workspace -.history/ -# ============================================================================== -# 6. SYSTEME D'EXPLOITATION (Mac / Windows / Linux) -# ============================================================================== +# ======================== +# 4. OS / DIVERS +# ======================== .DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db -Thumbs.db -.directory - -# ============================================================================== -# 7. PYTHON / ANTIGRAVITY (Si jamais tu mélanges des scripts) -# ============================================================================== -__pycache__/ -*.py[cod] -*$py.class -*.so -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST -venv/ -.env -.venv -pip-log.txt \ No newline at end of file +Thumbs.db \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/src/Cercle.java b/src/Cercle.java index 8797cdc..3ad7918 100644 --- a/src/Cercle.java +++ b/src/Cercle.java @@ -5,145 +5,97 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Arc2D; -public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercle - // Hérite de la classe ObjetGraphique - // Ne pas oublier qu'il y a des propriétés et méthodes reçues par l'héritage +public class Cercle extends ObjetGraphique { // il s'agit plutôt d'arcs de cercle - - //------------------------------------------------------------------------- - // PROPRIETES - //------------------------------------------------------------------------- protected double rayon = 50; - protected double depY = 0; // déplacement - + protected double depY = 0; + // début et fin de l'arc, en degrés protected double debut = 0; protected double fin = 360; - - // Est-ce que le joueur est en train d'appuyer sur "up" + protected boolean montee = false; - - // Vitesse du cercle protected double vitesse = -1.0; - - // Un pas pour l'application des forces, permet de régler - // un peu la jouabilité + + // pas = "delta t", permet de régler la jouabilité protected double pas = 0.2; - - // Valeur de la force (norme) appliquée lorsque le joueur appuie sur up protected double impulsion = 35; - - - //------------------------------------------------------------------------- - // METHODES - //------------------------------------------------------------------------- - - //------------------------------------------------------------------------- - // Constructeurs de la classe - //------------------------------------------------------------------------- - public Cercle(){ - x=400; - y=200; + + public Cercle() { + x = 400; + y = 200; } - - public Cercle(double debutArc, double finArc){ - x=400; - y=200; + + public Cercle(double debutArc, double finArc) { + x = 400; + y = 200; debut = debutArc; fin = finArc; } - - - //------------------------------------------------------------------------- - // Méthode d'accès en lecture au rayon, peut être utile - // par exemple pour la classe qui vérifiera si la ligne passe dans le - // cercle - //------------------------------------------------------------------------- - public double getRayon(){ + + public double getRayon() { return rayon; } - - - //------------------------------------------------------------------------- - // Méthode qui note que up a été appuyée - // -> le booléen permet de ne plus être tributaire - // de la vitesse de répétition du clavier - //------------------------------------------------------------------------- - public void Monter(){ + + // note que "haut" a été appuyée (évite d'être tributaire de la répétition + // clavier) + public void Monter() { montee = true; } - - - //------------------------------------------------------------------------- - // Méthode qui note que up a été relâchée - //------------------------------------------------------------------------- - public void ArreterMonter(){ + + public void ArreterMonter() { montee = false; } - - - //------------------------------------------------------------------------- - // Redéfinition de la méthode Afficher, spécifiquement pour la classe - //------------------------------------------------------------------------- @Override void Afficher(Graphics g) { - // choix de la couleur et de l'épaisseur Graphics2D g2D = (Graphics2D) g; g2D.setStroke(new BasicStroke(5.0f)); g.setColor(this.couleur); - - // dessin de l'arc - g2D.draw(new Arc2D.Double(x-rayon/2, y-rayon, rayon, rayon*2, debut, fin, Arc2D.OPEN)); + g2D.draw(new Arc2D.Double(x - rayon / 2, y - rayon, rayon, rayon * 2, debut, fin, Arc2D.OPEN)); } - - //------------------------------------------------------------------------- - // Redéfinition de la méthode Animer, spécifiquement pour la classe - //------------------------------------------------------------------------- @Override void Animer() { - // pas est à prendre comme un "delta t" - // chute libre vitesse = vitesse + 9.81 * pas; - // impulsion - if (montee==true) { - vitesse = vitesse - impulsion *pas; + // impulsion vers le haut + if (montee == true) { + vitesse = vitesse - impulsion * pas; } - - depY = 1/2 * 9.81 + vitesse * pas; - - if (depY<-10) { - depY=-10; + + depY = 1 / 2 * 9.81 + vitesse * pas; + + if (depY < -10) { + depY = -10; } - if (depY>10){ - depY =10; + if (depY > 10) { + depY = 10; } - y+=depY; + y += depY; } - public void ResterDansLigne(Ligne li){ + public void ResterDansLigne(Ligne li) { double collisionHautPos = y + rayon; double collisionBasPos = y - rayon; - double yLigne = li.GetHauteurPointCercle(); - if (yLigne < collisionBasPos){ + if (yLigne < collisionBasPos) { y = yLigne + rayon; - if (vitesse > 0) vitesse = 0; + if (vitesse > 0) + vitesse = 0; } - if (yLigne > collisionHautPos){ + if (yLigne > collisionHautPos) { y = yLigne - rayon; - if (vitesse < 0) vitesse = 0; + if (vitesse < 0) + vitesse = 0; } } - - public boolean VerifierCollision(Ligne li){ + + public boolean VerifierCollision(Ligne li) { double collisionHautPos = y + rayon; double collisionBasPos = y - rayon; - double yLigne = li.GetHauteurPointCercle(); return yLigne <= collisionBasPos || yLigne >= collisionHautPos; diff --git a/src/Jeu.java b/src/Jeu.java index 298e7ee..bb8c03c 100644 --- a/src/Jeu.java +++ b/src/Jeu.java @@ -15,30 +15,18 @@ import javax.swing.SwingConstants; import javax.swing.Timer; public class Jeu implements KeyListener, ActionListener, MouseListener { - // ------------------------------------------------------------------------- - // PROPRIETES - // ------------------------------------------------------------------------- - // Ecran : instance de ZoneDessin, qui contiendra tous les objets graphiques - // et les animera protected ZoneDessin ecran = new ZoneDessin(); - // Le cercle : en fait 2 demis-cercles, un qui passera sous la ligne - // un qui passera dessus 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 // A FAIRE : ajouter les objets graphiques manquants, s'il y en a protected Ligne lili = new Ligne(new NoiseGenerator(0)); - // Timer : un objet qui émet des événements à un intervalle choisi, - // il sert à donner le pas de l'animation protected Timer horloge; - // Une variable qui contiendra le score protected double score = 1; - - // un label qui servira à afficher le score protected JLabel labScore; protected int compteurFrames = 0; @@ -47,23 +35,11 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { protected JLabel labGameOver; protected int compteurInvincible = 0; - // le pseudo du joueur protected String pseudo = ""; - - // la fenêtre et le menu principal protected JFrame fenetre; protected MenuPrincipal menu; - // ------------------------------------------------------------------------- - // METHODES - // ------------------------------------------------------------------------- - - // ------------------------------------------------------------------------- - // Constructeur de la classe - // ------------------------------------------------------------------------- public Jeu() { - // Gestion du score : a réactiver en fin de TP, inutile au début - labScore = new JLabel(); labScore.setForeground(Color.WHITE); labScore.setText("

" + (int) score + "

"); @@ -77,106 +53,65 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { labGameOver.setVisible(false); ecran.add(labGameOver); - // ecoute les clics de souris (pour le game over) ecran.addMouseListener(this); - ecran.traiterBoucleAnimation(); } - // ------------------------------------------------------------------------- - // Méthodes qu'il faut implémenter pour être - // conforme à un KeyListener - // ------------------------------------------------------------------------- - - // ------------------------------------------------------------------------- - // Appui sur une touche - // -> l'événement est émis lorsqu'on appuie, puis selon le rythme de - // répétition du clavier - // ------------------------------------------------------------------------- @Override public void keyPressed(KeyEvent e) { - // keyCode 38 : up - // keyCode 40 : down int keyCode = e.getKeyCode(); - if (keyCode == 38) { // touche "flèche vers le haut" - // On demande aux deux demi-cercle de "monter" + if (keyCode == 38) { // flèche haut demiCercleAvant.Monter(); demiCercleArriere.Monter(); } } - // ------------------------------------------------------------------------- - // Relâchement de la touche - // ------------------------------------------------------------------------- @Override public void keyReleased(KeyEvent e) { - // keyCode 38 : up - // keyCode 40 : down int keyCode = e.getKeyCode(); if (keyCode == 38) { - // On demande aux deux demi-cercle "d'arrêter de monter" demiCercleAvant.ArreterMonter(); demiCercleArriere.ArreterMonter(); } } - // ------------------------------------------------------------------------- - // Une méthode que nous n'utilisons pas - // ------------------------------------------------------------------------- @Override public void keyTyped(KeyEvent e) { - // TODO Auto-generated method stub - } - // ------------------------------------------------------------------------- - // Démarrage du jeu : - // création de diverses instances et affichage du menu - // ------------------------------------------------------------------------- public void demarrer() { - // Création d'une fenêtre fenetre = new JFrame("Linea"); - // on crée le menu et on l'affiche en premier menu = new MenuPrincipal(fenetre, this); menu.afficher(pseudo); fenetre.setSize(800, 600); fenetre.setResizable(false); - fenetre.setLocationRelativeTo(null); // centre la fenetre sur l'ecran + fenetre.setLocationRelativeTo(null); fenetre.setVisible(true); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } - // ------------------------------------------------------------------------- - // Lance une nouvelle partie (appelé par le MenuPrincipal) - // ------------------------------------------------------------------------- public void lancerPartie(String pseudoSaisi) { - // on récupère le pseudo pseudo = pseudoSaisi; - // A FAIRE : - // placer dans l'instance de l'écran tous les objets graphiques nécessaires - // par exemple : + // 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.0f, 0.4f, 0.0f)); demiCercleAvant.setCouleur(new Color(0.0f, 0.5f, 0.0f)); - // on indique que c'est le jeu qui traitera les appuis sur une touche ecran.addKeyListener(this); ecran.setFocusable(true); - // on remplace le menu par l'ecran de jeu fenetre.setContentPane(ecran); fenetre.revalidate(); fenetre.repaint(); ecran.requestFocusInWindow(); - // on reinitialise les valeurs de jeu score = 1; compteurFrames = 0; enCollision = false; @@ -185,24 +120,18 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { labGameOver.setVisible(false); ecran.demarrer(); - // Démarrage du timer, qui rythmera l'animation if (horloge == null) { horloge = new Timer(40, this); } horloge.start(); - // A FAIRE : + // A FAIRE : donner la couleur des 2 demi-cercles + // demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f)); demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f)); - // donner la couleur des 2 demi-cercles, par exemple : - // demiCerleArriere.setCouleur(new Color(0.8f,0.0f,0.0f)); } - // ------------------------------------------------------------------------- - // Méthode appelée lorsqu'un événement timer se produit - // ------------------------------------------------------------------------- @Override public void actionPerformed(ActionEvent e) { - // si c'est game over, on arrete juste l'animation et on attend le clic if (estGameOver == true) { return; } @@ -241,16 +170,11 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { demiCercleAvant.ResterDansLigne(lili); } - // ------------------------------------------------------------------------- - // Retour au menu principal (après un game over) - // ------------------------------------------------------------------------- private void retourMenu() { - // on arrete le timer du jeu if (horloge != null) { horloge.stop(); } - // on recrée une nouvelle ligne propre pour la prochaine partie lili = new Ligne(new NoiseGenerator(0)); demiCercleAvant.y = 200; @@ -259,14 +183,9 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { demiCercleArriere.vitesse = -1.0; ecran.viderObjets(); - - // on retourne au menu principal menu.afficher(pseudo); } - // ------------------------------------------------------------------------- - // événements souris (pour revenir au menu apres game over) - // ------------------------------------------------------------------------- @Override public void mouseClicked(MouseEvent e) { }