diff --git a/Jeu.db b/Jeu.db new file mode 100644 index 0000000..d3df823 Binary files /dev/null and b/Jeu.db differ diff --git a/linea/BouleBonus.class b/linea/BouleBonus.class new file mode 100644 index 0000000..6c89d14 Binary files /dev/null and b/linea/BouleBonus.class differ diff --git a/linea/Cercle.class b/linea/Cercle.class new file mode 100644 index 0000000..5508fa2 Binary files /dev/null and b/linea/Cercle.class differ diff --git a/linea/Cercle.java b/linea/Cercle.java index 96564cb..44efb78 100644 --- a/linea/Cercle.java +++ b/linea/Cercle.java @@ -6,6 +6,16 @@ import java.awt.Graphics2D; import java.awt.geom.Arc2D; public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercle + private static final BasicStroke ARC_STROKE = new BasicStroke(5.0f); + private static final double GRAVITE = 0.95; + private static final double POUSSEE = 1.45; + private static final double AMORTISSEMENT = 0.92; + private static final double VITESSE_MIN = -6.5; + private static final double VITESSE_MAX = 6.5; + private static final double BORD_HAUT = 0; + private static final double BORD_BAS = 600; + private final Arc2D.Double arc = new Arc2D.Double(); + // 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 @@ -94,11 +104,12 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl void Afficher(Graphics g) { // choix de la couleur et de l'épaisseur Graphics2D g2D = (Graphics2D) g; - g2D.setStroke(new BasicStroke(5.0f)); + g2D.setStroke(ARC_STROKE); 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)); + arc.setArc(x - rayon / 2.0, y - rayon, rayon, rayon * 2.0, debut, fin, Arc2D.OPEN); + g2D.draw(arc); } // Accesseur pour savoir si le joueur maintient la montée @@ -112,35 +123,31 @@ public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercl //------------------------------------------------------------------------- @Override void Animer() { - double gravite = 0.95; - double poussee = 1.45; - double amortissement = 0.92; - - if (montee==true) { - vitesse -= poussee; + if (montee) { + vitesse -= POUSSEE; } else { - vitesse += gravite; + vitesse += GRAVITE; } // Lissage global pour un ressenti plus régulier. - vitesse *= amortissement; + vitesse *= AMORTISSEMENT; - if (vitesse < -6.5) { - vitesse = -6.5; + if (vitesse < VITESSE_MIN) { + vitesse = VITESSE_MIN; } - if (vitesse > 6.5) { - vitesse = 6.5; + if (vitesse > VITESSE_MAX) { + vitesse = VITESSE_MAX; } depY = vitesse; y += depY; //position - if(y<= 0 + rayon){ - y = 0 + rayon; + if (y <= BORD_HAUT + rayon) { + y = BORD_HAUT + rayon; vitesse = 0; - }else if(y>=600 - rayon){ - y = 600 - rayon; + } else if (y >= BORD_BAS - rayon) { + y = BORD_BAS - rayon; vitesse = 0; } diff --git a/linea/DatabaseConnection.class b/linea/DatabaseConnection.class new file mode 100644 index 0000000..e797871 Binary files /dev/null and b/linea/DatabaseConnection.class differ diff --git a/linea/DatabaseConnection.java b/linea/DatabaseConnection.java index c240af5..45bc90a 100644 --- a/linea/DatabaseConnection.java +++ b/linea/DatabaseConnection.java @@ -270,7 +270,7 @@ public class DatabaseConnection { int niveauxTermines = Math.max(0, niveauMax - 1); return "Campagne\n" - + "Niveau max débloqué : " + niveauMax + + "Niveau max atteint : " + niveauMax + "\nNiveaux terminés : " + niveauxTermines; } } diff --git a/linea/Jeu.class b/linea/Jeu.class new file mode 100644 index 0000000..f314159 Binary files /dev/null and b/linea/Jeu.class differ diff --git a/linea/Jeu.java b/linea/Jeu.java index dce9290..779021f 100644 --- a/linea/Jeu.java +++ b/linea/Jeu.java @@ -39,10 +39,17 @@ public class Jeu implements KeyListener, ActionListener { private int meilleurSansCompte = 0; private int mortsSansCompte = 0; private int tempsSansCompteSec = 0; + private int niveauMaxAtteintSansCompte = 1; private long debutPartieMs = 0; private boolean immortel = false; private final boolean modeCampagne; + private void mettreAJourNiveauMaxSansCompte(int niveau) { + if (idCompte <= 0) { + niveauMaxAtteintSansCompte = Math.max(niveauMaxAtteintSansCompte, niveau); + } + } + private int meilleurActuel() { return idCompte > 0 ? db.getMeilleurScoreParCompte(idCompte) : meilleurSansCompte; } @@ -53,6 +60,7 @@ public class Jeu implements KeyListener, ActionListener { } return "💀 Nombre de morts: " + mortsSansCompte + "\n⏱️ Temps total: " + tempsSansCompteSec + "s" + + "\n📈 Niveau max atteint: " + niveauMaxAtteintSansCompte + "\n🏆 Meilleur score: " + meilleurSansCompte; } @@ -78,6 +86,7 @@ public class Jeu implements KeyListener, ActionListener { this.idCompte = idCompte; this._niv = niveau; this.modeCampagne = modeCampagne; + mettreAJourNiveauMaxSansCompte(_niv); labScore = new JLabel(); labScore.setText("

