Merge remote-tracking branch 'origin/Gwendal' into Thibaut

This commit is contained in:
Morph01
2025-05-15 18:00:09 +02:00
23 changed files with 558 additions and 48 deletions

2
.idea/gradle.xml generated
View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="21" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />

5
.idea/misc.xml generated
View File

@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="23" project-jdk-type="JavaSDK" /> <component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="ms-21" project-jdk-type="JavaSDK" />
</project> </project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/Tetris.app.main.iml" filepath="$PROJECT_DIR$/.idea/modules/app/Tetris.app.main.iml" />
</modules>
</component>
</project>

8
.idea/modules/app/Tetris.app.main.iml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../../../app/src/main" dumb="true">
<sourceFolder url="file://$MODULE_DIR$/../../../app/src/main/resources" type="java-resource" />
</content>
</component>
</module>

157
allfiles.txt Normal file
View File

@@ -0,0 +1,157 @@
275d761f246129253df1ecbc84c42c35f60daacc
43037c4174ec4d9e98e904411c9f74ca17aee21a
47908588e5d785be85631bcd14b437e073c2da36
5a175ea4b487bdcf281e44e7b99629fc6a10848f
63d5db5d6a80b960acd8bc31900ff1d01ae0a2a2
6af84d8dda24e9a9155c9ad7144741702bbaa549
7fb2becbb8fe125a9f592261924edda56e8eeef5
9ad9193244d045a470ecd64b60d4b35da2301432
b2649c364bf9bc52d52d609bc617c3ecff92197d
f2eefabf58c718cbb700c9f7c9d1995f8c8825e6
f9e3f1d2bba52b83d8bdb909ca2f685fd71a744c
285a6fb90cd7243ccd0ebebdf0cc2cca3c6bbbe1
34263085a001ecadcfc1482626b46f83b6c20230
45764cdbc8e10a6d15248879b93e1dac505a444f
7ecfdbc428688744005e1e6508bbcdf1757dd15b
909dd2ba4b865549dac622980e05dd151a3078b2
a35eade7d2fa03ac949b5313f01dcee83ca633cb
b6b766eb03672730c856c6e6bde033321725a0ca
b7f2a91f1d721fa17cc5dfaedb0c974a95db7f00
b8980c6c2563f506f4c8fd26d44c82633e9b7bd0
d5ea9b146c667cb7532effc060ef5afeac6ca80f
e08921e14ca9ccb6adf89e5571e9140e44083cec
f91f64602e6c6d892d70d71f4fc7a1bd943e23f3 .gitattributes
436814bbf32f9cd78b3e88d1efde3880f48a3722 .gitignore
edeba0a94c7c5a4bc4fbf5050e4b002323cc53f8 .gitignore
228c629ac9a3448c664ca45fafa6afc681bcc533 .idea
37c4a554cbf14f435db2eb43fd93b5314572a268 .idea
67509bba335fc9098edc0f0fefca36544f0993ab .idea
13566b81b018ad684f3a35fee301741b2734c8f4 .idea/.gitignore
b86273d9424b73937ca6ad7933f6b7eeb60f4a3d .idea/compiler.xml
3ced4eb7f9aa8e29aa4ab8cef00e2d62fb02b5e7 .idea/gradle.xml
efd7cbf42e288c4de536a66dd5b6c6b401e63106 .idea/gradle.xml
81d226132f2c293f23e938d1b088f3c00abc1686 .idea/misc.xml
cf69fd4d67b426c9addf9d150be9cb736c001cad .idea/misc.xml
d0f6ad47ffb00c0485911ecce8edf6ce7f28a477 .idea/modules
fc1a1629b999aebe7d72c4239be6a9594508ee4b .idea/modules.xml
007377fa005f8849275ecd3a4e57c083a95dde0f .idea/modules/app
59eb4e8e7a4cde1845c2d12df2f5f887b3775a66 .idea/modules/app/Tetris.app.main.iml
35eb1ddfbbc029bcab630581847471d7f238ec53 .idea/vcs.xml
cf6b1e6b33b8ef5fee1ade2b99451bd7fb353e05 README.md
e51a4c4f28fcdb8dc3f30efbfccf6e27e8e1fa14 README.md
59e98406bf40d0fc19383388e7e80a5aadc26b81 app
7b72780fd3dc796f13794bd100b0d58f48d7475e app
933bfae3d434ba0127e5b513ca480397a9ba65a7 app
9e4d904d3435b169f373d754fbdba260b386ecc6 app
bdd0722cc2a4b143a1fa80624fd89ffb18001bdd app
bdff75013af2bf7dc8f39bddc5f31f9ff234e3ef app
d56532df58c46a44d915841fac86442cc994e5c2 app
d8005883a27c854a1ff5528f37fc31a2e6541f8c app
f97f03f5a0009680ba76eb8c333ddb9682fcc018 app
fc7b1685b65c03b37b4d1bff9e7c4f347ce60ec4 app
4e42499269f4de4ad25f8848a93050899b0e635c app/build.gradle.kts
7761afadf778e47f1fc11a2bf5669773f29878c2 app/build.gradle.kts
180251199dad9ccae5cc7ae13f357c98c5540e55 app/src
3205c8924784b745bd8f5be1a26860b31b02f358 app/src
560f85b087f3a7f6575b2c61a990aba403c0f4f0 app/src
9e06263aea629f172fae7bc28eabeb57c14e5888 app/src
a841045b330012fe0ecfa98b3f7b8d18111580d3 app/src
a8b74c7c83b6e75cafbc4b8e0bc800c6b8521fa9 app/src
aaff9850f38268a091376a0eef7967905188cf09 app/src
bcfb14fb711fd14be5b1b8076a5efda37080ee0f app/src
f007f0237ca71e800d7db8c34635ad110f42c75d app/src
fe1bc10fb27f438ca79efd429ea5a521e41bc9bc app/src
04db8c7235d24702994df1957291fff8faf2bd46 app/src/main
0902215393bce49dfa3ecd0aa5f0e1c584386b12 app/src/main
3a89ac8d4d833265aa9595c8a5d80de16ee962b3 app/src/main
7834d89164faa50d5036abbc6238aebeba39e2b3 app/src/main
825b72903c75ee3a43c50957297febc6f8454abf app/src/main
85a2d198317a8c23d4cbddecebcb014a7eed2a8c app/src/main
a4b085629a56c63578bf37d857207c69655c8998 app/src/main
ac1f499f8f6a6cff37760c64c365e747517a6a2d app/src/main
c307f9ff858ab68ca5885db0ff7bcde889ecf069 app/src/main
fa83d5052bfb6ac895b870389976d78235a19ed0 app/src/main
406bae490815756155b3fa74894ac90af4729d55 app/src/main/java
46e9f38431f8d2dd63dbf85ccf00ed7d30a7aa07 app/src/main/java
47ebae455de4f74aebeda3b61c39f6de7dc5787c app/src/main/java
87258211368f0099c706bb9bc7672a1f2c13314a app/src/main/java
b6258a0cd88de47ecc461c7a95e3d7d84aad076c app/src/main/java
bd90ebf3aec01671e777f3b504bdefad7da095f4 app/src/main/java
d8f563bb6df5415260ee68915fccf1ca17a08601 app/src/main/java
e279b50ac5fa998111f2e8fa7ac7efe3352f6632 app/src/main/java
e5f3aa2866dce3d75db8479d1907bc35bc858fd4 app/src/main/java
fbb230cd6058cc92bc2c672f672526b4fcc9637e app/src/main/java
46b2a66453905c875d568305525afa60370730aa app/src/main/java/org
48ec3dd6b23ac5c38e273f4e1d65428a21b7df9c app/src/main/java/org
5faf95a17c62b60da2c4fe796f803d4bffc9c7a0 app/src/main/java/org
7fc649a4d65844dc0db5098249d401b7adb0d6d4 app/src/main/java/org
9559f15394becd850d5e817c90d0db96b99cee9b app/src/main/java/org
b5c48c1995f4fb6f62e75d07d2030d9547a57a33 app/src/main/java/org
bba960b198ee13c0f5d73372ccfd70d205ff6417 app/src/main/java/org
d41e5945ee49818da4f5bfdab5d9e47368bf2a2c app/src/main/java/org
dba0b55f00404e964d0b2c2295972c485b8ca743 app/src/main/java/org
df2516764274971681cefdbfa00815210623e49f app/src/main/java/org
0267e55f9afebc7ccd00cfbc497deca998df0453 app/src/main/java/org/App.java
21004147fd711cd40f11146345ba5cb3dd846f12 app/src/main/java/org/App.java
b4c4a7a3acefffa1035e72d70b937e5be85cbc66 app/src/main/java/org/App.java
38d0aa6cb8a953654b787eb0cc3cee103fcc50c4 app/src/main/java/org/Controlers
fb3ca2a75dca5f0607fa13b3ddfec119a764c9d0 app/src/main/java/org/Controlers/MusiqueControleur.java
4377bdeadf3c1f0c7d58e32ddee2a2b0306f6918 app/src/main/java/org/Controlers/TetrisControleur.java
31741b0eb81f9f55a0834f166071e777b8517f4e app/src/main/java/org/Models
d0b53e04d1008d05417864bdbb79e72f84acc412 app/src/main/java/org/Models
d12a4a85b4ffb4b14cb67503aa5c4ee994acdd91 app/src/main/java/org/Models
d930a9b6229347676698aa95277782f9d377fa8b app/src/main/java/org/Models
ec027e6b7978ccc38c30e75866fa3c24bd8f5e1e app/src/main/java/org/Models
f4acf157438fbc994f8845263530815e1b652655 app/src/main/java/org/Models
0d5767fc1455d0d0dd14775c16ba7d7e5ad3e477 app/src/main/java/org/Models/Grille.java
7ac21e234e5bbcb1a2b4d85473cc86413a68de4a app/src/main/java/org/Models/Grille.java
25c029e912b2f49c5d614e7a40421bde7eb763d5 app/src/main/java/org/Models/Jeu.java
08c51b0b9a17c2f37ee423d3a4e7a82015ffccb9 app/src/main/java/org/Models/PieceCourante.java
2d3c532f5745ae24cfe2f557c36ac472058ee21c app/src/main/java/org/Models/PieceCourante.java
86d1530bb33c6c4c9538aa494d5c55383267adaa app/src/main/java/org/Models/PieceCourante.java
cdaf4968517482a45cce64caa7b001da3ef543b3 app/src/main/java/org/Models/PieceI.java
57a7d9ff57ac32f5fa4e4035e0988cc589d2019b app/src/main/java/org/Models/PieceJ.java
0e81a40d602f3a4f721834547d6985efa9e293ee app/src/main/java/org/Models/PieceL.java
226a9b0516575ffc65901159acef8de04e8a21c5 app/src/main/java/org/Models/PieceL.java
284565182bf9b4564dec8ad696c0576bce0e0217 app/src/main/java/org/Models/PieceL.java
737375d02b8e61cf3b65d2d8d0ac608b4a26ae66 app/src/main/java/org/Models/PieceL.java
9f6680ef25242cbf0578899edd62ecd1ab24f8af app/src/main/java/org/Models/PieceO.java
316ddf03e2f5c3f008e686ad89b558d6032782b0 app/src/main/java/org/Models/PieceS.java
d1c2e8eaa383a1be7e6dc8c753e138e0445066f5 app/src/main/java/org/Models/PieceT.java
c8f6b30308d9de6357427dc89034bb005380dfe1 app/src/main/java/org/Models/PieceZ.java
061b4848f6b663bb07fce79f94328db80436578d app/src/main/java/org/Views
0ce912db8ac48c9daa1ddeacd52cf32ad91f21d8 app/src/main/java/org/Views
1d7329f5dcae721ae288de4897f7ce91b633dccd app/src/main/java/org/Views
1e947b07a51e3a5a68dd4e7927361bbfc3588cd7 app/src/main/java/org/Views
3e9d2a47453a976b57f7d220abaa0bf363ad603d app/src/main/java/org/Views
b0c5f7464ff2de1cd5020082e113923d73dc215a app/src/main/java/org/Views
dd2984e67126b93efff053ee738158497b0c59dd app/src/main/java/org/Views
0a74b7c91004bf8df974ad51a78488fba4ba725d app/src/main/java/org/Views/VueControle.java
9bbadde40fcf92b615223508f2eaa4ec884700b2 app/src/main/java/org/Views/VueControle.java
ecf3e5e7beff66c0fbf92639794f4879b3b54ea1 app/src/main/java/org/Views/VueControle.java
4af98386b8404e99248f3e607754f1b1ff2d7c5e app/src/main/java/org/Views/VueGrille.java
7358e68c8f6ef7f5f1566c5679da2dbd358cd7a8 app/src/main/java/org/Views/VueGrille.java
eeb4c236c10bb7bf6f457abe1b7f2cb895294967 app/src/main/java/org/Views/VueGrille.java
1c8f92d5442c0e29cffc9efb0bd220f702bb4c70 app/src/main/java/org/Views/VueTetris.java
9bea88db10d1104245a639fbdfc36d5ce5b3996e app/src/main/java/org/Views/VueTetris.java
a0fcdf9cd80ca09bb2e752b62600bb5b52525c87 app/src/main/java/org/Views/VueTetris.java
b9c58474b464a49fd2363102da7610b0f14b8789 app/src/main/java/org/Views/VueTetris.java
8f6480b8461fa38be6423a9843811a17dc792d37 app/src/main/resources
33f3440505856889eaca7a07c2b95de223c05962 app/src/main/resources/TetrisMusic.wav
2c4404f3029e26336e3c520686429d66a49d62f7 app/src/test
a8f00d3495d40e504c8ad30f8ea431be1371bb42 app/src/test/java
edc54f19667ec12b3325ae8418a318d2995b7f7f app/src/test/java/org
d73c43ece67b0651f4f602eadd5e5136fc7bbd77 app/src/test/java/org/example
998c02900d09b9572eff2e9fe488146010da28fb app/src/test/java/org/example/AppTest.java
723ca3a32bfd03239e931f38ae071989f1e17d37 gradle
377538c9965c6177781d5bbf1fdc2644e77d7950 gradle.properties
f5172b8e111dc2d56e4d73a30629ae7b35086711 gradle/libs.versions.toml
35fcf56b0a312bb6d76f3be24e580ec5ecd912df gradle/wrapper
1b33c55baabb587c669f562ae36f953de2481846 gradle/wrapper/gradle-wrapper.jar
ca025c83a7cc5e4f5eb7bc7a5ff8cae62df35ffb gradle/wrapper/gradle-wrapper.properties
23d15a9367071145e9c79bb4ddf879d1fbe78b5d gradlew
db3a6ac207e507b0bc1635a9f2c18d3b174e682e gradlew.bat
489872589b67af275bb7e2a96ec926b831e1dbc0 readme_files
3e51bb76143fcc8580ba88e2fb05df47ef0335df readme_files/ProjetEncadréTetris.pdf
b8db60d529f7cf31077a8a6b442a20395f32c592 readme_files/activiteTetris.svg
2f84576889e655dc28783d875bf1189708a4d3fc settings.gradle.kts

