ajout d'un compteur de lignes supprimée et d'un bouton pour quitter l'application
This commit is contained in:
@@ -14,7 +14,5 @@ public class App {
|
||||
Grille grille = new Grille(10, 10);
|
||||
//VueGrille vueGrille = new VueGrille(grille);
|
||||
VueTetris vueTetris = new VueTetris(grille);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
50
app/src/main/java/org/Controlers/TetrisControleur.java
Normal file
50
app/src/main/java/org/Controlers/TetrisControleur.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package org.Controlers;
|
||||
|
||||
import org.Models.Musique;
|
||||
import org.Views.VueControle;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class TetrisControleur {
|
||||
private boolean partieEnPause = false;
|
||||
private boolean partieTerminee = false;
|
||||
private Musique musique;
|
||||
private VueControle vueControle;
|
||||
|
||||
public TetrisControleur(VueControle vueControle) {
|
||||
this.vueControle = vueControle;
|
||||
this.musique = new Musique();
|
||||
musique.start();//demarer musique
|
||||
//action play/pause
|
||||
this.vueControle.getPauseButton().addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
switchPlayPause();
|
||||
}
|
||||
});
|
||||
vueControle.getQuitterButton().addActionListener(e -> {
|
||||
System.out.println("Fermeture de l'application...");
|
||||
System.exit(0);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void switchPlayPause() {
|
||||
if (partieTerminee) {
|
||||
return;
|
||||
}
|
||||
partieEnPause = !partieEnPause;
|
||||
musique.basculePlayPause();
|
||||
vueControle.getPauseButton().setText(partieEnPause ? "PLAY" : "PAUSE");
|
||||
System.out.println(partieEnPause ? "Partie en pause" : "Partie en cours");
|
||||
}
|
||||
|
||||
public void setPartieTerminee() {
|
||||
partieTerminee = true;
|
||||
musique.arreterMusique();
|
||||
vueControle.getPauseButton().setEnabled(false);
|
||||
System.out.println("Partie terminée");
|
||||
}
|
||||
|
||||
}
|
||||
52
app/src/main/java/org/Models/Musique.java
Normal file
52
app/src/main/java/org/Models/Musique.java
Normal file
@@ -0,0 +1,52 @@
|
||||
package org.Models;
|
||||
|
||||
import javazoom.jl.player.Player;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class Musique extends Thread{
|
||||
private Player player;
|
||||
private boolean stop = false;
|
||||
private boolean enPause = false;
|
||||
|
||||
public void run(){
|
||||
while (!stop) {
|
||||
try {
|
||||
if (!enPause) {
|
||||
InputStream musique = getClass().getResourceAsStream("/TetrisMusic.mp3");
|
||||
//System.out.println(musique != null ? "Musique trouvée" : "Musique introuvable");
|
||||
if (musique == null) {
|
||||
System.err.println("Erreur : le fichier musique.mp3 est introuvable.");
|
||||
return;
|
||||
}
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void basculePlayPause() {
|
||||
if (enPause) {
|
||||
enPause = false;
|
||||
} else {
|
||||
enPause = true;
|
||||
if (player != null) {
|
||||
player.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void arreterMusique() {
|
||||
stop = true;
|
||||
if (player != null) {
|
||||
player.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
17
app/src/main/java/org/Models/PieceI.java
Normal file
17
app/src/main/java/org/Models/PieceI.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package org.Models;
|
||||
|
||||
public class PieceI extends PieceCourante {
|
||||
|
||||
public PieceI(){
|
||||
super();
|
||||
this.motif[0][1] = true;
|
||||
this.motif[1][1] = true;
|
||||
this.motif[2][1] = true;
|
||||
this.motif[3][1] = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean[][] getMotif() {
|
||||
return super.getMotif();
|
||||
}
|
||||
}
|
||||
17
app/src/main/java/org/Models/PieceJ.java
Normal file
17
app/src/main/java/org/Models/PieceJ.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package org.Models;
|
||||
|
||||
public class PieceJ extends PieceCourante {
|
||||
|
||||
public PieceJ(){
|
||||
super();
|
||||
this.motif[0][2] = true;
|
||||
this.motif[1][2] = true;
|
||||
this.motif[2][2] = true;
|
||||
this.motif[2][1] = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean[][] getMotif() {
|
||||
return super.getMotif();
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,11 @@ public class PieceL extends PieceCourante {
|
||||
|
||||
public PieceL(){
|
||||
super();
|
||||
this.motif[1][0] = true;
|
||||
this.motif[2][0] = true;
|
||||
this.motif[3][0] = true;
|
||||
this.motif[3][1] = true;
|
||||
this.motif[0][1] = true;
|
||||
this.motif[1][1] = true;
|
||||
this.motif[2][1] = true;
|
||||
this.motif[2][2] = true;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
16
app/src/main/java/org/Models/PieceO.java
Normal file
16
app/src/main/java/org/Models/PieceO.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package org.Models;
|
||||
|
||||
public class PieceO extends PieceCourante{
|
||||
public PieceO(){
|
||||
super();
|
||||
this.motif[0][1] = true;
|
||||
this.motif[0][2] = true;
|
||||
this.motif[1][1] = true;
|
||||
this.motif[1][2] = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean[][] getMotif() {
|
||||
return super.getMotif();
|
||||
}
|
||||
}
|
||||
17
app/src/main/java/org/Models/PieceS.java
Normal file
17
app/src/main/java/org/Models/PieceS.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package org.Models;
|
||||
|
||||
public class PieceS extends PieceCourante {
|
||||
|
||||
public PieceS(){
|
||||
super();
|
||||
this.motif[0][1] = true;
|
||||
this.motif[1][1] = true;
|
||||
this.motif[1][2] = true;
|
||||
this.motif[2][2] = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean[][] getMotif() {
|
||||
return super.getMotif();
|
||||
}
|
||||
}
|
||||
17
app/src/main/java/org/Models/PieceT.java
Normal file
17
app/src/main/java/org/Models/PieceT.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package org.Models;
|
||||
|
||||
public class PieceT extends PieceCourante {
|
||||
|
||||
public PieceT(){
|
||||
super();
|
||||
this.motif[0][1] = true;
|
||||
this.motif[1][1] = true;
|
||||
this.motif[2][1] = true;
|
||||
this.motif[1][2] = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean[][] getMotif() {
|
||||
return super.getMotif();
|
||||
}
|
||||
}
|
||||
17
app/src/main/java/org/Models/PieceZ.java
Normal file
17
app/src/main/java/org/Models/PieceZ.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package org.Models;
|
||||
|
||||
public class PieceZ extends PieceCourante {
|
||||
|
||||
public PieceZ(){
|
||||
super();
|
||||
this.motif[0][2] = true;
|
||||
this.motif[1][2] = true;
|
||||
this.motif[1][1] = true;
|
||||
this.motif[2][1] = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean[][] getMotif() {
|
||||
return super.getMotif();
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,8 @@ public class VueControle extends JPanel {
|
||||
private JPanel nextPiecePanel;
|
||||
private JButton pauseButton;
|
||||
private JPanel[][] caseNextPiece = new JPanel[4][4];
|
||||
private JLabel nbLigneLabel;
|
||||
private JButton quitterButton;
|
||||
|
||||
public VueControle() {
|
||||
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||
@@ -17,11 +19,17 @@ public class VueControle extends JPanel {
|
||||
setPreferredSize(new Dimension(200, 600));
|
||||
|
||||
//SCORE
|
||||
scoreLabel = new JLabel("Score: 0");
|
||||
scoreLabel = new JLabel("SCORE : 0");
|
||||
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.setForeground(Color.white);
|
||||
nbLigneLabel.setFont(new Font("Arial", Font.PLAIN, 16));
|
||||
nbLigneLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
//NEXT PIECE
|
||||
nextPiecePanel = new JPanel();
|
||||
nextPiecePanel.setPreferredSize(new Dimension(100, 100));
|
||||
@@ -30,16 +38,24 @@ public class VueControle extends JPanel {
|
||||
nextPiecePanel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
initierNextPiecePanel();
|
||||
|
||||
//PAUSE BUTTON
|
||||
pauseButton = new JButton("Pause / Play");
|
||||
pauseButton.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
//PAUSE BUTTON & QUIT BUTTON
|
||||
pauseButton = new JButton("PAUSE");
|
||||
quitterButton = new JButton("QUITTER");
|
||||
JPanel boutonsPanel = new JPanel();
|
||||
boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));
|
||||
boutonsPanel.setOpaque(false);
|
||||
boutonsPanel.add(pauseButton);
|
||||
boutonsPanel.add(quitterButton);
|
||||
|
||||
add(Box.createVerticalStrut(20)); // Add some space at the top
|
||||
|
||||
add(Box.createVerticalStrut(20));
|
||||
add(scoreLabel);
|
||||
add(Box.createVerticalStrut(20)); // Add some space between score and next piece
|
||||
add(Box.createVerticalStrut(20));
|
||||
add(nbLigneLabel);
|
||||
add(Box.createVerticalStrut(20));
|
||||
add(nextPiecePanel);
|
||||
add(Box.createVerticalStrut(20)); // Add some space between next piece and button
|
||||
add(pauseButton);
|
||||
add(Box.createVerticalStrut(20));
|
||||
add(boutonsPanel);
|
||||
|
||||
//setVisible(true);
|
||||
}
|
||||
@@ -52,6 +68,10 @@ public class VueControle extends JPanel {
|
||||
return pauseButton;
|
||||
}
|
||||
|
||||
public JButton getQuitterButton() {
|
||||
return quitterButton;
|
||||
}
|
||||
|
||||
public JPanel getNextPiecePanel() {
|
||||
return nextPiecePanel;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package org.Views;
|
||||
|
||||
import org.Models.Grille;
|
||||
import org.Models.PieceCourante;
|
||||
import org.Models.PieceL;
|
||||
import org.Controlers.TetrisControleur;
|
||||
import org.Models.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -13,6 +12,7 @@ public class VueTetris extends JFrame {
|
||||
|
||||
VueGrille vueGrille = new VueGrille(grille);
|
||||
VueControle vueControle = new VueControle();
|
||||
TetrisControleur controleur = new TetrisControleur(vueControle);
|
||||
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setLayout(new BorderLayout());
|
||||
@@ -25,7 +25,7 @@ public class VueTetris extends JFrame {
|
||||
setVisible(true);
|
||||
|
||||
// Utilisation de la pièce L
|
||||
PieceCourante pieceL = new PieceL();
|
||||
vueControle.afficherPieceSuivante(pieceL);
|
||||
PieceCourante pieceT = new PieceT();
|
||||
vueControle.afficherPieceSuivante(pieceT);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user