Car Speed Gioco 2 ultime modifiche da fare

di il
9 risposte

Car Speed Gioco 2 ultime modifiche da fare

Ciao ragazzi sono alla resa finale di questo gioco, ora date un occhiata al codice e ditemi cortesemente se è per colpa di un passaggio di parametri errato o altro che sia quando richiamo la funzione manuale o automatico , l' auto in creazione_campo non subisce un cambiamento di locazione! datemi un ultimo suggerimento

MAIN

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LATOMIN 20
#define MAX_PASSI 100
#define MAX_SPAZIO 50

void creazione_campo(int,int);
void credits();
void rules();
int manuale(int ,int, int, register char);
int automatico(int, int, int);
int scelta();

char S='*';
char E=' ';
char spazio[MAX_SPAZIO][MAX_SPAZIO];
int main()
{
    int riga,colonna,vite=1,na_1,na_2,passi=0,logical=1,i,j;
    register char direzione;
    int dim1,dim2;
    
    // definisco la matrice di gioco

	do
    {
 
        printf("Inserisci la lunghezza del campo di gioco (min %d) e (max %d):\t",LATOMIN,MAX_SPAZIO);
        scanf("%d",&dim1);
        printf("Inserisci la larghezza del campo da gioco ( min %d) e (max %d):\t",LATOMIN,MAX_SPAZIO);
        scanf("%d",&dim2);
    }
    while(dim1 < LATOMIN && dim1 > MAX_SPAZIO && dim2 < LATOMIN && dim2 > MAX_SPAZIO );

	for(i=0; i <dim1; i++)
  	{
     	for(j=0; j<dim2; j++)
   		{
      		if(i==0 || i==dim1-1)
			{
			   spazio[i][j]=S;
     		}
			else
			{
     		  spazio[i][j]=E;
			}
			if(j==0 || j==dim2-1)
			{
			  spazio[i][j]=S;
			}
			else
			{
			  spazio[i][j]=E; 
			}
   		}
   		printf("\n");
	}
    system("cls");
    credits();
    system("pause");
    system("cls");
    rules();
    printf("\n");
    system("pause");
    system("cls");
Start:
    srand(time(NULL));
    riga=dim1-2;
    
	do
    {
        colonna=2+rand()%dim2-2;
    }

    while (spazio[riga][colonna]=='V');  // posizione casuale della macchina
    
    spazio[riga][colonna]='V';
    na_1=1+rand()%8;
    na_2=1+rand()%colonna-10;
    spazio[na_1][na_2]='X';
    
	int flag=scelta();
    while (logical==1)
    {
        
		if((passi == MAX_PASSI)&&(vite == 1)) // Controllo se i passi sono ugalu a quelli programmati da fare prima di superare il gioco tenedo conto dello stato della vita
	    {
     	    printf("\a\n\t----------------------------------------------------\n");
		    printf(" 			!!! PLAYER WIN THE GAME !!!	\n");
		    printf("\n\t----------------------------------------------------\n");
		    logical = 0;
		    system("PAUSE");
   		}
     	//Controllo sul numero delle vite e dei passi. Se pari a zero e i passi sono minori di quelli programmati la partita termina
     	if((passi <= MAX_PASSI)&&(vite==0))
     	{
      	    printf("La tua auto e' distrutta!\n\n");
          	logical=0;
   		}//Controllo sul numero delle vite. Se pari a zero la partita termina
        
        system("cls");
		j=1+rand()%dim2;
        spazio[1][j]='O';
              
        creazione_campo(dim1,dim2); //richiamo la funzione crea_spazio
		if(flag==1)
		{
			passi=manuale(riga,colonna,passi,direzione); // richiamo la funzione manuale
		}
		else
		{
			passi=automatico(riga,colonna,passi); // richiamo la funzione demo
		}
		

        //Questa porzione di codice ha il compito di generare degli ostacoli che si sposteranno lungo il percorso ad ogni iterazione
        for(i=dim1-2; i>=0; i--)
        {
            for(j=dim2-2; j>=0; j--)
            {
                if(spazio[i][j]=='O')
                {
                    if(i!=dim1-2 && spazio[i+1][j]!='X')
                    {
                        spazio[i][j]=E;
                        if (spazio[i+1][j]=='V' && vite!=0)
                        {
                            printf("BOOM!! Hai colpito un ostacolo che ha danneggiato l'auto! Hai perso!\n");
                            printf("--------------------------------------------------------------------\n\n\n");
                            vite--;
                            system("pause");
                        }
                        else
                        {
                            spazio[i+1][j]='O';
                        }
                    }
                    else
                    {
                        spazio[i][j]=E;
                    }
                }
            }
        }
    system("cls");
	}
}
Creazione campo

