Tartaruga e Lepre

di il
6 risposte

Tartaruga e Lepre

Ho provato a creare il gioco della gara tra lepre e tartaruga però noto che mostra valori strani quando provo a stampare il percorso.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define EXIT_SUCCESS
#define PARTENZA 0
#define ARRIVO 70
#define AVVERSARI 2

void movimento(char *percorsoPtr,const char *animale);
void stampa(const char *percorsoPtr,const int situazione_partita);
int controlloVincita(const char *percorsoPtr);

int main(void)
{
	char percorso[ARRIVO] = {0};
	const char *animali[AVVERSARI] = {"Lepre","Tartaruga"};
	int situazione_partita = 0;
	srand(time(NULL));

	while (situazione_partita == 0 )
	{
		movimento(percorso,animali);
		situazione_partita = controlloVincita(&percorso[ARRIVO - 1]);
		stampa(percorso,situazione_partita);
	}

	return EXIT_SUCCESS;
}


void movimento(char *percorsoPtr,const char *animale)
{
	int movimento;

	movimento = 1 + rand() % 10;

	if (*animale == "Lepre")//MOVIMENTO LEPRE
	{
		switch(movimento)
		{
			case 1:
			case 2:
					break;

			case 3:
			case 4:
					percorsoPtr += 9;
					break;

			case 5:
					percorsoPtr -= 12;
					break;

			case 6:
			case 7:
			case 8:
					percorsoPtr++;
					break;

			case 9:
			case 10: 
					 percorsoPtr -= 2;
					 break;

		}

		*percorsoPtr = "L";
	}
	else//MOVIMENTO TARTARUGA
	{
		switch(movimento)
		{
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
					percorsoPtr += 3;
					break;

			case 6:
			case 7:
					percorsoPtr -= 6;
					break;

			case 8:
			case 9:
			case 10:
					 percorsoPtr++;
					 break;
		}

		*percorsoPtr = "T";
	}

}

int controlloVincita(const char *percorsoPtr)
{
	if (*percorsoPtr == "T")
	{
		return 1;//WIN TARTARUGA
	}
	else if (*percorsoPtr == "L")
	{
		return 2;//WIN LEPRE
	}
	else
	{
		return 0;
	}
}

void stampa(const char *percorsoPtr,int situazione_partita)
{
	size_t x;

	for(percorsoPtr = PARTENZA;percorsoPtr < ARRIVO;percorsoPtr++)
	{
		printf("%c",percorsoPtr);
	}

	printf("\n");

	if (situazione_partita == 1)
	{
		printf("WIN TARTARUGA");
	}
	else if (situazione_partita == 2)
	{
		printf("WIN LEPRE");
	}
}

6 Risposte

  • Re: Tartaruga e Lepre

    Non so se te lo hanno già detto ma in C le stringhe non si confrontano così

    if (*animale == "Lepre")

    E comunque ci sono tanti errori in compilazione ...
  • Re: Tartaruga e Lepre

    Grazie mille ho provato a correggere gli errori e sono arrivato a trovare il punto di segmentazione però non riesco a risolverlo
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define PARTENZA 0
    #define ARRIVO 70
    #define AVVERSARI 2
    
    void movimento(int *percorsoPtr);
    void stampa(const int *percorsoPtr,const int situazione_partita);
    int controlloVincita(const int *percorsoPtr);
    
    int main(void)
    {
    	int  percorso[ARRIVO] = {0};
    	int situazione_partita = 0;
    	srand(time(NULL));
    
    	while (situazione_partita == 0 )
    	{
    		movimento(percorso);
    		situazione_partita = controlloVincita(&percorso[ARRIVO - 1]);
    		stampa(percorso,situazione_partita);
    	}
    
    	return EXIT_SUCCESS;
    }
    
    
    void movimento(int *percorsoPtr)
    {
    	int movimento;
    	size_t x;
    
    	for (x = 0;x < AVVERSARI;x++)
    	{
    		movimento = 1 + rand() % 10;
    
    		if (x == 0)//MOVIMENTO LEPRE
    		{
    			switch(movimento)
    			{
    				case 1:
    				case 2:
    						break;
    
    				case 3:
    				case 4:
    						percorsoPtr += 9;
    						break;
    
    				case 5:
    						percorsoPtr -= 12;
    						break;
    
    				case 6:
    				case 7:
    				case 8:
    						percorsoPtr++;
    						break;
    
    				case 9:
    				case 10:
    					 	percorsoPtr -= 2;
    					 	break;
    
    			}
    
    			*percorsoPtr = 1;
    		}
    		else//MOVIMENTO TARTARUGA
    		{
    			switch(movimento)
    			{
    				case 1:
    				case 2:
    				case 3:
    				case 4:
    				case 5:
    						percorsoPtr += 3;
    						break;
    
    				case 6:
    				case 7:
    						percorsoPtr -= 6;
    						break;
    
    				case 8:
    				case 9:
    				case 10:
    					 	percorsoPtr++;
    					 	break;
    			}
    
    			*percorsoPtr = 2;
    		}
    	}
    }
    
    int controlloVincita(const int *percorsoPtr)
    {
    	if (*percorsoPtr == 'T')
    	{
    		return 1;//WIN TARTARUGA
    	}
    	else if (*percorsoPtr == 'L')
    	{
    		return 2;//WIN LEPRE
    	}
    	else
    	{
    		return 0;
    	}
    }
    
    void stampa(const int *percorsoPtr,int situazione_partita)
    {
    
    	for(percorsoPtr = 0;percorsoPtr < ARRIVO;percorsoPtr++)
    	{
    		if (*percorsoPtr == 1)
    			printf("%d",'L');
    		else
    			printf("%d",'T' );
    	}
    
    	printf("\n");
    
    	if (situazione_partita == 1)
    	{
    		printf("WIN TARTARUGA");
    	}
    	else if (situazione_partita == 2)
    	{
    		printf("WIN LEPRE");
    	}
    }
  • Re: Tartaruga e Lepre

    A me il compilatore dà un errore (giustamente) nella linea

    for(percorsoPtr = 0;percorsoPtr < ARRIVO;percorsoPtr++)

    Come fai tu a compilare??
  • Re: Tartaruga e Lepre

    Mi compila e non me lo segnala neanche come warning
    Mi potresti spiegare l'errore
  • Re: Tartaruga e Lepre

    PercorsoPtr è un puntatore ad un intero a cui tu assegni dei valori interi ... ma che compilatore usi?
  • Re: Tartaruga e Lepre

    Utilizzo GCC come compilatore e me lo va tranquillamente
    Adesso ho trovato l'errore
Devi accedere o registrarti per scrivere nel forum
6 risposte