Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Calcolo spostamento minimo , gioco guardia e ladri in C

    La guardia compie ad ogni turno un passo in modo tale che conoscendo la posizione
    del ladro può calcolare lo spostamento minimo per avvicinarsi a lui.

    preciso che il ladro viene mosso dall'utente.



    volevo sapere come faccio a calcolare lo spostamento minimo che deve fare la guardia per intercettare il ladro , conoscendo la posizione del ladro

    Grazie anticipatamente

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Posta il codice che hai scritto fino ad ora per la risoluzione del problema e, in caso di errori o comportamenti anomali, spiega quali sono e saremo ben felici di aiutarti.

    In caso contrario, il tuo quesito è troppo vago e generico, e non si capisce che tipo di aiuto ti occorra, né con quali strutture dati si sta lavorando, nulla di nulla.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ti posto il testo


    Si vuole sviluppare un programma per la simulazione del gioco della guardia e del 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 che 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.



    a me servirebbe solo sapere la formula per determinare le coordinate della guardia in modo tale che ad ogni passo del ladro lui si avvicini sempre di più alla guardia.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da babilon90
    a me servirebbe solo sapere la formula per determinare le coordinate della guardia in modo tale che ad ogni passo del ladro lui si avvicini sempre di più alla guardia.
    E' il 95% dell'esercizio.

    Non c'è una "formula": occorre codificare un algoritmo.
    Prova a scriverlo, o ad abbozzare una tua proposta di soluzione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    #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");
    }
    }

    }

  6. #6
    il programma funziona solo che non so come far muovere la guardia in base a quei criteri

  7. #7

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Originariamente inviato da jonnyforever
    puoi aiutarmi per favore??
    Non si fanno interventi in altre discussioni, aperte da altre utenti, per chiedere aiuto nella propria: non è corretto né rispettoso nei confronti dell'utente, quindi ti invito ad astenerti in futuro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    hai ragione scusa. però al mio topic nessuno risponde!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.