Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заполнение поля

990
24 апреля 2005 года
Stalcer
137 / / 15.08.2004
Есть поле 10*10 (чаровский массив). Его нужно случайно заполнить прямоугольниками (как в Seawar корабли), соответственно:
кол-во труб : 4 3 2 1
кол-во кораблей: 1 2 3 4
Причем, направление корабля может быть либо горизонтальным, либо вертикальным.
Есть вариант, каждый корабль обрисовывать нулями и последующий ставить где нет нулей (и корабля), но этот вариант муторный и у него есть недостатки. Подскажите, плз., как решить задачу.
4.9K
25 апреля 2005 года
CyberMan
55 / / 25.01.2005
Цитата:
Originally posted by Stalcer
как решить задачу.


Вообще для кораблей есть простое решение. Корабельные координаты задаются только для "носа" (первая клетка). И задается орентация корабля в пространстве. Соответственно остальная часть прорисовывается в зависимости от первой коорднаты , кол-ва труб и направления. Следовательно, чтоб разбросать корабли по игровому полю генерируется случайное число для координаты и направления а далее проверяем не пересекается ли у нас корабль с уже расставленными если да то повторяем заново.

990
26 апреля 2005 года
Stalcer
137 / / 15.08.2004
Цитата:
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++;
                }
            }      
        }  
    }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог