View Single Post
Old 15-07-2009, 18:41   #5
Simone89RN
Member
 
Iscritto dal: May 2009
Messaggi: 40
Quote:
Originariamente inviato da malocchio Guarda i messaggi
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?

Ultima modifica di Simone89RN : 15-07-2009 alle 18:49.
Simone89RN è offline   Rispondi citando il messaggio o parte di esso