Морской бой-Алгоритм для расстановки кораблей
Я пишу морской бой на с# и мне нужно сделать функцию, которая проверяет,свободны ли ячейки рядом с нужной мне ячейкой.У меня не получается.Неправильно строит корабли.Видимо,я накосячил в условиях,но не понимаю где.В map 1- есть корабль,0-пусто.
private bool scanAround(int x, int y, int[,] map) {
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;
}
Трассируй. Как всегда.
О, госпади.. не читабельно, легко запутаться.
Задай методы сдвига по 8 направлениям, отдельно методы проверки границ. Потом просто вызови опрос по всем направлениям в цикле для класса ячейки. Т.е. сначала высчитываешь координаты сдвига, а потом уже проверки на границы. С крайней левой на запад, x-1 = -1. Не подходит, пропускаем.
Для расстановки кораблей просто тянешь в нужном направлении заданную длину корабля и проверяешь каждую ячейку. Естественно у тебя должны быть классы корабль, поле, ячейка. Класс маски (или словари) - маска кораблей, тумана войны, промахов).
чет ты перемудрил, тебе надо проверить что х +1 свободная x-1 свободная и с y тоже самое. ну и за размер двумерного масива не вывались и что за деаятки не понятные у тебя же есть размеры массива код должен быть универспльным