diff --git a/Case.class b/Case.class new file mode 100644 index 0000000..1bfbceb Binary files /dev/null and b/Case.class differ diff --git a/Case.java b/Case.java new file mode 100644 index 0000000..bec1583 --- /dev/null +++ b/Case.java @@ -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); + } + } + } + } +} \ No newline at end of file diff --git a/IMAGE/bombe.png b/IMAGE/bombe.png new file mode 100644 index 0000000..60fc420 Binary files /dev/null and b/IMAGE/bombe.png differ diff --git a/IMAGE/cinq.jpg b/IMAGE/cinq.jpg new file mode 100644 index 0000000..b828d77 Binary files /dev/null and b/IMAGE/cinq.jpg differ diff --git a/IMAGE/cinqD.png b/IMAGE/cinqD.png new file mode 100644 index 0000000..3a42907 Binary files /dev/null and b/IMAGE/cinqD.png differ diff --git a/IMAGE/deux.jpg b/IMAGE/deux.jpg new file mode 100644 index 0000000..ff2c305 Binary files /dev/null and b/IMAGE/deux.jpg differ diff --git a/IMAGE/deuxD.png b/IMAGE/deuxD.png new file mode 100644 index 0000000..a51cb36 Binary files /dev/null and b/IMAGE/deuxD.png differ diff --git a/IMAGE/err.png b/IMAGE/err.png new file mode 100644 index 0000000..eadff1a Binary files /dev/null and b/IMAGE/err.png differ diff --git a/IMAGE/etoile.png b/IMAGE/etoile.png new file mode 100644 index 0000000..66964aa Binary files /dev/null and b/IMAGE/etoile.png differ diff --git a/IMAGE/huit.jpg b/IMAGE/huit.jpg new file mode 100644 index 0000000..9c681d7 Binary files /dev/null and b/IMAGE/huit.jpg differ diff --git a/IMAGE/huitD.png b/IMAGE/huitD.png new file mode 100644 index 0000000..bc6dc2a Binary files /dev/null and b/IMAGE/huitD.png differ diff --git a/IMAGE/lose.png b/IMAGE/lose.png new file mode 100644 index 0000000..139b8c5 Binary files /dev/null and b/IMAGE/lose.png differ diff --git a/IMAGE/neufD.png b/IMAGE/neufD.png new file mode 100644 index 0000000..a3aa467 Binary files /dev/null and b/IMAGE/neufD.png differ diff --git a/IMAGE/pointintero.png b/IMAGE/pointintero.png new file mode 100644 index 0000000..651da3e Binary files /dev/null and b/IMAGE/pointintero.png differ diff --git a/IMAGE/quatre.jpg b/IMAGE/quatre.jpg new file mode 100644 index 0000000..ae4d002 Binary files /dev/null and b/IMAGE/quatre.jpg differ diff --git a/IMAGE/quatreD.png b/IMAGE/quatreD.png new file mode 100644 index 0000000..89fd693 Binary files /dev/null and b/IMAGE/quatreD.png differ diff --git a/IMAGE/replay.png b/IMAGE/replay.png new file mode 100644 index 0000000..0093677 Binary files /dev/null and b/IMAGE/replay.png differ diff --git a/IMAGE/sav.png b/IMAGE/sav.png new file mode 100644 index 0000000..dcda6ae Binary files /dev/null and b/IMAGE/sav.png differ diff --git a/IMAGE/sept.jpg b/IMAGE/sept.jpg new file mode 100644 index 0000000..d6841fd Binary files /dev/null and b/IMAGE/sept.jpg differ diff --git a/IMAGE/septD.png b/IMAGE/septD.png new file mode 100644 index 0000000..be84204 Binary files /dev/null and b/IMAGE/septD.png differ diff --git a/IMAGE/six.jpg b/IMAGE/six.jpg new file mode 100644 index 0000000..f84ef83 Binary files /dev/null and b/IMAGE/six.jpg differ diff --git a/IMAGE/sixD.png b/IMAGE/sixD.png new file mode 100644 index 0000000..71f8892 Binary files /dev/null and b/IMAGE/sixD.png differ diff --git a/IMAGE/trois.jpg b/IMAGE/trois.jpg new file mode 100644 index 0000000..30b0737 Binary files /dev/null and b/IMAGE/trois.jpg differ diff --git a/IMAGE/troisD.png b/IMAGE/troisD.png new file mode 100644 index 0000000..3b502a0 Binary files /dev/null and b/IMAGE/troisD.png differ diff --git a/IMAGE/un.jpg b/IMAGE/un.jpg new file mode 100644 index 0000000..2a2e75e Binary files /dev/null and b/IMAGE/un.jpg differ diff --git a/IMAGE/unD.png b/IMAGE/unD.png new file mode 100644 index 0000000..1f5b861 Binary files /dev/null and b/IMAGE/unD.png differ diff --git a/IMAGE/win.png b/IMAGE/win.png new file mode 100644 index 0000000..bb8fc4b Binary files /dev/null and b/IMAGE/win.png differ diff --git a/IMAGE/zeroD.png b/IMAGE/zeroD.png new file mode 100644 index 0000000..83a84eb Binary files /dev/null and b/IMAGE/zeroD.png differ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..22f506a --- /dev/null +++ b/Makefile @@ -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 diff --git a/bombeEtValider.class b/bombeEtValider.class new file mode 100644 index 0000000..3721370 Binary files /dev/null and b/bombeEtValider.class differ diff --git a/bombeEtValider.java b/bombeEtValider.java new file mode 100644 index 0000000..41fe5d0 --- /dev/null +++ b/bombeEtValider.java @@ -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(); + } + } +} \ No newline at end of file diff --git a/main_ex.class b/main_ex.class index a9862be..d558dae 100644 Binary files a/main_ex.class and b/main_ex.class differ diff --git a/main_ex.java b/main_ex.java index b2504da..bf3f500 100644 --- a/main_ex.java +++ b/main_ex.java @@ -1,33 +1,16 @@ // Tom Monint et Clément Martins -// main_ex V1 +// main_ex V4 // Classe ayant pour but d'être executer //importons les packages necessaires import java.awt.*; import javax.swing.*; - + public class main_ex{ - public static void main(String[] args){ + public static void main(String[] Args){ // on initialise une fenettre JFrame fenetre = new JFrame("Démineur"); - fenetre.setLocation(0,0); - //on choisi une taille arbitraire - 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 - - + plateau jeu = new plateau(fenetre); + jeu.menuChoixTypePartie(); } } \ No newline at end of file diff --git a/observateurCase.class b/observateurCase.class new file mode 100644 index 0000000..b8bf630 Binary files /dev/null and b/observateurCase.class differ diff --git a/observateurCase.java b/observateurCase.java new file mode 100644 index 0000000..6d32911 --- /dev/null +++ b/observateurCase.java @@ -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;i0 && 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(ligneDelta0 && 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 && ligneDelta0 && 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(collonneDelta0 && 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(ligneDelta0 && this.tableau[ligneDelta+1][collonneDelta].getSuspition()==0){ + this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true); + this.tableau[ligneDelta+1][collonneDelta].repaint(); + } + if(collonneDelta0 && 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 && ligneDelta0 && this.tableau[ligneDelta+1][collonneDelta-1].getSuspition()==0){ + this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true); + this.tableau[ligneDelta+1][collonneDelta-1].repaint(); + } + if(collonneDelta0 && 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(collonneDelta0 && this.tableau[ligneDelta+1][collonneDelta+1].getSuspition()==0){ + this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true); + this.tableau[ligneDelta+1][collonneDelta+1].repaint(); + } + } +} \ No newline at end of file diff --git a/observateurChoix.class b/observateurChoix.class index 6f42ab5..6cdf838 100644 Binary files a/observateurChoix.class and b/observateurChoix.class differ diff --git a/observateurChoix.java b/observateurChoix.java index 22026a6..1310757 100644 --- a/observateurChoix.java +++ b/observateurChoix.java @@ -6,35 +6,37 @@ import java.awt.event.*; import javax.swing.*; public class observateurChoix implements MouseListener{ - private nombreCollonnesLigneEtBombe nombre; + private paintChoix pinceau, premier; 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 - this.nombre=nombre1; - this.fenetre=fenetre0; + this.pinceau=pinceau0; + this.premier=premier0; + this.texte=texte0; + this.plat=plat0; } @Override public void mouseClicked(MouseEvent evenement){ - - if(nombre.getCollonnes()>6){ - this.fenetre.dispose(); - this.fenetre=nombre.getJFrame(); - JLabel panneau = new JLabel("ok"); - panneau.setOpaque(true); - panneau.setBackground(new Color(255,0,0)); - fenetre.add(panneau); - fenetre.add(panneau); + this.premier.setClique(false); + this.pinceau.setClique(true); + if(this.pinceau.getFonction()==1){ + this.texte.setText("Ligne: "+String.valueOf(this.pinceau.getN())); + this.plat.setLigne(this.pinceau.getN()); + } + if(this.pinceau.getFonction()==2){ + this.texte.setText("Collonne: "+String.valueOf(this.pinceau.getN())); + 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é public void mouseEntered(MouseEvent evenement){ - + this.pinceau.selectionner(true); } @Override // debut du survol public void mouseExited(MouseEvent evenement){ + this.pinceau.selectionner(false); } @Override // fin du survol public void mousePressed(MouseEvent evenement){ diff --git a/observateurFenetre.class b/observateurFenetre.class new file mode 100644 index 0000000..5a2fb4f Binary files /dev/null and b/observateurFenetre.class differ diff --git a/observateurFenetre.java b/observateurFenetre.java new file mode 100644 index 0000000..4d75980 --- /dev/null +++ b/observateurFenetre.java @@ -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 +} \ No newline at end of file diff --git a/observateurSAV.class b/observateurSAV.class new file mode 100644 index 0000000..cf5ac85 Binary files /dev/null and b/observateurSAV.class differ diff --git a/observateurSAV.java b/observateurSAV.java new file mode 100644 index 0000000..9ba4195 --- /dev/null +++ b/observateurSAV.java @@ -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){ + + } +} \ No newline at end of file diff --git a/paintChoix.class b/paintChoix.class index 5384868..29d0a13 100644 Binary files a/paintChoix.class and b/paintChoix.class differ diff --git a/paintChoix.java b/paintChoix.java index b827a40..bbda9d6 100644 --- a/paintChoix.java +++ b/paintChoix.java @@ -1,3 +1,4 @@ + // Tom Monin et Clément Martins // paintChoix V1 // 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{ private boolean selectionner; - private int direction; - - public paintChoix(int direction0){ - + private paintChoix pinceau; + private boolean clique; + private int x; + private int fonction; + public paintChoix(int x0, int fonction0){ + this.clique=false; + this.pinceau=null; this.selectionner=false; + this.x=30-x0; + this.fonction=fonction0; //de base ce n'est pas selectionner - this.direction=direction0; - //initialser arbitrairement sur 0 - } public void selectionner(boolean 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 protected void paintComponent(Graphics pinceau) { @@ -31,38 +54,15 @@ public class paintChoix extends JComponent{ secondPinceau.setColor(this.getBackground()); 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){ - secondPinceau.setColor(new Color(0,255,255)); - secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); - }else{ - secondPinceau.setColor(new Color(215,215,215)); + secondPinceau.setColor(new Color(255, 127, 0)); secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); } - if(this.direction==1){ - secondPinceau.setColor(new Color(0,0,0)); - secondPinceau.fillRect(this.getWidth()/5, 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; - 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); - } + secondPinceau.setColor(new Color(0,0,0)); + secondPinceau.drawRect(0, 0, this.getWidth(), this.getHeight()); } } \ No newline at end of file diff --git a/paintMenuJeu.class b/paintMenuJeu.class new file mode 100644 index 0000000..218f2aa Binary files /dev/null and b/paintMenuJeu.class differ diff --git a/paintMenuJeu.java b/paintMenuJeu.java new file mode 100644 index 0000000..0739021 --- /dev/null +++ b/paintMenuJeu.java @@ -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); + } + + } +} \ No newline at end of file diff --git a/plateau.class b/plateau.class new file mode 100644 index 0000000..542e3be Binary files /dev/null and b/plateau.class differ diff --git a/plateau.java b/plateau.java new file mode 100644 index 0000000..c1db4a7 --- /dev/null +++ b/plateau.java @@ -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; i0){ + 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(t0){ + if(this.tableau[i+1][t-1].getBombe()==true){ + voisin++; + } + } + if(t0){ + if(this.tableau[i][t-1].getBombe()==true){ + voisin++; + } + } + if(t0){ + //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; ithis.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); + } + } +} \ No newline at end of file