Guardia e Ladri programma in c

Pubblicità

snk97

Utente Attivo
Messaggi
8
Reazioni
0
Punteggio
24
TESTO:

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. Si sceglie casualmente la posizione della guardia e del
ladro . 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 compie ad ogni turno un passo in modo tale che conoscendo la posizione
del ladro può calcolare lo spostamento minimo per avvicinarsi a lui.
Il ladro conosce posizione della porta e con probabilità del 50% compie ad ogni
turno un passo nella sua direzione oppure in una posizione 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.

Schermata 2012-01-27 a 13.37.11.webp


Vi allego di seguito il codice da me impostato


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


void printScacchiera(char scacchiera[][16] , int n, int m);//prototipo function printScacchiera


void main()
{
     int i,j,n=16,m=16;
     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'}};






     //stampa la scacchiera
    printScacchiera(scacchiera,n,m);//chiamata voi function








}












//funzione 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");
      }
         }


}
[COLOR=#000000][FONT=Verdana]


[/FONT][/COLOR]


Vi chiedo aiuto per risolvere questo problema, Ringraziandovi anticipatamente
 
Andando per ordine: qual è il primo scoglio che non riesci a superare? La tua richiesta è troppo generica :)
 
Il mio più grande scoglio è come far muovere il ladro che lo deve muovere l'utente e visualizzare la schermata con il percorso che sta facendo.
Grazie Anticipatamente:)
 
Ultima modifica:
ma scusa tu vuoi creare un programma del genere e nn sai neanche il controllo per il ladro...credo che magari sbaglio ma la cosa da spiegare sarebbe troppo lunga
 
Veramente chiedevo solo un idea su come crearlo un algoritmo magari e poi è solo su una parte del programma se hai letto la traccia, va be ma forse non lo sai neanche tu per rispondermi così.
 
beh alla fine se il ladro è mosso dall'utente non è difficile da fare....potresti per esempio fare una scanf che riceve i char w,a,s,d e in base a quale hai pigiato ti muove il ladro su, sinistra, giu o destra, ovviamente controllando che la posizione in cui deve andare sia vuota
 
ok grazie quindi con una gets() prendere un char e con uno switch case simulare i vari casi .

volevo chiedere solo se esiste una funzione che mi cancella dallo schermo la visualizzazione precedente della scacchiera per permettermi poi di stampare a video quella con le posizioni aggiornate , una specie di clear
 
Con che sistema operativo programmi? Se usi linux, importa la libreria stdlib.h e fai system("comando terminale"); per effettuare appunto una system call.
in breve system("clear") ti pulisce tutto il teminale.
in alternativa, usa:
- printf("\033[1m tua stringa"); per il grassetto
- printf("\033[0m tua stinga"); per tornare "normale"
- printf("\033[2J"); per pulire lo schermo
- printf("\033[0;0H"); per posizionarti alla riga / colonna (in questo caso 0 0)

P.S. gets() è deprecata e con molti bug, usa getchar()!
 
si, i printf che ti ho suggerito sono standard ANSI, non dovresti avere problemi (con cosa compili, gcc o atro?)
 
Scusate la mia insistenza , ma 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
 
La tua guardia (salvo eccezioni) può muoversi in 8 direzioni possibili, e ovviamente ogni spostamento può o avvicinare o allontanare dal bersaglio.
Dato che tu sai le coordinate (espresse in quadrati) del ladro (x1,y1) e della guardia(x2,y2), sei in grado di calcolare la differenza delle due coordinate per ottenere X (x2 -x1) e Y(y2-y1).
Ora, la distanza minima tra due oggetti (escludendo la relatività di Einstein :lol:) è una retta, quindi: teorema di pitagora e trova la diagonale di X e Y.
Ovviamente, mentre il ladro una volta mosso rimane immobile, la guardia può scegliere: devi quindi trovare lo spostamento che ottiene la diagonale minore
 
Scusami
Per calcolare lo spostamento minimo allora faccio la differenza tra le coordinate della guardia e del ladro ottenendo X e Y


e poi che formula applico sqr x^2 +Y^2 ???

come faccio a trovare la diagonale di X e Y ??
 
Esatto... diagonale = sqrt(X^2 + Y^2) poi confronti gli 8 risultati e tieni il più piccolo.
P.S. nonostante il ladro si possa muovere solo in 4 direzioni (W,A,S,D) la guardia deve muoversi in 8 direzioni altrimenti è impossibile che raggiunga il ladro (ovvero sian entrambi nella prima casella)
P.P.S. può aiutare vedere il campo di gioco come un array bidimensionale (field[][]) così puoi usare gli indici dell' array come coordinate
 
Pubblicità
Pubblicità
Indietro
Top