Devo sviluppare il famoso gioco campo minato senza alcuna grafica.
L'eserzio che devo fare mi fa sviluppare man mano i metodi che mi servono per poter alla fine simulare una partita.
Ho crato una classe CampoMinato.java descritta di seguito:
codice:
public class CampoMinato {
private int[][] matr; // matrice che rappresenta il campo
private int righe; // numero delle righe
private int colonne; // numero delle colonne
private int mine; // numero delle mine
private int celleScoperte; // numero delle cellescoperte
private static final int NONSC = -1; // si puo' scegliere un qualunque valore k<0
private static final int MINA = -2;
private static char NONSC_CHAR = '-'; // carattere per rappresentare una cella non scoperta
private static char MINA_CHAR = '*'; // carattere per rappresentare una cella con mina
public CampoMinato(int r, int c){
matr = new int[r][c];
for(int i=0;i<matr.length;i++)
for(int j=0;j<matr.length;j++)
matr[i][j] = NONSC;
righe = r;
colonne = c;
}
public CampoMinato(int dim){
this(dim,dim);
}
public int getRighe(){
return righe;
}
public int getColonne(){
return colonne;
}
public int getMine(){
return mine;
}
public int getCelleScoperte(){
for(int i=0;i<righe;i++){
for(int j=0;j<colonne;j++){
if(matr[i][j] == NONSC_CHAR)
celleScoperte++;
}
}
return celleScoperte;
}
public int getCelleDaScoprire(){
int celleDaScoprire = (righe * colonne) - getCelleScoperte();
return celleDaScoprire;
}
public static void setMinaChar(char ch){
MINA_CHAR = ch;
}
public static void setNonscChar(char ch){
NONSC_CHAR = ch;
}
private void stampa(char cMina){
MINA_CHAR = cMina;
//prima riga
System.out.print(" ");
for (int i=0; i<colonne; i++) {
System.out.printf("%3d", i);
}
System.out.println();
//righe successive
for (int j=0; j<matr.length; j++) {
System.out.printf("%2d", j);
for (int g=0; g<matr[0].length; g++) {
if (matr[j][g] == MINA){
System.out.printf(" %2c", MINA_CHAR);
}
else {
System.out.printf(" %2c", NONSC_CHAR);
}
}
System.out.println();
}
}
public void stampaSenzaMine(){
stampa(NONSC_CHAR);
}
public void stampaTutto(){
stampa(MINA_CHAR);
}
public boolean inCampo(int r, int c){
if(r<=this.righe && c<=this.colonne)
return true;
return false;
}
public void mettiMina(int r, int c){
if((r<=this.righe && c<=this.colonne) && (MINA_CHAR == '*')){
matr[r][c] = MINA;
mine++;
}
}
public boolean contieneMina(int r, int c){
if((r<=this.righe && c<=this.colonne) && (matr[r][c] == MINA))
return true;
return false;
}
}
il problema che ho riscontrato fin ora è che non riesco ad implementare il metodo getCelleScoperte() perchè mi restituisce sempre 0. Ed ovviamente anche il metodo che segue mi restituisce un numero sbagliato.
Dove sbaglio?
Questa è la stampa del campo anche se nn si vede bene cmq è allineata
codice:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 * - - - - - - * - * - - - - -
1 - - - * * - - * - * - - - - *
2 - - - - - * - - - * - * - - -
3 - - - - - * - - - - - - - - -
4 * * * - - - - * - * - - - * -
5 * - * - - - - * - - - - * - -
6 * * * - - - * * * * - - - - -
7 - - - - - - - - - - - - - - *
8 - * - * - * - - - * - - - - -
9 * - - - - - - - - - - * - - -
10 - - * - * - - * - - - - - - *
11 - - - - - - - - - * - - - - -