//Clément Martins et Tom Monin //Class utiliser pour observateur avec plusieur action possible (en fonction de sa fonction défini a la création) import java.awt.event.*; import javax.swing.*; import java.awt.*; public class observateurButtonEtText implements ActionListener { private plateau plat; //le plateau de jeu private int fonction; //la fonction de l'observateur private JTextField zone; // la zone de texte a modifier //constructeur //@params (le plateau, la fonction, la zone de texte) public observateurButtonEtText(plateau plat0, int fonction0, JTextField zone0){ //on initialise les attributs this.plat=plat0; this.fonction=fonction0; this.zone=zone0; } @Override public void actionPerformed(ActionEvent evenement){ //si fonction 1 on va adapter la zone de texte en fonction de son contenu if(this.fonction==1){ int nombre=0; //try catch pour le parseInt pour voir si le format correspond //tant que le format est bon: try{ //on met le fond du texte en blanc this.zone.setBackground(new Color(255,255,255)); //on recupere le nombre contenu dans le text nombre=Integer.parseInt(evenement.getActionCommand()); //si il est inferieur a 0 if(nombre<0){ //je le met sur 0 (min de bombe) nombre=0; } //si les collonnes et les ligne ne sont pas encore selectionner //vu par les valeur sentinnelles (-1) if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){ //si il y a plus de bombe que de case if(nombre>this.plat.getLigne()*this.plat.getCollonne()){ //on repositionne le nombre de bombe au maximun nombre=this.plat.getLigne()*this.plat.getCollonne(); } //on affiche le nombre dans la zone de text this.zone.setText(String.valueOf(nombre)); }else{ //si les ligne et les collonnes ne sont pas encore selectionner //fond e rouge this.zone.setBackground(Color.red); //on précise a l'utilisateur se que l'ont veut this.zone.setText("Selectionner Ligne et Collonne Avant"); //on précisera au plateau que le choix des bombes n'est plus bon //par une valeur sentinnelles //pour eviter de garder l'ancien nombre si il y en avait un nombre=-1; } //on dis au plateau le nombre de bombe this.plat.setBombe(nombre); }catch(NumberFormatException e1){ //si le format n'est pas bon //fond en rouge this.zone.setBackground(Color.red); //on précise a l'utilisateur l'erreur this.zone.setText("rentrer un entier"); //on précisera au plateau que le choix des bombes n'est plus bon //par une valeur sentinnelles //pour eviter de garder l'ancien nombre si il y en avait un this.plat.setBombe(-1); } } //si la fonction est 2 if(this.fonction==2){ int nombre=0; //try catch pour les format pas bon //tant que il n'y a pas d'Exception try{ //fond en blanc this.zone.setBackground(new Color(255,255,255)); //le nombre est = au nombre dans la zone de texte nombre=Integer.parseInt(this.zone.getText()); //si inferieur a 0 if(nombre<0){ //nombre a 0 (min de bombe) nombre=0; } //si collonne et ligne deja existant if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){ //si ce nombre > nb de Case if(nombre>this.plat.getLigne()*this.plat.getCollonne()){ //nombre = nombre max de bombe nombre=this.plat.getLigne()*this.plat.getCollonne(); } //on précise au plateau le nombre de bombe this.plat.setBombe(nombre); //si il tout est deja initialiser (ligne, collonne et bombe) if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1 && this.plat.getBombe()!=-1){ //on lance la nouvelle partie this.plat.newGame(); }else{ //autrement if(this.plat.getBombe()==-1){ this.zone.setBackground(Color.red); this.zone.setText("Rentrer un nombre de Bombe"); } } }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 entier"); this.plat.setBombe(-1); } } if(this.fonction==3){ //si fonction 3 donc boutons + //plusoumoins avec comme argument +1 this.plusoumoins(1); } if(this.fonction==4){ //si fonction 4 donc boutons - //plus ou moins avec argument -1 this.plusoumoins(-1); } } private void plusoumoins(int n){ int nombre=0; //try catch pour les gestion de format non conforme //tant que il n'y a pas d'exception try{ //fond en blanc this.zone.setBackground(new Color(255,255,255)); //le nombre = nombre deja présent + l'argument nombre=Integer.parseInt(this.zone.getText())+n; //si le nombre <0 nombre = au minimum if(nombre<0){ nombre=0; } //si les collonnes et les lignes existe deja if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){ //si le nomnbre > au nombre de case // nombre = nombre de case if(nombre>this.plat.getLigne()*this.plat.getCollonne()){ nombre=this.plat.getLigne()*this.plat.getCollonne(); } //on indique a l'utilisateur le nouveau nombre this.zone.setText(String.valueOf(nombre)); }else{ //si pas de ligne et de collonnes //fond en rouge this.zone.setBackground(Color.red); //on indique a l'utilisateur les précondition avant de remplir ce champs this.zone.setText("Selectionner Ligne et Collonne Avant"); //on indique au plateau que le choix n'est toujours pas fait nombre=-1; } //on précise au plateau le nombre de bombe choisit this.plat.setBombe(nombre); }catch(NumberFormatException e1){ //si format inchohérent //fond en rouge this.zone.setBackground(Color.red); //on précise ce que l'ont veut this.zone.setText("rentrer un entier"); //on indique au plateau que le choix n'est toujours pas fait this.plat.setBombe(-1); } } }