Ciao a tutti!
Sto svolgendo un esercizio che riguarda la simulazione del gioco della tartaruga e la lepre, e tratta di un percorso di 70 caselle (quindi ho utilizzato un vettore). Ogni animale partirà dalla casella numero 1. Verrà utilizzato un orologio per scandire a ogni ciclo la posizione da effettuare secondo queste regole:
Animale: Tipo di mossa: % di tempo: Mossa effettiva:
Tartaruga Arrancata rapida 50% 3 caselle a destra
Scivolone 20% 6 caselle a sinistra
Arrancata lenta 30% 1 casella a destra
Lepre Dormita 20% Nessuna mossa
Salto lungo 20% 9 caselle a destra
Scivolone lungo 10% 12 caselle a sinistra
Salto corto 30% 1 casella a destra
Scivolone corto 20% 2 caselle a sinistra
Quindi verrà utilizzata una variabile i per riprodurre le percentuali in tabella (in modo casuale), per esempio nel caso della tartaruga quando 1<=i<=5 (50%) la tartaruga dovrà effettuare 3 passi a destra; quando 6<=i<=7 (20%) effettuerà 6 passi a sinistra e quando 8<=i<=10 (30%) un passo a destra.
A ogni ciclo verrà visualizzato il percorso e nella cella dove sarà fermata la tartaruga verrà visualizzato "T", nella cella della lepre "L" e in caso di scontro tra i due animali "OUCH!".
Bisogna tenere conto delle posizioni di ogni animale a ogni ciclo.
Il programma termina quando uno dei 2 animali raggiunge il traguardo (casella n. 70).
Ora il mio problema è che nell'esecuzione non vengono visualizzati i movimenti delle lepre e stranamente si scontrano solo verso un certo punto del percorso.
vi posto il codice:
spero mi possiate dare una manocodice:#include <stdio.h> #include <stdlib.h> #include <time.h> int segnaPosTart( int ran ); int segnaPosLepr( int ran ); void mostraPerc( int per[70] ); int main() { int percorso[70] = {0}; // vettore del percorso int posTart = 0; int posLepr = 0; int i; // i è compreso tra 1 e 10 e serve per generare una mossa. int k; srand(time (NULL)); /* specifica il seme per il generatore di numeri casuali */ printf("BANG !!!!!\n"); while ( (posTart <= 69) || (posLepr <= 69) ) { //Azzero il percorso per mostrare solo le mosse eseguite nel ciclo for (k=1; k<= 70; k++) { percorso[k] = 0; } /* in base al numero generato posTart e posLepr restituiscono * il tipo di mosse da eseguire (ovvero i passi avanti o dietro) */ i = rand() % 9 + 1; posTart += segnaPosTart(i); i = rand() % 9 + 1; posLepr += segnaPosLepr(i); percorso[posTart] += 1; percorso[posLepr] += 2; mostraPerc(percorso); printf("\n"); } if (posTart >= 70) printf("\n\nVINCE LA TARTARUGA!!!!"); else if (posLepr >= 70) printf("\n\nVINCE LA LEPRE!!!!"); return 0; } int segnaPosTart( int ran ) { int pos; if ( (ran >= 1) && (ran <= 5) ) pos = 3; else if ( (ran >= 6) && (ran <= 7) ) pos = -6; else if ( (ran >= 8) && (ran <= 10) ) pos = 1; return pos; } int segnaPosLepr( int ran ) { int pos; if ( (ran >= 1) && (ran <= 2) ) pos = 0; else if ( (ran >= 3) && (ran <= 4) ) pos = 9; else if ( (ran >= 5) && (ran <= 5) ) pos = -12; else if ( (ran >= 6) && (ran <= 8) ) pos = 1; else if ( (ran >= 9) && (ran <= 10) ) pos = -2; return pos; } void mostraPerc( int perc[70] ) { int k; for (k=1; k<=70; k++) { if (perc[k] == 1) printf("%4s", "T"); else if (perc[k] == 2) printf("%4s", "L"); else if (perc[k] == 3) printf("%5s", "OUCH!"); else if (perc[k] == 0) printf(" "); } }![]()