Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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:
Codice sorgente - presumibilmente C++
#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);
A parte che tu non introduci neanche la variabile j ma suppongo faccia parte di un for esterno.
Oltre a questo come fai a dire
Codice sorgente - presumibilmente Plain Text
if(scacchiera[j] == 0) || (scacchiera[j] == 0))
cioè è la stessa cosa perchè gli chiedi la condizione 2 volte????
forse intendevi
Codice sorgente - presumibilmente Plain Text
if(scacchiera[j] == 0) || (scacchiera[i] == 0))
o cosa so....
Poi scacchiera è una MATRICE, NON un vettore!!!!
Non puoi dire scacchiera[j]!!!
Codice sorgente - presumibilmente Plain Text
Puoi ad esempio scrivere scacchiera[j][i]
Per quanto riguarda la generazione della posizione iniziale devi generalre la posizione finchè non viene generata in una cella appropriata (dove non c'è il muro)
quindi fai
Codice sorgente - presumibilmente C/C++
do
{
nx = rand()%16;
ny = rand()%16;
}
while (scacchiera[nx][ny]==',');
Ti consiglio caldamente di studiarti eglio il C perchè il programma che hai intenzione di fare non è banalissimo e non credo sia fattibile per uno che fa degli errori come i tuoi.
Non lo dico per cattiveria, ci siamo passati tutti.
Studiati bene l'IF, i vettori e le matrici, poi riprova e vedrai che avrai le idee molto più chiare
Ultima modifica effettuata da andrea993 il 27/02/2011 alle 15:59
ti ringrazio della tua risposta in effetti io sono agli inizi con il c e nn ho ancora molta pratica. Cmq sono andato un pò avanti e mi sn bloccato sul fatto che non so come fare per poter far muovere il ladro, questo è quello che ho fatto sperando nn ci siano errori gravi: - ernero - 28/02/11 17:27
#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 scacche - ernero - 28/02/11 17:28
ho cambiato il post iniziale dato che non riesco a capire come fare per risponderti - ernero - 28/02/11 17:46
#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 scacche - ernero - 05/07/11 11:37