Binary file not shown.

View File

@@ -23,6 +23,9 @@ dependencies {
// This dependency is used by the application. // This dependency is used by the application.
implementation(libs.guava) implementation(libs.guava)
// JLayer pour lire les fichiers MP3
implementation("javazoom:jlayer:1.0.1")
} }
// Apply a specific Java toolchain to ease working on different environments. // Apply a specific Java toolchain to ease working on different environments.

View File

@@ -6,25 +6,25 @@ package org;
import org.Controllers.IO; import org.Controllers.IO;
import org.Models.Grille; import org.Models.Grille;
import org.Models.Jeu; import org.Models.Jeu;
import org.Views.VueGrille; import org.Views.VueTetris;
public class App { public class App {
public String getGreeting() { public String getGreeting() {
return "Hello World!"; return "Hello World!";
} }
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(new App().getGreeting());
// Models // Models
Grille grille = new Grille(20, 10); Grille grille = new Grille(20, 10);
Jeu jeu = new Jeu(grille); Jeu jeu = new Jeu(grille);
// Views // Views
VueGrille vueGrille = new VueGrille(grille, jeu); VueTetris vueTetris = new VueTetris(grille, jeu);
// Controllers // Controllers
IO io = new IO(jeu); IO io = new IO(jeu);
vueGrille.addKeyListener(io); vueTetris.addKeyListener(io);
} }
} }

