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...)