Ajoute de l'arret de la musique en fin de partie + arret propre de l'ordonanceur
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user