diff --git a/app/src/main/java/org/App.java b/app/src/main/java/org/App.java index 8a4e631..ad11cb0 100644 --- a/app/src/main/java/org/App.java +++ b/app/src/main/java/org/App.java @@ -4,8 +4,10 @@ package org; import org.Controllers.IO; +import org.Controllers.TetrisBandeauControleur; import org.Models.Grille; import org.Models.Jeu; +import org.Models.Musique; import org.Views.VueTetris; public class App { @@ -18,7 +20,9 @@ public class App { // Models Grille grille = new Grille(20, 10); - Jeu jeu = new Jeu(grille); + Musique musique = new Musique(); + musique.start(); + Jeu jeu = new Jeu(grille,musique); // Views VueTetris vueTetris = new VueTetris(grille, jeu); @@ -26,5 +30,7 @@ public class App { // Controllers IO io = new IO(jeu); vueTetris.addKeyListener(io); + + new TetrisBandeauControleur(vueTetris.getVueBandeauControle(), musique);//Création d'un controleur de bandeau avec la musique instanciée } } \ No newline at end of file diff --git a/app/src/main/java/org/Controllers/TetrisBandeauControleur.java b/app/src/main/java/org/Controllers/TetrisBandeauControleur.java index 77457c8..a5e6c64 100644 --- a/app/src/main/java/org/Controllers/TetrisBandeauControleur.java +++ b/app/src/main/java/org/Controllers/TetrisBandeauControleur.java @@ -12,17 +12,11 @@ public class TetrisBandeauControleur { private Musique musique; private VueBandeauControle vueControle; - public TetrisBandeauControleur(VueBandeauControle vueControle) { + public TetrisBandeauControleur(VueBandeauControle vueControle, Musique musique) { this.vueControle = vueControle; - this.musique = new Musique(); - musique.start();// demarer musique + this.musique = musique; // action play/pause - this.vueControle.getPauseButton().addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - switchPlayPause(); - } - }); + this.vueControle.getPauseButton().addActionListener(e -> switchPlayPause()); vueControle.getQuitterButton().addActionListener(e -> { System.out.println("Fermeture de l'application..."); System.exit(0); diff --git a/app/src/main/java/org/Models/Jeu.java b/app/src/main/java/org/Models/Jeu.java index 66ca9f2..e959bb2 100644 --- a/app/src/main/java/org/Models/Jeu.java +++ b/app/src/main/java/org/Models/Jeu.java @@ -9,6 +9,7 @@ import org.Models.Pieces.PieceL; public class Jeu extends Observable implements Runnable { private Grille grille; private Ordonnanceur ordonnanceur; + private Musique musique; private PieceCourante pieceSuivante; private int pieceSuivanteX; @@ -19,8 +20,9 @@ public class Jeu extends Observable implements Runnable { public boolean jeuEnCours = true; - public Jeu(Grille grille) { + public Jeu(Grille grille, Musique musique) { this.grille = grille; + this.musique = musique; this.grille.setPieceCourante(getNouvellePiece()); this.pieceSuivante = getNouvellePiece(); @@ -65,6 +67,10 @@ public class Jeu extends Observable implements Runnable { public void finPartie() { this.jeuEnCours = false; ordonnanceur.interrupt(); + if (musique != null) { + System.out.println("Arret musique"); + musique.arreterMusique(); + } setChanged(); notifyObservers(); } @@ -72,6 +78,9 @@ public class Jeu extends Observable implements Runnable { @Override public void run() { // TODO: game logic here + if (!jeuEnCours) { + return; + } if (estFinPartie()) { finPartie(); diff --git a/app/src/main/java/org/Models/Musique.java b/app/src/main/java/org/Models/Musique.java index 9bc77f9..be62585 100644 --- a/app/src/main/java/org/Models/Musique.java +++ b/app/src/main/java/org/Models/Musique.java @@ -7,42 +7,44 @@ import java.io.InputStream; public class Musique extends Thread { private Player player; - private boolean stop = false; - private boolean enPause = false; + private volatile boolean stop = false; + private volatile boolean enPause = false; public void run() { - while (!stop) { - try { + try { + while (!stop) { if (!enPause) { - InputStream musique = getClass().getResourceAsStream("/TetrisMusic.mp3"); - if (musique == null) { - System.err.println("Erreur : le fichier musique.mp3 est introuvable."); - return; + try (InputStream musique = getClass().getResourceAsStream("/TetrisMusic.mp3")) { + if (musique == null) { + System.err.println("Erreur : le fichier musique.mp3 est introuvable."); + return; + } + BufferedInputStream buffer = new BufferedInputStream(musique); + this.player = new Player(buffer); + System.out.println("Lecture de la musique..."); + player.play(); + } catch (Exception e) { + System.err.println("Erreur lors de la lecture de la musique : " + e.getMessage()); } - BufferedInputStream buffer = new BufferedInputStream(musique); - player = new Player(buffer); - player.play(); } else { Thread.sleep(1000); // Attendre 1 seconde avant de vérifier à nouveau } - } catch (Exception e) { - System.err.println("Erreur lors de la lecture de la musique : " + e.getMessage()); } + } catch (InterruptedException e) { + System.err.println("Musique interrompue : " + e.getMessage()); } + System.out.println("Fin du thread de musique."); } - public void basculePlayPause() { - if (enPause) { - enPause = false; - } else { - enPause = true; - if (player != null) { - player.close(); - } + enPause = !enPause; + if (enPause && player != null) { + System.out.println("Musique en pause."); + player.close(); } } public void arreterMusique() { + System.out.println("Arrêt de la musique."); stop = true; if (player != null) { player.close(); diff --git a/app/src/main/java/org/Models/Ordonnanceur.java b/app/src/main/java/org/Models/Ordonnanceur.java index 8a12876..9ce2d93 100644 --- a/app/src/main/java/org/Models/Ordonnanceur.java +++ b/app/src/main/java/org/Models/Ordonnanceur.java @@ -18,14 +18,12 @@ public class Ordonnanceur extends Thread { @Override public void run() { - while (estActif) { + while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(pause); runnable.run(); } catch (InterruptedException e) { - if (!estActif) { - break; - } + break; } } } diff --git a/app/src/main/java/org/Views/VueBandeauControle.java b/app/src/main/java/org/Views/VueBandeauControle.java index fa8dcbb..4e3bb83 100644 --- a/app/src/main/java/org/Views/VueBandeauControle.java +++ b/app/src/main/java/org/Views/VueBandeauControle.java @@ -33,8 +33,6 @@ public class VueBandeauControle extends JPanel { // NEXT PIECE nextPiecePanel = new JPanel(); - // nextPiecePanel.setPreferredSize(new Dimension(100, 100)); - // nextPiecePanel.setMaximumSize(new Dimension(100, 100)); nextPiecePanel.setBackground(Color.LIGHT_GRAY); nextPiecePanel.setAlignmentX(Component.CENTER_ALIGNMENT); initierNextPiecePanel(); @@ -44,9 +42,9 @@ public class VueBandeauControle extends JPanel { quitterButton = new JButton("QUITTER"); Dimension buttonSize = new Dimension(85, 30); Insets margeBoutton = new Insets(2, 2, 2, 2); - // pauseButton.setPreferredSize(buttonSize); + pauseButton.setPreferredSize(buttonSize); pauseButton.setMargin(margeBoutton); - // quitterButton.setPreferredSize(buttonSize); + quitterButton.setPreferredSize(buttonSize); quitterButton.setMargin(margeBoutton); JPanel boutonsPanel = new JPanel(); boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0)); diff --git a/app/src/main/java/org/Views/VueGrille.java b/app/src/main/java/org/Views/VueGrille.java index 9a0bf68..edac47f 100644 --- a/app/src/main/java/org/Views/VueGrille.java +++ b/app/src/main/java/org/Views/VueGrille.java @@ -26,22 +26,14 @@ public class VueGrille extends JPanel implements Observer, Runnable { private int nbColonnes; private JPanel[][] casesGrille; - //private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - //private double tailleJFrameX = screenSize.getHeight() / 2; - //private double tailleJFrameY = screenSize.getHeight(); - public VueGrille(Grille grille, Jeu jeu) { this.grille = grille; this.jeu = jeu; this.nbLignes = grille.getNbLignes(); this.nbColonnes = grille.getNbColonnes(); setLayout(new BorderLayout()); - grillePanel = new JPanel(new GridLayoutCarre(nbLignes,nbColonnes)); + grillePanel = new JPanel(new GridLayoutCarre(nbLignes,nbColonnes)); //pour que les cases soient carrés add(grillePanel, BorderLayout.CENTER); - //setSize((int) tailleJFrameX, (int) tailleJFrameY); - //System.err.println("taille " + tailleJFrameX + " " + tailleJFrameY); - //add(this.grillePanel, BorderLayout.CENTER); - //initialiserVueGrille(); casesGrille = new JPanel[nbLignes][nbColonnes]; for (int i = 0; i < nbLignes; i++) { for (int j = 0; j < nbColonnes; j++) { diff --git a/app/src/main/java/org/Views/VueTetris.java b/app/src/main/java/org/Views/VueTetris.java index c19f7cf..cff6601 100644 --- a/app/src/main/java/org/Views/VueTetris.java +++ b/app/src/main/java/org/Views/VueTetris.java @@ -13,13 +13,14 @@ public class VueTetris extends JFrame { public static double tailleJFrameX = screenSize.getHeight() / 2; public static double tailleJFrameY = screenSize.getHeight() / 2; private VueGrille vueGrille; + private VueBandeauControle vueControle; public VueTetris(Grille grille, Jeu jeu) { super("Tetris"); - VueGrille vueGrille = new VueGrille(grille, jeu); - VueBandeauControle vueControle = new VueBandeauControle(); - TetrisBandeauControleur controleur = new TetrisBandeauControleur(vueControle); + this.vueGrille = new VueGrille(grille, jeu); + this.vueControle = new VueBandeauControle(); + //TetrisBandeauControleur controleur = new TetrisBandeauControleur(vueControle); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); @@ -44,4 +45,8 @@ public class VueTetris extends JFrame { // Utilisation de la pièce L vueControle.afficherPieceSuivante(jeu.getPieceSuivante()); } + + public VueBandeauControle getVueBandeauControle() { + return this.vueControle; + } }