#include <stdio.h>
#include <stdlib.h>
#include <time.h>


void printScacchiera(char scacchiera[][16] , int n, int m);//prototipo function che stampa a video la scacchiera




void genera_posi_casuale(char scacchiera[][16], int x, int y,int nx,int ny);// prototipo funzione genera posizione ladro e guardia casualmente





void comando(char scacchiera[][16],int x,int y ,int nx, int ny);//prototipo funzione che manovra ladro


void main()
{
int nx,ny,x,y;

char scacchiera[16][16]= {
{ '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'},
{ '.',' ',' ',' ',' ',' ',' ','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'}};







srand(time(NULL)); /*permette la lettura dell'orologio interno del sistema ,
ottenendo automaticamente un valore sempre diverso per il seme*/






genera_posi_casuale(scacchiera, x, y,nx,ny); // chiamata procedura








}



//procedura che permette movimento ladro da parte dell'utente


void comando(char scacchiera[][16],int x ,int y ,int nx, int ny){

int n ,m ;

char com;




// muove il ladro finche non esce da labirinto o non viene preso dalla guardia


while(scacchiera[x][y] != scacchiera[13][0] && scacchiera[x][y] != scacchiera[12][0] && scacchiera[x][y] != scacchiera[11][0]){

printf("\n digitare un comando w = avanti - a = sinsitra - d = destra - z = indietro \n ");
scanf("%c",&com);
printf("\n");


switch(com){

case 'w': //va avanti

x--;

if(scacchiera[x][y] != 'm'){




scacchiera[x+1][y] = ' ';//cancella posizione precedente

scacchiera[x][y] = 'L';


printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);


printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera
printf("\n");


}

//se incontri muro rimani in quella posizione
else{

x++;

printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera

}
break;



case 'a'://va a sinistra

y--;
if(scacchiera[x][y] != 'm'){

scacchiera[x][y+1] = ' ';//cancella posizione precedente

scacchiera[x][y] = 'L';



printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera
printf("\n");



}

//se incontri muro rimani in quella posizione
else{

y++;

printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera


}

break;




case 'd'://va a destra

y++;
if(scacchiera[x][y] != 'm'){



scacchiera[x][y-1] = ' ';//cancella posizione precedente

scacchiera[x][y] = 'L';

printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera
printf("\n");


}

//se incontri muro rimani in quella posizione

else{

y--;

printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera

}

break;






case 'z'://va indietro

x++;
if(scacchiera[x][y] != 'm'){


scacchiera[x-1][y] = ' '; //cancella posizione precedente

scacchiera[x][y] = 'L';


printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera
printf("\n");


}

//se incontri muro rimani in quella posizione

else{

x--;
printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printScacchiera(scacchiera,n,m);//chiamata void function - stampa la scacchiera

}

break;


}//chiude switch case




}//chiude while







printf("HAI VINTO .... SEI RIUSCITO A SCAPPARE \n \n");



}






















//procedura che genera posizione ladro e guardia casualmente

void genera_posi_casuale(char scacchiera[][16], int x, int y,int nx ,int ny)
{
int i,n,m;



for (i=0;i<1;i++)//ciclo che viene eseguito una sola volta tanto quanto la posizione da generare.
{

/* genera a caso una posizione
per il ladro */

do
{
x = 1+rand()%15;
y = 1+rand()%15;
}
while(scacchiera[x][y]=='m');

scacchiera[x][y] = 'L';

printf("\n LE COORDINATE DEL LADRO SONO %d : %d \n",x,y);
printf("\n\n");
}







for (i=0;i<1;i++)//ciclo che viene eseguito una sola volta tanto quanto la posizione da generare.
{

/* genera a caso una posizione
per la guardia */

do
{
nx = 1+rand()%15;
ny = 1+rand()%15;
}
while(scacchiera[nx][ny]=='m');

scacchiera[nx][ny] = 'G';

printf("\n LE COORDINATE DELLA GUARDIA SONO %d : %d \n",nx,ny);
printf("\n\n");
}





printScacchiera(scacchiera,n,m);


comando( scacchiera, x, y,nx,ny);




}











//procedura stampa scacchiera
void printScacchiera(char scacchiera[][16] , int n, int m)
{
int i,j;
n=16;
m=16;

//ciclo for che mi permette di scorrere le righe
for (i=0;i<n;i++){
{
for (j=0;j<m;j++)//ciclo for che mi permette di scorrere le colonne
printf(" %c",scacchiera[i][j]);
printf("\n");
}
}

}