Ajoute de l'arret de la musique en fin de partie + arret propre de l'ordonanceur

This commit is contained in:
ROGER
2025-05-16 17:10:15 +02:00
parent 2fec9fc96e
commit 27862eb3cd
8 changed files with 56 additions and 52 deletions

View File

@@ -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
}
}

View File

@@ -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);

View File

@@ -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();

View File

@@ -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 {
while (!stop) {
if (!enPause) {
InputStream musique = getClass().getResourceAsStream("/TetrisMusic.mp3");
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);
player = new Player(buffer);
this.player = new Player(buffer);
System.out.println("Lecture de la musique...");
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());
}
}
}
public void basculePlayPause() {
if (enPause) {
enPause = false;
} else {
enPause = true;
if (player != null) {
player.close();
Thread.sleep(1000); // Attendre 1 seconde avant de vérifier à nouveau
}
}
} catch (InterruptedException e) {
System.err.println("Musique interrompue : " + e.getMessage());
}
System.out.println("Fin du thread de musique.");
}
public void basculePlayPause() {
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();

View File

@@ -18,15 +18,13 @@ 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;
}
}
}
}
}

View File

@@ -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));

View File

@@ -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++) {

View File

@@ -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;
}
}