java doc et reglage probleme win/lose
This commit is contained in:
+82
-50
@@ -1,70 +1,102 @@
|
||||
import java.util.Random;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Représente la grille complète du jeu de Démineur.
|
||||
* Gère le placement aléatoire des mines et le calcul des cases voisines.
|
||||
*/
|
||||
public class Grille implements Serializable {
|
||||
|
||||
private Case[][] grille;
|
||||
private int ligne,colonne;
|
||||
private int ligne, colonne;
|
||||
private Random generateur = new Random();
|
||||
private int nbMinesTotales;
|
||||
|
||||
public Grille(int ligne,int colonne) {
|
||||
this.ligne = ligne;
|
||||
/**
|
||||
* Construit une nouvelle grille vide avec les dimensions spécifiées.
|
||||
* @param ligne Le nombre de lignes de la grille.
|
||||
* @param colonne Le nombre de colonnes de la grille.
|
||||
*/
|
||||
public Grille(int ligne, int colonne) {
|
||||
this.ligne = ligne;
|
||||
this.colonne = colonne;
|
||||
this.grille = new Case[ligne][colonne];
|
||||
for(int i =0;i<ligne;i++){
|
||||
for(int j =0;j<colonne;j++){
|
||||
this.grille[i][j] = new Case();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void placerMines(int nbMines){
|
||||
int randomLigne,randomColonne;
|
||||
for(int i=0;i<nbMines;i++){
|
||||
randomLigne = generateur.nextInt(ligne);
|
||||
randomColonne = generateur.nextInt(colonne);
|
||||
if (grille[randomLigne][randomColonne].getEstMinee() == true){
|
||||
i--; } else {
|
||||
grille[randomLigne][randomColonne].setEstMinee(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void compterMinesVoisines(int l, int c){
|
||||
int compteur = 0;
|
||||
for(int i = -1; i <= 1; i++){
|
||||
for(int j = -1; j <= 1; j++){
|
||||
int vL = l + i;
|
||||
int vC = c + j;
|
||||
if(vL >= 0 && vL < ligne && vC >= 0 && vC < colonne){
|
||||
if (grille[vL][vC].getEstMinee()) {
|
||||
compteur++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
this.grille = new Case[ligne][colonne];
|
||||
for(int i = 0; i < ligne; i++) {
|
||||
for(int j = 0; j < colonne; j++) {
|
||||
this.grille[i][j] = new Case();
|
||||
}
|
||||
}
|
||||
grille[l][c].setNbMinesautour(compteur);
|
||||
}
|
||||
|
||||
public void calculerToutesLesMines(){
|
||||
for(int i =0;i<ligne;i++){
|
||||
for(int j =0;j<colonne;j++){
|
||||
compterMinesVoisines(i,j);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Place un nombre de mines aléatoirement dans la grille.
|
||||
* @param nbMines Le nombre total de mines à cacher.
|
||||
*/
|
||||
public void placerMines(int nbMines) {
|
||||
this.nbMinesTotales = nbMines;
|
||||
int randomLigne, randomColonne;
|
||||
for(int i = 0; i < nbMines; i++) {
|
||||
randomLigne = generateur.nextInt(ligne);
|
||||
randomColonne = generateur.nextInt(colonne);
|
||||
if (grille[randomLigne][randomColonne].getEstMinee() == true) {
|
||||
i--; // On recommence si la case a déjà une mine
|
||||
} else {
|
||||
grille[randomLigne][randomColonne].setEstMinee(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// interface graphique
|
||||
/**
|
||||
* @return Le nombre total de mines présentes dans la grille.
|
||||
*/
|
||||
public int getNbMinesTotales() {
|
||||
return nbMinesTotales;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compte le nombre de mines autour d'une case spécifique et met à jour cette case.
|
||||
* @param l L'index de la ligne de la case.
|
||||
* @param c L'index de la colonne de la case.
|
||||
*/
|
||||
public void compterMinesVoisines(int l, int c) {
|
||||
int compteur = 0;
|
||||
for(int i = -1; i <= 1; i++) {
|
||||
for(int j = -1; j <= 1; j++) {
|
||||
int vL = l + i;
|
||||
int vC = c + j;
|
||||
// Vérifie que l'on ne sort pas des limites du tableau
|
||||
if(vL >= 0 && vL < ligne && vC >= 0 && vC < colonne) {
|
||||
if (grille[vL][vC].getEstMinee()) {
|
||||
compteur++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
grille[l][c].setNbMinesautour(compteur);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parcourt toute la grille pour calculer les mines voisines de chaque case.
|
||||
*/
|
||||
public void calculerToutesLesMines() {
|
||||
for(int i = 0; i < ligne; i++) {
|
||||
for(int j = 0; j < colonne; j++) {
|
||||
compterMinesVoisines(i, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** @return Le nombre de lignes de la grille. */
|
||||
public int getLigne() { return ligne; }
|
||||
|
||||
/** @return Le nombre de colonnes de la grille. */
|
||||
public int getColonne() { return colonne; }
|
||||
|
||||
/**
|
||||
* Récupère l'objet Case à une position spécifique.
|
||||
* @param l L'index de la ligne.
|
||||
* @param c L'index de la colonne.
|
||||
* @return L'objet Case correspondant.
|
||||
*/
|
||||
public Case getCase(int l, int c) { return grille[l][c]; }
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user