Files
Tetris/app/src/main/java/org/Models/Jeu.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();
}
}