Car Speed Gioco in C mi aiutate per un particolare?

di il
44 risposte

44 Risposte - Pagina 2

  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Questo è l' unica cosa che mi dice:
    Gioco_main.cpp:(.data+0x0): undefined reference to `__gxx_personality_seh0'
    Gioco_main.cpp:(.xdata+0x14): undefined reference to `__gxx_personality_seh0'
    recipe for target 'Pr_Giacomo_Gargiulo.exe' failed
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ho apportato dei cambiamenti mi aiutate a risolvere i nuovi problemi?
    eccovi il codice:
    Gioco.h
    
    #define LATO 40
    #define MAX_PASSI 100
    #define LATOMAX 20
    //dichiaro le funzioni utilizzate nel programma
    void creazione_campo(char **,int,int,int );
    void crea_spazio(char **,int,int);
    void credits();
    void rules();
    
    Gioco_function.cpp
    
    #include "Gioco.h"
    #include <stdio.h>
    #include <stdlib.h>
    
    //Semplice function per la stampa di una matrice che rappresenta "lo spazio" dove l'astronave si muove
    void creazione_campo(char **spazio, int dim1, int dim2, int vite) // passo la copia della matrice in quanto qui visualizzo la posizione dei vari elementi
    {
        register int i,j;
        printf("\n");
        for (i=0; i<dim1; i++)
        {
            for (j=0; j<dim2; j++)
            {
                if (spazio[i][j]=='*' || 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 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");
    }
     
    
    Gioco_main
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "Gioco.h"
    #include <time.h>
    
    int main()
    {
        int riga, colonna,vite=1,na_1,na_2, passi=0,logical=1,i,j;
        register char direzione;
        
        int dim1,dim2;
      	do
      	{
      
      		printf("Inserisci la lunghezza del campo di gioco (min %d):\t",LATOMAX);
      		scanf("%d",&dim1);
      		printf("Inserisci la larghezza del campo da gioco ( min %d):\t",LATOMAX);
      		scanf("%d",&dim2);
      	} 
      	while(dim1 <= LATOMAX && dim2 <= LATOMAX);
      	
    	char spazio[dim1][dim2];
    	char *sp=&spazio[0][0]; 
    	crea_spazio(&sp,dim1,dim2); // creo il campo di gioco
    
        system("cls");
        credits();
        system("pause");
        system("cls");
        rules();
        printf("\n");
        system("pause");
        system("cls");
    Start:
        srand(time(NULL));
        riga=37;
        
    	do
        {
            colonna=2+rand()%37;
        }
    
        while (spazio[riga][colonna]=='B');
        spazio[riga][colonna]='V';
        na_1=1+rand()%8;
        na_2=1+rand()%28;
        spazio[na_1][na_2]='X';
        while (logical==1)
        {
            
    		if((passi == MAX_PASSI)&&(vite == 1)) // Controllo se i passi sono ugali 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()%28;
            spazio[1][j]='O';
           
            creazione_campo(&sp,dim1,dim2,vite); // chiamo la funzione per la creazione degli ostacoli
            fflush(stdin);
            direzione=getchar();
            //Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
           
    		    switch (direzione)
            	{
                case 'a':
                case 'A':
    	            
    				passi+=1;
                    spazio[riga][colonna]=' ';
                    colonna--;
                    if (spazio[riga][colonna]=='*')
                    {
                        printf("Non puoi spostarti in questa direzione!\n");
                        system("pause");
                        colonna++;
                    }
                    if (spazio[riga][colonna]=='O')
                    {
                        printf("Hai colpito un ostacolo! Hai perso!\n");
                        vite--;
                        system("pause");
                    }
                    spazio[riga][colonna]='V';
                    
    				break;
                case 'd':
                case 'D':
    			    
    			    passi+=1;
                    spazio[riga][colonna]=' ';
                    colonna++;
                    if (spazio[riga][colonna]=='*')
                    {
                        printf("Non puoi spostarti in questa direzione!\n");
                        colonna--;
                        system("pause");
                    }
                    if (spazio[riga][colonna]=='O')
                    {
                        printf("Hai colpito un ostacolo! Hai perso!\n");
                        vite--;
                        system("pause");
                    }
                    spazio[riga][colonna]='V';
                    break;
                default:
                	 passi+=1;
                	 spazio[riga][colonna]=' ';
    				 if (spazio[riga][colonna]=='O')
                     {
                        printf("Hai colpito un ostacolo! Hai perso!\n");
                        vite--;
                        system("pause");
                     }
                     spazio[riga][colonna]='V';
               }
            //Questa porzione di codice ha il compito di generare degli ostacoli che si sposteranno lungo il percorso ad ogni iterazione
            for(i=38; i>=0; i--)
            {
                for(j=28; j>=0; j--)
                {
                    if(spazio[i][j]=='O')
                    {
                        if(i!=38 && spazio[i+1][j]!='X')
                        {
                            spazio[i][j]=' ';
                            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]=' ';
                        }
                    }
                }
            }
        }
        system("cls");
        return 0;
    }
    
    
    Crea_spazio.cpp
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "Gioco.h"
    
    void crea_spazio(char **spazio,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]="*";      //riga 13
    	  if(j==0 || j=dim2-1 ) spazio[i][j]="*"; 
    	}
      }
    }
    
    Lista errori in crea_spazio.cpp
    riga 13 [Error] invalid conversion from 'const char*' to 'char' [-fpermissive]
    riga 14 [Error] lvalue required as left operand of assignment
    riga 14 [Error] invalid conversion from 'const char*' to 'char' [-fpermissive]
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Come hai visto la riga 13 è

    if(i==0 || i==dim1-1) spazio[j]="*";

    e l'errore è

    invalid conversion from 'const char*' to 'char'

    Considera che questo

    "*" è il 'const char*' e questo

    spazio[j] è il 'char' a cui si riferisce l'errore

    Non ti basta per correggere?
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Devo dichiarare una char A ="*"
    e fare spazio[j]=A ???
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    No ...

    Devi studiare la differenza in C tra una stringa e un char ovvero la differenza tra

    "A"

    e

    'A'
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Si scusa hai ragione era 'A',
    Ecco la modifica:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "Gioco.h"
    
    void crea_spazio(char **spazio,int dim1,int dim2)
    {
      
      int i,j;
      char A='*';
      for(i=0; i <dim1; i++)
      {
      	for(j=0; j<dim2; j++)
    	{
          if(i==0 || i==dim1-1) spazio[i][j]=A;
    	  if(j==0 || j==dim2-1 ) spazio[i][j]=A; 
    	}
      }
    }
    
    ho chiesto la compilazione e mi dice Warning File non compilato ora dove è sbagliato?
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Giacomo_made4core ha scritto:


    ora dove è sbagliato?
    E che ne so se non mostri gli errori?
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Warning
    File non compilato
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    No può essere ... guarda meglio
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Error id return 1 exit status
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Non posso dirti nulla se non vedo tutti gli errori restituiti. Se non sai riportarli mi dispiace.

    In ogni caso, butta il devc++ ... te l'hanno detto mille volte ...
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ci dev'essere qualcosa a monte di quel "Error id return 1 exit status". Se non c'è sivede che il tuo ide lo scrive da qualche altra parte o fa cose strane. Se usassi codeblocks invece che dev potremmo aiutarti meglio. Oppure prova a usare direttamente gcc da terminale. Se non lo conosci leggi il manuale, e stai certo che non è tempo perso. Saper usare gcc da terminale può sempre tornare utile.

    ciao
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ciao Ragazzi ho risolto cosi, ora l' unico problema è che non riesco a creare la matrice bordata da '*', cosa sbaglio??
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define LATOMAX 20
    #define MAX_PASSI 100
    
    void creazione_campo(int,int,int);
    void credits();
    void rules();
    
    char spazio[100][100];
    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
    	char A='*';
    	char B=' ';
    	do
        {
     
            printf("Inserisci la lunghezza del campo di gioco (min %d):\t",LATOMAX);
            scanf("%d",&dim1);
            printf("Inserisci la larghezza del campo da gioco ( min %d):\t",LATOMAX);
            scanf("%d",&dim2);
        }
        while(dim1 < LATOMAX && dim2 < LATOMAX);
      	
      	spazio[dim1][dim2];
    
    	for(i=0; i <dim1; i++)
      	{
         	for(j=0; j<dim2; j++)
       		{
          		if(i==0 || i==dim1-1) 
    			  spazio[i][j]=A;
         		else
         		  spazio[i][j]=B;
    			if(j==0 || j==dim2-1) 
    			  spazio[i][j]=A;
    			else
    			  spazio[i][j]=B;     		
       		}
       		printf("\n");
    	}
        system("cls");
        credits();
        system("pause");
        system("cls");
        rules();
        printf("\n");
        system("pause");
        system("cls");
    Start:
        srand(time(NULL));
        riga=37;
        
    	do
        {
            colonna=2+rand()%37;
        }
    
        while (spazio[riga][colonna]=='V');
        
        spazio[riga][colonna]='V';
        na_1=1+rand()%8;
        na_2=1+rand()%28;
        spazio[na_1][na_2]='X';
        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()%28;
            spazio[1][j]='O';
            
            creazione_campo(dim1,dim2,vite); //richiamo la funzione crea_spazio
            fflush(stdin);
            direzione=getchar();
            //Switch-case che determina il movimento della navicella nel campo dei meteoriti. All'interno di ogni case ci sono dei controlli
           
    		    switch (direzione)
            	{
                case 'a':
                case 'A':
    	            
    				passi+=1;
                    spazio[riga][colonna]=' ';
                    colonna--;
                    if (spazio[riga][colonna]=='*')
                    {
                        printf("Non puoi spostarti in questa direzione!\n");
                        system("pause");
                        colonna++;
                    }
                    if (spazio[riga][colonna]=='O')
                    {
                        printf("Hai colpito un ostacolo! Hai perso!\n");
                        vite--;
                        system("pause");
                    }
                    spazio[riga][colonna]='V';
                    
    				break;
                case 'd':
                case 'D':
    			    
    			    passi+=1;
                    spazio[riga][colonna]=' ';
                    colonna++;
                    if (spazio[riga][colonna]=='*')
                    {
                        printf("Non puoi spostarti in questa direzione!\n");
                        colonna--;
                        system("pause");
                    }
                    if (spazio[riga][colonna]=='O')
                    {
                        printf("Hai colpito un ostacolo! Hai perso!\n");
                        vite--;
                        system("pause");
                    }
                    spazio[riga][colonna]='V';
                    break;
               }
            //Questa porzione di codice ha il compito di generare degli ostacoli che si sposteranno lungo il percorso ad ogni iterazione
            for(i=38; i>=0; i--)
            {
                for(j=28; j>=0; j--)
                {
                    if(spazio[i][j]=='O')
                    {
                        if(i!=38 && spazio[i+1][j]!='X')
                        {
                            spazio[i][j]=' ';
                            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]=' ';
                        }
                    }
                }
            }
        }
        system("cls");
    }
    void creazione_campo(int vite, int dim1, int dim2)
    {
        register int i,j;
        printf("\n");
        for (i=0; i<dim1; i++)
        {
            for (j=0; j<dim2; j++)
            {
                if (spazio[i][j]=='*' || 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 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");
    }
    
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Intanto fai lo stesso errore che facevi all'inizio.
    spazio[dim1][dim2]
    non ti definisce una matrice di dimensioni dim1 x dim2, bensì ti restituisce il valore presente in posizione (dim1, dim2) (o (dim2, dim1), se preferisci); peccato che non catturi in nessun modo quel valore.

    Oltre a ciò, non capisco perché appena prima fai un ciclo dal quale esci solo se dim1 o dim2 superano LATO_MAX, ma questo è un altro discorso.

    Per il momento ti consiglio di fermarti e ristudiare bene le basi del C, perché hai le idee parecchio confuse su certi aspetti.

    ciao
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ho tolto di mezzo spazio[dim1][dim2], il ciclo era per definire una superficie di gioco di almeno 20 x 20, ma resta comunque il fatto che all' esecuzione del programma, venga stampata una unica colonna di asterischi e non una matrice bordata
Devi accedere o registrarti per scrivere nel forum
44 risposte