void creazione_campo(int dim1, int dim2) // stampa della posizione attuale degli elementi nella matrice
{
    register int i,j;
    printf("\n");
    for (i=0; i<dim1; i++)
    {
        for (j=0; j<dim2; j++)
        {
            if (spazio[i][j]==S || spazio[i][j]=='O' || spazio[i][j]=='X' || spazio[i][j]=='V')
            {
                printf("%c ",spazio[i][j]);
            }
            else
            {
                printf("  ");
            }
        }
        printf("\n");
    }
}
Manuale

int manuale(int riga,int colonna,int passi, register char direzione)
{
    direzione=getchar();
    //Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
	fflush(stdin);
       
	switch (direzione)
    {
        case 'a':
        case 'A':
	            
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna--;
            if (spazio[riga][colonna]==S)
            {
                printf("Non puoi spostarti in questa direzione!\n");
                system("pause");
                colonna++;
                spazio[riga][colonna]='V';
            }
                
		break;
        
		case 'd':
        case 'D':
			    
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna++;
            if (spazio[riga][colonna]==S)
            {
                printf("Non puoi spostarti in questa direzione!\n");
                colonna--;
                system("pause");
            }
	        spazio[riga][colonna]='V';
        break;
                
        default:  // qualsiasi altro tasto ASCII viene considerato come un passo
                
				return passi+=1;  
                
    }	
}

Automatico e Scelta


int automatico(int riga, int colonna, int passi)
{
	int decisione=rand()%1;  // destra o sinistra
	int decisione2=1+rand()%2;  //  uno o due posizioni casuali
			
	if(spazio[riga-4][colonna]=='O' || spazio[riga-3][colonna]=='O' && spazio[riga][colonna]=='V') // riga-4 e riga -3 è la posizione con cui vado a confrontare la posizione dell' ostacolo
	{
		if(decisione==0 && decisione2==1) // sinistra 1 posizione
		{
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna--;
            if (spazio[riga][colonna]==S)
            {
				colonna+2;
			}
			spazio[riga][colonna]='V';
		}
		if(decisione==0 && decisione2==2) // sinistra due posizioni
		{
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna-2;
            if (spazio[riga][colonna]==S)
            {
				colonna+2;
			}
				spazio[riga][colonna]='V';
		}
		if(decisione==1 && decisione2==1)  // destra 1 posizione
		{
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna++;
            if (spazio[riga][colonna]==S)
            {
				colonna-2;
			}
			spazio[riga][colonna]='V';
		}
		if(decisione==1 && decisione2==2) // destra due posizioni
		{
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna+2;
            if (spazio[riga][colonna]==S)
            {
				colonna-2;
			}
			spazio[riga][colonna]='V';
		}				
	}
	else
	{
		if(decisione==0 && decisione2==1) // sinistra 1 posizione
		{
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna--;
            if (spazio[riga][colonna]==S)
            {
				colonna+2;
			}
			spazio[riga][colonna]='V';
		}
		if(decisione==0 && decisione2==1) // sinistra due posizioni
		{
			return passi+=2;
            spazio[riga][colonna]=E;
        	colonna-2;
            if (spazio[riga][colonna]==S)
            {
				colonna+2;
			}
			spazio[riga][colonna]='V';
		}
		if(decisione==1 && decisione2==1)  // destra 1 posizione
		{
			return passi+=1;
            spazio[riga][colonna]=E;
            colonna++;
            if (spazio[riga][colonna]==S)
            {
				colonna-2;
			}
			spazio[riga][colonna]='V';
		}
		if(decisione==1 && decisione2==1) // destra due posizioni
		{
			return passi+=2;
            spazio[riga][colonna]=E;
            colonna+2;
            if (spazio[riga][colonna]==S)
            {
				colonna-2;
			}
			spazio[riga][colonna]='V';
		}						
		system("PAUSE");
	}
}