View File

@@ -0,0 +1,50 @@
package org.Controllers;
import org.Models.Musique;
import org.Views.VueBandeauControle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TetrisBandeauControleur {
private boolean partieEnPause = false;
private boolean partieTerminee = false;
private Musique musique;
private VueBandeauControle vueControle;
public TetrisBandeauControleur(VueBandeauControle 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");
}
}

View File

@@ -19,7 +19,10 @@ public class Grille extends Observable { // TODO: ?? implements Runnable {
this.nbLignes = nbLignes; this.nbLignes = nbLignes;
this.nbColonnes = nbColonnes; this.nbColonnes = nbColonnes;
this.grille = new boolean[nbLignes][nbColonnes]; this.grille = new boolean[nbLignes][nbColonnes];
initGrille();
}
public void initGrille() {
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++) {
this.grille[i][j] = false; this.grille[i][j] = false;

View File

@@ -3,7 +3,6 @@ package org.Models;
import java.awt.Point; import java.awt.Point;
import java.util.Observable; import java.util.Observable;
import org.Models.Pieces.PieceCarre;
import org.Models.Pieces.PieceL; import org.Models.Pieces.PieceL;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")

View File

@@ -0,0 +1,51 @@
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");
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();
}
}
}

View File

@@ -11,6 +11,7 @@ public class PieceCarre implements PieceCourante {
motif[2][2] = true; motif[2][2] = true;
} }
@Override
public boolean[][] getMotif() { public boolean[][] getMotif() {
return motif; return motif;
} }

