From abd6ae07c8cd85b7aac68161efa9e5da550e946d Mon Sep 17 00:00:00 2001 From: ROGER Date: Tue, 20 May 2025 12:38:23 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20du=20score=20et=20nombre=20de=20lignes?= =?UTF-8?q?=20supprim=C3=A9s=20dans=20la=20vue=20+=20vue=20gameover?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/org/Models/Grille.java | 32 +++++++++++++++ app/src/main/java/org/Models/Jeu.java | 7 +++- .../java/org/Views/VueBandeauControle.java | 9 ++-- app/src/main/java/org/Views/VueGameOver.java | 41 +++++++++++++++++++ 4 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/org/Views/VueGameOver.java diff --git a/app/src/main/java/org/Models/Grille.java b/app/src/main/java/org/Models/Grille.java index 2ad27a5..c42b922 100644 --- a/app/src/main/java/org/Models/Grille.java +++ b/app/src/main/java/org/Models/Grille.java @@ -16,6 +16,9 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { private int pieceCouranteY; private boolean enPause = false; + private int score = 0; + private int nbLignesSupprimees = 0; + public Grille(int nbLignes, int nbColonnes) { this.nbLignes = nbLignes; this.nbColonnes = nbColonnes; @@ -249,6 +252,8 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { // } public void verifierEtSupprimerLignesSiBesoin() { + int tmpNbLignesSupprimees = 0; + System.out.println("Debut uppression d'une ligne......"); for (int i = nbLignes - 1; i >= 0; i--) { boolean ligneSupprimable = true; @@ -261,9 +266,28 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { if (ligneSupprimable) { supprimerLigne(i); + nbLignesSupprimees += 1; i++; + tmpNbLignesSupprimees++; } } + System.out.println(tmpNbLignesSupprimees+ " Lignes supprimées"); + switch (tmpNbLignesSupprimees) { + case 1: + score += 100; + break; + case 2: + score += 300; + break; + case 3: + score += 500; + break; + case 4: + score += 800; + break; + default: + break; + } } // // TODO : EUHHHHHHHHHH JE CROIS PAS que ça marche comme ça c'est pas en mode @@ -322,4 +346,12 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { this.setCase(i, j, false); } } + + public int getScore(){ + return score; + } + + public int getNbLignesSupprimees() { + return nbLignesSupprimees; + } } \ No newline at end of file diff --git a/app/src/main/java/org/Models/Jeu.java b/app/src/main/java/org/Models/Jeu.java index 7b3f736..3d5dda5 100644 --- a/app/src/main/java/org/Models/Jeu.java +++ b/app/src/main/java/org/Models/Jeu.java @@ -11,6 +11,8 @@ import org.Models.Pieces.PieceO; import org.Models.Pieces.PieceS; import org.Models.Pieces.PieceT; import org.Models.Pieces.PieceZ; +import org.Views.VueGameOver; +import org.Views.VueTetris; @SuppressWarnings("deprecation") public class Jeu extends Observable implements Runnable { @@ -40,7 +42,7 @@ public class Jeu extends Observable implements Runnable { private PieceCourante getNouvellePiece() { Random random = new Random(); - int randomiiii = random.nextInt(6); + int randomiiii = random.nextInt(7); System.err.println("randomiiiii : " + randomiiii); PieceCourante nouvellePiece; @@ -100,6 +102,9 @@ public class Jeu extends Observable implements Runnable { public boolean estFinPartie() { for (Point caseColoree : this.grille.motifPieceCouranteColoriee()) { if (this.grille.getCase(caseColoree.y, caseColoree.x)) { + new VueGameOver(grille.getScore(),e -> System.exit(0),e->{ + System.out.println("Début d'une nouvelle partie"); + }); return true; } } diff --git a/app/src/main/java/org/Views/VueBandeauControle.java b/app/src/main/java/org/Views/VueBandeauControle.java index 0d79e73..311c269 100644 --- a/app/src/main/java/org/Views/VueBandeauControle.java +++ b/app/src/main/java/org/Views/VueBandeauControle.java @@ -26,13 +26,13 @@ public class VueBandeauControle extends JPanel implements Observer { // setPreferredSize(); // SCORE - scoreLabel = new JLabel("SCORE : 0"); + scoreLabel = new JLabel("SCORE : " + jeu.getGrille().getScore()); scoreLabel.setForeground(Color.white); scoreLabel.setFont(new Font("Arial", Font.PLAIN, 16)); scoreLabel.setAlignmentX(Component.CENTER_ALIGNMENT); // NB LIGNE - nbLigneLabel = new JLabel("LIGNES : 0"); + nbLigneLabel = new JLabel("LIGNES : "+ jeu.getGrille().getNbLignesSupprimees()); nbLigneLabel.setForeground(Color.white); nbLigneLabel.setFont(new Font("Arial", Font.PLAIN, 16)); nbLigneLabel.setAlignmentX(Component.CENTER_ALIGNMENT); @@ -133,8 +133,9 @@ public class VueBandeauControle extends JPanel implements Observer { public void update(Observable o, Object arg) { if (o instanceof Jeu) { afficherPieceSuivante(jeu.getPieceSuivante()); - - // TODO : setScore ?? + setScore(jeu.getGrille().getScore()); + nbLigneLabel.setText("LIGNES : " + jeu.getGrille().getNbLignesSupprimees()); + scoreLabel.setText("SCORE : " + jeu.getGrille().getScore()); } } } \ No newline at end of file diff --git a/app/src/main/java/org/Views/VueGameOver.java b/app/src/main/java/org/Views/VueGameOver.java new file mode 100644 index 0000000..e76a619 --- /dev/null +++ b/app/src/main/java/org/Views/VueGameOver.java @@ -0,0 +1,41 @@ +package org.Views; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; + +public class VueGameOver extends JFrame { + private JButton quitterButton; + private JButton rejouerButton; + + public VueGameOver(int score, ActionListener quitterListener, ActionListener rejouerListener) { + setTitle("FIN DE PARTIE"); + setSize(400,400); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); + //Fenetre de fin de partie + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + //Texte de fin de partie + JLabel messageFin = new JLabel("GAME OVER !", SwingConstants.CENTER); + messageFin.setFont(new Font("Arial", Font.BOLD, 32)); + panel.add(messageFin, BorderLayout.NORTH); + //Texte de score + JLabel messageScore = new JLabel("Votre score : " + score, SwingConstants.CENTER); + messageScore.setFont(new Font("Arial", Font.PLAIN, 24)); + panel.add(messageScore, BorderLayout.CENTER); + //Boutons + JPanel buttonPanel = new JPanel(); + quitterButton = new JButton("Quitter"); + rejouerButton = new JButton("Rejouer"); + + //mise en forme boutons + quitterButton.addActionListener(quitterListener); + rejouerButton.addActionListener(rejouerListener); + buttonPanel.add(quitterButton); + buttonPanel.add(rejouerButton); + panel.add(buttonPanel, BorderLayout.SOUTH); + setContentPane(panel); + setVisible(true); + } +}