diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..cadf93e --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments=--init-script /home/morph/.config/Code/User/globalStorage/redhat.java/1.42.0/config_linux/org.eclipse.osgi/58/0/.cp/gradle/init/init.gradle --init-script /home/morph/.config/Code/User/globalStorage/redhat.java/1.42.0/config_linux/org.eclipse.osgi/58/0/.cp/gradle/protobuf/init.gradle +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=/home/morph/.sdkman/candidates/java/23-tem +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/app/.settings/org.eclipse.buildship.core.prefs b/app/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..b0defd6 --- /dev/null +++ b/app/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,13 @@ +arguments=--init-script /home/morph/.cache/jdtls/config/org.eclipse.osgi/248/0/.cp/gradle/init/init.gradle +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(LOCAL_INSTALLATION(/home/morph/.sdkman/candidates/gradle/current)) +connection.project.dir=.. +eclipse.preferences.version=1 +gradle.user.home= +java.home=/usr/lib/jvm/java-21-openjdk +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/app/.settings/org.eclipse.jdt.core.prefs b/app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..e9186c3 --- /dev/null +++ b/app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.source=21 diff --git a/app/src/main/java/org/Models/Grille.java b/app/src/main/java/org/Models/Grille.java index 929a52e..8d5d328 100644 --- a/app/src/main/java/org/Models/Grille.java +++ b/app/src/main/java/org/Models/Grille.java @@ -21,6 +21,7 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { this.nbColonnes = nbColonnes; this.grille = new boolean[nbLignes][nbColonnes]; initGrille(); + this.grille[nbLignes - 1][nbColonnes - 1] = true; } public void initGrille() { @@ -70,22 +71,22 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { switch (direction) { case BAS: - if (peuxBouger(direction)) { + if (peuxBouger(direction, this.motifPieceCouranteColoriee())) { deplacerPieceBas(); } break; case GAUCHE: - if (peuxBouger(direction)) { + if (peuxBouger(direction, this.motifPieceCouranteColoriee())) { deplacerPieceGauche(); } break; case DROITE: - if (peuxBouger(direction)) { + if (peuxBouger(direction, this.motifPieceCouranteColoriee())) { deplacerPieceDroite(); } break; case TOUTENBAS: - if (peuxBouger(direction)) { + if (peuxBouger(direction, this.motifPieceCouranteColoriee())) { deplacerPieceToutEnBas(); } default: @@ -115,7 +116,7 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { } private void deplacerPieceToutEnBas() { - while (peuxBouger(Direction.BAS)) { + while (peuxBouger(Direction.BAS, this.motifPieceCouranteColoriee())) { deplacerPieceBas(); } } @@ -166,7 +167,7 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { return casesColores; } - public boolean peuxBouger(Direction direction) { + public boolean peuxBouger(Direction direction, List motif) { int deltaX = 0; int deltaY = 0; @@ -186,8 +187,7 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { break; } - List motifPieceColoree = motifPieceCouranteColoriee(); - for (Point caseColoree : motifPieceColoree) { + for (Point caseColoree : motif) { int newX = caseColoree.x + deltaX; int newY = caseColoree.y + deltaY; @@ -211,10 +211,13 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { for (Point caseColoree : motifPieceCouranteColoriee()) { setCase(caseColoree.y, caseColoree.x, true); } + + System.err.println("post fixage de piece"); + verifierEtSupprimerLignesSiBesoin(); } public boolean doitFixerPiece() { - if (!peuxBouger(Direction.BAS)) { + if (!peuxBouger(Direction.BAS, this.motifPieceCouranteColoriee())) { return true; } @@ -230,4 +233,96 @@ public class Grille extends Observable { // TODO: ?? implements Runnable { } + + // public void verifierEtSupprimerLignesSiBesoin() { + + // for (int i = nbLignes - 1; i > 0; i--) { + // boolean ligneSupprimable = true; + + // for (int j = 0; j < nbColonnes; j++) { + // if (!this.grille[i][j]) { + // ligneSupprimable = false; + // } + // } + + // if (ligneSupprimable) { + // supprimerLigne(i); + // } + // } + // } + + public void verifierEtSupprimerLignesSiBesoin() { + for (int i = nbLignes - 1; i >= 0; i--) { + boolean ligneSupprimable = true; + + for (int j = 0; j < nbColonnes; j++) { + if (!this.grille[i][j]) { + ligneSupprimable = false; + break; + } + } + + if (ligneSupprimable) { + supprimerLigne(i); + i++; + } + } + } + + // // TODO : EUHHHHHHHHHH JE CROIS PAS que ça marche comme ça c'est pas en mode + // gravité récursive, c'est juste tout descend de n lignes cassées + // // dès qu'on a fixe la pièce courante on verifie le nombre de lignes a + // supprimes + // // dans la grille + + // // -> + // // faire tomber JUSQU'EN bas la ligne X au dessus des n lines supprimes + // // PAR CONTRE faire tomber de n lignes toutes les lignes au dessus de X. + // while (peuxBouger(Direction.BAS, getLignePoints(i))) { + // System.err.println("testtttttttttt descnete"); + // descendreLigne(i - 1); + // } + + // // for (int j = i - 2; j > 0; j--) { + // // descendreLigne(j); + // // } + // } + + public void supprimerLigne(int i) { + for (int ligne = i; ligne > 0; ligne--) { + for (int j = 0; j < nbColonnes; j++) { + this.setCase(ligne, j, this.getCase(ligne - 1, j)); + } + } + + for (int j = 0; j < nbColonnes; j++) { + this.setCase(0, j, false); + } + + setChanged(); + notifyObservers(); + } + + public List getLignePoints(int i) { + List coordonnesCase = new ArrayList<>(); + + for (int j = 0; j < nbColonnes; j++) { + coordonnesCase.add(new Point(j, i)); + } + + return coordonnesCase; + } + + public void descendreLigne(int i) { + for (int j = 0; j < nbColonnes; j++) { + List coordonnesCase = new ArrayList<>(); + coordonnesCase.add(new Point(j, i)); + + if (this.grille[i][j]) { + this.setCase(i + 1, j, true); + } + + this.setCase(i, j, false); + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/Models/Jeu.java b/app/src/main/java/org/Models/Jeu.java index e38ffe1..7b3f736 100644 --- a/app/src/main/java/org/Models/Jeu.java +++ b/app/src/main/java/org/Models/Jeu.java @@ -2,8 +2,15 @@ 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; @SuppressWarnings("deprecation") public class Jeu extends Observable implements Runnable { @@ -15,16 +22,16 @@ public class Jeu extends Observable implements Runnable { private int pieceSuivanteX; private int pieceSuivanteY; - // TODO : remove test variable - public int test = 0; - 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); @@ -32,10 +39,46 @@ public class Jeu extends Observable implements Runnable { } private PieceCourante getNouvellePiece() { - this.pieceSuivante = new PieceL(); - this.pieceSuivanteX = 3; - this.pieceSuivanteY = 0; - return pieceSuivante; + Random random = new Random(); + int randomiiii = random.nextInt(6); + 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() { @@ -91,7 +134,8 @@ public class Jeu extends Observable implements Runnable { this.grille.deplacerPiece(Direction.BAS); } else { this.grille.fixerPiece(); - this.grille.setPieceCourante(getNouvellePiece()); + this.grille.setPieceCourante(pieceSuivante); + this.pieceSuivante = getNouvellePiece(); } setChanged(); diff --git a/app/src/main/java/org/Models/PieceCourante.java b/app/src/main/java/org/Models/PieceCourante.java index 185ed61..7de48c5 100644 --- a/app/src/main/java/org/Models/PieceCourante.java +++ b/app/src/main/java/org/Models/PieceCourante.java @@ -1,6 +1,5 @@ package org.Models; public interface PieceCourante { - boolean[][] motif = new boolean[4][4]; abstract public boolean[][] getMotif(); } diff --git a/app/src/main/java/org/Models/Pieces/PieceCarre.java b/app/src/main/java/org/Models/Pieces/PieceCarre.java deleted file mode 100644 index 7d6e70f..0000000 --- a/app/src/main/java/org/Models/Pieces/PieceCarre.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.Models.Pieces; - -import org.Models.PieceCourante; - -public class PieceCarre implements PieceCourante { - - public PieceCarre() { - motif[1][1] = true; - motif[1][2] = true; - motif[2][1] = true; - motif[2][2] = true; - } - - @Override - public boolean[][] getMotif() { - return motif; - } -} diff --git a/app/src/main/java/org/Models/Pieces/PieceI.java b/app/src/main/java/org/Models/Pieces/PieceI.java index d493240..fb50b1f 100644 --- a/app/src/main/java/org/Models/Pieces/PieceI.java +++ b/app/src/main/java/org/Models/Pieces/PieceI.java @@ -4,6 +4,8 @@ import org.Models.PieceCourante; public class PieceI implements PieceCourante { +private boolean[][] motif = new boolean[4][4]; + public PieceI() { motif[0][1] = true; motif[1][1] = true; diff --git a/app/src/main/java/org/Models/Pieces/PieceJ.java b/app/src/main/java/org/Models/Pieces/PieceJ.java index 41f64ab..07bcdae 100644 --- a/app/src/main/java/org/Models/Pieces/PieceJ.java +++ b/app/src/main/java/org/Models/Pieces/PieceJ.java @@ -4,6 +4,8 @@ import org.Models.PieceCourante; public class PieceJ implements PieceCourante { +private boolean[][] motif = new boolean[3][3]; + public PieceJ() { motif[0][2] = true; motif[1][2] = true; diff --git a/app/src/main/java/org/Models/Pieces/PieceL.java b/app/src/main/java/org/Models/Pieces/PieceL.java index d5009fe..a58b66a 100644 --- a/app/src/main/java/org/Models/Pieces/PieceL.java +++ b/app/src/main/java/org/Models/Pieces/PieceL.java @@ -4,12 +4,14 @@ import org.Models.PieceCourante; public class PieceL implements PieceCourante { +private boolean[][] motif = new boolean[3][3]; + public PieceL(){ + motif[0][0] = true; motif[1][0] = true; motif[2][0] = true; - motif[3][0] = true; - motif[3][1] = true; - motif[3][2] = true; + motif[2][1] = true; + motif[2][2] = true; } @Override diff --git a/app/src/main/java/org/Models/Pieces/PieceO.java b/app/src/main/java/org/Models/Pieces/PieceO.java index dcf4bbd..68e5357 100644 --- a/app/src/main/java/org/Models/Pieces/PieceO.java +++ b/app/src/main/java/org/Models/Pieces/PieceO.java @@ -3,11 +3,13 @@ package org.Models.Pieces; import org.Models.PieceCourante; public class PieceO implements PieceCourante { + +private boolean[][] motif = new boolean[4][4]; public PieceO() { - motif[0][1] = true; - motif[0][2] = true; motif[1][1] = true; motif[1][2] = true; + motif[2][1] = true; + motif[2][2] = true; } @Override diff --git a/app/src/main/java/org/Models/Pieces/PieceS.java b/app/src/main/java/org/Models/Pieces/PieceS.java index cdcaf74..5ba4ebf 100644 --- a/app/src/main/java/org/Models/Pieces/PieceS.java +++ b/app/src/main/java/org/Models/Pieces/PieceS.java @@ -4,6 +4,8 @@ import org.Models.PieceCourante; public class PieceS implements PieceCourante { +private boolean[][] motif = new boolean[3][3]; + public PieceS() { motif[0][1] = true; motif[1][1] = true; diff --git a/app/src/main/java/org/Models/Pieces/PieceT.java b/app/src/main/java/org/Models/Pieces/PieceT.java index b033aea..74db025 100644 --- a/app/src/main/java/org/Models/Pieces/PieceT.java +++ b/app/src/main/java/org/Models/Pieces/PieceT.java @@ -4,6 +4,8 @@ import org.Models.PieceCourante; public class PieceT implements PieceCourante { +private boolean[][] motif = new boolean[3][3]; + public PieceT() { motif[0][1] = true; motif[1][1] = true; diff --git a/app/src/main/java/org/Models/Pieces/PieceZ.java b/app/src/main/java/org/Models/Pieces/PieceZ.java index 8be2e91..385080e 100644 --- a/app/src/main/java/org/Models/Pieces/PieceZ.java +++ b/app/src/main/java/org/Models/Pieces/PieceZ.java @@ -4,6 +4,8 @@ import org.Models.PieceCourante; public class PieceZ implements PieceCourante { +private boolean[][] motif = new boolean[3][3]; + public PieceZ() { motif[0][2] = true; motif[1][2] = true;