View File

@@ -0,0 +1,18 @@
package org.Models.Pieces;
import org.Models.PieceCourante;
public class PieceI implements PieceCourante {
public PieceI() {
motif[0][1] = true;
motif[1][1] = true;
motif[2][1] = true;
motif[3][1] = true;
}
@Override
public boolean[][] getMotif() {
return motif;
}
}

View File

@@ -0,0 +1,17 @@
package org.Models.Pieces;
import org.Models.PieceCourante;
public class PieceJ implements PieceCourante {
public PieceJ() {
motif[0][2] = true;
motif[1][2] = true;
motif[2][2] = true;
motif[2][1] = true;
}
public boolean[][] getMotif() {
return motif;
}
}

View File

@@ -0,0 +1,17 @@
package org.Models.Pieces;
import org.Models.PieceCourante;
public class PieceO implements PieceCourante {
public PieceO() {
motif[0][1] = true;
motif[0][2] = true;
motif[1][1] = true;
motif[1][2] = true;
}
@Override
public boolean[][] getMotif() {
return motif;
}
}

View File

@@ -0,0 +1,18 @@
package org.Models.Pieces;
import org.Models.PieceCourante;
public class PieceS implements PieceCourante {
public PieceS() {
motif[0][1] = true;
motif[1][1] = true;
motif[1][2] = true;
motif[2][2] = true;
}
@Override
public boolean[][] getMotif() {
return motif;
}
}

