Giochino c++

di il
62 risposte

62 Risposte - Pagina 3

  • Re: Giochino c++

    Così non stai controllando se c'è collisione.
    
    dimensione = rand() % 4 + 1; //fin quì ci siamo. scegli una dimensione tra 1 e 4.
    bool barcaPosizionata = false;
    for (int i = 1; i < 10 && !barcaPosizionata; ++i)
     {
            for(int j = 1; j < 10 && !barcaPosizionata; ++j) 
            {
                 //controllo x ogni punto
                if(j + dimensione > 9)
                  continue;  //scarta posizioni che mandano l'index fouri dalla riga
                bool collisione = false;
                while(k = j; k < j + dimensione && !collisone; k++)
                {
                    if(griglia[i][k] == true) 
                      {
                         collisione = true;
                       }
                }
               if(!collisione)
               {
                      while(k = j; k < j + dimensione; k++)
                      { 
                          griglia[i][k] = true; //piazzamento barca  
                      }   
                     barcaPosizionata = true;
               }
            }
    }
    
    A grosso modo questo può essere un algoritmo anche se c'è molto da migliorare nel senso che bisogna scriverla in un modo meno lungo ma almeno hai l'idea di ciò che ti volevo dire. Tra altro non ho controllato con compilatore se ci sono errori perche l'ho scritta direttamente.
  • Re: Giochino c++

    Sono certo che andrà benissimo comunque non so se ci sarei arrivato.
    In questo modo la funzione mi dovrebbe disporre le navi in ogni direzione?
  • Re: Giochino c++

    Solo in orizzontale. per il verticale dovresti fare k = i nei cicli while.
  • Re: Giochino c++

    Ah...perfetto
  • Re: Giochino c++

    Le funzioni sono a posto ma succede una cosa davvero curiosa: al primo tentativo di inserimento delle coordinate la scacchiera assume questo aspetto...con un simbolino in basso e degli spazi vuoti. Sai perchè?
    Allegati:
    7887_f250a515419743639752b767175abe61.png
    7887_f250a515419743639752b767175abe61.png
  • Re: Giochino c++

    Il simbolo è il carattere ascii true (1) e gli spazi è il carattere ascii false (0).
    Basta cambiare il true con '*' e il false con '.'
  • Re: Giochino c++

    Scusa ma non ho capito...nel codice devo sostituire tutti i true con degli asterischi!?
  • Re: Giochino c++

    SI.la griglia l'hai definita come char e non come bool quindi la griglia accetta dei caratteri.
  • Re: Giochino c++

    C'è qualcosa che non mi torna...veramente credevo di averla definita in entrambi i modi perchè ho scritto
     bool griglia [9][9];
    char mat [9][9];
  • Re: Giochino c++

    Posta il codice allora che non si capisce niente. Perche hai due definizioni e soppratutto quale dei due usi?
  • Re: Giochino c++

    Eccolo, comunque i simboli cambiano, a volte è un cuoricino, a volte un rombo, ...
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <iomanip>
    using namespace std;
    
    bool griglia [9][9];
    char mat [9][9];
    int dimensione;
    
    void DisponiNavi() {
        srand(time(NULL));
        for (int i = 1; i < 10; ++i) {
            for(int j = 1; j < 10; ++j) {
                griglia[i][j] = false;
            }
        }
        int navi = 0;
        while (navi < 20) {
            griglia [rand()%9+1][rand()%9+1] = true;
            ++navi;
        }
    }
    
    void Crea() {
        for (int m = 1; m <= 9; ++m) {
            for (int n = 1; n <= 9; ++n) {
                mat[m][n] = '.';
            }
        }
    }
    
    void Stampa() {
        int capo = 0;
        for (int m = 1; m <= 9; ++m) {
            for (int n = 1; n <= 9; ++n) {
                cout<<setw(3)<<mat[m][n];
                ++capo;
                if (capo%9 == 0)
                    cout<<endl<<endl;
            }
        }
    }
    
    bool MettiBarcaOrizz() {
        int k;
        dimensione = rand() % 4 + 1; //fin quì ci siamo. scegli una dimensione tra 1 e 4.
        bool barcaPosizionata = false;
        for (int i = 1; i < 10 && !barcaPosizionata; ++i)
        {
            for(int j = 1; j < 10 && !barcaPosizionata; ++j)
            {
                //controllo x ogni punto
                if(j + dimensione > 9)
                    continue;  //scarta posizioni che mandano l'index fouri dalla riga
                bool collisione = false;
                for(k = j; k < j + dimensione && !collisione; k++)
                {
                    if(griglia[i][k] == true)
                    {
                        collisione = true;
                    }
                }
                if(!collisione)
                {
                    for(k = j; k < j + dimensione; k++)
                    {
                        griglia[i][k] = true; //piazzamento barca
                    }
                    barcaPosizionata = true;
                }
            }
        }
        
    }
    
    bool MettiBarcaVert() {
        int k;
        dimensione = rand() % 4 + 1; //fin quì ci siamo. scegli una dimensione tra 1 e 4.
        bool barcaPosizionata = false;
        for (int i = 1; i < 10 && !barcaPosizionata; ++i)
        {
            for(int j = 1; j < 10 && !barcaPosizionata; ++j)
            {
                //controllo x ogni punto
                if(i + dimensione > 9)
                    continue;  //scarta posizioni che mandano l'index fouri dalla riga
                bool collisione = false;
                for(k = i; k < i + dimensione && !collisione; k++)
                {
                    if(griglia[k][j] == true)
                    {
                        collisione = true;
                    }
                }
                if(!collisione)
                {
                    for(k = i; k < i + dimensione; k++)
                    {
                        griglia[k][j] = true; //piazzamento barca
                    }
                    barcaPosizionata = true;
                }
            }
        }
        
    }
    
    
    
    int main () {
        int TIRI = 10;
        int riga, colonna;
        Crea();
        Stampa();
        DisponiNavi();
        MettiBarcaOrizz();
        MettiBarcaVert();
        cout<<"Hai 10 tiri a disposizione"<<endl;
        for (int tiriFatti = 1; tiriFatti <= TIRI; ++tiriFatti) {
            cout<<"Inserisci la riga: ";
            cin>>riga;
            cout<<"Inserisci la colonna: ";
            cin>>colonna;
            if (griglia[riga][colonna]) {
                cout<<"Bravo"<<endl;
                ++TIRI;
                cout<<"Hai ancora "<<TIRI-tiriFatti<<" tiri a disposizione"<<endl;
                mat[riga][colonna] = 'X';
                Stampa();
            }
            else{
                cout<<"Acqua"<<endl;
                cout<<"Hai ancora "<<TIRI-tiriFatti<<" tiri a disposizione"<<endl;
                mat[riga][colonna] = 'O';
                Stampa();
            }
        }
        cout<<endl;
        system("PAUSE");
    }
    
    comunque l'ho dichiarata doppia perchè con i char stampo i puntini, i cerchi e le X, con i bool metto le navi (almeno questa era l'idea...)
  • Re: Giochino c++

    A me funziona bene. Dovevi solo mettere return true nei disponiNavi ma non centra col difetto che da a te.

    p.s.: Hai disabilitato la ricezione dei Messaggi privati?
    Allegati:
    7532_3e422edf81d8c7288d0c122e8cf5f496.jpg
    7532_3e422edf81d8c7288d0c122e8cf5f496.jpg
  • Re: Giochino c++

    Allora cosa mi consigli di fare? perchè se poi io bombardo quella coordinata il cuore sparisce e viene il simbolo giusto, ma non è una soluzione...
  • Re: Giochino c++

    Intanto fai sto cambiamento nelle funzioni DisponiBarca

    metti dimensione = rand() % 4 + 1; dentro il primo for ma fuori il secondo cioè così:
    
    for (int i = 1; i < 10 && !barcaPosizionata; ++i)
    	{
    		dimensione = rand() % 4 + 1; //fin quì ci siamo. scegli una dimensione tra 1 e 4.
    		for(int j = 1; j < 10 && !barcaPosizionata; ++j)
    
    ciò fa si che ad ogni avvio gioco la posizione e la dimensione delle barche cambi.
    Per il resto non so. Provare a spostare tutti gli indici a 0?
  • Re: Giochino c++

    Comunque ho notato che la posizione (1,1) è sempre true...anche con l'ultimo cambiamento che hai suggerito...
Devi accedere o registrarti per scrivere nel forum
62 risposte