173 lines
6.5 KiB
Java
173 lines
6.5 KiB
Java
|
//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);
|
||
|
}
|
||
|
}
|
||
|
}
|