Oppure

Loading
26/05/17 20:45
lallo12
salve a tutti ho implementato un codice ma mi da un errore, qualcuno sa spiegarmi di cosa si tratta.
il mio codice è questo:
/* Si vuole sviluppare un programma per la simulazione del gioco di 4 navicelle spaziali . La mappa da gioco risulta di forma rettangolare e di dimensioni 8x7. L’utente ha a disposizione una navicella ferma (rettangolo rosso in figura). Nel campo da gioco si muovono 3 navicelle avversarie che devono essere colpite (rettangolo giallo, blu e verde).
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//prototipi
void muovi_gialla(int random, char campo[8][7], int *G_x, int *G_y);
void muovi_verde(int random, char campo[8][7], int *V_x, int *V_y);
void muovi_blue(int random, char campo[8][7], int *B_x, int *B_y);
int controllo(int spara,int y);
void pulisci(int sparato, char campo[8][7], int *x, int*y);
int main(int argc, char *argv[])
{
    srand((unsigned int)time(0));
    int i,j,G_x,G_y,B_x,B_y,V_x,V_y,R_x,R_y,random,sparato_G,sparato_B,sparato_V;
    int K=0;
    int spara=1;
    char campo[8][7]= {{'G', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', 'B', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', 'V'},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', 'R', ' ', ' ', ' '}};
 G_x=0;G_y=0;
 B_x=1;B_y=3;
 V_x=2;V_y=6;
 R_x=7;R_y=3;
//posizionamento iniziale


for(i=0;i<8;i++)
{
    for(j=0;j<7;j++)
    printf("%c",campo[i][j]);
    printf("\n");
}
K=0;  //passi
do{
K++;
if (sparato_V!=1)    //se la navicella non è stata colpita allora muoverla
{
    random=rand()%10;
    muovi_verde(random, campo, &V_x,&V_y);
    printf("\tRandom V:%d",random);
}
else{
    printf("la verde e' colpita\n");
}
if (sparato_B!=1)
{
    random=rand()%10;
    muovi_blue(random, campo, &B_x,&B_y);
    printf("\tRandom V:%d",random);
}
else{
    printf("la blue e' colpita\n");
}
if (sparato_G!=1)
{
    random=rand()%10;
    muovi_gialla(random, campo, &G_x,&G_y);
    printf("\tRandom V:%d",random);
}
else{
    printf("la gialla e' colpita\n");
}
printf("\n");
for(i=0;i<8;i++) //visualizza sullo schermo il campo dopo il primo movimento delle navicelle
{
    for(j=0;j<7;j++)
        printf("%c",campo[i][j]);
        printf("\n");
        printf("\n\n");
        printf("\n\t\t\t k=%d\n", K);
        printf("\t V=%d%d", V_x,V_y);
        if(sparato_V==1)
        {
            printf("colpita");
        }
printf("\n\t B=%d%d", B_x,B_y);
 if(sparato_B==1)
        {
            printf("colpita");
        }
printf("\n\t B=%d%d", G_x,G_y);
 if(sparato_G==1)
        {
            printf("colpita");
        }
        printf("\n\nvuoi sparare? 1=SI alro int=NO \n\n");
        scanf("&d",&spara);
        printf("\n");

if(sparato_V!=1)
{
    sparato_V=controllo(spara, V_y);
}
if(sparato_B!=1)
{
    sparato_B=controllo(spara, B_y);
}

if(sparato_G!=1)
{
    sparato_G=controllo(spara, G_y);
}

 /*questi controlli servono per controllare, in caso di sparo, se le navicelle si trovano in posizione*/
pulisci(sparato_V,campo, &V_x,&V_y);
pulisci(sparato_B,campo, &B_x,&B_y);
pulisci(sparato_G,campo, &G_x,&G_y);

}
while (((sparato_G!=1)|| (sparato_B!=1) || (sparato_V!=1)) && (K<100)); /*esegui il ciclo finchè tutte e tre le navicelle non sono state distrutte oppure il contatore passi è arrivato a 100*/

