2022-05-05 22:45:26 +02:00
//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 ;
2022-05-11 20:31:30 +02:00
this . bombe = - 1 ;
2022-05-05 22:45:26 +02:00
}
2022-05-11 20:31:30 +02:00
//-------------------> Debut Seter et Getteur <-------------------------
2022-05-05 22:45:26 +02:00
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 ;
}
2022-05-11 20:31:30 +02:00
//-------------------------> fin Setter et Getteur <-----------------------------
2022-05-05 22:45:26 +02:00
//-------------------------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 ) {
2022-05-06 16:16:25 +02:00
// le joueur a perdu
this . removeListener ( ) ;
this . perdu ( ) ;
2022-05-05 22:45:26 +02:00
//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 ;
}
2022-05-06 16:16:25 +02:00
// le joueur a gagner
this . removeListener ( ) ;
this . gagner ( ) ;
2022-05-05 22:45:26 +02:00
//sinon le joueur a donc gagner on renvoie 1
return 1 ;
}
//-----------------------------------Fonction après victoire/defaite pour enlever les observateur a chaque Case--------------------------------
2022-05-06 16:16:25 +02:00
private void removeListener ( ) {
2022-05-05 22:45:26 +02:00
//on parcour le tableau du jeu
2022-05-06 16:16:25 +02:00
for ( int i = 0 ; i < this . tableau . length ; i + + ) {
for ( int t = 0 ; t < this . tableau [ i ] . length ; t + + ) {
2022-05-05 22:45:26 +02:00
//on récupere le tableau d'observateur
MouseListener [ ] tabListener ;
2022-05-06 16:16:25 +02:00
tabListener = this . tableau [ i ] [ t ] . getMouseListeners ( ) ;
2022-05-05 22:45:26 +02:00
//que nous parcourons
for ( int longeur = 0 ; longeur < = tabListener . length - 1 ; longeur + + ) {
//on enleve a chaque case les observateur 1 par 1
2022-05-06 16:16:25 +02:00
this . tableau [ i ] [ t ] . removeMouseListener ( tabListener [ longeur ] ) ;
2022-05-05 22:45:26 +02:00
}
}
}
}
2022-05-06 16:16:25 +02:00
//-------------------------------------Fonction des modification a faire si le joeur a perdu-------------------------------------
private void perdu ( ) {
//on modifie l'affichage du menu du haut par le choix 5(tete rouge)
2022-05-05 22:45:26 +02:00
for ( int i = 0 ; i < tabScore . length ; i + + ) {
this . tabScore [ i ] . setChoix ( 5 ) ;
}
2022-05-06 16:16:25 +02:00
//puis nous affichons toutes les case pour que le joueur puisse voir la grille
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 ( ) ;
}
}
//enfin nous affichons le logo rejouer
this . paintLogo ( ) ;
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//-------------------------------------Fonction des modification a faire si le joeur a gagner-------------------------------------
private void gagner ( ) {
//on modifie l'affichage du menu du haut par le choix 6(tete vert)
2022-05-05 22:45:26 +02:00
for ( int i = 0 ; i < tabScore . length ; i + + ) {
this . tabScore [ i ] . setChoix ( 6 ) ;
}
2022-05-06 16:16:25 +02:00
//nous affichons le logo rejouer
this . paintLogo ( ) ;
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//-------------------------------------Fonction pour modifier le Score des bombes restantes--------------------------------------
2022-05-05 22:45:26 +02:00
public void setScore ( int n ) {
2022-05-06 16:16:25 +02:00
//on parcoure le menu du haut avec le score et nous lui ajoutons l'entier entrée dans l'apel
2022-05-05 22:45:26 +02:00
for ( int i = 0 ; i < tabScore . length ; i + + ) {
2022-05-06 16:16:25 +02:00
tabScore [ i ] . setScore ( tabScore [ i ] . getScore ( ) + n ) ;
}
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//------------------------------------> Fonction pour afficher le logo rejouer <----------------------------
private void paintLogo ( ) {
//on modifie l'aspect de l'ancien logo
2022-05-05 22:45:26 +02:00
this . logo . setChoix ( 7 ) ;
2022-05-06 16:16:25 +02:00
//et la fonction de son observateur
2022-05-05 22:45:26 +02:00
this . observateur . setFonction ( true ) ;
}
2022-05-06 16:16:25 +02:00
//------------------------------------> Fonction pour lancer une nouvelle partie <-----------------------
2022-05-05 22:45:26 +02:00
public void newGame ( ) {
2022-05-06 16:16:25 +02:00
//initialisation du tableau de Case
2022-05-05 22:45:26 +02:00
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 ( ) ;
2022-05-11 20:31:30 +02:00
this . tableau [ i ] [ t ] . setPreferredSize ( new Dimension ( 50 , 50 ) ) ;
2022-05-05 22:45:26 +02:00
//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 ( ) ;
2022-05-06 16:16:25 +02:00
//on lance la partie avec le tableau de Case initialiser et le nombre de bombe en score(aucune Case n'est encore suspecter)
2022-05-05 22:45:26 +02:00
this . launchGame ( this . bombe ) ;
}
2022-05-06 16:16:25 +02:00
//------------------------------------> Fonction pour sauvegarder la partie <-------------------------
2022-05-11 20:31:30 +02:00
/ *
Mettre les bloc try catch au bon endroit
* /
2022-05-05 22:45:26 +02:00
public void save ( ) {
2022-05-06 16:16:25 +02:00
//les fonctions vont lever des Exeption nous devons donc mettre un try Catch
2022-05-05 22:45:26 +02:00
try {
2022-05-06 16:16:25 +02:00
//nous initialison le outputStream en créant le fichier "sauvegarde.data"
2022-05-05 22:45:26 +02:00
FileOutputStream sav = new FileOutputStream ( new File ( " sauvegarde.data " ) ) ;
2022-05-11 20:31:30 +02:00
try {
//nous allons sérialiser le tableau de Case
ObjectOutputStream oos = new ObjectOutputStream ( sav ) ;
//nous écrivons donc tout d'abord la taille de celui-ci
oos . writeInt ( this . ligne ) ;
oos . writeInt ( this . collonne ) ;
//puis nous parcourons le tableau en sérialisant toute les Case
for ( int i = 0 ; i < this . ligne ; i + + ) {
for ( int t = 0 ; t < this . collonne ; t + + ) {
oos . writeObject ( this . tableau [ i ] [ t ] ) ;
}
2022-05-19 11:23:05 +02:00
}
//nous écrivons ensuite le score Maximum(nombre de bombe) pour éviter de regarder toutes les Case plus tard
oos . writeInt ( this . tabScore [ 0 ] . getScoreMax ( ) ) ;
//puis le score a l'instant T
oos . writeInt ( this . tabScore [ 0 ] . getScore ( ) ) ;
//nous fermons la sauvegardes
try {
oos . close ( ) ;
} catch ( IOException e ) {
JOptionPane . showMessageDialog ( this . fenetre , " erreur lors de l'ecriture final de la sauvegarde " ) ;
this . fenetre . dispose ( ) ;
}
} catch ( IOException e ) {
JOptionPane . showMessageDialog ( this . fenetre , " erreur lors de l'ecriture de la sauvegarde " ) ;
this . fenetre . dispose ( ) ;
}
} catch ( FileNotFoundException e1 ) {
JOptionPane . showMessageDialog ( this . fenetre , " erreur impossible d'accèder au fichier de sauvegarde " ) ;
this . fenetre . dispose ( ) ;
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//nous fermons la fenetre et donc arrêtons l'applications
2022-05-05 22:45:26 +02:00
this . fenetre . dispose ( ) ;
}
2022-05-06 16:16:25 +02:00
public void reprendrePartie ( FileInputStream file ) {
//initialisation de la variable score
2022-05-05 22:45:26 +02:00
int score = 0 ;
2022-05-06 16:16:25 +02:00
//les fonctions vont lever des Exeption nous devons donc mettre un try Catch
2022-05-05 22:45:26 +02:00
try {
2022-05-06 16:16:25 +02:00
//initialisation des collonnes avec le fichier
2022-05-11 20:31:30 +02:00
try {
//création de l'objet pour lire le fichier donner
ObjectInputStream ois = new ObjectInputStream ( file ) ;
this . ligne = ois . readInt ( ) ;
this . collonne = ois . readInt ( ) ;
//on crée le tableau de Case avec les bonnes dimention
this . tableau = new Case [ this . ligne ] [ this . collonne ] ;
//on parcoure celui-ci et remettons les Case avec la sauvegarde
for ( int i = 0 ; i < ligne ; i + + ) {
for ( int t = 0 ; t < collonne ; t + + ) {
this . tableau [ i ] [ t ] = ( Case ) ois . readObject ( ) ;
}
2022-05-19 11:23:05 +02:00
}
//nous initialison maintenant le nombre de bombe
this . bombe = ois . readInt ( ) ;
//puis le score
score = ois . readInt ( ) ;
try {
ois . close ( ) ;
//nous pouvons maintenant lancer la partie sauvegarder
2022-05-19 11:32:24 +02:00
this . launchGame ( score ) ;
2022-05-19 11:23:05 +02:00
} catch ( IOException e ) {
JOptionPane . showMessageDialog ( this . fenetre , " fichier de sauvegarde corompu " ) ;
this . menuChoixTypePartie ( ) ;
}
} catch ( IOException e2 ) {
JOptionPane . showMessageDialog ( this . fenetre , " fichier de sauvegarde corompu " ) ;
this . menuChoixTypePartie ( ) ;
2022-05-05 22:45:26 +02:00
}
} catch ( ClassNotFoundException e3 ) {
2022-05-19 11:23:05 +02:00
JOptionPane . showMessageDialog ( this . fenetre , " fichier de sauvegarde corompu " ) ;
this . menuChoixTypePartie ( ) ;
} catch ( Exception e ) {
JOptionPane . showMessageDialog ( this . fenetre , " fichier de sauvegarde imcomplet " ) ;
this . menuChoixTypePartie ( ) ;
2022-05-05 22:45:26 +02:00
}
}
2022-05-06 16:16:25 +02:00
//----------------------------------------> Fonction pour Lancer une partie <--------------------------------------
2022-05-05 22:45:26 +02:00
private void launchGame ( int score ) {
2022-05-06 16:16:25 +02:00
//on ferme l'ancienne fenetre
2022-05-05 22:45:26 +02:00
this . fenetre . dispose ( ) ;
2022-05-06 16:16:25 +02:00
//on en crée une nouvelles
2022-05-05 22:45:26 +02:00
this . fenetre = new JFrame ( " démineur " ) ;
2022-05-06 16:16:25 +02:00
// l'application se fermera que si on ferme la fenetre
this . fenetre . setDefaultCloseOperation ( JFrame . EXIT_ON_CLOSE ) ;
//on l'affiche
this . fenetre . setVisible ( true ) ;
//on ajoute son observateur (pour savegarder la partie si on ferme la fenetre)
this . fenetre . addWindowListener ( new observateurFenetre ( this ) ) ;
2022-05-09 16:19:50 +02:00
this . fenetre . setBackground ( new Color ( 0 , 0 , 0 ) ) ;
JPanel panJeu = new JPanel ( ) ;
JPanel panMenu = new JPanel ( ) ;
panJeu . setBackground ( new Color ( 0 , 0 , 0 ) ) ;
panMenu . setBackground ( new Color ( 0 , 0 , 0 ) ) ;
2022-05-06 16:16:25 +02:00
//on met un gestionaires de mise en page grille avec le nombre de ligne+1 (pour le menu en haut) et le nombre de collonne
2022-05-09 16:19:50 +02:00
panJeu . setLayout ( new GridLayout ( this . ligne , this . collonne ) ) ;
2022-05-11 20:31:30 +02:00
panMenu . setLayout ( new GridLayout ( 1 , 15 ) ) ;
2022-05-06 16:16:25 +02:00
//on met en place le menu du haut et donc toute la première ligne
2022-05-11 20:31:30 +02:00
for ( int i = 0 ; i < 15 ; i + + ) {
2022-05-05 22:45:26 +02:00
paintMenuJeu menu = new paintMenuJeu ( 0 , score , bombe ) ;
2022-05-06 16:16:25 +02:00
//nous mettons des dimensions convenable pour des Case
2022-05-09 16:19:50 +02:00
menu . setPreferredSize ( new Dimension ( 50 , 50 ) ) ;
2022-05-06 16:16:25 +02:00
//les 3 premières case serons consacrés au score
2022-05-05 22:45:26 +02:00
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 ) ;
}
2022-05-06 16:16:25 +02:00
//et la derniere au logo
2022-05-11 20:31:30 +02:00
if ( i = = 14 ) {
2022-05-05 22:45:26 +02:00
menu . setChoix ( 4 ) ;
this . setLogo ( menu ) ;
observateurSAV observateur = new observateurSAV ( menu , this ) ;
menu . addMouseListener ( observateur ) ;
this . setObservateur ( observateur ) ;
}
2022-05-06 16:16:25 +02:00
//sinon le composant sera juste sobre
2022-05-09 16:19:50 +02:00
panMenu . add ( menu ) ;
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//on ajoute ensuite toutes les Case a la fenetre
2022-05-05 22:45:26 +02:00
for ( int i = 0 ; i < ligne ; i + + ) {
for ( int t = 0 ; t < collonne ; t + + ) {
2022-05-09 16:19:50 +02:00
panJeu . add ( this . tableau [ i ] [ t ] ) ;
2022-05-05 22:45:26 +02:00
this . tableau [ i ] [ t ] . addMouseListener ( new observateurCase ( i , t , this . tableau , this ) ) ;
}
}
2022-05-09 16:19:50 +02:00
this . fenetre . add ( panMenu , BorderLayout . NORTH ) ;
this . fenetre . add ( panJeu , BorderLayout . CENTER ) ;
2022-05-06 16:16:25 +02:00
//on ajuste la taille de la fenetre a son contenu
2022-05-05 22:45:26 +02:00
this . fenetre . pack ( ) ;
}
2022-05-06 16:16:25 +02:00
//---------------------> Fonction d'affichage du menu pour le Choix des Ligne, Collonne et Bombe <-----------------------------
2022-05-05 22:45:26 +02:00
public void menuChoixLCB ( ) {
2022-05-06 16:16:25 +02:00
//nous fermons l'ancienne fenetre
2022-05-05 22:45:26 +02:00
this . fenetre . dispose ( ) ;
2022-05-06 16:16:25 +02:00
//créons une nouvelle
2022-05-05 22:45:26 +02:00
this . fenetre = new JFrame ( " démineur " ) ;
this . fenetre . setLocation ( 0 , 0 ) ;
2022-05-09 16:19:50 +02:00
this . fenetre . setSize ( 1600 , 1000 ) ;
2022-05-05 22:45:26 +02:00
this . fenetre . setVisible ( true ) ;
this . fenetre . setDefaultCloseOperation ( JFrame . EXIT_ON_CLOSE ) ;
2022-05-06 16:16:25 +02:00
//nous utiliserons un gestionnaires avec 27 ligne(de 4 a 30 ligne/collonne) et 3 collonne
fenetre . setLayout ( new GridLayout ( 27 , 3 ) ) ;
//initialisation des objet utiliser par des observateur plus tard
2022-05-05 22:45:26 +02:00
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: ??? " ) ;
2022-05-06 16:16:25 +02:00
//aligment Central plus estetique
2022-05-05 22:45:26 +02:00
texte1 . setHorizontalAlignment ( JLabel . CENTER ) ;
texte2 . setHorizontalAlignment ( JLabel . CENTER ) ;
2022-05-09 16:19:50 +02:00
JTextField nbombe = new JTextField ( " ???? " ) ;
2022-05-06 16:16:25 +02:00
//nous ajoutons les Case
2022-05-05 22:45:26 +02:00
for ( int i = 0 ; i < 27 ; i + + ) {
2022-05-06 16:16:25 +02:00
//creons les composant
2022-05-05 22:45:26 +02:00
paintChoix pinceau = new paintChoix ( i , 1 ) ;
paintChoix pinceau2 = new paintChoix ( i , 2 ) ;
if ( i = = 0 ) {
2022-05-06 16:16:25 +02:00
//si c'est la première Case alors ça sera la première pour sa ligne
2022-05-05 22:45:26 +02:00
premier = pinceau ;
premier2 = pinceau2 ;
}
2022-05-06 16:16:25 +02:00
//nous leurs ajoutons un observateur
2022-05-05 22:45:26 +02:00
pinceau . addMouseListener ( new observateurChoix ( pinceau , premier , texte1 , this ) ) ;
pinceau2 . addMouseListener ( new observateurChoix ( pinceau2 , premier2 , texte2 , this ) ) ;
2022-05-06 16:16:25 +02:00
//positionons la retenue sur le nouveau pinceau
2022-05-05 22:45:26 +02:00
retenue . setPaintChoix ( pinceau ) ;
retenue = pinceau ;
retenue2 . setPaintChoix ( pinceau2 ) ;
retenue2 = pinceau2 ;
2022-05-06 16:16:25 +02:00
//nous ajoutons la première case sur la collonne 1
2022-05-05 22:45:26 +02:00
this . fenetre . add ( pinceau ) ;
2022-05-06 16:16:25 +02:00
//la dexième collonne dependra de sa hauteur dans la ligne
2022-05-05 22:45:26 +02:00
if ( i = = 10 ) {
2022-05-06 16:16:25 +02:00
//texte sur les lignes
2022-05-05 22:45:26 +02:00
this . fenetre . add ( texte1 ) ;
}
if ( i = = 12 ) {
2022-05-06 16:16:25 +02:00
//texte sur les collonnes
2022-05-05 22:45:26 +02:00
this . fenetre . add ( texte2 ) ;
} if ( i = = 26 ) {
2022-05-06 16:16:25 +02:00
//si c'est la dernière ligne, boutons valider
2022-05-05 22:45:26 +02:00
JButton valider = new JButton ( " valider " ) ;
2022-05-19 11:23:05 +02:00
valider . addActionListener ( new observateurButtonEtText ( this , 2 , nbombe , this . fenetre ) ) ;
2022-05-05 22:45:26 +02:00
this . fenetre . add ( valider ) ;
} if ( i = = 17 ) {
2022-05-06 16:16:25 +02:00
//boutons plus
2022-05-05 22:45:26 +02:00
JButton plus = new JButton ( " + " ) ;
plus . addActionListener ( new plusoumoins ( nbombe , 1 , this ) ) ;
this . fenetre . add ( plus ) ;
} if ( i = = 18 ) {
2022-05-06 16:16:25 +02:00
//texteArea qui représente le nombre de bombe
2022-05-05 22:45:26 +02:00
nbombe . setHorizontalAlignment ( JLabel . CENTER ) ;
2022-05-19 11:23:05 +02:00
nbombe . addActionListener ( new observateurButtonEtText ( this , 1 , nbombe , this . fenetre ) ) ;
2022-05-05 22:45:26 +02:00
this . fenetre . add ( nbombe ) ;
} if ( i = = 19 ) {
2022-05-06 16:16:25 +02:00
//boutons moins
2022-05-05 22:45:26 +02:00
JButton moins = new JButton ( " - " ) ;
moins . addActionListener ( new plusoumoins ( nbombe , - 1 , this ) ) ;
this . fenetre . add ( moins ) ;
} if ( i = = 16 ) {
2022-05-06 16:16:25 +02:00
//juste le texte
2022-05-05 22:45:26 +02:00
JLabel texte3 = new JLabel ( " Nombre de Bombe " ) ;
texte3 . setHorizontalAlignment ( JLabel . CENTER ) ;
this . fenetre . add ( texte3 ) ;
2022-05-06 16:16:25 +02:00
} if ( i ! = 10 & & i ! = 12 & & i ! = 26 & & i ! = 17 & & i ! = 18 & & i ! = 19 & & i ! = 16 ) {
//autrement nous ajoutons un composant inutile
this . fenetre . add ( new JLabel ( ) ) ;
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//enfin nous ajoutons sur la 3ième collonne le 2ième paintChoix
2022-05-05 22:45:26 +02:00
this . fenetre . add ( pinceau2 ) ;
}
}
2022-05-06 16:16:25 +02:00
//-----------------------------------------> Fonction pour l'affichage du premier menu (nouvelle partie/reprendrePartie/quitter) <---------------------
2022-05-05 22:45:26 +02:00
public void menuChoixTypePartie ( ) {
2022-05-06 16:16:25 +02:00
//nous créons une nouvelles fenetre
2022-05-05 22:45:26 +02:00
this . fenetre . dispose ( ) ;
this . fenetre = new JFrame ( " démineur " ) ;
this . fenetre . setLocation ( 0 , 0 ) ;
2022-05-09 16:19:50 +02:00
this . fenetre . setSize ( 1600 , 1000 ) ;
2022-05-05 22:45:26 +02:00
this . fenetre . setDefaultCloseOperation ( JFrame . EXIT_ON_CLOSE ) ;
2022-05-06 16:16:25 +02:00
this . fenetre . setLayout ( new FlowLayout ( ) ) ;
JPanel pan1 = new JPanel ( ) ;
JPanel pan2 = new JPanel ( ) ;
JPanel pan3 = new JPanel ( ) ;
2022-05-05 22:45:26 +02:00
JButton nouveau = new JButton ( " nouvelle partie " ) ;
JButton reprende = new JButton ( " reprendrePartie " ) ;
JButton quitter = new JButton ( " quitter " ) ;
2022-05-19 11:23:05 +02:00
nouveau . addActionListener ( new observateurButtonEtText ( this , 3 , null , this . fenetre ) ) ;
reprende . addActionListener ( new observateurButtonEtText ( this , 4 , null , this . fenetre ) ) ;
quitter . addActionListener ( new observateurButtonEtText ( this , 5 , null , this . fenetre ) ) ;
2022-05-06 16:16:25 +02:00
pan1 . add ( nouveau ) ;
pan2 . add ( reprende ) ;
pan3 . add ( quitter ) ;
this . fenetre . add ( pan1 ) ;
this . fenetre . add ( pan2 ) ;
this . fenetre . add ( pan3 ) ;
2022-05-19 12:33:51 +02:00
this . fenetre . setVisible ( true ) ;
2022-05-05 22:45:26 +02:00
}
2022-05-09 09:28:48 +02:00
}