С++ Морской бой как сделать рандомную генерацию кораблей
пишу не очень хороший код как видите, не используя ООП, очень сильно затупил с этим, весь день туплю и никак не могу реализовать рандомную генерацию кораблей, чтобы вокруг каждого корабля был отступ в 1 блок. При этом должны генерироваться 4-х палубные корабли, 3-х палубные и т.д. Прошу более менее доступным языком объяснить как мне все сделать, уж очень сильно вошел в тупик. Функция SetShips();
#include <iostream>
#include <clocale>
#include <conio.h>
#include <time.h>
#include <string>
#include <stdlib.h>
#include <Windows.h>
using namespace std;
const int shipSizeMin = 1;
const int shipSizeMax = 4;
const int distMin = 2;
int rows = 10;
int columns = 10;
int maxShips = 10;
char** map = new char* [rows];
char** secondMap = new char* [rows];
char letters[] = "0ABCDEFGHIJKLMNOPQRSTUVMWXYZ";
void Clear()
{
for (int i = 0; i < rows; i++)
{
map[i] = new char[columns];
secondMap[i] = new char[columns];
}
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
map[i][j] = '|';
secondMap[i][j] = '|';
}
}
}
void Show()
{
cout << " ВАШЕ ПОЛЕ\n\n";
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
if (i == 0)
{
cout << letters[j] << " ";
}
else if (i == rows - 1)
{
cout << " " << " ";
}
else if (j == 0)
{
cout << i << " ";
}
else
{
cout << map[i][j] << " ";
}
}
cout << endl;
}
cout << "\n" << " ВРАЖЕСКОЕ ПОЛЕ\n\n";
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
if (i == 0)
{
cout << letters[j] << " ";
}
else if (i == rows - 1)
{
cout << " " << " ";
}
else if (j == 0)
{
cout << i << " ";
}
else
{
cout << secondMap[i][j] << " ";
}
}
cout << endl;
}
}
void SetShips()
{
int s = 0;
int ship = 0;
// your field
while (s < 4)
{
unsigned x = rand() % (rows - 3) + 2;
unsigned y = rand() % (columns - 3) + 2;
int b = 1;
if (map[x][y] != 'X' && map[x + 1][y] != 'X' && map[x - 1][y] != 'X' && map[x][y - 1] != 'X' && map[x][y + 1] != 'X' && map[x + 1][y + 1] != 'X' && map[x - 1][y - 1] != 'X' && map[x - 1][y + 1] != 'X' && map[x + 1][y - 1] != 'X')
{
s++;
map[x][y] = 'X';
}
}
s = 0
// 4 Ship
while (s < 1)
{
unsigned xy = rand() % (rows - 3) + 2;
unsigned yx = rand() % (columns - 3) + 2;
if (secondMap[xy][yx] != 'X' && secondMap[xy + 1][yx] != 'X' && secondMap[xy - 1][yx] != 'X' && secondMap[xy][yx - 1] != 'X' && secondMap[xy][yx + 1] != 'X' && secondMap[xy + 1][yx + 1] != 'X' && secondMap[xy - 1][yx - 1] != 'X' && secondMap[xy - 1][yx + 1] != 'X' && secondMap[xy + 1][yx - 1] != 'X')
{
secondMap[yx][xy] = 'X';
}
}
}
void shipShot()
{
char posX;
int trueX;
int posY;
cout << "Стреляйте капитан!" << endl;
cout << "Позиция по x: ";
cin >> posX;
cout << "Позиция по y: ";
cin >> posY;
for (int i = 0; i < 26; i++)
{
if (posX == letters[i])
{
trueX = i;
break;
}
}
if (secondMap[posY][trueX] == 'X')
{
cout << "Попадание!\n";
secondMap[posY][trueX] = '#';
}
else
{
cout << "Промах!\n";
}
}
int main()
{
setlocale(0, "Ru");
srand(time(NULL));
cout << endl;
Clear();
SetShips();
while (true)
{
Show();
shipShot();
Sleep(500);
system("cls");
}
for (int i = 0; i < rows; i++)
{
delete[] map[i];
delete[] secondMap[i];
}
delete[] map;
}