150 lines
4.0 KiB
Java
150 lines
4.0 KiB
Java
package org.Models;
|
|
|
|
import java.awt.Point;
|
|
import java.util.Observable;
|
|
import java.util.Random;
|
|
|
|
import org.Models.Pieces.PieceI;
|
|
import org.Models.Pieces.PieceJ;
|
|
import org.Models.Pieces.PieceL;
|
|
import org.Models.Pieces.PieceO;
|
|
import org.Models.Pieces.PieceS;
|
|
import org.Models.Pieces.PieceT;
|
|
import org.Models.Pieces.PieceZ;
|
|
import org.Views.VueGameOver;
|
|
import org.Views.VueTetris;
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public class Jeu extends Observable implements Runnable {
|
|
private Grille grille;
|
|
private Ordonnanceur ordonnanceur;
|
|
private Musique musique;
|
|
|
|
private PieceCourante pieceSuivante;
|
|
private int pieceSuivanteX;
|
|
private int pieceSuivanteY;
|
|
|
|
public boolean jeuEnCours = true;
|
|
|
|
public Jeu(Grille grille, Musique musique) {
|
|
System.err.println("init jeu");
|
|
this.grille = grille;
|
|
this.musique = musique;
|
|
|
|
System.err.println("init nouvelle piece courante");
|
|
this.grille.setPieceCourante(getNouvellePiece());
|
|
System.err.println("init nouvelle piece suivante");
|
|
this.pieceSuivante = getNouvellePiece();
|
|
|
|
this.ordonnanceur = new Ordonnanceur(this, 1000);
|
|
this.ordonnanceur.start();
|
|
}
|
|
|
|
private PieceCourante getNouvellePiece() {
|
|
Random random = new Random();
|
|
int randomiiii = random.nextInt(7);
|
|
System.err.println("randomiiiii : " + randomiiii);
|
|
|
|
PieceCourante nouvellePiece;
|
|
switch (randomiiii) {
|
|
case 0:
|
|
nouvellePiece = new PieceI();
|
|
System.err.println("piece I");
|
|
|
|
break;
|
|
case 1:
|
|
nouvellePiece = new PieceL();
|
|
System.err.println("piece L");
|
|
break;
|
|
case 2:
|
|
nouvellePiece = new PieceJ();
|
|
System.err.println("piece J");
|
|
break;
|
|
case 3:
|
|
nouvellePiece = new PieceO();
|
|
System.err.println("piece O");
|
|
break;
|
|
case 4:
|
|
nouvellePiece = new PieceS();
|
|
System.err.println("piece S");
|
|
break;
|
|
case 5:
|
|
nouvellePiece = new PieceT();
|
|
System.err.println("piece T");
|
|
break;
|
|
case 6:
|
|
nouvellePiece = new PieceZ();
|
|
System.err.println("piece Z");
|
|
break;
|
|
default:
|
|
nouvellePiece = new PieceL();
|
|
break;
|
|
}
|
|
return nouvellePiece;
|
|
}
|
|
|
|
public PieceCourante getPieceSuivante() {
|
|
return pieceSuivante;
|
|
}
|
|
|
|
public int getPieceSuivanteX() {
|
|
return pieceSuivanteX;
|
|
}
|
|
|
|
public int getPieceSuivanteY() {
|
|
return pieceSuivanteY;
|
|
}
|
|
|
|
public Grille getGrille() {
|
|
return grille;
|
|
}
|
|
|
|
public boolean estFinPartie() {
|
|
for (Point caseColoree : this.grille.motifPieceCouranteColoriee()) {
|
|
if (this.grille.getCase(caseColoree.y, caseColoree.x)) {
|
|
new VueGameOver(grille.getScore(),e -> System.exit(0),e->{
|
|
System.out.println("Début d'une nouvelle partie");
|
|
});
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void finPartie() {
|
|
this.jeuEnCours = false;
|
|
ordonnanceur.interrupt();
|
|
if (musique != null) {
|
|
System.out.println("Arret musique");
|
|
musique.arreterMusique();
|
|
}
|
|
setChanged();
|
|
notifyObservers();
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
// TODO: game logic here
|
|
if (!jeuEnCours || grille.estEnPause()) {
|
|
return;
|
|
}
|
|
|
|
if (estFinPartie()) {
|
|
finPartie();
|
|
return;
|
|
}
|
|
|
|
if (!this.grille.doitFixerPiece()) {
|
|
this.grille.deplacerPiece(Direction.BAS);
|
|
} else {
|
|
this.grille.fixerPiece();
|
|
this.grille.setPieceCourante(pieceSuivante);
|
|
this.pieceSuivante = getNouvellePiece();
|
|
}
|
|
|
|
setChanged();
|
|
notifyObservers();
|
|
}
|
|
}
|