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:
codice:
#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(" ");
}
}
spero mi possiate dare una mano