diff --git a/Banniere.java b/Banniere.java index 504f464..baf6766 100644 --- a/Banniere.java +++ b/Banniere.java @@ -1,12 +1,37 @@ import javax.swing.*; import java.awt.*; - +/** + * La classe Banniere affiche l'état de la partie, + * gère la sauvegarde la victoire et la défaite + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class Banniere extends JPanel { + /** + * fenetre de Jeu + */ private FrameJeu fenetre; + /** + * fenetre du menu lié + */ private FrameMenu menu; + /** + * Bouton qui permet de sauver et quitter + */ private JButton save; + /** + * le JLabel qui affiche le nombre de mines restantes + */ private JLabel mines; - // Définition du constructeur + + /** + * Constructeur qui sert à la création de la bannière et l'ajout du bouton sauver et quitter + * @param mines le nombre de mines dans la partie + * @param fenetre la fenêtre de jeu + * @param menu la fenêtre de menu rattachée + * @param grille la grille de jeu + */ public Banniere(int mines, FrameJeu fenetre, FrameMenu menu, Grille grille) { super(); this.fenetre=fenetre; @@ -18,7 +43,6 @@ public class Banniere extends JPanel { this.setLayout(new BorderLayout()); // Compteur de mines restantes - this.mines= new JLabel(); this.add(this.mines, BorderLayout.NORTH); @@ -28,13 +52,18 @@ public class Banniere extends JPanel { this.add(this.save, BorderLayout.EAST); } - // Méthode pour afficher le nombre de mines restantes + /** + * Méthode pour afficher le nombre de mines restantes + * @param minesLeft le nombre de mines restantes + */ public void setMinesLeft(int minesLeft) { this.mines.setText("Mines restantes : "+Integer.toString(minesLeft)); this.repaint(); } - // Méthode pour indiquer au joueur sa Victoire + /** + * Méthode pour indiquer au joueur sa Victoire + */ public void setVictoire() { remove(this.save); JLabel victoire = new JLabel("Victoire ! Retour au menu..."); @@ -46,7 +75,9 @@ public class Banniere extends JPanel { timerMenu.start(); } - // Méthode pour indiquer au joueur sa Défaite + /** + * Méthode pour indiquer au joueur sa Défaite + */ public void setDefaite() { remove(this.save); JLabel defaite = new JLabel("Défaite ! Retour au menu..."); diff --git a/Case.java b/Case.java index 16ebdbc..7cd18d7 100644 --- a/Case.java +++ b/Case.java @@ -29,7 +29,6 @@ public class Case extends JPanel { // Méthode qui permet de montrer la case, et fait perdre si elle est minée public void setVisible(){ - // On vérfie que la case n'est pas déjà visible if (!this.visible){ this.visible = true; diff --git a/Chargement.java b/Chargement.java index 7ec1087..fb036db 100644 --- a/Chargement.java +++ b/Chargement.java @@ -1,10 +1,29 @@ import java.awt.event.*; +/** + * La classe Chargement implémente l'interface ActionListener + * elle permet de lancer le chargement d'une partie sauvegardée + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class Chargement implements ActionListener { + /** + * Fenetre du menu. + */ private FrameMenu menu; + + /** + * Constructeur qui ne sert qu'à la création de la constante menu + * @param menu la fenêtre de menu + */ public Chargement(FrameMenu menu){ this.menu=menu; } + /** + * Méthode qui doit être rédigée + * @param e l'évenement sur le bouton + */ @Override public void actionPerformed(ActionEvent e) { this.menu.setVisible(false); diff --git a/FrameJeu.java b/FrameJeu.java index e3a5d24..63f79cf 100644 --- a/FrameJeu.java +++ b/FrameJeu.java @@ -1,10 +1,25 @@ import javax.swing.*; import java.awt.*; -// Cette classe à pour but d'afficher un menu et de réagir aux directives de l'utilisateur (lancer le jeu, le quitter...) +/** + * La classe FrameJeu génère une grille de jeu + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class FrameJeu extends JFrame{ + /** + * grille de jeu + */ private Grille grille; + /** + * Constructeur qui sert à géréner une nouvelle grille + * @param lignes le nombre de lignes + * @param colonnes le nombre de colonnes + * @param mines le nombre de mines + * @param menu la fenêtre du menu rattaché à la partie + */ public FrameJeu(int lignes, int colonnes, int mines, FrameMenu menu) { super(); // Création d'une grille pour une nouvelle partie @@ -13,13 +28,24 @@ public class FrameJeu extends JFrame{ } - // Génération d'une grille à partir de la sauvegarde + /** + * Constructeur qui sert à charger la grille d'une ancienne partie + * @param lignes le nombre de lignes + * @param colonnes le nombre de colonnes + * @param donnees la sauvegarde + * @param mines le nombre de mines + * @param menu la fenêtre du menu rattaché à la partie + */ public FrameJeu (int lignes, int colonnes, SaveManager.SaveData donnees, int mines, FrameMenu menu){ super(); + // Génération d'une grille à partir de la sauvegarde this.grille=new Grille(lignes,colonnes,donnees,mines,this, menu); MiseEnPage(); } + /** + * Méthode qui sert à créer la fenêtre avec ses élements + */ public void MiseEnPage(){ // On récupère les dimensions de l'écran pour adapter la taille par défaut de notre fenêtre diff --git a/FrameMenu.java b/FrameMenu.java index 90a03e7..2f2811d 100644 --- a/FrameMenu.java +++ b/FrameMenu.java @@ -2,20 +2,57 @@ import javax.swing.*; import java.awt.event.*; import java.io.File; import java.awt.*; - -// Cette classe à pour but d'afficher un menu et de réagir aux directives de l'utilisateur (lancer le jeu, le quitter...) +/** + * La classe FrameMenu correspond à une fenêtre de menu, + * elle l'affiche et régit aux directives de l'utilisateur (Jouer, Charger, Quitter) + * @version 1.1 + * @author Kayyissa Haïssous + */ public class FrameMenu extends JFrame{ + /** + * Nombre de lignes pour la partie à lancer + */ private int lignes; + /** + * Nombre de colonnes pour la partie à lancer + */ private int colonnes; + /** + * Nombre de mines pour la partie à lancer + */ private int mines; + /** + * JSlider qui permet de choisir le nombre de lignes + */ private JSlider sliderLignes; + /** + * JSlider qui permet de choisir le nombre de colonnes + */ private JSlider sliderColonnes; + /** + * JSlider qui permet de choisir le nombre de mines + */ private JSlider sliderMines; + /** + * JLabel qui permet d'afficher en temps réel le nombre de lignes + */ private JLabel showLines; + /** + * JLabel qui permet d'afficher en temps réel le nombre de colonnes + */ private JLabel showColumns; + /** + * JLabel qui permet d'afficher en temps réel le nombre de mines + */ private JLabel showMines; + /** + * JButton pour charger une éventuelle sauvegarde + */ private JButton charger; + /** + * Constructeur destiné à la création et l'affichage de la fenêtre de menu + */ public FrameMenu() { super(); @@ -37,7 +74,7 @@ public class FrameMenu extends JFrame{ titre.setBounds((frameSize.width/3), frameSize.height/15,frameSize.width/2,frameSize.height*2/15); this.add(titre); - // On créer les sliders et les JLabel qui afficheront leur valeur + // On créer les Jsliders et les JLabel qui afficheront leur valeur this.sliderLignes = new JSlider(4,30,20); this.sliderColonnes = new JSlider(4,30,25); this.sliderMines = new JSlider(1,900, 50); @@ -70,6 +107,7 @@ public class FrameMenu extends JFrame{ this.add(showColumns); this.add(showMines); + // On créer les boutons Jouer, quitter et si une save existe, charger JButton newGame = new JButton("Jouer"); newGame.addActionListener(new NewGameListener(this)); @@ -77,7 +115,7 @@ public class FrameMenu extends JFrame{ this.add(newGame); JButton exit = new JButton("Quitter"); - exit.addActionListener(new ActionListener(){ + exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } @@ -98,8 +136,12 @@ public class FrameMenu extends JFrame{ this.setVisible(true); } - // Méthode pour récupérer les valeurs des paramètres et les afficher à l'écran - public void setSettings(int settingToSet, int settingValue){ + /** + * Méthode pour récupérer les valeurs des paramètres et les afficher à l'écran + * @param settingToSet Le paramètre qui doit être changé + * @param settingValue La nouvelle valeur à donner au paramètre + */ + public void setSettings(int settingToSet, int settingValue) { if (settingToSet==0){ this.lignes=settingValue; showLines.setText("Lignes : "+settingValue); @@ -113,8 +155,11 @@ public class FrameMenu extends JFrame{ this.sliderMines.setMaximum(this.colonnes*this.lignes); } - // Methode pour connaître les paramètres de la partie - public int[] getSettings(){ + /** + * Renvoie les valeurs des paramètres + * @return les paramètres pour une nouvelle partie + */ + public int[] getSettings() { int[] settings = new int[3]; settings[0]=this.lignes; settings[1]=this.colonnes; @@ -122,8 +167,10 @@ public class FrameMenu extends JFrame{ return settings; } - // Methode pour supprimer le bouton charger après un chargement - public void deleteCharger(){ + /** + * Méthode pour supprimer le bouton charger après avoir chargé une partie + */ + public void deleteCharger() { this.remove(this.charger); } } \ No newline at end of file diff --git a/Grille.java b/Grille.java index 3cf4a44..da9350f 100644 --- a/Grille.java +++ b/Grille.java @@ -15,8 +15,6 @@ public class Grille extends JPanel{ private boolean enJeu; private FrameJeu fenetre; - // TODO : Recréer un tableau avec les cases minees - // Définition du constructeur qui correspond à une nouvelle grille de jeu public Grille(int lignes, int colonnes, int mines, FrameJeu fenetre, FrameMenu menu){ super(); @@ -85,7 +83,6 @@ public class Grille extends JPanel{ this.lignes=lignes; this.taille=lignes*colonnes; this.minesLeft=mines; - this.mines=mines; this.enJeu=true; this.fenetre=fenetre; @@ -102,33 +99,38 @@ public class Grille extends JPanel{ // On initialise un plateau de cases GenererPlateau(caseSize); - - // On prépare un tableau pour y placer les cases minées + // On créer un tableau pour y placer les cases minées int[] caseMine = new int[mines]; - - - // On lit maintenant les données pour fixer certains de leurs attributs int j=0; + // On lit maintenant les données pour fixer certains attributs et savoir où sont les mines for (int i=0;i<=taille-1;i++){ System.out.println(donnees.cases.substring(i,i+1)); if (Integer.parseInt(donnees.cases.substring(i,i+1))==1){ plateau[i].setMine(); caseMine[j]=i; + System.out.println(caseMine[j]); j++; } else if (Integer.parseInt(donnees.cases.substring(i,i+1))==2){ plateau[i].setReperee(true); } else if (Integer.parseInt(donnees.cases.substring(i,i+1))==3){ plateau[i].setMine(); + caseMine[j]=i; + System.out.println(caseMine[j]); + j++; plateau[i].setReperee(true); - } else if (Integer.parseInt(donnees.cases.substring(i,i+1))==4){ - plateau[i].setVisible(); } } - - - + // On détermine l'entourage de chaque case SetEntourage(caseMine); + + + // On affiche les cases qui doivent être visibles + for (int n=0;n<=taille-1;n++){ + if (Integer.parseInt(donnees.cases.substring(n,n+1))==4){ + plateau[n].setVisible(); + } + } // On affiche la grille AfficherPlateau(); @@ -138,18 +140,6 @@ public class Grille extends JPanel{ - - - - - - - - - - - - // Méthode pour Génerer le plateau protected void GenererPlateau(Dimension caseSize){ this.plateau= new Case[this.taille]; @@ -236,6 +226,7 @@ public class Grille extends JPanel{ } } plateau[i].setEntourage(entourage); + System.out.println(entourage); } } diff --git a/Main.java b/Main.java index bb5c9f6..00c3c83 100644 --- a/Main.java +++ b/Main.java @@ -1,4 +1,12 @@ +/** + * La classe Main est le main qui débute le programme du démineur + * @version 1.1 + * @author Kayyissa Haïssous + */ public class Main{ + /** + * main ouvrant la fenêtre de menu + */ public static void main(String[] args) { new FrameMenu(); } diff --git a/Makefile b/Makefile index a826f80..b7c8c1c 100644 --- a/Makefile +++ b/Makefile @@ -11,40 +11,49 @@ JVMFLAGS = Main.class : Main.java FrameMenu.class ${JC} ${JCFLAGS} Main.java -FrameMenu.class : FrameMenu.java SettingsListener.class NewGameListener.class +FrameMenu.class : FrameMenu.java SettingsListener.class NewGameListener.class Chargement.class ${JC} ${JCFLAGS} FrameMenu.java SettingsListener.class : SettingsListener.java ${JC} ${JCFLAGS} SettingsListener.java -NewGameListener.class : NewGameListener.java FrameJeu.class +NewGameListener.class : NewGameListener.java FrameJeu.class ${JC} ${JCFLAGS} NewGameListener.java +Chargement.class : Chargement.java FrameJeu.class + ${JC} ${JCFLAGS} Chargement.java + FrameJeu.class : FrameJeu.java Grille.class ${JC} ${JCFLAGS} FrameJeu.java -Grille.class : Grille.java Banniere.class Case.class +.Grille.class : Grille.java Banniere.class Case.class ${JC} ${JCFLAGS} Grille.java -Banniere.class : Banniere.java MenuListener.class +Banniere.class : Banniere.java MenuListener.class SaveListener.class ${JC} ${JCFLAGS} Banniere.java -Case.class : Case.java ListenerCase.class Entourage.class +.Case.class : Case.java ListenerCase.class Entourage.class ${JC} ${JCFLAGS} Case.java MenuListener.class : MenuListener.java ${JC} ${JCFLAGS} MenuListener.java -ListenerCase.class : ListenerCase.java Etoile.class Doute.class +SaveListener.class : SaveListener.java SaveManager.class + ${JC} ${JCFLAGS} SaveListener.java + +SaveManager.class : SaveManager.java + ${JC} ${JCFLAGS} SaveManager.java + +.ListenerCase.class : ListenerCase.java Etoile.class Doute.class ${JC} ${JCFLAGS} ListenerCase.java -Entourage.class : Entourage.java +.Entourage.class : Entourage.java ${JC} ${JCFLAGS} Entourage.java -Etoile.class : Etoile.java +.Etoile.class : Etoile.java ${JC} ${JCFLAGS} Etoile.java -Doute.class : Doute.java +.Doute.class : Doute.java ${JC} ${JCFLAGS} Doute.java diff --git a/MenuListener.java b/MenuListener.java index 96b9a84..140e1b4 100644 --- a/MenuListener.java +++ b/MenuListener.java @@ -1,12 +1,35 @@ import java.awt.event.*; +/** + * La classe MenuListener implémente l'interface ActionListener + * ferme le jeu et réouvre la fenêtre de menu + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class MenuListener implements ActionListener{ + /** + * fenetre de Jeu + */ private FrameJeu fenetre; + /** + * fenetre de Menu + */ private FrameMenu menu; + + /** + * Constructeur qui ne sert qu'à la création de constantes + * @param fenetre la fenêtre de jeu + * @param menu la fenêtre de menu + */ public MenuListener(FrameJeu fenetre, FrameMenu menu){ this.fenetre=fenetre; this.menu=menu; } + /** + * Méthode qui doit être rédigée + * @param event l'évenement + */ @Override public void actionPerformed(ActionEvent event){ this.menu.setVisible(true); diff --git a/NewGameListener.java b/NewGameListener.java index 9c42fb1..674c5f5 100644 --- a/NewGameListener.java +++ b/NewGameListener.java @@ -1,10 +1,29 @@ import java.awt.event.*; +/** + * La classe NewGameListener implémente l'interface ActionListener + * et permet de lancer une nouvelle partie. + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class NewGameListener implements ActionListener{ + /** + * Fenetre du menu. + */ private FrameMenu menu; + + /** + * Constructeur qui ne sert qu'à la création de la constante menu + * @param menu la fenêtre de menu + */ public NewGameListener(FrameMenu menu){ this.menu=menu; } + /** + * Méthode qui doit être rédigée + * @param event l'évenement sur le bouton + */ @Override public void actionPerformed(ActionEvent event){ int[] settings =this.menu.getSettings(); diff --git a/Save.txt b/Save.txt index f4cf525..824c36d 100644 --- a/Save.txt +++ b/Save.txt @@ -1,2 +1,2 @@ -25x20x50 -44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 \ No newline at end of file +11x8x0 +4444444444444444444444444444444304444444310044444444000444444441004444444410044444444000 \ No newline at end of file diff --git a/SaveListener.java b/SaveListener.java index 2117de5..e5385da 100644 --- a/SaveListener.java +++ b/SaveListener.java @@ -1,12 +1,35 @@ import java.awt.event.*; +/** + * La classe MenuListener implémente l'interface ActionListener + * ferme le jeu et sauvegarde la partie en cours dans le fichier Save.txt + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class SaveListener implements ActionListener { + /** + * Grille de Jeu + */ private Grille grille; + /** + * fenetre de Jeu + */ private FrameJeu fenetre; + + /** + * Constructeur qui ne sert qu'à la création de constantes + * @param grille la grille de Jeu + * @param fenetre la fenêtre de jeu + */ public SaveListener(Grille grille, FrameJeu fenetre){ this.grille=grille; this.fenetre=fenetre; } + /** + * Méthode qui doit être rédigée + * @param event l'évenement sur le Bouton + */ @Override public void actionPerformed(ActionEvent event){ SaveManager saveManager = new SaveManager(); diff --git a/SaveManager.java b/SaveManager.java index 1e31e3b..f66beb9 100644 --- a/SaveManager.java +++ b/SaveManager.java @@ -1,8 +1,19 @@ import java.awt.Dimension; import java.io.*; +/** + * La classe SaveManager sert à sauvegarder la partie en cours + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class SaveManager { - + + /** + * Méthode pour récupérer les infos et les écrires dans le fichier voulu + * @param grille la grille de jeu + * @param nomFichier le nom du fichier de sauvegarde + */ public void save(Grille grille, String nomFichier) { Dimension taille = grille.getDimensionGrille(); @@ -23,6 +34,10 @@ public class SaveManager { } } + /** + * Méthode qui charge les infos de sauvegarde + * @param nomFicher le nom du fichier de save + */ public SaveData load(String nomFichier) { String toReturn=""; String ligne; @@ -61,6 +76,9 @@ public class SaveManager { return toRet; } + /** + * La classe SaveDate correspond aux données de sauvegarde d'une partie + */ public class SaveData{ public Dimension taille; public String cases; diff --git a/SettingsListener.java b/SettingsListener.java index 88b1d88..7a07a34 100644 --- a/SettingsListener.java +++ b/SettingsListener.java @@ -2,6 +2,13 @@ import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +/** + * La classe SettingsListener implémente l'interface ChangeListener + * et permet de connaître la valeur des paramètres + * + * @version 1.1 + * @author Kayyissa Haïssous + */ public class SettingsListener implements ChangeListener{ private int settingToSet; private int settingValue; @@ -11,6 +18,10 @@ public class SettingsListener implements ChangeListener{ this.menu=menu; } + /** + * Méthode qui doit être rédigée + * @param evenement l'évenement sur le JSlider + */ @Override public void stateChanged(ChangeEvent evenement) { JSlider slider = (JSlider) evenement.getSource();