Top.Mail.Ru
Ответы

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

Я пишу морской бой на с# и мне нужно сделать функцию, которая проверяет,свободны ли ячейки рядом с нужной мне ячейкой.У меня не получается.Неправильно строит корабли.Видимо,я накосячил в условиях,но не понимаю где.В map 1- есть корабль,0-пусто.

123456789101112131415161718192021222324252627282930313233343536373839404142434445
 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 тоже самое. ну и за размер двумерного масива не вывались и что за деаятки не понятные у тебя же есть размеры массива код должен быть универспльным