С++ Морской бой как сделать рандомную генерацию кораблей

пишу не очень хороший код как видите, не используя ООП, очень сильно затупил с этим, весь день туплю и никак не могу реализовать рандомную генерацию кораблей, чтобы вокруг каждого корабля был отступ в 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;
}

Ответы (0 шт):