ajout des menu de départ

This commit is contained in:
martins 2022-05-05 22:45:26 +02:00
parent de420d68d7
commit 2ac6f08bab
49 changed files with 1169 additions and 76 deletions

BIN
Case.class Normal file

Binary file not shown.

172
Case.java Normal file
View File

@ -0,0 +1,172 @@
// Tom Monin et Clément Martins
// paintChoix V3
// class représentant une case dans la partie
import java.awt.*;
import javax.swing.*;
import javax.swing.JComponent;
public class Case extends JComponent{
//Etat de la case:
private boolean visibilite; //Visible ou pas
private boolean bombe; //Miner ou pas
private int voisin; //Le nombre de mine aux alentours
private int suspition; // son Etat de suspition ( 0:pas une bombe, 1:en est une, 2:je doute)
// Les Images de la case (point d'interogation, etoile et bombe...) ne sont pas des attributs de la classe Case car
//pour faciliter la sauvegarde et donc permettre de sérialiser l'objet les attribut devrons être des classes réalisant Serializable ou Externialisable
//Constructeur de la Case
public Case(){
//nous initialisons les valeurs
this.visibilite=false; //la visibiler est fausse donc la case est cacher
this.bombe=false; // ce n'est pas une bombe
this.voisin=0; // elle n'a pas de voisin bombe
this.suspition=0; // la suspition est a 0 (pas une bombe)
}
// Nous mettons les getter/setter
public void setVisibiliter(boolean trueorfalse){
this.visibilite=trueorfalse;
}
public void setBombe(){
this.bombe=true;
}
public void suspition(){
this.suspition++;
if(this.suspition==3){
this.suspition=0;
}
}
public void setSuspition(int n){
this.suspition=n;
//valeur sentinel pour montrer que c'est cette case qui a exploser
}
public boolean getBombe(){
return this.bombe;
}
public void setVoisin(int nvoisin){
this.voisin=nvoisin;
}
public int getSuspition(){
return this.suspition;
}
public boolean getVisibiliter(){
return this.visibilite;
}
public int getVoisin(){
return this.voisin;
}
//on paint la case en fonction de ses attribut et donc son etat
@Override
protected void paintComponent(Graphics pinceau) {
// obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard
Graphics secondPinceau = pinceau.create();
// obligatoire : si le composant n'est pas censé être transparent
if (this.isOpaque()) {
// obligatoire : on repeint toute la surface avec la couleur de fond
secondPinceau.setColor(this.getBackground());
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
}
//On paint ce que l'on veut maintenant
//si la case est cacher (pas visible)
if(this.visibilite==false){
//on dessinne un rectangle gris sur un fond noir
secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
secondPinceau.setColor(new Color(100, 100, 100));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
//si on supecte que c'est une bome
if(this.suspition==1){
//on affiche l'etoile
Image etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png");
secondPinceau.drawImage(etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
//si on suspecte que on ne sais pas
if(this.suspition==2){
Image interogation= Toolkit.getDefaultToolkit().getImage("./IMAGE/pointintero.png");
//on affiche le point d'interogation
secondPinceau.drawImage(interogation, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
}
//si la case est afficher(visible)
if(this.visibilite==true){
//on dessine un rectangle blanc sur un fond noir
secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
secondPinceau.setColor(new Color(255, 255, 255));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
//si la case a au moins 1 voisin qui est une bombe
if(this.voisin>0){
//on ecrit le nombre de voisin que elle a
if(this.voisin==1){
Image un=Toolkit.getDefaultToolkit().getImage("./IMAGE/un.jpg");
secondPinceau.drawImage(un, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==2){
Image deux=Toolkit.getDefaultToolkit().getImage("./IMAGE/deux.jpg");
secondPinceau.drawImage(deux, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==3){
Image trois=Toolkit.getDefaultToolkit().getImage("./IMAGE/trois.jpg");
secondPinceau.drawImage(trois, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==4){
Image quatre=Toolkit.getDefaultToolkit().getImage("./IMAGE/quatre.jpg");
secondPinceau.drawImage(quatre, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==5){
Image cinq=Toolkit.getDefaultToolkit().getImage("./IMAGE/cinq.jpg");
secondPinceau.drawImage(cinq, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==6){
Image six=Toolkit.getDefaultToolkit().getImage("./IMAGE/six.jpg");
secondPinceau.drawImage(six, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==7){
Image sept=Toolkit.getDefaultToolkit().getImage("./IMAGE/sept.jpg");
secondPinceau.drawImage(sept, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
if(this.voisin==8){
Image huit=Toolkit.getDefaultToolkit().getImage("./IMAGE/huit.jpg");
secondPinceau.drawImage(huit, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
//si la case est supecter mais visible (possible que si le joueur a perdu) et que ce n'est pas une bombe
//on affiche un fond rouge pour mettre en valeur l'erreur
if(this.suspition==1 && this.bombe==false){
secondPinceau.setColor(new Color(255, 0, 0));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
Image etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png");
secondPinceau.drawImage(etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
}
//si la case est une bombe
if(this.bombe==true){
//si la bombe est suspecter mais afficher (possible que si le joeur perd)
if(this.suspition==1){
//on affiche l'etoile sur fond vert pour préciser que le joueur avait raison
secondPinceau.setColor(new Color(0, 255, 0));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
Image etoile= Toolkit.getDefaultToolkit().getImage("./IMAGE/etoile.png");
secondPinceau.drawImage(etoile, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
//autrement nous afficherons l'image de la bombe
}else{
Image imgboombe= Toolkit.getDefaultToolkit().getImage("./IMAGE/bombe.png");
//si la suspition est de 4 (possible que si c'est la bombe qui a exploser)
if(this.suspition==4){
//on dessine un rectangle rouge
secondPinceau.setColor(new Color(255,0,0));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
}else{
//on dessine un rectangle orange pour montrer que la case étais miner
secondPinceau.setColor(new Color(255, 127, 0));
secondPinceau.fillRect(this.getWidth()/20, this.getHeight()/20, this.getWidth()/20*18, this.getHeight()/20*18);
}
//on affiche la bombe
secondPinceau.drawImage(imgboombe, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/20*10, this.getHeight()/20*10 ,this);
}
}
}
}
}

BIN
IMAGE/bombe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
IMAGE/cinq.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
IMAGE/cinqD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
IMAGE/deux.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
IMAGE/deuxD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
IMAGE/err.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
IMAGE/etoile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
IMAGE/huit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
IMAGE/huitD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
IMAGE/lose.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
IMAGE/neufD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
IMAGE/pointintero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
IMAGE/quatre.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
IMAGE/quatreD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
IMAGE/replay.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
IMAGE/sav.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
IMAGE/sept.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
IMAGE/septD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
IMAGE/six.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
IMAGE/sixD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
IMAGE/trois.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
IMAGE/troisD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
IMAGE/un.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
IMAGE/unD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
IMAGE/win.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
IMAGE/zeroD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

68
Makefile Normal file
View File

@ -0,0 +1,68 @@
# PROJET TAQUIN MAKEFILE:
#
# Chapitre 1: But final;
but: main_ex.class
# Chapitre 2 : Variable
OFILES= Case.class\
plateau.class\
observateurCase.class\
paintMenuJeu.class\
observateurSAV.class\
observateurFenetre.class\
paintChoix.class\
observateurChoix.class\
plusoumoins.class\
bombeEtValider.class
CFLAGS= -implicit:none
# Chapitre 3 : Dependances (règle implicite):
Case.class: Case.java
javac $(CFLAGS) Case.java
plateau.class : plateau.java
javac $(CFLAGS) plateau.java
observateurCase.class : observateurCase.java
javac $(CFLAGS) observateurCase.java
paintMenuJeu.class: paintMenuJeu.java
javac $(CFLAGS) paintMenuJeu.java
observateurSAV.class: observateurSAV.java
javac $(CFLAGS) observateurSAV.java
observateurFenetre.class: observateurFenetre.java
javac $(CFLAGS) observateurFenetre.java
# Chapitre 4 : Dependances
main_ex.class: $(OFILES) main_ex.java
javac $(CFLAGS) main_ex.java
paintChoix.class: paintChoix.java
javac $(CFLAGS) paintChoix.java
observateurChoix.class: observateurChoix.java
javac $(CFLAGS) observateurChoix.java
plusoumoins.class: plusoumoins.java
javac $(CFLAGS) plusoumoins.java
bombeEtValider.class: bombeEtValider.java
javac $(CFLAGS) bombeEtValider.java
#Chapitre 5: nettoyage des fichiers generes
clean :
-rm -f $(OFILES)
run :
java main_ex
#chapitre 6 : buts factices
.PHONY : but clean
.PHONY : but run

BIN
bombeEtValider.class Normal file

Binary file not shown.

62
bombeEtValider.java Normal file
View File

@ -0,0 +1,62 @@
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
public class bombeEtValider implements ActionListener {
private plateau plat;
private int fonction;
private JTextField zone;
public bombeEtValider(plateau plat0, int fonction0, JTextField zone0){
this.plat=plat0;
this.fonction=fonction0;
this.zone=zone0;
}
@Override
public void actionPerformed(ActionEvent evenement){
if(this.fonction==1){
int nombre=0;
try{
this.zone.setBackground(new Color(255,255,255));
nombre=Integer.parseInt(evenement.getActionCommand());
if(nombre<0){
nombre=0;
}
if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){
if(nombre>this.plat.getLigne()*this.plat.getCollonne()){
nombre=this.plat.getLigne()*this.plat.getCollonne();
}
this.zone.setText(String.valueOf(nombre));
}else{
this.zone.setBackground(Color.red);
this.zone.setText("Selectionner Ligne et Collonne Avant");
this.plat.setBombe(-1);
}
this.plat.setBombe(nombre);
}catch(NumberFormatException e1){
this.zone.setBackground(Color.red);
this.zone.setText("rentrer un nombre valide");
this.plat.setBombe(-1);
}
}
if(this.fonction==2){
if(this.plat.getLigne()!=-1 && this.plat.getLigne()!=-1 && this.plat.getBombe()!=-1){
this.plat.newGame();
}
}
if(this.fonction==3){
this.plat.menuChoixLCB();
}
if(this.fonction==4){
try{
FileInputStream fichier = new FileInputStream("./sauvegarde.data");
this.plat.reprendrePartie();
}catch(FileNotFoundException e1){
}
}
if(this.fonction==5){
this.plat.getFenetre().dispose();
}
}
}

Binary file not shown.

View File

@ -1,5 +1,5 @@
// Tom Monint et Clément Martins // Tom Monint et Clément Martins
// main_ex V1 // main_ex V4
// Classe ayant pour but d'être executer // Classe ayant pour but d'être executer
//importons les packages necessaires //importons les packages necessaires
@ -7,27 +7,10 @@ import java.awt.*;
import javax.swing.*; import javax.swing.*;
public class main_ex{ public class main_ex{
public static void main(String[] args){ public static void main(String[] Args){
// on initialise une fenettre // on initialise une fenettre
JFrame fenetre = new JFrame("Démineur"); JFrame fenetre = new JFrame("Démineur");
fenetre.setLocation(0,0); plateau jeu = new plateau(fenetre);
//on choisi une taille arbitraire jeu.menuChoixTypePartie();
fenetre.setSize(1030,800);
//nous utiliserons un gestionnaire GridLayout
GridLayout grille = new GridLayout(1,3);
fenetre.setLayout(grille);
// l'application ne se fermera que si on clique sur
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setVisible(true);
nombreCollonnesLigneEtBombe choixCLB = new nombreCollonnesLigneEtBombe(fenetre);
fenetre.addMouseListener(new observateurChoix(fenetre, choixCLB));
JLabel test = new JLabel("1");
fenetre.add(new paintChoix(1));
fenetre.add(test);
fenetre.add(new paintChoix(2));
// Choix des lignes/Collonnes/Bombe
} }
} }

BIN
observateurCase.class Normal file

Binary file not shown.

165
observateurCase.java Normal file
View File

@ -0,0 +1,165 @@
//Tom Monin et Clément Martins
// observateurChoix V4
//Class de l'observateur des Cases
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class observateurCase implements MouseListener{
private int ligne, collonne;
private Case[][] tableau;
private plateau plat;
public observateurCase(int ligne0, int collonne0, Case[][] tableau0, plateau plat0){
this.ligne=ligne0;
this.collonne=collonne0;
this.tableau=tableau0;
this.plat=plat0;
}
@Override
public void mouseClicked(MouseEvent evenement){
//si on clique gauche
if(evenement.getButton() == MouseEvent.BUTTON1 && plat.etatDeVictoire()==0){
//si la case n'est pas suspecter(d'etre une bombe ou je sais pas) et que elle n'est pas visible
if(this.tableau[this.ligne][this.collonne].getSuspition()==0 && this.tableau[this.ligne][this.collonne].getVisibiliter()==false){
//nous la rendons visible et la reafichons
this.tableau[this.ligne][this.collonne].setVisibiliter(true);
this.tableau[this.ligne][this.collonne].repaint();
//si elle n'a pas de voisin nous pouvons afficher les case aux alentours qui serons évidentes a cliquer
if(this.tableau[this.ligne][this.collonne].getVoisin()==0 && this.tableau[this.ligne][this.collonne].getBombe()==false){
this.cliqueEvident(this.ligne, this.collonne);
}
}
}
//si clique droit
if(evenement.getButton() == MouseEvent.BUTTON3 && plat.etatDeVictoire()==0){
//nous modifions la suspitions de la case et la reafichons si la case n'est pas visible
if(this.tableau[this.ligne][this.collonne].getVisibiliter()==false){
this.tableau[this.ligne][this.collonne].suspition();
this.tableau[this.ligne][this.collonne].repaint();
}
//nous testons si le joeur a gagner/perdu
if(this.tableau[this.ligne][this.collonne].getSuspition()==1){
plat.setScore(-1);
}if(this.tableau[this.ligne][this.collonne].getSuspition()==2){
plat.setScore(+1);
}
}
//nous testons si le joueur a gagner/perdu
//si perdu
if(plat.etatDeVictoire()==-1){
//on precise quelle case a exploser
this.tableau[this.ligne][this.collonne].setSuspition(4);
plateau.removeListener(this.tableau);
for(int i=0;i<this.tableau.length;i++){
for(int t=0;t<this.tableau[i].length;t++){
this.tableau[i][t].setVisibiliter(true);
this.tableau[i][t].repaint();
}
}
plat.perdu();
plat.paintLogo();
}
//si gagner
if(plat.etatDeVictoire()==1){
plateau.removeListener(this.tableau);
plat.gagner();
plat.paintLogo();
}
}
@Override // un bouton cliqué
public void mouseEntered(MouseEvent evenement){
}
@Override // debut du survol
public void mouseExited(MouseEvent evenement){
}
@Override // fin du survol
public void mousePressed(MouseEvent evenement){
}
@Override // un bouton appuyé
public void mouseReleased(MouseEvent evenement){
}
//--------------------------------fonction permettant d'afficher toutes les case n'ayant pas de voisin adjacente utilisant plusieur fonction récursive-----------------------------
private void cliqueEvident(int ligneDelta, int collonneDelta){
//nous affichons la case si elle n'est pas suspecter (pour laisser l'erreur au joueur)
if(this.tableau[ligneDelta][collonneDelta].getSuspition()==0){
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
}
//nous affichons les cases possédants des voisins
this.affichageVoisinEvident(ligneDelta, collonneDelta);
//si la case du haut existe et n'est pas visible et n'a pas de voisin et n'est pas une bombe
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
//on utilise la fonction recurisve sur la case du haut
this.cliqueEvident(ligneDelta-1, collonneDelta);
}
//la même chose pour les 8 cases possible donc recursivite possible (voir principe en haut)
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
this.cliqueEvident(ligneDelta-1, collonneDelta-1);
}
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
this.cliqueEvident(ligneDelta+1, collonneDelta);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
this.cliqueEvident(ligneDelta, collonneDelta+1);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
this.cliqueEvident(ligneDelta, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
this.cliqueEvident(ligneDelta+1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
this.cliqueEvident(ligneDelta-1, collonneDelta+1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
this.cliqueEvident(ligneDelta+1, collonneDelta+1);
}
}
//--------------------------------------fonction qui affiche toutes les case possédant un voisin d'une case donnée------------------------------------------
private void affichageVoisinEvident(int ligneDelta, int collonneDelta){
//nous regardons les 8 case adjacentes et si elle a des voisin
//si elle en a alors nous la rendons visible
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta].getSuspition()==0){
this.tableau[ligneDelta-1][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta].repaint();
}
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()>0 && this.tableau[ligneDelta+1][collonneDelta].getSuspition()==0){
this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta].repaint();
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta][collonneDelta+1].getSuspition()==0){
this.tableau[ligneDelta][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta+1].repaint();
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta][collonneDelta-1].getSuspition()==0){
this.tableau[ligneDelta][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta-1].repaint();
}
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta-1].getSuspition()==0){
this.tableau[ligneDelta-1][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta-1].repaint();
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta+1][collonneDelta-1].getSuspition()==0){
this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta-1].repaint();
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta+1].getSuspition()==0){
this.tableau[ligneDelta-1][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta+1].repaint();
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta+1][collonneDelta+1].getSuspition()==0){
this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta+1].repaint();
}
}
}

Binary file not shown.

View File

@ -6,35 +6,37 @@ import java.awt.event.*;
import javax.swing.*; import javax.swing.*;
public class observateurChoix implements MouseListener{ public class observateurChoix implements MouseListener{
private nombreCollonnesLigneEtBombe nombre; private paintChoix pinceau, premier;
private JFrame fenetre; private JFrame fenetre;
public observateurChoix(JFrame fenetre0, nombreCollonnesLigneEtBombe nombre1){ private JLabel texte;
private plateau plat;
public observateurChoix(paintChoix pinceau0, paintChoix premier0, JLabel texte0, plateau plat0){
// pour savoir si c'est l'observateur de la fleche de gauche ou droite // pour savoir si c'est l'observateur de la fleche de gauche ou droite
this.nombre=nombre1; this.pinceau=pinceau0;
this.fenetre=fenetre0; this.premier=premier0;
this.texte=texte0;
this.plat=plat0;
} }
@Override @Override
public void mouseClicked(MouseEvent evenement){ public void mouseClicked(MouseEvent evenement){
this.premier.setClique(false);
if(nombre.getCollonnes()>6){ this.pinceau.setClique(true);
this.fenetre.dispose(); if(this.pinceau.getFonction()==1){
this.fenetre=nombre.getJFrame(); this.texte.setText("Ligne: "+String.valueOf(this.pinceau.getN()));
JLabel panneau = new JLabel("ok"); this.plat.setLigne(this.pinceau.getN());
panneau.setOpaque(true); }
panneau.setBackground(new Color(255,0,0)); if(this.pinceau.getFonction()==2){
fenetre.add(panneau); this.texte.setText("Collonne: "+String.valueOf(this.pinceau.getN()));
fenetre.add(panneau); this.plat.setCollonne(this.pinceau.getN());
} }
System.out.println("ok");
System.out.println(this.nombre.getCollonnes());
this.nombre.setCollonne(nombre.getCollonnes()+1);
} }
@Override // un bouton cliqué @Override // un bouton cliqué
public void mouseEntered(MouseEvent evenement){ public void mouseEntered(MouseEvent evenement){
this.pinceau.selectionner(true);
} }
@Override // debut du survol @Override // debut du survol
public void mouseExited(MouseEvent evenement){ public void mouseExited(MouseEvent evenement){
this.pinceau.selectionner(false);
} }
@Override // fin du survol @Override // fin du survol
public void mousePressed(MouseEvent evenement){ public void mousePressed(MouseEvent evenement){

BIN
observateurFenetre.class Normal file

Binary file not shown.

34
observateurFenetre.java Normal file
View File

@ -0,0 +1,34 @@
import java.awt.event.*;
public class observateurFenetre implements WindowListener{
private plateau plat;
public observateurFenetre(plateau plat0){
this.plat=plat0;
}
public void windowActivated(WindowEvent evenement){
} // premier plan
public void windowClosed(WindowEvent evenement){
} // après fermeture
public void windowClosing(WindowEvent evenement){
//si la partie n'est pas encore fini
if(this.plat.etatDeVictoire()==0){
//on sauvegarde
this.plat.save();
}
} // avant fermeture
public void windowDeactivated(WindowEvent evenement){
} // arrière-plan
public void windowDeiconified(WindowEvent evenement){
} // restauration
public void windowIconified(WindowEvent evenement){
} // minimisation
public void windowOpened(WindowEvent evenement){
} // après ouverture
}

BIN
observateurSAV.class Normal file

Binary file not shown.

42
observateurSAV.java Normal file
View File

@ -0,0 +1,42 @@
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class observateurSAV implements MouseListener{
private plateau plat;
private paintMenuJeu button;
private boolean fonction;
public observateurSAV(paintMenuJeu button0, plateau plat0){
this.button=button0;
this.plat=plat0;
this.fonction=false;
}
public void setFonction(boolean fonction0){
this.fonction=fonction0;
}
@Override
public void mouseClicked(MouseEvent evenement){
if(this.fonction==false){
plat.save();
}
if(this.fonction==true){
plat.menuChoixTypePartie();
}
}
@Override // un bouton cliqué
public void mouseEntered(MouseEvent evenement){
this.button.setSurvol(true);
}
@Override // debut du survol
public void mouseExited(MouseEvent evenement){
this.button.setSurvol(false);
}
@Override // fin du survol
public void mousePressed(MouseEvent evenement){
}
@Override // un bouton appuyé
public void mouseReleased(MouseEvent evenement){
}
}

Binary file not shown.

View File

@ -1,3 +1,4 @@
// Tom Monin et Clément Martins // Tom Monin et Clément Martins
// paintChoix V1 // paintChoix V1
// class pour l'affichage de la selection des lignes, collonnes et nombre de mines // class pour l'affichage de la selection des lignes, collonnes et nombre de mines
@ -8,18 +9,40 @@ import javax.swing.JComponent;
public class paintChoix extends JComponent{ public class paintChoix extends JComponent{
private boolean selectionner; private boolean selectionner;
private int direction; private paintChoix pinceau;
private boolean clique;
public paintChoix(int direction0){ private int x;
private int fonction;
public paintChoix(int x0, int fonction0){
this.clique=false;
this.pinceau=null;
this.selectionner=false; this.selectionner=false;
this.x=30-x0;
this.fonction=fonction0;
//de base ce n'est pas selectionner //de base ce n'est pas selectionner
this.direction=direction0;
//initialser arbitrairement sur 0
} }
public void selectionner(boolean verif){ public void selectionner(boolean verif){
this.selectionner=verif; this.selectionner=verif;
if(this.pinceau!=null){
this.pinceau.selectionner(verif);
}
this.repaint();
}
public void setPaintChoix(paintChoix pinceau0){
this.pinceau=pinceau0;
}
public void setClique(boolean verif){
this.clique=verif;
if(this.pinceau!=null){
this.pinceau.setClique(verif);
}
this.repaint();
}
public int getFonction(){
return this.fonction;
}
public int getN(){
return this.x;
} }
@Override @Override
protected void paintComponent(Graphics pinceau) { protected void paintComponent(Graphics pinceau) {
@ -30,39 +53,16 @@ public class paintChoix extends JComponent{
// obligatoire : on repeint toute la surface avec la couleur de fond // obligatoire : on repeint toute la surface avec la couleur de fond
secondPinceau.setColor(this.getBackground()); secondPinceau.setColor(this.getBackground());
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
}
if(this.clique==true){
secondPinceau.setColor(new Color(0, 127, 255));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
} }
if(selectionner==true){ if(selectionner==true){
secondPinceau.setColor(new Color(0,255,255)); secondPinceau.setColor(new Color(255, 127, 0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
}else{
secondPinceau.setColor(new Color(215,215,215));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
} }
if(this.direction==1){
secondPinceau.setColor(new Color(0,0,0)); secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(this.getWidth()/5, this.getHeight()/3, this.getWidth()/5*4, this.getHeight()/3); secondPinceau.drawRect(0, 0, this.getWidth(), this.getHeight());
int[] x= new int[3];
int[] y= new int[3];
x[0]=this.getWidth()/5;
x[1]=0;
x[2]=x[0];
y[0]=0;
y[1]=this.getHeight()/2;
y[2]=this.getHeight();
secondPinceau.fillPolygon(x, y, 3);
}
if(this.direction==2){
secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(0, this.getHeight()/3, this.getWidth()/5*4, this.getHeight()/3);
int[] x= new int[3];
int[] y= new int[3];
x[0]=this.getWidth()/5*4;
x[1]=this.getWidth();
x[2]=x[0];
y[0]=0;
y[1]=this.getHeight()/2;
y[2]=this.getHeight();
secondPinceau.fillPolygon(x, y, 3);
}
} }
} }

BIN
paintMenuJeu.class Normal file

Binary file not shown.

142
paintMenuJeu.java Normal file
View File

@ -0,0 +1,142 @@
import java.awt.*;
import javax.swing.*;
import javax.swing.JComponent;
public class paintMenuJeu extends JComponent{
private int choix;
private int scoreMax, score;
private Image un, deux, trois, quatre, cinq, six, sept, huit, neuf, zero, err, sav, lose, win, replay;
private boolean survol;
public paintMenuJeu(int choix0, int score0, int scoreMax0){
this.choix=choix0;
this.score=score0;
this.scoreMax=scoreMax0;
this.un=Toolkit.getDefaultToolkit().getImage("./IMAGE/unD.png");
this.deux=Toolkit.getDefaultToolkit().getImage("./IMAGE/deuxD.png");
this.trois=Toolkit.getDefaultToolkit().getImage("./IMAGE/troisD.png");
this.quatre=Toolkit.getDefaultToolkit().getImage("./IMAGE/quatreD.png");
this.cinq=Toolkit.getDefaultToolkit().getImage("./IMAGE/cinqD.png");
this.six=Toolkit.getDefaultToolkit().getImage("./IMAGE/sixD.png");
this.sept=Toolkit.getDefaultToolkit().getImage("./IMAGE/septD.png");
this.huit=Toolkit.getDefaultToolkit().getImage("./IMAGE/huitD.png");
this.neuf=Toolkit.getDefaultToolkit().getImage("./IMAGE/neufD.png");
this.zero=Toolkit.getDefaultToolkit().getImage("./IMAGE/zeroD.png");
this.err=Toolkit.getDefaultToolkit().getImage("./IMAGE/err.png");
this.sav=Toolkit.getDefaultToolkit().getImage("./IMAGE/sav.png");
this.lose=Toolkit.getDefaultToolkit().getImage("./IMAGE/lose.png");
this.win=Toolkit.getDefaultToolkit().getImage("./IMAGE/win.png");
this.replay=Toolkit.getDefaultToolkit().getImage("./IMAGE/replay.png");
this.survol=false;
}
public void setChoix(int choix0){
this.choix=choix0;
this.repaint();
}
public void setScore(int score0){
this.score=score0;
this.repaint();
}
public int getScore(){
return this.score;
}
public void setSurvol(boolean survol0){
this.survol=survol0;
this.repaint();
}
public int getScoreMax(){
return this.scoreMax;
}
@Override
protected void paintComponent(Graphics pinceau) {
// obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard
Graphics secondPinceau = pinceau.create();
// obligatoire : si le composant n'est pas censé être transparent
if (this.isOpaque()) {
// obligatoire : on repeint toute la surface avec la couleur de fond
secondPinceau.setColor(this.getBackground());
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
}
//On paint ce que l'on veut maintenant
secondPinceau.setColor(new Color(0,0,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
if(this.choix==1){
int nombre=this.score/100;
this.paintNombre(secondPinceau, nombre);
}
if(this.choix==2){
int nombre=this.score;
if(nombre>=100){
nombre=this.score-100*(this.score/100);
}
nombre=nombre/10;
this.paintNombre(secondPinceau, nombre);
}
if(this.choix==3){
int nombre=this.score;
if(nombre>=100){
nombre=this.score-100*(this.score/100);
}
if(nombre>=10){
nombre=this.score-10*(this.score/10);
}
this.paintNombre(secondPinceau, nombre);
}
if(this.choix==4){
if(this.survol==true){
secondPinceau.setColor(new Color(0,255,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
}
secondPinceau.drawImage(this.sav, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(this.choix==5){
secondPinceau.drawImage(this.lose, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(this.choix==6){
secondPinceau.drawImage(this.win, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(this.choix==7){
if(this.survol==true){
secondPinceau.setColor(new Color(0,255,0));
secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight());
}
secondPinceau.drawImage(this.replay, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
}
private void paintNombre(Graphics secondPinceau, int nombre){
if(this.score>=0){
if(nombre==1){
secondPinceau.drawImage(this.un, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==2){
secondPinceau.drawImage(this.deux, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==3){
secondPinceau.drawImage(this.trois, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==4){
secondPinceau.drawImage(this.quatre, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==5){
secondPinceau.drawImage(this.cinq, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==6){
secondPinceau.drawImage(this.six, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==7){
secondPinceau.drawImage(this.sept, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==8){
secondPinceau.drawImage(this.huit, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==9){
secondPinceau.drawImage(this.neuf, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
if(nombre==0){
secondPinceau.drawImage(this.zero, this.getWidth()/6, this.getHeight()/6, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
}else{
secondPinceau.drawImage(this.err, this.getWidth()/20*5, this.getHeight()/20*5, this.getWidth()/6*4, this.getHeight()/6*4 ,this);
}
}
}

BIN
plateau.class Normal file

Binary file not shown.

383
plateau.java Normal file
View File

@ -0,0 +1,383 @@
//Tom Monin et Clément Martins
//Class pour des fonction static de jeu
//V2
import java.io.*;
import java.util.*;
import java.awt.event.*;
import java.io.ObjectOutputStream;
import java.awt.*;
import javax.swing.*;
public class plateau{
private paintMenuJeu logo;
private JFrame fenetre;
private observateurSAV observateur;
private int ligne, collonne, bombe;
private paintMenuJeu[] tabScore= new paintMenuJeu[3];
private Case[][] tableau;
public plateau(JFrame fenetre0){
this.fenetre=fenetre0;
this.ligne=-1;
this.collonne=-1;
this.bombe=0;
}
public void setLogo(paintMenuJeu logo0){
this.logo=logo0;
}
public void setObservateur(observateurSAV observateur0){
this.observateur=observateur0;
}
public int getLigne(){
return this.ligne;
}
public int getCollonne(){
return this.collonne;
}
public int getBombe(){
return this.bombe;
}
public JFrame getFenetre(){
return this.fenetre;
}
public void setCollonne(int n){
this.collonne=n;
}
public void setLigne(int n){
this.ligne=n;
}
public void setBombe(int n){
this.bombe=n;
}
//-------------------------Fonction plaçant les bombes aléatoirement------------------------
private void setAllBombe(){
Random rand = new Random();
//on répète le nombre de fois le nombre de bombe a placer
for(int i=0; i<this.bombe; i++){
//on genere 2 chiffre aléatoire(ligne et collonne)
int x=rand.nextInt(this.ligne);
int y=rand.nextInt(this.collonne);
//si il n'y a pas de bombe ici
if(this.tableau[x][y].getBombe()==false){
//on en place une
this.tableau[x][y].setBombe();
}else{
//autrement nous recomencerons 1 fois de plus le tirage pour ne pas modifier le nombre de bombe
i--;
}
}
}
//-------------------------Fonction mettant le nombre de bombe voisin a chaque Case------------------
public void setAllVoisin(){
//nous parcourons le tableau du jeu
for(int i=0; i<this.tableau.length; i++){
for(int t=0; t<this.tableau[i].length; t++){
int voisin=0;
//nous regardons dans les cases adjacentes(si elles existe) si elle sont des bombes
if(i>0){
if(this.tableau[i-1][t].getBombe()==true){
//si elle le sont alors nous augmentons le nombre de voisin
voisin++;
}
if(t>0){
if(this.tableau[i-1][t-1].getBombe()==true){
voisin++;
}
}
if(t<this.tableau[i].length-1){
if(this.tableau[i-1][t+1].getBombe()==true){
voisin++;
}
}
}
if(i<this.tableau.length-1){
if(this.tableau[i+1][t].getBombe()==true){
voisin++;
}
if(t>0){
if(this.tableau[i+1][t-1].getBombe()==true){
voisin++;
}
}
if(t<this.tableau[i].length-1){
if(this.tableau[i+1][t+1].getBombe()==true){
voisin++;
}
}
}
if(t>0){
if(this.tableau[i][t-1].getBombe()==true){
voisin++;
}
}
if(t<this.tableau[i].length-1){
if(this.tableau[i][t+1].getBombe()==true){
voisin++;
}
}
//finalement nous mettons pour cette case sont nombre de voisin
this.tableau[i][t].setVoisin(voisin);
}
}
}
//-------------------------------Fonction qui verifie l'etat de jeu(perdu, gagner)------------------------
public int etatDeVictoire(){
//variable pour une condition
int condition=0;
//nous parcourons le tableau du jeu
for(int i=0; i<this.tableau.length; i++){
for(int t=0; t<this.tableau[i].length; t++){
//si une case n'est pas visible mais que ce n'est pas une bombe
if(this.tableau[i][t].getVisibiliter()==false && this.tableau[i][t].getBombe()==false){
//nous augmentons la conditions pour montrer que la partie est toujour en cours
condition++;
}
//si une bombe est visible
if(this.tableau[i][t].getVisibiliter()==true && this.tableau[i][t].getBombe()==true){
//on retourne une valeur représentant la défaite: -1
return -1;
}
//si une bombe n'est pas susposer comme tel
if(this.tableau[i][t].getSuspition()!=1 && this.tableau[i][t].getBombe()==true){
//nous augmentons la conditions pour montrer que la partie n'est pas fini
condition++;
}
}
}
//si la partie n'est pas fini
if(condition>0){
//on retourne 0 ici comme une valleur null
return 0;
}
//sinon le joueur a donc gagner on renvoie 1
return 1;
}
//-----------------------------------Fonction après victoire/defaite pour enlever les observateur a chaque Case--------------------------------
public static void removeListener(Case[][] tableau0){
//on parcour le tableau du jeu
for(int i=0; i<tableau0.length; i++){
for(int t=0; t<tableau0[i].length; t++){
//on récupere le tableau d'observateur
MouseListener[] tabListener;
tabListener=tableau0[i][t].getMouseListeners();
//que nous parcourons
for(int longeur=0; longeur<=tabListener.length-1; longeur++){
//on enleve a chaque case les observateur 1 par 1
tableau0[i][t].removeMouseListener(tabListener[longeur]);
}
}
}
}
public void perdu(){
for(int i=0; i<tabScore.length; i++){
this.tabScore[i].setChoix(5);
}
}
public void gagner(){
for(int i=0; i<tabScore.length; i++){
this.tabScore[i].setChoix(6);
}
}
public void setScore(int n){
for(int i=0; i<tabScore.length; i++){
tabScore[i].setScore(tabScore[i].getScore()+n);
}
}
public void paintLogo(){
this.logo.setChoix(7);
this.observateur.setFonction(true);
}
public void newGame(){
this.tableau=new Case[ligne][collonne];
for(int i=0; i<ligne; i++){
for(int t=0; t<collonne; t++){
this.tableau[i][t]= new Case();
this.tableau[i][t].setPreferredSize(new Dimension(100,100));
//nous ajoutons aussi a chaque case son observateur de case
}
}
//nous disposons les bombe dans le jeu
this.setAllBombe();
//maitenant que les bombe sont mise nous pouvons modifier le nombre de voisin des cases
this.setAllVoisin();
this.launchGame(this.bombe);
}
public void save(){
try{
FileOutputStream sav = new FileOutputStream(new File("sauvegarde.data"));
ObjectOutputStream oos = new ObjectOutputStream(sav);
oos.writeInt(this.ligne);
oos.writeInt(this.collonne);
for(int i=0; i<this.ligne; i++){
for(int t=0; t<this.collonne; t++){
oos.writeObject(this.tableau[i][t]);
}
}
oos.writeInt(this.tabScore[0].getScoreMax());
oos.writeInt(this.tabScore[0].getScore());
oos.close();
sav.close();
}catch(FileNotFoundException e1){
}catch(IOException e2){
}
this.fenetre.dispose();
}
public void reprendrePartie(){
int score=0;
try{
FileInputStream file = new FileInputStream("./sauvegarde.data");
ObjectInputStream ois = new ObjectInputStream(file);
this.ligne=ois.readInt();
this.collonne=ois.readInt();
this.tableau=new Case[this.ligne][this.collonne];
for(int i=0; i<ligne; i++){
for(int t=0; t<collonne; t++){
this.tableau[i][t]=(Case) ois.readObject();
}
}
this.bombe=ois.readInt();
score=ois.readInt();
}catch(FileNotFoundException e1){
System.out.println("FNF");
}catch(IOException e2){
System.out.println("IOE");
}catch(ClassNotFoundException e3){
System.out.println("CNF");
}
this.launchGame(score);
}
private void launchGame(int score){
this.fenetre.dispose();
this.fenetre=new JFrame("démineur");
// l'application ne se fermera que si on clique sur
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setVisible(true);
fenetre.addWindowListener(new observateurFenetre(this));
GridLayout grille = new GridLayout(this.ligne+1,this.collonne);
fenetre.setLayout(grille);
for(int i=0; i<collonne; i++){
paintMenuJeu menu= new paintMenuJeu(0, score, bombe);
menu.setPreferredSize(new Dimension(100,100));
if(i==0){
this.tabScore[0]=menu;
menu.setChoix(1);
}
if(i==1){
this.tabScore[1]=menu;
menu.setChoix(2);
}
if(i==2){
this.tabScore[2]=menu;
menu.setChoix(3);
}
if(i==collonne-1){
menu.setChoix(4);
this.setLogo(menu);
observateurSAV observateur=new observateurSAV(menu, this);
menu.addMouseListener(observateur);
this.setObservateur(observateur);
}
fenetre.add(menu);
}
for(int i=0; i<ligne; i++){
for(int t=0;t<collonne; t++){
this.fenetre.add(this.tableau[i][t]);
this.tableau[i][t].addMouseListener(new observateurCase(i, t, this.tableau, this));
}
}
this.fenetre.pack();
}
public void menuChoixLCB(){
this.fenetre.dispose();
this.fenetre= new JFrame("démineur");
this.fenetre.setLocation(0,0);
this.fenetre.setVisible(true);
this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grille = new GridLayout(27,3);
fenetre.setLayout(grille);
paintChoix retenue= new paintChoix(-1, -1);
paintChoix premier= new paintChoix(-1, -1);
paintChoix retenue2= new paintChoix(-1, -1);
paintChoix premier2= new paintChoix(-1, -1);
JLabel texte1 = new JLabel("ligne: ???");
JLabel texte2 = new JLabel("collonne: ???");
texte1.setHorizontalAlignment(JLabel.CENTER);
texte2.setHorizontalAlignment(JLabel.CENTER);
JTextField nbombe = new JTextField("0");
for(int i=0; i<27; i++){
paintChoix pinceau = new paintChoix(i, 1);
paintChoix pinceau2 = new paintChoix(i, 2);
pinceau.setPreferredSize(new Dimension(500,100));
pinceau2.setPreferredSize(new Dimension(500, 100));
if(i==0){
premier=pinceau;
premier2=pinceau2;
}
pinceau.addMouseListener(new observateurChoix(pinceau, premier, texte1, this));
pinceau2.addMouseListener(new observateurChoix(pinceau2, premier2, texte2, this));
retenue.setPaintChoix(pinceau);
retenue=pinceau;
retenue2.setPaintChoix(pinceau2);
retenue2=pinceau2;
this.fenetre.add(pinceau);
if(i==10){
this.fenetre.add(texte1);
}
if(i==12){
this.fenetre.add(texte2);
}if(i!=10 && i!=12 && i!=26 && i!=17 && i!=18 && i!=19 && i!=16){
this.fenetre.add(new JLabel());
}if(i==26){
JButton valider = new JButton("valider");
valider.addActionListener(new bombeEtValider(this, 2, nbombe));
this.fenetre.add(valider);
}if(i==17){
JButton plus = new JButton("+");
plus.addActionListener(new plusoumoins(nbombe, 1, this));
this.fenetre.add(plus);
}if(i==18){
nbombe.setHorizontalAlignment(JLabel.CENTER);
nbombe.addActionListener(new bombeEtValider(this, 1, nbombe));
this.fenetre.add(nbombe);
}if(i==19){
JButton moins = new JButton("-");
moins.addActionListener(new plusoumoins(nbombe, -1, this));
this.fenetre.add(moins);
}if(i==16){
JLabel texte3 = new JLabel("Nombre de Bombe");
texte3.setHorizontalAlignment(JLabel.CENTER);
this.fenetre.add(texte3);
}
this.fenetre.add(pinceau2);
}
this.fenetre.pack();
}
public void menuChoixTypePartie(){
this.fenetre.dispose();
this.fenetre= new JFrame("démineur");
this.fenetre.setLocation(0,0);
this.fenetre.setVisible(true);
this.fenetre.setSize(1000, 500);
this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pan = new JPanel();
JButton nouveau = new JButton("nouvelle partie");
JButton reprende = new JButton("reprendrePartie");
JButton quitter = new JButton("quitter");
nouveau.addActionListener(new bombeEtValider(this, 3, null));
reprende.addActionListener(new bombeEtValider(this, 4, null));
quitter.addActionListener(new bombeEtValider(this, 5, null));
pan.add(nouveau);
pan.add(reprende);
pan.add(quitter);
this.fenetre.add(pan, BorderLayout.CENTER);
}
}

BIN
plusoumoins.class Normal file

Binary file not shown.

40
plusoumoins.java Normal file
View File

@ -0,0 +1,40 @@
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class plusoumoins implements ActionListener {
private JTextField zone;
private int n;
private plateau plat;
public plusoumoins(JTextField zone0, int n0, plateau plat0){
this.zone=zone0;
this.n=n0;
this.plat=plat0;
}
@Override
public void actionPerformed(ActionEvent evenement){
int nombre=0;
try{
this.zone.setBackground(new Color(255,255,255));
nombre=Integer.parseInt(this.zone.getText())+this.n;
if(nombre<0){
nombre=0;
}
if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){
if(nombre>this.plat.getLigne()*this.plat.getCollonne()){
nombre=this.plat.getLigne()*this.plat.getCollonne();
}
this.zone.setText(String.valueOf(nombre));
}else{
this.zone.setBackground(Color.red);
this.zone.setText("Selectionner Ligne et Collonne Avant");
this.plat.setBombe(-1);
}
this.plat.setBombe(nombre);
}catch(NumberFormatException e1){
this.zone.setBackground(Color.red);
this.zone.setText("rentrer un nombre valide");
this.plat.setBombe(-1);
}
}
}