Quote:
Originariamente inviato da malocchio
Prima di tutto: la variabile globale component dovrebbe essere locale: ogni metodo usa la propria variabile, è una questione di sicurezza e soprattutto ti aiuta a scrivere codice corretto.
Domanda: cosa fanno le classi MineComponent e NumberComponent????
Ora mi verrebbe da consigliarti di fare così: crea un array globale di icone nella classe MyGameSystem
Codice:
Icon[] icone = new Icon[10]; //dichiarazione
//nel costruttore
icone[0] = null;
for (int i = 1; i <= 9; i++) {
icone[i] = new Icon("Icone/j"+ i +".gif");
}
Utilizza questi oggetti icona per costruire gli oggetti *Component e modifica il costruttore di questi in modo che accetti come parametro direttamente l'icona piuttosto che il suo percorso.
Codice:
public void CreateMines(int r, int c) {
if (game[r][c].getDisabledIcon() == null) {
component = new MineComponent(icone[9])
game[r][c].setDisabledIcon(icone[9]);
} else {
index--;
}
}
Codice:
public int CountMines(int r, int c) {
int n_mines = 0;
for (int i = r-1; i <= r+1; i++) {
for (int j = c-1; j <= c+1; j++) {
if (((i >= 0) && (j >= 0)) && ((i < rows) && (j < cols))) {
if (game[i][j].getDisabledIcon() == icone[9]) //c'è una mina!
n_mines++;
}
}
}
return n_mines;
}
Quindi icone[9] vuol dire mina, icone[1-8] vuol dire numero, icone[0] è semplicemente null
Non è di certo il massimo, ma almeno vedi se così funziona
|
Ti ringrazio per l'aiuto, in effetti è brutta come soluzione, ma ne ho trovata un altra da solo che credo sia meglio di questa, ho creato una matrice di booleani di dimensioni uguali a quelle della griglia di gioco e li ho settati tutti false, poi man mano che aggiungo le mine li metto a true e poi in CountMines() controllo se c'è la mina o no attraverso questa nuova matrice di booleani.
Visto che ho postato il codice ne approfitto per fare qualche domanda legata all'information hiding, oltre all'oggetto component da mettere locale, secondo te è anche meglio mettere tutti i metodi della classe MyGameSystem
private anzichè
public al di fuori del costruttore e del metodo CreateGame()?
Inoltre le variabili intere row e col e gli oggetti Random newrow e newcol li uso solo nel metodo CreateGame(), è meglio metterle anche quelle locali?