Car Speed Gioco in C mi aiutate per un particolare?

di il
44 risposte

Car Speed Gioco in C mi aiutate per un particolare?

Ciao Ragazzi sto cercando di implementare un gioco in C , ora vorrei poterlo migliorare, in quanto come adesso è impostato solo se inserisco il tasto desto o sinistre e poi inserisco invio il gioco si muove, e vorrei invece che andasse automaticamente, il progetto appunto, vi inserisco nel codice la traccia del vero progetto...

Gioco auto 
Si vuole sviluppare un programma per la simulazione di un gioco che prevede 
un’auto su un percorso che deve evitare degli ostacoli.   
Si suppone di aver un percorso come in figura dove sul fondo è presente un’auto
che può andare a destra o sinistra.
L’auto deve evitare automaticamente gli ostacoli che incontra durante il percorso. Gli
ostacoli vengono creati uno alla volta ad ogni passo in una posizione casuale sulla prima
riga. L’oggetto si muove di una o due posizioni casuali. Ad ogni turno l’auto viene
spostata automaticamente a destra o a sinistra nel caso un ostacolo si trovi nel suo 
intorno ,cioè di due righe prima della posizione della macchina.  
La partita finisce o quando l’auto si scontra con un oggetto o quando sono passati 100
passi. Effettuare almeno 5 test, variando le condizioni del problema.   
questo è Main

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_PASSI 100
#include "Gioco.h"

int main()
{
    int riga, colonna,vite=1,na_1,na_2, passi=0,logical=1,i,j;
    register char direzione;
    char spazio[40][40]={{'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*'},
        {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}};
    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 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(spazio,vite);
        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");
}
codice delle funzioni

#include <stdio.h>
#include "Gioco.h"
#define R 40
#define C 30