int scelta()
{
	int flag;
	do
	{
	
		printf("CIAO UTENTE PREMI 1 PER GIOCARE MANUALMENTE\n\t    PREMI 2 PER AVVIARE LA DEMO:\t");
		scanf("%d",&flag);
		if(flag==1)
		{
			return 1;	// Manuale
		}
		if(flag == 2)
		{
			return 2;	// Demo
		}
	}
	while(flag!=1 || flag != 2);
}
credits e rules

// Le funzioni che seguono sono delle semplici void per la stampa di informazioni sul gioco e su come si gioca

9 Risposte

  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Spiega meglio il problema perché tu sai cosa vuoi dire ma noi non capiamo nulla da quello che hai detto..
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Non riesco a capire perchè sia quando scelgo la versione manuale o demo, in stampa la posizione della macchina sulla matrice non cambia
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Ma che vuol dire

    colonna+2;

    o

    colonna-2;


    ???
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Ciao Oregon ho risolto, da un altro forum mi hanno suggerito di mettere colonna, e passi come variabili globali, e finalmente tutto funziona, da me poi ho messo anche vite come variabile globale in quanto era mi si distruggeva il valore, comunque con colonna+2 o colonna -2 erano dei casi in cui la macchina si doveva muovere verso sinistra o destra di due posizioni sia per il moto casuale o sia perchè erano arrivati alla bordatura della matrice
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Guarda che quelle linee non servono a nulla e vengono ignorate dal compilatore. Sicuramente non fanno quello che pensi tu.

    E ricorda che qui il crossposting su altri forum è VIETATO ... segnalo ai moderatori.
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Ops stavo nel panico in quanto domani devo consegnare il progetto e comunque sono stato onesto, dai mi faccio perdonare con tutti rimettendo a tutti e ai posteri la soluzione totale
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define LATOMIN 20
    #define MAX_PASSI 100
    #define MAX_SPAZIO 50
    
    void creazione_campo(int,int);
    void credits();
    void rules();
    void manuale(int , register char);
    void automatico(int );
    void crea_ostacoli(int,int);
    void crea_matrice(int,int);
    int scelta();
    
    //definizioni delle variabili globali
    char S='*';
    char E=' ';
    int colonna,passi=0,vite=1;
    char spazio[MAX_SPAZIO][MAX_SPAZIO];
    int main()
    {
        int riga,na_1,na_2,logical=1,i,j;
        register char direzione;
        int dim1,dim2;
        
        // definisco la matrice di gioco
    
    	do
        {
     
            printf("Inserisci la lunghezza del campo di gioco (min %d) e (max %d):\t",LATOMIN,MAX_SPAZIO);
            scanf("%d",&dim1);
            printf("Inserisci la larghezza del campo da gioco ( min %d) e (max %d):\t",LATOMIN,MAX_SPAZIO);
            scanf("%d",&dim2);
        }
        while(dim1 < LATOMIN && dim1 > MAX_SPAZIO && dim2 < LATOMIN && dim2 > MAX_SPAZIO );
    
    	crea_matrice(dim1,dim2);
        system("cls");
        credits();
        system("pause");
        system("cls");
        rules();
        printf("\n");
        system("pause");
        system("cls");
    Start:
        srand(time(NULL));
        
    	riga=dim1-2;
        colonna=2+rand()%dim2-2; // posizione causale della macchina
    	    
        spazio[riga][colonna]='V';
        na_1=1+rand()%8;
        na_2=1+rand()%colonna-10;
        spazio[na_1][na_2]='X';
        
    	int flag=scelta();
        while (logical==1)
        {
            
    		if((passi == MAX_PASSI)&&(vite == 1)) // Controllo se i passi sono ugalu a quelli programmati da fare prima di superare il gioco tenedo conto dello stato della vita
    	    {
         	    printf("\a\n\t----------------------------------------------------\n");
    		    printf(" 			!!! PLAYER WIN THE GAME !!!	\n");
    		    printf("\n\t----------------------------------------------------\n");
    		    logical = 0;
    		    system("PAUSE");
       		}
         	//Controllo sul numero delle vite e dei passi. Se pari a zero e i passi sono minori di quelli programmati la partita termina
         	if((passi <= MAX_PASSI)&&(vite==0))
         	{
          	    printf("La tua auto e' distrutta!\n\n");
              	logical=0;
       		}//Controllo sul numero delle vite. Se pari a zero la partita termina
            
            system("cls");
    		j=1+rand()%dim2;
            spazio[1][j]='O';
                  
            creazione_campo(dim1,dim2); //richiamo la funzione crea_spazio
    		if(flag==1)
    		{
    			manuale(riga,direzione); // richiamo la funzione manuale
    		}
    		else
    		{
    			automatico(riga); // richiamo la funzione demo
    		}
    		
    
            //Questa porzione di codice ha il compito di generare degli ostacoli che si sposteranno lungo il percorso ad ogni iterazione
            crea_ostacoli(dim1,dim2);
    		
        	system("cls");
    	}
    }
    void creazione_campo(int dim1, int dim2) // stampa della posizione attuale degli elementi nella matrice
    {
        register int i,j;
        printf("\n");
        for (i=0; i<dim1; i++)
        {
            for (j=0; j<dim2; j++)
            {
                if (spazio[i][j]==S || spazio[i][j]=='O' || spazio[i][j]=='X' || spazio[i][j]=='V')
                {
                    printf("%c ",spazio[i][j]);
                }
                else
                {
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    
    // Le funzioni che seguono sono delle semplici void per la stampa di informazioni sul gioco e su come si gioca
    void credits()
    {
       printf(" -------------------------------\n");
       printf("| BENVENUTO NEL GIOCO CAR SPEED |\n");
       printf(" -------------------------------\n\n");
    }
    
    void rules()
    {
       printf("*******************\n");
       printf("* REGOLE DI GIOCO *\n");
       printf("*******************\n\n");
       printf("*       Il gioco consiste nel far muovere l'auto (indentificata da: V )\n");
       printf("*       e farla arrivare alla fine del percorso (ovvero dopo 100 passi)\n");
       printf("*    evitanto gli ostacoli presenti! Se invece l'auto colpisce un ostacolo\n");
       printf("*                            finisce la partita!\n\n");
       printf("                            *************\n");
       printf("                            * MOVIMENTI *\n");
       printf("                            *************\n\n");
       printf("E' possibile muovere l'auto manualmente solo nelle direzioni destra -> e sinistra <-: \n\n");
       printf("A per far muovere l'auto a sinistra\n\n");
       printf("D per far muovere l'auto a destra!\n\n");
       printf("Oppure e' possibile avviare una demo del gioco\n\n");
    }
    
    void manuale(int riga, register char direzione)
    {
        direzione=getchar();
        //Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
    	fflush(stdin);
           
    	switch (direzione)
        {
            case 'a':
            case 'A':
    	            
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna--;
                if (spazio[riga][colonna]==S)
                {
                    printf("Non puoi spostarti in questa direzione!\n");
                    system("pause");
                    colonna++;
                }
                spazio[riga][colonna]='V';
                    
    		break;
            
    		case 'd':
            case 'D':
    			    
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna++;
                if (spazio[riga][colonna]==S)
                {
                    printf("Non puoi spostarti in questa direzione!\n");
                    colonna--;
                    system("pause");
                }
    	        spazio[riga][colonna]='V';
            break;
                    
            default:  // qualsiasi altro tasto ASCII viene considerato come un passo
                    passi+=1;  
                    
        }	
    }
    
    void automatico(int riga)
    {
    	int decisione=rand()%2;  // destra o sinistra
    	int decisione2=1+rand()%2;  //  uno o due posizioni casuali
    			
    	if(spazio[riga-4][colonna]=='O' || spazio[riga-3][colonna]=='O' && spazio[riga][colonna]=='V') // riga-4 e riga -3 è la posizione con cui vado a confrontare la posizione dell' ostacolo
    	{
    		if(decisione==0 && decisione2==1) // sinistra 1 posizione
    		{
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna--;
                if (spazio[riga][colonna]==S)
                {
    				colonna+2;
    			}
    			spazio[riga][colonna]='V';
    		}
    		if(decisione==0 && decisione2==2) // sinistra due posizioni
    		{
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna-1;
                if (spazio[riga][colonna]==S)
                {
    				colonna+2;
    			}
    			else
    			{
    				colonna-2;
    			}
    			spazio[riga][colonna]='V';
    		}
    		if(decisione==1 && decisione2==1)  // destra 1 posizione
    		{
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna++;
                if (spazio[riga][colonna]==S)
                {
    				colonna-2;
    			}
    			spazio[riga][colonna]='V';
    		}
    		if(decisione==1 && decisione2==2) // destra due posizioni
    		{
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna+1;
                if (spazio[riga][colonna]==S)
                {
    				colonna-2;
    			}
    			else
    			{
    				colonna+2;
    			}
    			spazio[riga][colonna]='V';
    		}				
    	}
    	else
    	{
    		if(decisione==0 && decisione2==1) // sinistra 1 posizione
    		{
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna--;
                if (spazio[riga][colonna]==S)
                {
    				colonna+2;
    			}
    			spazio[riga][colonna]='V';
    		}
    		if(decisione==0 && decisione2==1) // sinistra due posizioni
    		{
    			passi+=2;
                spazio[riga][colonna]=E;
            	colonna-2;
                if (spazio[riga][colonna]==S)
                {
    				colonna+2;
    			}
    			spazio[riga][colonna]='V';
    		}
    		if(decisione==1 && decisione2==1)  // destra 1 posizione
    		{
    			passi+=1;
                spazio[riga][colonna]=E;
                colonna++;
                if (spazio[riga][colonna]==S)
                {
    				colonna-2;
    			}
    			spazio[riga][colonna]='V';
    		}
    		if(decisione==1 && decisione2==1) // destra due posizioni
    		{
    			passi+=2;
                spazio[riga][colonna]=E;
                colonna+2;
                if (spazio[riga][colonna]==S)
                {
    				colonna-2;
    			}
    			spazio[riga][colonna]='V';
    		}						
    		system("PAUSE");
    	}
    }
    
    int scelta()
    {
    	int flag;
    	do
    	{
    	
    		printf("CIAO UTENTE PREMI 1 PER GIOCARE MANUALMENTE\n\t    PREMI 2 PER AVVIARE LA DEMO:\t");
    		scanf("%d",&flag);
    		if(flag==1)
    		{
    			return 1;	// Manuale
    		}
    		if(flag == 2)
    		{
    			return 2;	// Demo
    		}
    	}
    	while(flag!=1 || flag != 2);
    }
    void crea_ostacoli(int dim1,int dim2)
    {
    	int i,j;
    	for(i=dim1-2; i>=0; i--)
        {
            for(j=dim2-2; j>=0; j--)
            {
                    if(spazio[i][j]=='O')
                    {
                        if(i!=dim1-2 && spazio[i+1][j]!='X')
                        {
                            spazio[i][j]=E;
                            if (spazio[i+1][j]=='V' && vite!=0)
                            {
                                printf("BOOM!! Hai colpito un ostacolo che ha danneggiato l'auto! Hai perso!\n");
                                printf("--------------------------------------------------------------------\n\n\n");
                                vite--;
                                system("pause");
                            }
                            else
                            {
                                spazio[i+1][j]='O';
                            }
                        }
                        else
                        {
                            spazio[i][j]=E;
                        }
                    }
                }
        }
    }
    void crea_matrice(int dim1,int dim2)
    {
    	int i,j;
    	
    	for(i=0; i <dim1; i++)
      	{
         	for(j=0; j<dim2; j++)
       		{
          		if(i==0 || i==dim1-1)
    			{
    			   spazio[i][j]=S;
         		}
    			else
    			{
         		  spazio[i][j]=E;
    			}
    			if(j==0 || j==dim2-1)
    			{
    			  spazio[i][j]=S;
    			}
    			else
    			{
    			  spazio[i][j]=E; 
    			}
       		}
       		printf("\n");
    	}
    }
    
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Ti ripeto ... quelle linee sono sbagliate, se ci credi, altrimenti come vuoi ...

    P.S. Sul fatto di essere onesto non è importante ... il regolamento vale per tutti ...
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Ci credo l' unica cosa che in esecuzione il programma funziona, sia in demo, mo mi resta il confronto con il professore per vedere se la versione demo cioè quella voluta nel progetto, i due passi casuali li deve fare la macchina o gli ostacoli, che in manuale, volevo provare a fare con un passaggio di parametri per indirizzo, ma mi sono messo il bastone fra le ruote da solo, perchè non ne uscivo, magari mo quelle righe le passo a struct forse cosi avranno senso?
  • Re: Car Speed Gioco 2 ultime modifiche da fare

    Giacomo mi dispiace dirtelo ma il C è ancora molto misterioso per te ...

    Attendi il giudizio del professore sperando che non si accorga di quelle linee ...
Devi accedere o registrarti per scrivere nel forum
9 risposte