Заполнение поля
кол-во труб : 4 3 2 1
кол-во кораблей: 1 2 3 4
Причем, направление корабля может быть либо горизонтальным, либо вертикальным.
Есть вариант, каждый корабль обрисовывать нулями и последующий ставить где нет нулей (и корабля), но этот вариант муторный и у него есть недостатки. Подскажите, плз., как решить задачу.
Цитата:
Originally posted by Stalcer
как решить задачу.
как решить задачу.
Вообще для кораблей есть простое решение. Корабельные координаты задаются только для "носа" (первая клетка). И задается орентация корабля в пространстве. Соответственно остальная часть прорисовывается в зависимости от первой коорднаты , кол-ва труб и направления. Следовательно, чтоб разбросать корабли по игровому полю генерируется случайное число для координаты и направления а далее проверяем не пересекается ли у нас корабль с уже расставленными если да то повторяем заново.
Цитата:
Originally posted by CyberMan
Вообще для кораблей есть простое решение. Корабельные координаты задаются только для "носа" (первая клетка). И задается орентация корабля в пространстве. Соответственно остальная часть прорисовывается в зависимости от первой коорднаты , кол-ва труб и направления. Следовательно, чтоб разбросать корабли по игровому полю генерируется случайное число для координаты и направления а далее проверяем не пересекается ли у нас корабль с уже расставленными если да то повторяем заново.
Вообще для кораблей есть простое решение. Корабельные координаты задаются только для "носа" (первая клетка). И задается орентация корабля в пространстве. Соответственно остальная часть прорисовывается в зависимости от первой коорднаты , кол-ва труб и направления. Следовательно, чтоб разбросать корабли по игровому полю генерируется случайное число для координаты и направления а далее проверяем не пересекается ли у нас корабль с уже расставленными если да то повторяем заново.
Как упростить вот такую вот проверку (проверяет все клетки вокруг однопалубного корабля, ищет совпадения по всему полю)? Нужен рациональный подход. Представь, что получится, если я стану проверять таким макаром четырех палубник :-)
Код:
for(int row=0; row<10; row++){
for(int cell=0; cell<10; cell++){
if((str[row][cell]==ship)&&
(str[row+1][cell] !=ship)&&
(str[row-1][cell+1] != ship)&&
(str[row+1][cell+1] != ship)&&
(str[row-1][cell-1] != ship)&&
(str[row][cell-1] != ship)&&
(str[row+1][cell-1] != ship)&&
(str[row][cell+1] != ship)&&
(str[row-1][cell] != ship)){
if(j!=4){
one++;
j++;
}
}
}
}
for(int cell=0; cell<10; cell++){
if((str[row][cell]==ship)&&
(str[row+1][cell] !=ship)&&
(str[row-1][cell+1] != ship)&&
(str[row+1][cell+1] != ship)&&
(str[row-1][cell-1] != ship)&&
(str[row][cell-1] != ship)&&
(str[row+1][cell-1] != ship)&&
(str[row][cell+1] != ship)&&
(str[row-1][cell] != ship)){
if(j!=4){
one++;
j++;
}
}
}
}