score : 0

"); @@ -260,6 +269,7 @@ public class Jeu implements KeyListener, ActionListener { meilleurSansCompte = 0; mortsSansCompte = 0; tempsSansCompteSec = 0; + niveauMaxAtteintSansCompte = Math.max(1, _niv); } else { idCompte = db.getIdParPseudo(choix); } @@ -444,6 +454,7 @@ public class Jeu implements KeyListener, ActionListener { } _niv = nouveauNiveau; + mettreAJourNiveauMaxSansCompte(_niv); resetLevel(); return; } @@ -509,6 +520,7 @@ public class Jeu implements KeyListener, ActionListener { int nouveauNiveau = choisirNouveauNiveau(); if (nouveauNiveau > 0) { _niv = nouveauNiveau; + mettreAJourNiveauMaxSansCompte(_niv); resetLevel(); break; } diff --git a/linea/Ligne.class b/linea/Ligne.class new file mode 100644 index 0000000..96ab1b2 Binary files /dev/null and b/linea/Ligne.class differ diff --git a/linea/LineaAppli$SelectionJeu.class b/linea/LineaAppli$SelectionJeu.class new file mode 100644 index 0000000..e95edce Binary files /dev/null and b/linea/LineaAppli$SelectionJeu.class differ diff --git a/linea/LineaAppli.class b/linea/LineaAppli.class new file mode 100644 index 0000000..6b792a5 Binary files /dev/null and b/linea/LineaAppli.class differ diff --git a/linea/LineaAppli.java b/linea/LineaAppli.java index 33dac9c..4b2bebf 100644 --- a/linea/LineaAppli.java +++ b/linea/LineaAppli.java @@ -237,6 +237,8 @@ public class LineaAppli { // Classe de base de l'application, rien à modifier ici //------------------------------------------------------------------------- public static void main(String[] arg) { + UIManager.put("OptionPane.yesButtonText", "Oui"); + UIManager.put("OptionPane.noButtonText", "Non"); UIManager.put("OptionPane.cancelButtonText", "Retour"); DatabaseConnection db = new DatabaseConnection(); diff --git a/linea/ObjetGraphique.class b/linea/ObjetGraphique.class new file mode 100644 index 0000000..6d6b1d0 Binary files /dev/null and b/linea/ObjetGraphique.class differ diff --git a/linea/Segment.class b/linea/Segment.class new file mode 100644 index 0000000..fa1e001 Binary files /dev/null and b/linea/Segment.class differ diff --git a/linea/ZoneDessin.class b/linea/ZoneDessin.class new file mode 100644 index 0000000..dccabbb Binary files /dev/null and b/linea/ZoneDessin.class differ diff --git a/linea/ZoneDessin.java b/linea/ZoneDessin.java index 571e990..9c6599b 100644 --- a/linea/ZoneDessin.java +++ b/linea/ZoneDessin.java @@ -114,7 +114,7 @@ public class ZoneDessin extends JPanel { int intervalleBoule = (int) Math.round(intervalleBouleBase - progression * 20.0); // ~165 -> 145 double probaVerteBase = 0.35 - progression * 0.06; // ~35% -> 29% double variationAleatoire = (Math.random() - 0.5) * 0.10; // +/- 5% - double probaVerte = Math.max(0.22, Math.min(0.45, probaVerteBase + variationAleatoire)); + double probaVerte = Math.max(0.24, Math.min(0.47, probaVerteBase + variationAleatoire + 0.02)); compteurBoule++; if (compteurBoule >= intervalleBoule && ligneObjet != null) {