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 (comprimere le figure in modo da
non aumentare a dismisura il numero di pagine della Relazione).

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.

Io ho fatto questo ma non riesco a trovare un modo per far muovere il ladro, nel senso che ho messo lo switch con i vari casi e le convenzioni da utilizzare solo che non riesco a ristampare la scacchiera con la nuova posizione del ladro. Chi mi può aiutare???? grazie mille anticipatamente.

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

void guardia(char scacchiera[][16], int nx, int ny);
void ladro(char scacchiera[][16], int nx, int ny);
float ladronord( char scacchiera[][16], int nx, int ny);
void printScacchiera(char scacchiera[][16]);
/*void ladrosud(char scaccheira[][16], int nx, int ny);
void ladroest(char scaccheira[][16], int nx, int ny);
void ladroovest(char scacchiera[][16], int nx, int ny);   
*/
void main()
{
     int i,j,nx,ny;
     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'}};
     //scelta automatica del seed
     srand(time(NULL));
     //generazione della posizione del LADRO
     ladro(scacchiera, nx, ny);
      //generazione della posizione della GUARDIA
     guardia(scacchiera, nx, ny);
     //stampa la scacchiera
     printScacchiera(scacchiera);
    
     ladronord(scacchiera,nx,ny);
    
      system("PAUSE");
}

void ladro(char scacchiera[][16], int nx, int ny)
{
     int i;
     for (i=0;i<1;i++)//ciclo che viene eseguito una sola volta tanto quanto è la posizione da generare.
     {
     
      /* genera a caso una posizione nella scacchiera 17x17 */
           do
           {
           nx = rand()%17;
           ny = rand()%17;
           }
           while(scacchiera[nx][ny]=='m');
           scacchiera[nx][ny] = 'L';       
      printf("le cordinate del ladro sono %d : %d \n",nx,ny);
      printf("\n\n");
       
      } 
}

void guardia(char scacchiera[][16], int mx, int my)
{
     int i;
      for (i=0;i<1;i++)//ciclo che viene eseguito una sola volta tanto quanto è la posizione da generare. 
     {
     
      /* genera a caso una posizione nella scacchiera 17x17 */
           do
           {
           mx = rand()%17;
           my = rand()%17;
           }
           while(scacchiera[mx][my]=='m');
           scacchiera[mx][my] = 'G';       
      printf("le cordinate della guardia sono %d : %d \n",mx,my);
      printf("\n\n");
       
      }
}

void printScacchiera(char scacchiera[][16])
{
     int i,j;
         for (i=0;i<16;i++)//visualizzazione della scacchiera
      { 
           for (j=0;j<16;j++)
           printf(" %c",scacchiera[i][j]);
           printf("\n");                  //visualizzazione per riga
      }
}


float ladronord( char scacchiera[][16], int nx, int ny)     //indica il possibile spostamento che l'utente fa fare al ladro
{
     char p;
     printf("per spostare il ladro occorre premere:\n W = SU \n S = GIU' \n A = SINISTRA \n D = DESTRA\n");
     scanf("%c",&p);
     switch (p)
     {
      case 1:
           if(p == 'w')
           
           nx=nx-1;
           scacchiera[nx][ny] = 'L';
          
           break;
      case 2:
           if(p == 's')
           nx=nx+1;
           ladronord(scacchiera,nx,ny);
           break;
      case 3:
           if(p == 'a')
           ny=ny-1;
           
           break;
      case 4:
           if(p == 'd')
           ny=ny+1;
           
           break;
      }
       printScacchiera(scacchiera);
}