In effetti è vero...facciamo che prima provo a completarlo e poi, in fase di pulizia, sistemo queste cose. A proposito di completare, mi serve ancora il tuo aiuto. Ho scritto
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
bool griglia [9][9];
char mat [9][9];
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;
}
}
}
int main () {
int TIRI = 10;
int riga, colonna;
Crea();
Stampa();
DisponiNavi();
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");
}
e poi ho provato ad aggiungere la bool MettiBarca e ho scritto
bool MettiBarca (int dimensione) {
dimensione = rand()%4+1;
for (int i = 1; i < 10; ++i) {
for(int j = 1; j < 10; ++j) {
if (griglia [i][j] = true && j + dimensione <= 9) {
for (; j < j + dimensione; ++j) {
griglia [i][j] = true;
}
}
}
}
}
ma mi sa che ha sbagliato qualcosa, o almeno mi sa che non faccia quello che voglio. A questo punto ti chiedo di darci una sistemata...il ragionamento non mi sembra sbagliato: se un punto è true sorteggia una dimensione tra 1 e 4 e, per j che va da quella del punto a j + dimensione, rendi true tutte le caselle adiacenti orizzontali...mah...