Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema a creare una griglia random

    allora il programma è per una semplice battaglia navale, a un certo punto voglio che il computer crei a caso una griglia per se. ma quando la crea.... anche se dovrebbe essere a random.... è sempre la stessa griglia! dove sbaglio? grazie in anticipo per le risposte

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void stampaIntestazione();
    void stampaMenu();
    //char preparaGriglie(int);
    
    int main()
    {
        int a = 0;
        int b, n, i, j, random;
        int c = 0;
        int contatore;
        srand(time(NULL));
        char griglia[n][n];
        char grigliaComputer[n][n];
        
        
        stampaIntestazione();
        while (a==0)
        {
              stampaMenu();
              scanf("%d",&b);
              if(b==2)
              {break;}
              else if (b==1)
              {
                       //scelgo la dimensione della griglia
                       while(c==0)
                       {
                       printf("\nDi che dimensione vuoi la griglia? (min=5   max=8)\n");
                       scanf("%d",&n);
                       if (n<5 || n>8)
                          {
                               printf("\nDimensione non Corretta");
                          }
                       else
                          {
                               c=1;
                          }
                       }
                       
                       //inizializzo la griglia
                       for (i=0; i<n; i++)
                       {
                           for (j=0; j<n; j++)
                           {
                               griglia[i][j]='-';
                               grigliaComputer[i][j]='-';
                           }
                       }
                       
                       //decido quante navi da abbattere ci saranno nella griglia
                       if (n==5 || n==6)
                       {
                               contatore = 10;
                       }
                       if (n==7 || n==8)
                       {
                               contatore = 20;
                       }
                       
                       //setto la griglia del computer
                       while (contatore > 0)
                       {
                             for(i=0; i<n; i++)
                             {
                                      for(j=0; j<n; j++);
                                      {                                          
                                               random = rand();
                                               printf("%d \n",random);
                                               if (random%8 == 1)
                                               {
                                                            grigliaComputer[i][j]='O';
                                                            contatore--;
                                               }
                                      }
                             }
                       }
                       
                       
                       //stampa di prova
                       for (i=0; i<n; i++)
                       {
                           for (j=0; j<n; j++)
                           {
                               printf("%c ",grigliaComputer[i][j]);
                           }
                           printf("\n");
                       }
                       
                       c=0;
              }
              else
              {continue;}
        }
        return 0;
    }
    
    
    void stampaIntestazione()
    {
          printf("+------------------------------------------------------------------------------+");
          printf("|  ^     ^   @                                                    @   ^     ^  |");
          printf("| ^_^   ^ç^  @*              <Battaglia Navale>                  *@  ^ç^   ^_^ |");
          printf("|^   ^ ^   ^ @                  *by Boulayo*                      @ ^   ^ ^   ^|");
          printf("|     ^     ^                                                      ^     ^     |");
          printf("+------------------------------------------------------------------------------+");
    }
    
    void stampaMenu()
    {
          printf("\nScegli e premi invio    1: - Nuova Partita      2: - Esci dal gioco\n\n");
    }

  2. #2
    codice:
    int a = 0;
    int b, n, i, j, random;
    int c = 0;
    int contatore;
    srand(time(NULL));
    char griglia[n][n];
    char grigliaComputer[n][n];
    SBAGLIATISSIMO !!!!!!!!!!!!!!!
    VVoVe:

    1) griglia viene dichiarata con una variabile non-inizializzata.
    2) n non è inizializzato, e non si può utilizzare come dimensione del vettore.
    3) srand è in mezzo alle dichiarazioni, dovrebbe esserne esterno.

    CONSIGLIO: compila con i flag ansi e pedantic.


  3. #3
    ma per funzionare funziona la griglia! perchè allora dovrebbe essere sbagliato?
    tu come faresti per scrivere un codice che faccia la stessa cosa che fa il mio ora?

  4. #4
    Il fatto che funzioni si chiama
    Correggi che è meglio, poi andremo a correggere tutti gli ALTRI errori.


  5. #5
    Originariamente inviato da boulayo
    ma per funzionare funziona la griglia! perchè allora dovrebbe essere sbagliato?
    Per i motivi che menphisx ti ha cortesemente elencati.

    Aggiungo anche che:
    ISO C90 forbids variable-size array 'griglia'
    ISO C90 forbids variable-size array 'grigliaComputer'
    Essenzialmente è giusto che il tuo programma abbia un comportamento indefinito. Tra le cose indefinbili ci stanno, una vincita alla lotteria, programmi che non funzionano o producono danni. Per il teorema della sfiga, è estremamente raro che simili errori producano una vincita alla lotteria.

    ;-)

  6. #6
    ho fatto le correzioni che mi hai detto tu e ora funziona :-D
    ora mi sorge un altro problema....
    come posso fare una funzione che mi stampa lo stato attuale di una griglia?

    ho provato vari tipi di dichiarazioni di funzione, ma ricevo sempre errori uff

    intanto ecco il codice che ho per ora

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    void stampaIntestazione();
    void stampaMenu();
    
    
    int main()
    {
        srand(time(NULL));
        int a = 0;
        int b, i, j, n;
        int c = 0;
        int contatore;
        int random;
        
        stampaIntestazione();
        while (a==0)
        {
           
              
              stampaMenu();
              scanf("%d",&b);
              if(b==2)
              {break;}
              else if (b==1)
              {
                       //scelgo la dimensione della griglia
                       while(c==0)
                       {
                       printf("\nDi che dimensione vuoi la griglia? (min=5   max=8)\n");
                       scanf("%d",&n);
                       if (n<5 || n>8)
                          {
                               printf("\nDimensione non Corretta");
                          }
                       else
                          {
                               c=1;
                          }
                       }
                       
                       //dichiarazione della griglia
                       char griglia[n][n];
                       char grigliaComputer[n][n];
                       
                       //decido quante navi da abbattere ci saranno nella griglia
                       if (n==5 || n==6)
                       {
                               contatore = 10;
                       }
                       if (n==7 || n==8)
                       {
                               contatore = 20;
                       }
                       
                       //inizializzo la griglia
                       for (i=0; i<n; i++)
                       {
                           for (j=0; j<n; j++)
                           {
                               griglia[i][j]='-';
                               grigliaComputer[i][j]='-';
                           }
                       }
                       
                       //setto la griglia del computer
                       while (contatore > 0)
                       {
                             for (i=0; i<n; i++)
                             {
                                 for (j=0; j<n; j++)
                                 {
                                     if (grigliaComputer[i][j]=='-')
                                     {
                                     random = rand()%100;
                                     if (random==1)
                                     {
                                                                                                   
                                                      grigliaComputer[i][j] = 'O';
                                                      contatore--;
                                     }
                                     if (contatore == 0)
                                     {
                                                   break;
                                     }
                                     }
                                 }                             
                             }
                       }
                                                                   
                       
                       c=0;
              }
              else
              {continue;}
        }
           
        return 0;
    }
    
    
    void stampaIntestazione()
    {
          printf("+------------------------------------------------------------------------------+");
          printf("|  ^     ^   @                                                    @   ^     ^  |");
          printf("| ^_^   ^ç^  @*              <Battaglia Navale>                  *@  ^ç^   ^_^ |");
          printf("|^   ^ ^   ^ @                  *by Boulayo*                      @ ^   ^ ^   ^|");
          printf("|     ^     ^                                                      ^     ^     |");
          printf("+------------------------------------------------------------------------------+");
    }
    
    void stampaMenu()
    {
          printf("\nScegli e premi invio    1: - Nuova Partita      2: - Esci dal gioco\n\n");
    }

  7. #7
    Non puoi scrivere una cosa del genere:
    codice:
    char griglia[n][n];
    Non è standard, è possibile solo in C++.
    Se vuoi un'array di dimensione variabile, devi utilizzare puntatori e funzioni di allocazione.
    Le dichiarazioni stanno SEMPRE all'inizio del blocco.
    srand va DOPO le dichiarazioni.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.