ernero (Normal User)
Newbie
Messaggi: 2
Iscritto: 24/02/2011
|
salve, ho molti problemi nella risoluzione di questo esercizio.
Si vuole sviluppare un programma per la simulazione del gioco della guardia e ladro
in un labirinto.
La stanza è pavimentata a tasselli quadrati (caselle) ed è dotata di pareti esterne e
interne come in figura. Si sceglie casualmente la posizione della guardia (blue) e del
ladro (rosso). Entrambi si muovono di una casella alla volta, scelta tra una delle
quattro caselle vicine. Il ladro deve uscire dal labirinto e viene guidato dall’utente.
La guardia cerca di intercettare il ladro in modo tale che conoscendo la sua posizione
può calcolare lo spostamento minimo per avvicinarsi a lui. Se la traiettoria è ostruita
da un muro viene presa una direzione casuale.
La simulazione termina quando il ladro “esce dalla porta” o quando la guardia cattura
il ladro. L’algoritmo deve visualizzare il percorso del ladro e della guardia dopo ogni
passo, mostrando la stanza e la posizione dei due.
qui si vede l' immagine http://www.ernero.altervista.org/stanza.…
L’algoritmo usa la function rand() in stdlib per generare numeri casuali: si
ricorda che, per esempio, se numero_casuale è un int, la chiamata
numero_casuale=rand()%11; genera un numero casuale intero (distribuzione
uniforme) nell’insieme (0,1,2,3,4,5,6,7,8,9,10). Usare sempre la srand() per
rendere automatica la scelta iniziale del seed della sequenza di numeri casuali.
Effettuare almeno 5 test, variando la posizione iniziale del robot. Effettuare anche 3
test cambiando ogni volta la disposizione delle pareti nella stanza e cercando di
trovare disposizioni critiche delle pareti.
ho creato la stanza e anche la posizione casuale solo che va anche sulle pareti e poi non so come continuare.
questo è quello che ho fatto fino ad ora:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j,k,nx,ny;
char scacchiera[17][17]= {
{ 'm','m','m','m','m','m','m','m','m','m','m','m','m','m','m','m'},
{ 'm',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ','m','m','m','m','m','m','m','m','m'},
{ 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ','m',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ',' ',' ',' ',' ','m',' ',' ',' ','m','m','m',' ','m'},
{ 'u',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'u',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'u',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm',' ',' ',' ',' ',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','m'},
{ 'm','m','m','m','m','m','m','m','m','m','m','m','m','m','m','m'}};
srand(time(NULL));
/*generazione della posizione del LADRO*/
for (i=0;i<1;i++)//ciclo che viene eseguita una sola volta quanto quanto è la posizione da generare.
{
/* genera a caso una posizione nella scacchiera 17x17 */
nx = rand()%16;
ny = rand()%16;
scacchiera[nx][ny] = 'L';
printf("le cordinate del ladro sono %d %d \n",nx,ny);
if((scacchiera[j] == 0) || (scacchiera[j] == 0))
{ i++;
j++;
}
else if((scacchiera[j] == 15) ||(scacchiera[j] == 15))
i--;
j--;
}
/*generazione della posizione della GUARDIA*/
for (i=0;i<1;i++)//ciclo che viene eseguita una sola volta quanto quanto è la posizione da generare.
{
/* genera a caso una posizione nella scacchiera 17x17 */
nx = 1+rand()%16;
ny = 1+rand()%16;
scacchiera[nx][ny] = 'G';
printf("le cordinate della guardia sono %d %d \n",nx,ny);
if((scacchiera[j] == 0) || (scacchiera[j] == 0))
{ i++;
j++;
}
else if((scacchiera[j] == 15) ||(scacchiera[j] == 15))
i--;
j--;
}
for (i=0;i<16;i++)//visualizzazione della scacchiera
{
for (j=0;j<16;j++)
printf(" %c",scacchiera[j]);
printf("\n"); //visualizzazione per riga
}
system("PAUSE");
return 0;
}
|