printf("\n\n\n Fine partita \n\n\n");
system("PAUSE");
return 0;
}

/* Funzioni movimento
random: è  il numero random generato nel main
*x, *y sono coordinate delle navicelle che cambiano con il passare dei turni
*/

void muovi_gialla(int random, char campo[8][7], int *G_x,int *G_y)
{
    if((random<3)&&(*G_y==6))
    {
        campo[*G_x][*G_y]=' ';
        *G_y=0;
    }
    else if(random<3)
    {
        campo[*G_x][*G_y]=' ';
        *G_y=*G_y+1;
    }
    campo[*G_x][*G_y]='G';
}
void muovi_verde(int random, char campo[8][7], int *V_x,int *V_y)
{
        campo[*V_x][*V_y]=' ';
        if(random<4){

    if(*V_y==6)
        *V_y=2;
    else if(*V_y==5)
        *V_y=1;
    else if(*V_y==4)
        *V_y=0;
    else
        *V_y=*V_y+3;
        }
        else if(random>=4 && random <=6)
        {
            if(*V_y==0)
               *V_y=5;
                else if(*V_y=1)
                *V_y=6;
            else
                *V_y=*V_y+2;
        }
        else if(random>=7)
        {
            if(*V_y==6)
               *V_y=0;
               else
                *V_y=*V_y+1;
        }
        campo[*V_y][*V_y]='V';
}
void muovi_blue(int random, char campo[8][7], int *B_x,int *B_y)
{
    campo[*B_x][*B_y]=' ';
    if (random<7)
    {
        if(*B_y==1)
            *B_y=6;
        else if(*B_y==0)
            *B_y=5;
        else
            *B_y=*B_y-2;
    }
    else if (random>7)
    {
        if(*B_y==0)
            *B_y=6;
        else
            *B_y=*B_y-1;
    }
    campo[*B_x][*B_y]='B';
}

/* la function che segue controlla se una navicella e' stata colpita,
controlla inoltre anche se l'utente ha inserito il valore 1(l'opzione per sparare ) o un altro intero (nel caso l'utente decidesse di non sparare)*/

int controllo(int spara, int y)
{
    int sparato;
    if((spara==1)&&(y==3))
    {
        sparato=1;
    }
    else
    {
        sparato=0;
    }
    return sparato;
}
void pulisci(int sparato, char campo[8][7], int *x, int *y) //pulisce dalla campo la navicella colpita
 
{
    {
        if(sparato==1)
            campo[*x][*y]=' ';
    }
}
}


mi da questo errore:
|115|error: expected 'while' before 'void'|
Ultima modifica effettuata da lallo12 27/05/17 6:37
aaa
26/05/17 22:59
Mikelius
Gli errori sono più di 1.

Innanzitutto, cosa dovrebbe fare il programma??
Secondo:

Se vuoi capire un errore, basta indentare bene il codice. Te ne dovresti accorgere subito, è un buon esercizio.
Un altro errore (logico): riguarda bene quello che scrivi dentro gli if..elseif...elsee i do..while
controlla pure le varie funzioni come parametri e sopratutto parentesi

Ultima modifica effettuata da Mikelius 26/05/17 23:06
aaa
27/05/17 5:39
Devi assolutamente indentare il codice ed individuare i vari blocchi, altrimenti non capirai mai dove sta il problema.

27/05/17 6:24
lallo12
Scusami cosa intendi per indentare il codice?
aaa
27/05/17 6:38
lallo12
ho modificato il codice, spero cosi sia piu' leggibile
aaa
27/05/17 7:03
Mikelius
Postato originariamente da lallo12:

Scusami cosa intendi per indentare il codice?


E' il termine informatico per indicare lo stazio prima delle istruzioni, o la posizione di parentesi e simili.
Una sorta di rientro che trovi nei testi letterali.