View File

@@ -0,0 +1,18 @@
package org.Models.Pieces;
import org.Models.PieceCourante;
public class PieceT implements PieceCourante {
public PieceT() {
motif[0][1] = true;
motif[1][1] = true;
motif[2][1] = true;
motif[1][2] = true;
}
@Override
public boolean[][] getMotif() {
return motif;
}
}

View File

@@ -0,0 +1,18 @@
package org.Models.Pieces;
import org.Models.PieceCourante;
public class PieceZ implements PieceCourante {
public PieceZ() {
motif[0][2] = true;
motif[1][2] = true;
motif[1][1] = true;
motif[2][1] = true;
}
@Override
public boolean[][] getMotif() {
return motif;
}
}

View File

@@ -0,0 +1,116 @@
package org.Views;
import org.Models.PieceCourante;
import javax.swing.*;
import java.awt.*;
public class VueBandeauControle extends JPanel {
private JLabel scoreLabel;
private JPanel nextPiecePanel;
private JButton pauseButton;
private JPanel[][] caseNextPiece = new JPanel[4][4];
private JLabel nbLigneLabel;
private JButton quitterButton;
public VueBandeauControle() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setBackground(Color.gray);
// setPreferredSize();
// SCORE
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));
// nextPiecePanel.setMaximumSize(new Dimension(100, 100));
nextPiecePanel.setBackground(Color.LIGHT_GRAY);
nextPiecePanel.setAlignmentX(Component.CENTER_ALIGNMENT);
initierNextPiecePanel();
// PAUSE BUTTON & QUIT BUTTON
pauseButton = new JButton("PAUSE");
quitterButton = new JButton("QUITTER");
Dimension buttonSize = new Dimension(85, 30);
Insets margeBoutton = new Insets(2, 2, 2, 2);
// pauseButton.setPreferredSize(buttonSize);
pauseButton.setMargin(margeBoutton);
// quitterButton.setPreferredSize(buttonSize);
quitterButton.setMargin(margeBoutton);
JPanel boutonsPanel = new JPanel();
boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));
boutonsPanel.setOpaque(false);
boutonsPanel.add(pauseButton);
boutonsPanel.add(quitterButton);
pauseButton.setFocusable(false);
quitterButton.setFocusable(false);
add(Box.createVerticalStrut(20));
add(scoreLabel);
add(Box.createVerticalStrut(20));
add(nbLigneLabel);
add(Box.createVerticalStrut(20));
add(nextPiecePanel);
add(Box.createVerticalStrut(20));
add(boutonsPanel);
// setVisible(true);
}
public void setScore(int score) {
scoreLabel.setText("Score: " + score);
}
public JButton getPauseButton() {
return pauseButton;
}
public JButton getQuitterButton() {
return quitterButton;
}
public JPanel getNextPiecePanel() {
return nextPiecePanel;
}
private void initierNextPiecePanel() {
nextPiecePanel.removeAll();
nextPiecePanel.setLayout(new GridLayout(4, 4));
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
JPanel caseG = new JPanel();
caseG.setBorder(BorderFactory.createLineBorder(Color.BLACK));
caseG.setBackground(Color.WHITE);
caseNextPiece[i][j] = caseG;
nextPiecePanel.add(caseG);
}
}
nextPiecePanel.revalidate();
nextPiecePanel.repaint();
}
public void afficherPieceSuivante(PieceCourante piece) {
boolean[][] motif = piece.getMotif();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (motif[i][j]) {
caseNextPiece[i][j].setBackground(Color.RED);
} else {
caseNextPiece[i][j].setBackground(Color.WHITE);
}
}
}
nextPiecePanel.revalidate();
nextPiecePanel.repaint();
}
}

