/**
* Cette classe représente le champ de mines et définit la
* structure de données qui mémorise les Case du champ de mines.
* Toutes les cases sont numérotées de [0 ; lignes*colonnes[
*
* @version 1.0.1
*
* Creation @date: 22−Nov−2016 15:48
* Last file update: 5−Jan−2017 15:59
*/
package demineur;
import java.util.*;
import javax.swing.*;
public class ChampDeMines implements Iterable<Case> {
private final Random r = new Random();
private int lignes, colonnes, nbMines;
private int nbMinesTrouvées = 0;
private int nbDrapeaux = 0;
private Case lesCases[][];
/**
* Constructeur : intialise le ChampDeMines this à la dimension
* lxc avec n mines
*/
public ChampDeMines(int l, int c, int n) {
this.lesCases = new Case[l][c];
this.lignes = l;
this.colonnes = c;
this.nbMines=n;
this.initChampDeMines(l*c);
}
public void decrNbDrapeaux() { this.nbDrapeaux−−; }
public void incrNbDrapeaux() { this.nbDrapeaux++; }
public int getNbDrapeaux() { return this.nbDrapeaux; }
public void incrNbMinesTrouvées() { this.nbMinesTrouvées++; }
public void decrNbMinesTrouvées() { this.nbMinesTrouvées−−; }
public int getNbMinesTrouvées() { return this.nbMinesTrouvées; }
/**
* Rôle : initialise le tableau lesCases avec des cases Vide et
* nbMines cases Mine
*/
private void initChampDeMines(int nbCases) {
Vector<Case> v = new Vector<Case>();
// placer les cases Vide
for (int i=nbCases; i>this.nbMines; i−−) v.add(new Vide(this));
// placer les mines au hasard dans le champ
for (int i=0; i<this.nbMines; i++)
v.add(this.r.nextInt(v.size()), new Mine(this));
// mettre les Case dans la matrice et les numéroter
for (int i=0, n=0; i<this.lignes; i++)
for (int j=0; j<this.colonnes; j++) {
this.lesCases[i][j] = v.elementAt(n);
this.lesCases[i][j].setNuméroCase(n++);
}
}
// offsets pour accéder au cases adjacentes
private final int[] adj_l = { 0, −1, −1, −1, 0, +1, +1, +1 };
private final int[] adj_c = {−1, −1, 0, +1, +1, +1, 0, −1 };
/**
* Rôle : renvoie un Vector de cases adjacentes à la Case numéro n
janv. 06, 17 16:38 Page 1/2ChampDeMines.java
Printed by Vincent Granet
4/10 vendredi janvier 06, 2017