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;
|
package org;
|
||||||
|
|
||||||
import org.Controllers.IO;
|
import org.Controllers.IO;
|
||||||
|
import org.Controllers.TetrisBandeauControleur;
|
||||||
import org.Models.Grille;
|
import org.Models.Grille;
|
||||||
import org.Models.Jeu;
|
import org.Models.Jeu;
|
||||||
|
import org.Models.Musique;
|
||||||
import org.Views.VueTetris;
|
import org.Views.VueTetris;
|
||||||
|
|
||||||
public class App {
|
public class App {
|
||||||
@@ -18,7 +20,9 @@ public class App {
|
|||||||
|
|
||||||
// Models
|
// Models
|
||||||
Grille grille = new Grille(20, 10);
|
Grille grille = new Grille(20, 10);
|
||||||
Jeu jeu = new Jeu(grille);
|
Musique musique = new Musique();
|
||||||
|
musique.start();
|
||||||
|
Jeu jeu = new Jeu(grille,musique);
|
||||||
|
|
||||||
// Views
|
// Views
|
||||||
VueTetris vueTetris = new VueTetris(grille, jeu);
|
VueTetris vueTetris = new VueTetris(grille, jeu);
|
||||||
@@ -26,5 +30,7 @@ public class App {
|
|||||||
// Controllers
|
// Controllers
|
||||||
IO io = new IO(jeu);
|
IO io = new IO(jeu);
|
||||||
vueTetris.addKeyListener(io);
|
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 Musique musique;
|
||||||
private VueBandeauControle vueControle;
|
private VueBandeauControle vueControle;
|
||||||
|
|
||||||
public TetrisBandeauControleur(VueBandeauControle vueControle) {
|
public TetrisBandeauControleur(VueBandeauControle vueControle, Musique musique) {
|
||||||
this.vueControle = vueControle;
|
this.vueControle = vueControle;
|
||||||
this.musique = new Musique();
|
this.musique = musique;
|
||||||
musique.start();// demarer musique
|
|
||||||
// action play/pause
|
// action play/pause
|
||||||
this.vueControle.getPauseButton().addActionListener(new ActionListener() {
|
this.vueControle.getPauseButton().addActionListener(e -> switchPlayPause());
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
switchPlayPause();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
vueControle.getQuitterButton().addActionListener(e -> {
|
vueControle.getQuitterButton().addActionListener(e -> {
|
||||||
System.out.println("Fermeture de l'application...");
|
System.out.println("Fermeture de l'application...");
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.Models.Pieces.PieceL;
|
|||||||
public class Jeu extends Observable implements Runnable {
|
public class Jeu extends Observable implements Runnable {
|
||||||
private Grille grille;
|
private Grille grille;
|
||||||
private Ordonnanceur ordonnanceur;
|
private Ordonnanceur ordonnanceur;
|
||||||
|
private Musique musique;
|
||||||
|
|
||||||
private PieceCourante pieceSuivante;
|
private PieceCourante pieceSuivante;
|
||||||
private int pieceSuivanteX;
|
private int pieceSuivanteX;
|
||||||
@@ -19,8 +20,9 @@ public class Jeu extends Observable implements Runnable {
|
|||||||
|
|
||||||
public boolean jeuEnCours = true;
|
public boolean jeuEnCours = true;
|
||||||
|
|
||||||
public Jeu(Grille grille) {
|
public Jeu(Grille grille, Musique musique) {
|
||||||
this.grille = grille;
|
this.grille = grille;
|
||||||
|
this.musique = musique;
|
||||||
|
|
||||||
this.grille.setPieceCourante(getNouvellePiece());
|
this.grille.setPieceCourante(getNouvellePiece());
|
||||||
this.pieceSuivante = getNouvellePiece();
|
this.pieceSuivante = getNouvellePiece();
|
||||||
@@ -65,6 +67,10 @@ public class Jeu extends Observable implements Runnable {
|
|||||||
public void finPartie() {
|
public void finPartie() {
|
||||||
this.jeuEnCours = false;
|
this.jeuEnCours = false;
|
||||||
ordonnanceur.interrupt();
|
ordonnanceur.interrupt();
|
||||||
|
if (musique != null) {
|
||||||
|
System.out.println("Arret musique");
|
||||||
|
musique.arreterMusique();
|
||||||
|
}
|
||||||
setChanged();
|
setChanged();
|
||||||
notifyObservers();
|
notifyObservers();
|
||||||
}
|
}
|
||||||
@@ -72,6 +78,9 @@ public class Jeu extends Observable implements Runnable {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// TODO: game logic here
|
// TODO: game logic here
|
||||||
|
if (!jeuEnCours) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (estFinPartie()) {
|
if (estFinPartie()) {
|
||||||
finPartie();
|
finPartie();
|
||||||
|
|||||||
@@ -7,42 +7,44 @@ import java.io.InputStream;
|
|||||||
|
|
||||||
public class Musique extends Thread {
|
public class Musique extends Thread {
|
||||||
private Player player;
|
private Player player;
|
||||||
private boolean stop = false;
|
private volatile boolean stop = false;
|
||||||
private boolean enPause = false;
|
private volatile boolean enPause = false;
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
while (!stop) {
|
|
||||||
try {
|
try {
|
||||||
|
while (!stop) {
|
||||||
if (!enPause) {
|
if (!enPause) {
|
||||||
InputStream musique = getClass().getResourceAsStream("/TetrisMusic.mp3");
|
try (InputStream musique = getClass().getResourceAsStream("/TetrisMusic.mp3")) {
|
||||||
if (musique == null) {
|
if (musique == null) {
|
||||||
System.err.println("Erreur : le fichier musique.mp3 est introuvable.");
|
System.err.println("Erreur : le fichier musique.mp3 est introuvable.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BufferedInputStream buffer = new BufferedInputStream(musique);
|
BufferedInputStream buffer = new BufferedInputStream(musique);
|
||||||
player = new Player(buffer);
|
this.player = new Player(buffer);
|
||||||
|
System.out.println("Lecture de la musique...");
|
||||||
player.play();
|
player.play();
|
||||||
} else {
|
|
||||||
Thread.sleep(1000); // Attendre 1 seconde avant de vérifier à nouveau
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println("Erreur lors de la lecture de la musique : " + e.getMessage());
|
System.err.println("Erreur lors de la lecture de la musique : " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void basculePlayPause() {
|
|
||||||
if (enPause) {
|
|
||||||
enPause = false;
|
|
||||||
} else {
|
} else {
|
||||||
enPause = true;
|
Thread.sleep(1000); // Attendre 1 seconde avant de vérifier à nouveau
|
||||||
if (player != null) {
|
|
||||||
player.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} 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() {
|
public void arreterMusique() {
|
||||||
|
System.out.println("Arrêt de la musique.");
|
||||||
stop = true;
|
stop = true;
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.close();
|
player.close();
|
||||||
|
|||||||
@@ -18,15 +18,13 @@ public class Ordonnanceur extends Thread {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
while (estActif) {
|
while (!Thread.currentThread().isInterrupted()) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(pause);
|
Thread.sleep(pause);
|
||||||
runnable.run();
|
runnable.run();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
if (!estActif) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ public class VueBandeauControle extends JPanel {
|
|||||||
|
|
||||||
// NEXT PIECE
|
// NEXT PIECE
|
||||||
nextPiecePanel = new JPanel();
|
nextPiecePanel = new JPanel();
|
||||||
// nextPiecePanel.setPreferredSize(new Dimension(100, 100));
|
|
||||||
// nextPiecePanel.setMaximumSize(new Dimension(100, 100));
|
|
||||||
nextPiecePanel.setBackground(Color.LIGHT_GRAY);
|
nextPiecePanel.setBackground(Color.LIGHT_GRAY);
|
||||||
nextPiecePanel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
nextPiecePanel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||||
initierNextPiecePanel();
|
initierNextPiecePanel();
|
||||||
@@ -44,9 +42,9 @@ public class VueBandeauControle extends JPanel {
|
|||||||
quitterButton = new JButton("QUITTER");
|
quitterButton = new JButton("QUITTER");
|
||||||
Dimension buttonSize = new Dimension(85, 30);
|
Dimension buttonSize = new Dimension(85, 30);
|
||||||
Insets margeBoutton = new Insets(2, 2, 2, 2);
|
Insets margeBoutton = new Insets(2, 2, 2, 2);
|
||||||
// pauseButton.setPreferredSize(buttonSize);
|
pauseButton.setPreferredSize(buttonSize);
|
||||||
pauseButton.setMargin(margeBoutton);
|
pauseButton.setMargin(margeBoutton);
|
||||||
// quitterButton.setPreferredSize(buttonSize);
|
quitterButton.setPreferredSize(buttonSize);
|
||||||
quitterButton.setMargin(margeBoutton);
|
quitterButton.setMargin(margeBoutton);
|
||||||
JPanel boutonsPanel = new JPanel();
|
JPanel boutonsPanel = new JPanel();
|
||||||
boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));
|
boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));
|
||||||
|
|||||||
@@ -26,22 +26,14 @@ public class VueGrille extends JPanel implements Observer, Runnable {
|
|||||||
private int nbColonnes;
|
private int nbColonnes;
|
||||||
private JPanel[][] casesGrille;
|
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) {
|
public VueGrille(Grille grille, Jeu jeu) {
|
||||||
this.grille = grille;
|
this.grille = grille;
|
||||||
this.jeu = jeu;
|
this.jeu = jeu;
|
||||||
this.nbLignes = grille.getNbLignes();
|
this.nbLignes = grille.getNbLignes();
|
||||||
this.nbColonnes = grille.getNbColonnes();
|
this.nbColonnes = grille.getNbColonnes();
|
||||||
setLayout(new BorderLayout());
|
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);
|
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];
|
casesGrille = new JPanel[nbLignes][nbColonnes];
|
||||||
for (int i = 0; i < nbLignes; i++) {
|
for (int i = 0; i < nbLignes; i++) {
|
||||||
for (int j = 0; j < nbColonnes; j++) {
|
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 tailleJFrameX = screenSize.getHeight() / 2;
|
||||||
public static double tailleJFrameY = screenSize.getHeight() / 2;
|
public static double tailleJFrameY = screenSize.getHeight() / 2;
|
||||||
private VueGrille vueGrille;
|
private VueGrille vueGrille;
|
||||||
|
private VueBandeauControle vueControle;
|
||||||
|
|
||||||
public VueTetris(Grille grille, Jeu jeu) {
|
public VueTetris(Grille grille, Jeu jeu) {
|
||||||
super("Tetris");
|
super("Tetris");
|
||||||
|
|
||||||
VueGrille vueGrille = new VueGrille(grille, jeu);
|
this.vueGrille = new VueGrille(grille, jeu);
|
||||||
VueBandeauControle vueControle = new VueBandeauControle();
|
this.vueControle = new VueBandeauControle();
|
||||||
TetrisBandeauControleur controleur = new TetrisBandeauControleur(vueControle);
|
//TetrisBandeauControleur controleur = new TetrisBandeauControleur(vueControle);
|
||||||
|
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
@@ -44,4 +45,8 @@ public class VueTetris extends JFrame {
|
|||||||
// Utilisation de la pièce L
|
// Utilisation de la pièce L
|
||||||
vueControle.afficherPieceSuivante(jeu.getPieceSuivante());
|
vueControle.afficherPieceSuivante(jeu.getPieceSuivante());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VueBandeauControle getVueBandeauControle() {
|
||||||
|
return this.vueControle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user