Морской бой с# Алгоритм расстановки кораблей

Я пишу морской бой на с# и мне нужно сделать функцию, которая проверяет,свободны ли ячейки рядом с нужной мне ячейкой.Это нужно чтобы между кораблями было расстояние хотя бы в ячейку.У меня не получается.Неправильно строит корабли.Видимо,я накосячил в условиях,но не понимаю где.В карте map 1 - есть корабль,0 - пусто.Карта имеет размер 10х10.Я че-то очень намудрил, но логикой руководствовался такой.Для углов нужно 2 ячейки проверить,для границ(без углов) 3 ячейки, для внутренней части 4.

Мой код:

// верхняя граница
        
if (x >= 0 && x <= 9 && y == 0)
{   
    // левый верхний угол
    if (x == 0) if (map[x + 1, y] == 1 || map[x, y + 1] == 1) return false;
    // правый верхний угол
    else if (x == 9) if (map[x + 1, y] == 1 || map[x, y - 1] == 1) return false;
    // граница без углов
    else if (x > 0 && x < 9) if (map[x - 1, y] == 1 || map[x, y + 1] == 1 || map[x + 1, y] == 1)
        return false;
}

// нижняя граница
if (x >= 0 && x <= 9 && y == 9)
{
    // левый нижний угол
    if (x == 0) if (map[x, y - 1] == 1 || map[x + 1, y] == 1) return false;
    // правый нижний угол
    else if (x == 9) if (map[x, y - 1] == 1 || map[x - 1, y] == 1) return false;
    // граница без углов
    else if (x > 0 && x < 9) if (map[x - 1, y] == 1 || map[x, y - 1] == 1 || map[x + 1, y] == 1)
        return false;
}

// левая граница
if (y >= 0 && y <= 9 && x == 0)
{
    // левый верхний угол
    if (y == 0) if (map[x + 1, y] == 1 || map[x, y + 1] == 1) return false;
    // левый нижний угол
    else if (y == 9) if (map[x, y - 1] == 1 || map[x + 1, y] == 1) return false;
    // граница без углов
    else if (y > 0 && y < 9) if (map[x, y - 1] == 1 || map[x + 1, y] == 1 || map[x, y + 1] == 1)
        return false;
}

//правая граница
if (y >= 0 && y <= 9 && x == 9)
{
    // правый верхний угол
    if (y == 0) if (map[x - 1, y] == 1 || map[x, y + 1] == 1) return false;
    // правый нижний угол
    else if (y == 9) if (map[x - 1, y] == 1 || map[x, y - 1] == 1) return false;
    // граница без углов
    else if (y > 0 && y < 9) if (map[x, y - 1] == 1 || map[x - 1, y] == 1 || map[x, y + 1] == 1)
        return false;
}

// внутренняя часть
if (x != 0 && y != 0 && x != 9 && y != 9)
{
    if (map[x, y - 1] == 1 || map[x, y + 1] == 1 || map[x + 1, y] == 1 || map[x - 1, y] == 1) return false;
}
return true;

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

Автор решения: rotabor

Я применил такое решение: для расстановки кораблей использовал пятно, которое включает 1 клетку по периметру корабля. Для однопалубного пятно будет 3х3, для двухпалубного 4х3. И поле для расстановки 12х12 (10х10 с каёмкой по краям).

Расстановку нужно начинать с больших кораблей.

→ Ссылка