Si consideri un videogame dal nome “Godzilla Frenzy”. In tale gioco, il mondo è una griglia MxN e in ogni cella l'utente può costruire delle case o delle strade.
Mentre l'utente costruisce la sua città, Godzilla può arrivare improvvisamente e distruggere ciò che è stato costruito. Tuttavia, Godzilla si può muovere solo in orizzontale e in verticale e ha una paura tremenda delle strade e non vuole assolutamente attraversarle. Pertanto, Godzilla atterra su una casella scelta a caso e si può muovere solo sulle case, quando trova una strada (o il bordo della griglia) è costretto ad indietreggiare. Implementare una funzione ricorsiva che permette di calcolare, a partire da una casella di partenza (quella in cui atterra Godzilla), su quali caselle il mostro si può muovere.
la funzione deve quindi sostituire con delle g le C "racchiuse" da una cornice di S.
io ho ragionato così: dopo aver riempito la matrice in modo casuale, crea una funzione cont_mosse void di questo tipo
il programma però si blocca prima ancora di entrare nella ricorsione.codice:void cont_mosse(char mappap[][M], int coox, int cooy) { if (mappap[coox][cooy] = 'C') { mappap[coox][cooy] = 'g'; cont_mosse(mappap, coox, (cooy-1)); cont_mosse(mappap, (coox-1), cooy); cont_mosse(mappap, (coox+1), cooy); cont_mosse(mappap, coox, (cooy+1)); } }
il codice completo è questo
non penso di aver sbagliato ragionamento, cioè se in quella casella c'è una C controlla quella sopra, poi quella sotto, poi quella a destra e a sinistra, e faccio la stessa cosa.codice:#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> #define N 10 #define M 15 void riempi_mappa(char mappap[][M]); void stampa_mappa(char mappap[][M]); void cont_mosse(char mappap[][M], int coox, int cooy); int main() { srand(time(0)); int i=0; char mappa[N][M]; riempi_mappa(mappa); stampa_mappa(mappa); cont_mosse(mappa, 4, 4); printf("\n\n"); stampa_mappa(mappa); _getch(); return 0; } void riempi_mappa(char mappap[][M]) { int i=0, j=0; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { if (rand() % 2 == 0) mappap[i][j] = 'C'; else mappap[i][j] = 'S'; } } } void stampa_mappa(char mappap[][M]) { int i, j; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { printf(" %c ", mappap[i][j]); } printf("\n\n"); } } void cont_mosse(char mappap[][M], int coox, int cooy) { if (mappap[coox][cooy] = 'C') { mappap[coox][cooy] = 'g'; cont_mosse(mappap, coox, (cooy-1)); cont_mosse(mappap, (coox-1), cooy); cont_mosse(mappap, (coox+1), cooy); cont_mosse(mappap, coox, (cooy+1)); } }

Rispondi quotando