//Semplice function per la stampa di una matrice che rappresenta "lo spazio" dove l'astronave si muove
void creazione_campo(char spazio[40][40], int vite)
{
    register int i,j;
    printf("\n");
    for (i=0; i<R; i++)
    {
        for (j=0; j<C; 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");
}

libreria gioco.h

void creazione_campo(char spazio[40][40], int vite);
void credits();
void rules();

44 Risposte

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

    Qui trovi le funzioni base per colorare, cancellare, muovere il carret e mettere in pausa. Il tutto senza usare quelle chiamate alla system che sono orrende.
    Per ottenere un input asyncrono su windows potresti usare la conio.h e in particolare la funzione kbhit() che ritorna true quando viene premuto un tasto e la getch() che preleva il tasto.
    Non riesco a far di meglio essendo al telefono.
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Grazie del suggerimento per quanto riguarda conio.h, ma non riesco ad utilizzarlo, ora il mio programma prende in input i due valori a o d per la direzione , ma dovrebbe andare in automatico rispettando le specifiche chieste dal testo ed è li il mio maggior problema
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ho gia provato da solo, ma il problema che il cursore o va a destra o a sinistra sempre, e fuoriesce dalla matrice
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Considerando tutto dopo che ho inserito nel codice la libreria conio.h
    mi ha aperto il file: Makefile.win:
    con le seguenti diciture:
    # Project: Pr_Giacomo_Gargiulo
    # Makefile created by Dev-C++ 5.6.3

    CPP = g++.exe
    CC = gcc.exe
    WINDRES = windres.exe
    OBJ = Gioco_fuction.o Gioco_main.o
    LINKOBJ = Gioco_fuction.o Gioco_main.o
    LIBS = -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc -g3
    INCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.8.1/include"
    CXXINCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.8.1/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++"
    BIN = Pr_Giacomo_Gargiulo.exe
    CXXFLAGS = $(CXXINCS) -g3
    CFLAGS = $(INCS) -g3
    RM = rm.exe -f

    .PHONY: all all-before all-after clean clean-custom

    all: all-before $(BIN) all-after

    clean: clean-custom
    ${RM} $(OBJ) $(BIN)

    $(BIN): $(OBJ)
    $(CC) $(LINKOBJ) -o $(BIN) $(LIBS)

    Gioco_fuction.o: Gioco_fuction.cpp
    $(CC) -c Gioco_fuction.cpp -o Gioco_fuction.o $(CFLAGS)

    Gioco_main.o: Gioco_main.cpp
    $(CC) -c Gioco_main.cpp -o Gioco_main.o $(CFLAGS)


    e mi selezione un errore in questo file alla riga di codice:
    $(CC) $(LINKOBJ) -o $(BIN) $(LIBS)
    e poi
    C:\Users\Giacomo\Desktop\Relazione_Progetto_Programmazione1_Gargiulo_Giacomo_0124000773\Gioco Auto\collect2.exe [Error] ld returned 1 exit status
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ma dove vuoi andare col dev-c++?
    ciao, o passi ad usare un IDE serio, oppure rimani con i tuoi problemi sul dev
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ciao Ragazzi per fare una cosa più carina invece di riempire la matrice attraverso una dichiarazione fatta a mano l' ho voluta riempire come se volessi creare un quadrato di asterischi vuoto, ecco il codice:

    main
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define MAX_PASSI 100
    #define LATOMAX 20
    #include "Gioco.h"
    
    int main()
    {
        int riga, colonna,vite=1,na_1,na_2, passi=0,logical=1,i,j;
        register char direzione;
        
    	unsigned int lato, oriz, vert;
    	unsigned int invalid_data = 1;
    	/* richiede la lunghezza (intera) del lato (max LATOMAX) */
    	while (invalid_data)
    	{
    		printf("Inserire il valore del lato (min %d): ", LATOMAX);
    		(void) scanf("%u", &lato);
    		
    		if (lato <= LATOMAX )
    			invalid_data = 0;
    		else
    			printf("Valore non valido!\n");
    	}
    	char spazio[lato][lato];
    	vert = lato;
    	while (vert > 0)
    	{
    		oriz = lato;
    		while (oriz > 0)
    		{
    			if ((vert == 1) || (vert == lato) ||(oriz == 1) || (oriz == lato))
    			{
    				spazio=[vert][oriz]={"*"};
    		    }
    			else
    			{
    				spazio=[vert][oriz]={" "};
    		    }
    			oriz--;
    		}
    		printf("\n");
    		vert--;
        }
    
        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 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(spazio,lato,vite);
            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");
    }
    
    Ecco il file della funzione:
    
    #include <stdio.h>
    #include "Gioco.h"
    
    //Semplice function per la stampa di una matrice che rappresenta "lo spazio" dove l'astronave si muove
    void creazione_campo(char spazio[lato][lato],unsigned int lato, int vite)
    {
        register int i,j;
        printf("\n");
        for (i=0; i<lato; i++)
        {
            for (j=0; j<lato; 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");
        }
    }
    
    Ecco il file libreria:
    
    void creazione_campo(char spazio[lato][lato],unsigned int lato , int vite);
    void credits();
    void rules();
    
    Gli errori che mi fornisce al momento il compilatore per il file libreria sono:
    che lato non è dichiarato poi,
    riga 2 colonna 45 [Error] expected ')' before ',' token
    riga 2 colonna 46 [Error] expected unqualified-id before 'unsigned'

    il compilatore inoltre mi fornisce la sessa tipologia di errore anche per il file della function,

    Nel main mi fornisce il seguente errore:
    riga 28 recipe for target 'Gioco_fuction.o' failed
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Credo che gli errori nella libreria e nella funzione siano dovuti al fatto che inizializzi la dimensione della matrice con lato, che è anche un parametro della stessa funzione.
    Devi usare una costante (oppure in c99 una variabile già inizializzata, ma deve avere lo scope corretto e comunque non so se funziona anche per le matrici che sono parametri di funzioni.

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

    Usa l'allocazione dinamica e i puntatori.
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Ho risolto cosi ma mi da ancora degli errori ecco il main
    
    #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;
        
        char spazio[LATO][LATO];
        
    	crea_spazio(spazio, ('*'),(' ')); // 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(spazio,vite);
            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");
    }
    
    Ecco crea_spazio
    
    #include "Gioco.h"
    void crea_spazio(char spazio[][LATO], char C, char A )
    {
    
    	unsigned int oriz, vert;
    
    	vert = LATO;
    	while (vert > 0)
    	{
    		oriz = LATO;
    		while (oriz > 0)
    		{
    			if ((vert == 1) || (vert == LATO) ||(oriz == 1) || (oriz == LATO))
    			{
    				spazio=[vert][oriz]=C; // riga 15
    		    }
    			else
    			{
    				spazio=[vert][oriz]=A; //riga 19
    		    }
    			oriz--;
    		}
    		printf("\n");
    		vert--;
    	}
    }
    
    Ecco le altre funzioni
    
    #include "Gioco.h"
    
    //Semplice function per la stampa di una matrice che rappresenta "lo spazio" dove l'astronave si muove
    void creazione_campo(char spazio[LATO][LATO], int vite)
    {
        register int i,j;
        printf("\n");
        for (i=0; i<LATO; i++)
        {
            for (j=0; j<LATO; 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");
    }
     
    
    e infine la libreria
    
    #include <stdio.h>
    #include <stdlib.h>
    #define LATO 40
    #define MAX_PASSI 100
    #define LATOMAX 20
    //dichiaro le funzioni utilizzate nel programma
    void creazione_campo(char [][LATO],int );
    void crea_spazio(char [][LATO],char,char);
    void credits();
    void rules();
     
    
    Ora gli errori sono rivolti tutti alla funzione crea_spazio ecco la lista:
    In lambda function:
    riga 15 18 [Error] expected '{' before '[' token
    In function 'void crea_spazio(char (*)[40], char, char)':
    riga 15 18 [Warning] lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
    riga 15 18 [Error] no match for 'operator[]' (operand types are 'crea_spazio(char (*)[40], char, char)::__lambda0' and 'unsigned int')

    GLi stessi errori valgono per la riga 19 di crea_spazio
    Io credo che questi errori siano dati di bug nella mia versione del compilatore, ma ditemi voi
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Spazio=[vert][oriz]=C;

    Questa è la riga con l'errore indicato dal compilatore.
    L'hai controllata?
    Ci vedi nulla di strano?
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Che cretino che sono XP, ora ho rimediato, perdonami oregon, potevo benissimo risolverlo da solo xP ma nn riuscivo a vederlo, ora mettendo spazio[LATO][Lato]=C etc ho provato a compilare il file, e mi fornisce un warning File non compilato
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Il problema no erano gli indici vert e orriz, ma il fatto che ci fosse l'uguale tra nome dell'array e indici.
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Sisis scusa ho sbagliato a scrivere, ora però resta il fatto che mi dia : FIle non Compilato
  • Re: Car Speed Gioco in C mi aiutate per un particolare?

    Non sappiamo se ci sono altri errori simili ... hai controllato prima di scrivere?

    Se hai una lista di errori, controlla quello che hai scritto alla riga indicata come primo errore, la correggi, ricompili e rifai finché non hai errori.
Devi accedere o registrarti per scrivere nel forum
44 risposte