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  -  -  -  -  -  -  -  -  -  *  -  -  -  -  -