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();