View File

@@ -1,10 +1,5 @@
package org.Views; package org.Views;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.Models.Grille; import org.Models.Grille;
@@ -15,18 +10,14 @@ import org.Models.PieceCourante;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.util.Observable; import java.util.Observable;
import java.util.Observer; import java.util.Observer;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class VueGrille extends JFrame implements Observer, Runnable { public class VueGrille extends JPanel implements Observer, Runnable {
private JPanel grillePanel; private JPanel grillePanel;
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private double tailleJPanelX = screenSize.getHeight() / 4;
private double tailleJPanelY = screenSize.getHeight() / 2;
private Grille grille; private Grille grille;
private Jeu jeu; private Jeu jeu;
@@ -34,12 +25,18 @@ public class VueGrille extends JFrame implements Observer, Runnable {
private boolean afficherFenetreFinPartie = false; private boolean afficherFenetreFinPartie = false;
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;
setLayout(new BorderLayout());
grillePanel = new JPanel(new GridLayout(grille.getNbLignes(), grille.getNbColonnes())); grillePanel = new JPanel(new GridLayout(grille.getNbLignes(), grille.getNbColonnes()));
setSize((int) tailleJPanelX, (int) tailleJPanelY); setSize((int) tailleJFrameX, (int) tailleJFrameY);
setContentPane(grillePanel); System.err.println("taille " + tailleJFrameX + " " + tailleJFrameY);
add(this.grillePanel, BorderLayout.CENTER);
initialiserVueGrille(); initialiserVueGrille();
grille.addObserver(this); grille.addObserver(this);
@@ -57,10 +54,6 @@ public class VueGrille extends JFrame implements Observer, Runnable {
grillePanel.add(caseG); grillePanel.add(caseG);
} }
} }
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("TETRIS");
} }
public synchronized void updateGrille() { public synchronized void updateGrille() {
@@ -104,32 +97,8 @@ public class VueGrille extends JFrame implements Observer, Runnable {
repaint(); repaint();
} }
@SuppressWarnings("unused")
private void afficherFinPartie() { private void afficherFinPartie() {
JDialog gameOverDialog = new JDialog(this, "Partie terminée", true); System.err.println("FIN PARTIE"); // TODO : gerer affichage ?
gameOverDialog.setLayout(new BorderLayout());
gameOverDialog.setUndecorated(true);
gameOverDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
JLabel gameOverLabel = new JLabel("GAME OVER", JLabel.CENTER);
gameOverLabel.setFont(new Font("Arial", Font.BOLD, 50));
gameOverLabel.setForeground(Color.RED);
gameOverLabel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
gameOverDialog.add(gameOverLabel, BorderLayout.CENTER);
JButton quitButton = new JButton("Quitter");
quitButton.addActionListener(e -> System.exit(0));
JPanel buttonPanel = new JPanel();
buttonPanel.add(quitButton);
gameOverDialog.add(buttonPanel, BorderLayout.SOUTH);
gameOverDialog.pack();
gameOverDialog.setLocationRelativeTo(this);
gameOverDialog.setVisible(true);
} }
/** /**

View File

@@ -0,0 +1,34 @@
package org.Views;
import org.Controllers.TetrisBandeauControleur;
import org.Models.*;
import javax.swing.*;
import java.awt.*;
public class VueTetris extends JFrame {
private static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
public static double tailleJFrameX = screenSize.getHeight() / 2;
public static double tailleJFrameY = screenSize.getHeight() / 2;
public VueTetris(Grille grille, Jeu jeu) {
super("Tetris");
VueGrille vueGrille = new VueGrille(grille, jeu);
VueBandeauControle vueControle = new VueBandeauControle();
TetrisBandeauControleur controleur = new TetrisBandeauControleur(vueControle);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(vueGrille, BorderLayout.CENTER);
add(vueControle, BorderLayout.EAST);
setSize((int) tailleJFrameX, (int) tailleJFrameY);
setLocationRelativeTo(null);
setVisible(true);
// Utilisation de la pièce L
vueControle.afficherPieceSuivante(jeu.getPieceSuivante());
}
}

Binary file not shown.