Campo minato in C
Buonasera a tutti. Vorrei realizzare il gioco del campo minato in C; sono ad un buon punto, ma devo ancora sistemare delle cose. In particolare il mio codice possiede (attualmente) le seguente struttura:
- Dichiara un array bidimensionale, e lo riempie di spazi vuoti;
- stampa a video la struttura del campo di gioco (matrice 8x8);
- randomizza la posizione delle mine;
- attraverso un serie di cicli conta quante mine ci sono intorno ad ogni casella vuota e riempie tale casella con il numero delle bombe adiacenti; se intorno non ci sono bombe si limita a lasciare invariato il contenuto della stessa. Nell'array ci saranno quindi infine celle con le mine, celle con numeri e celle vuote (spazi);
- invita l'utente ad inserire le coordinate della casella che vuole scoprire; se sotto la casella c'è un numero, lo rivela, se c'è una mina, termina e stampa una schermata con tutte le mine, altrimenti non fa nulla.
Il problema è quell' "altrimenti" qui sopra. Vorrei riuscire a scoprire tutte le caselle vuote intorno alla vuota scelta (come nel prato fiorito di Windows), ma finora nessuna idea mi è venuta. Confido nella vostra esperienza.
Grazie in anticipo.
- Dichiara un array bidimensionale, e lo riempie di spazi vuoti;
- stampa a video la struttura del campo di gioco (matrice 8x8);
- randomizza la posizione delle mine;
- attraverso un serie di cicli conta quante mine ci sono intorno ad ogni casella vuota e riempie tale casella con il numero delle bombe adiacenti; se intorno non ci sono bombe si limita a lasciare invariato il contenuto della stessa. Nell'array ci saranno quindi infine celle con le mine, celle con numeri e celle vuote (spazi);
- invita l'utente ad inserire le coordinate della casella che vuole scoprire; se sotto la casella c'è un numero, lo rivela, se c'è una mina, termina e stampa una schermata con tutte le mine, altrimenti non fa nulla.
Il problema è quell' "altrimenti" qui sopra. Vorrei riuscire a scoprire tutte le caselle vuote intorno alla vuota scelta (come nel prato fiorito di Windows), ma finora nessuna idea mi è venuta. Confido nella vostra esperienza.
Grazie in anticipo.
Risposte
Si fa normalmente con una funzione ricorsiva* che scopre la casella corrente e poi richiama il metodo su ogni casella adiacente se la casella corrente è vuota.
* Alternativamente si può anche riscrivere il medesimo algoritmo in modo iterativo, ma è più complicato e credo che sia più semplice rimanere legati alla versione ricorsiva per iniziare.
* Alternativamente si può anche riscrivere il medesimo algoritmo in modo iterativo, ma è più complicato e credo che sia più semplice rimanere legati alla versione ricorsiva per iniziare.
Grazie apatriarca, mi hai dato un'idea su cui lavorare.