Oppure

Loading
27/05/17 10:01
lallo12
in realtà sono al primo anno di programmazione1...il pezzo di ocdice che hai postato tu dovrebbe essere riscritto cosi
void pulisci(int sparato, char campo[8][7], int *x, int *y) 
{      
        if(sparato==1)
        {
        campo[*x][*y]=' ';         
        } 
      } 
   } 
aaa
27/05/17 10:02
Ripeto.. Se indenti correttamente il codice (e non l'hai ancora fatto) ti accorgi subito dove sta l'errore.

Fossi in te cercherei di capire se la do..while è aperta/chiusa correttamente.
27/05/17 10:06
Mikelius
Questo e' da Wikipedia.

wikiwand.com/it/…

Troverai una brevissima guida sui diversi stili con cui puoi identare. io ti consiglio lo stile K&R.


Postato originariamente da lallo12:

in realtà sono al primo anno di programmazione1...il pezzo di ocdice che hai postato tu dovrebbe essere riscritto cosi
void pulisci(int sparato, char campo[8][7], int *x, int *y) 
{      
        if(sparato==1)
        {
        campo[*x][*y]=' ';         
        } 
      } 
   } 


Lo noti che apri 2 parentesi e ne chiudi 3?

Con l'identazione (cioè allineare le parentesi di apertura e chiusura in questo caso) lo noteresti subito che c'è una parentesi di troppo. Quindi ti dovresti chiedere. Ma è una parentesi in più o doveva essere chiusa da qualche altra parte?


Ultima modifica effettuata da Mikelius 27/05/17 10:10
aaa
27/05/17 13:38
lallo12
ora parte, ma non mi piace molto graficamente, potete provarlo anche voi e darmi dei consigli ?
/* 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).
*/
/* 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("%2c", 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 lumo 27/05/17 15:34
aaa
27/05/17 14:50
Mikelius
Parte, ok.
ma funziona come vorresti?
Lascia perdere la grafica e l'ottimizzazzione per ora.
Come ho detto: la parentesi sbagliata era solo 1 degli errori presenti.
Dovresti farti uno schemino su carta e elaborare il progetto funzione per funzione, passo per passo.

// righe 39-48 

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");
    }

Qua, come e quando hai dato un valore a sparato_V?


// righe 117-130 
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';
}


Questa invece, che vorresti facesse?
aaa
27/05/17 15:35
lumo
lallo ho indentato il tuo codice per pietà, impara come si fa altrimenti è impossibile per gli altri leggerlo, specie per il tuo professore di programmazione 1.
aaa
27/05/17 19:37
AldoBaldo
Io non ho ancora capito come dovrebbe essere la dinamica del gioco...

Edit: anche in questo caso mi sembrava di ricordare qualcosa di simile. Non siamo su questa stessa linea?
pierotofy.it/pages/extras/forum/2/1060600-problema_per_un_progetto_c/
Ultima modifica effettuata da AldoBaldo 27/05/17 19:49
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
28/05/17 11:04
lumo
Postato originariamente da AldoBaldo:

Io non ho ancora capito come dovrebbe essere la dinamica del gioco...

Edit: anche in questo caso mi sembrava di ricordare qualcosa di simile. Non siamo su questa stessa linea?
pierotofy.it/pages/extras/forum/2/1060600-problema_per_un_progetto_c/


Ma visto che a quello avevi dato la soluzione, qui saremmo al secondo che chiede la stessa cosa? Non so se ridere o piangere :pat:
Per ora lascio aperta la discussione ma mi aspetto più serietà, altrimenti chiudo.
Ultima modifica effettuata da lumo 28/05/17 11:29
aaa