// codice non indentato
void pulisci(int x, int y)
{
{
if(...)
x=y;
}
}
}

// codice indentato
void pulisci(int x, int y)
{
    if(...)
   {
        x=y;
    }
}



In questo modo, hai una visione di apertura e chiusura delle parentesi, "ad esempio"


P.s. non modificare il primo post. viene difficile seguire le modifiche al codice se lo fai
Ultima modifica effettuata da Mikelius 27/05/17 7:06
aaa
27/05/17 7:27
lallo12
Grazie per la spiegazione spero sia più chiaro, sicuramente con il tempo saprò fare di meglio.
comunque ancora non riesco a individuare l'errore
/* Si vuole sviluppare un programma per la simulazione del gioco di 4 navicelle spaziali . La mappa da gioco risulta di forma rettangolare e di dimensioni 8x7. LÂ’utente ha a disposizione una navicella ferma (rettangolo rosso in figura). Nel campo da gioco si muovono 3 navicelle avversarie che devono essere colpite (rettangolo giallo, blu e verde).
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//prototipi
void muovi_gialla(int random, char campo[8][7], int *G_x, int *G_y);
void muovi_verde(int random, char campo[8][7], int *V_x, int *V_y);
void muovi_blue(int random, char campo[8][7], int *B_x, int *B_y);
int controllo(int spara,int y);
void pulisci(int sparato, char campo[8][7], int *x, int*y);
int main(int argc, char *argv[])
{
    srand((unsigned int)time(0));
    int i,j,G_x,G_y,B_x,B_y,V_x,V_y,R_x,R_y,random,sparato_G,sparato_B,sparato_V;
    int K=0;
    int spara=1;
    char campo[8][7]= {{'G', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', 'B', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', 'V'},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', ' ', ' ', ' ', ' '},
                     {' ', ' ', ' ', 'R', ' ', ' ', ' '}};
 G_x=0;G_y=0;
 B_x=1;B_y=3;
 V_x=2;V_y=6;
 R_x=7;R_y=3;
 //posizionamento iniziale

for(i=0;i<8;i++)
{ 
    for(j=0;j<7;j++)
    printf("%c",campo[i][j]);
    printf("\n");
}
K=0; //passi
do
{
K++;
   if (sparato_V!=1) //se la navicella non è stata colpita allora muoverla
    {
    random=rand()%10;
    muovi_verde(random, campo, &V_x,&V_y);
    printf("\tRandom V:%d",random);
    }
        else
        {
         printf("la verde e' colpita\n");
        }
    if (sparato_B!=1)
    {
    random=rand()%10;
    muovi_blue(random, campo, &B_x,&B_y);
    printf("\tRandom V:%d",random);
    }
        else
        {               
         printf("la blue e' colpita\n");
        }
    if (sparato_G!=1)
    {
     random=rand()%10;
     muovi_gialla(random, campo, &G_x,&G_y);
     printf("\tRandom V:%d",random);
                          }
       else
       {
        printf("la gialla e' colpita\n");
       }

printf("\n");

for(i=0;i<8;i++) //visualizza sullo schermo il campo dopo il primo movimento delle navicelle
{
    for(j=0;j<7;j++)
        printf("%c",campo[i][j]);
        printf("\n");
        printf("\n\n");
        printf("\n\t\t\t k=%d\n", K);
        printf("\t V=%d%d", V_x,V_y);
         if(sparato_V==1)
         {
        printf("colpita");
         }
           printf("\n\t B=%d%d", B_x,B_y);
 if(sparato_B==1)
{
    printf("colpita");
}
   printf("\n\t B=%d%d", G_x,G_y);
   
if(sparato_G==1)
{
    printf("colpita");
}
    printf("\n\nvuoi sparare? 1=SI alro int=NO \n\n");
    scanf("&d",&spara);
    printf("\n");

if(sparato_V!=1)
{
    sparato_V=controllo(spara, V_y);
}
    if(sparato_B!=1)
    {
    sparato_B=controllo(spara, B_y);
    }

        if(sparato_G!=1)
        {
        sparato_G=controllo(spara, G_y);
        }
        
//questi controlli servono per controllare,in caso di sparo, se le navicelle sono in posizione

pulisci(sparato_V,campo, &V_x,&V_y);
pulisci(sparato_B,campo, &B_x,&B_y);
pulisci(sparato_G,campo, &G_x,&G_y);

}
while (((sparato_G!=1)|| (sparato_B!=1) || (sparato_V!=1)) && (K<100)) /*esegui il ciclo finchè tutte e tre le navicelle non sono state distrutte oppure il contatore passi è arrivato a 100*/
printf("\n\n\n Fine partita \n\n\n");
system("PAUSE");
return 0;
}
/* Funzioni movimento
random: è  il numero random generato nel main
*x, *y sono coordinate delle navicelle che cambiano con il passare dei turni
*/
void muovi_gialla(int random, char campo[8][7], int *G_x,int *G_y)
{
    if((random<3)&&(*G_y==6))
    {
        campo[*G_x][*G_y]=' ';
        *G_y=0;
    }
        else if(random<3)
        {
        campo[*G_x][*G_y]=' ';
        *G_y=*G_y+1;
        }
campo[*G_x][*G_y]='G';
}
void muovi_verde(int random, char campo[8][7], int *V_x,int *V_y)
{
        campo[*V_x][*V_y]=' ';
        if(random<4)
        {
            if(*V_y==6)
            *V_y=2;
                 else if(*V_y==5)
                 *V_y=1;
                     else if(*V_y==4)
                     *V_y=0;
                         else
                            *V_y=*V_y+3;
        }
        else if(random>=4 && random <=6)
        {
            if(*V_y==0)
               *V_y=5;
                else if(*V_y=1)
                *V_y=6;
            else
                *V_y=*V_y+2;
        }
            else if(random>=7)
            {
            if(*V_y==6)
               *V_y=0;
               else
                *V_y=*V_y+1;
            }
campo[*V_y][*V_y]='V';
}
void muovi_blue(int random, char campo[8][7], int *B_x,int *B_y)
{
    campo[*B_x][*B_y]=' ';
    if (random<7)
    {
        if
        (*B_y==1)
            *B_y=6;
        else if(*B_y==0)
            *B_y=5;
        else
            *B_y=*B_y-2;
    }
            else if (random>7)
            {
            if(*B_y==0)
            *B_y=6;
            else
            *B_y=*B_y-1;
             }
campo[*B_x][*B_y]='B';
}
/* la function che segue controlla se una navicella e' stata colpita,
controlla inoltre anche se l'utente ha inserito il valore 1(l'opzione per sparare ) o un altro intero (nel caso l'utente decidesse di non sparare)*/

int controllo(int spara, int y)
{
    int sparato;
    if((spara==1)&&(y==3))
    {
    sparato=1;
    }
        else
        {
        sparato=0;
        }
return sparato;
}
void pulisci(int sparato, char campo[8][7], int *x, int *y)
{
        {
        if(sparato==1)
        campo[*x][*y]=' ';
        }
}
}
Ultima modifica effettuata da lallo12 27/05/17 7:32
aaa
27/05/17 9:39
Mikelius
Ti do un aiutino:

Postato originariamente da lallo12:
void pulisci(int sparato, char campo[8][7], int *x, int *y)
{
        {
        if(sparato==1)
        campo[*x][*y]=' ';
        }
}
}



qua non ti sembra ci sia qualcosa di strano?

Solo per curiosità, ma che studi hai fatto?
Questo progetto non è impegnativo, ma lo diventa se sei alle prime armi.
Qua c'è un errore evidente, se non riesci a localizzarlo è meglio che riprendi i concetti base del linguaggio.
Non è per non aiutarti col giochino. ma certi errori denotano una scarsa conoscenza del linguaggio, alle sue basi.
aaa