84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
||||||
1 | ||||||
Консольный морской бой. Расстановка кораблей25.10.2012, 23:08. Показов 7681. Ответов 7
Метки нет Все метки)
(
Добрый вечер, уважаемые форумчане.
Хочу написать консольный морской бой. Начал с функции автоматической расстановки кораблей. Весь день не получается найти где спяталась ошибка в моем коде. Иногда программа зависает в 193-195 строках. Я новичек и не совсем еще разобрался в отладке программ. Использую VS 2010.
1
|
|
25.10.2012, 23:08 | |
Ответы с готовыми решениями:
7
Расстановка кораблей (морской бой) Морской бой.Обработка массива. Расстановка кораблей Морской бой - программа зацикливается на расстановке кораблей Морской бой. Ф-ция автоматической рассатновки кораблей. |
0 / 0 / 1
Регистрация: 25.03.2012
Сообщений: 71
|
|
28.10.2012, 20:43 | 2 |
извините, можно ли спросить у вас, у меня просто задача там с расстановкой объектов тоже, как поставить условие чтоб между одним объектом-существующим и другим - предполагаемым, было расстояние в одну клетку?
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
28.10.2012, 20:56 | 3 |
ВЫ знаете с разбегу не получится найти ошибку в вашем коде, особенно если ошибка не описана как таковая, а просто так перелопачивать столько строк кода...
Укажите пожалуйста что получается сделать и что должно происходить на том месте программы где у вас виснет? Довольно просто, перед расстановкой корабля проверить нет ли рядом занятого поля, а после расстановки обставить кораблик занятым полем
0
|
![]() 3220 / 1747 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
29.10.2012, 09:53 | 4 | |||||
0
|
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
||||||
01.11.2012, 03:25 [ТС] | 5 | |||||
Сори, что так долго не отвечал - небыло времени из-за работы
![]() Программа зависает, когда пытается разместить корабль в ограниченном пространстве, как, например на рисунке: За проверку возможности размещения корабля отвечает функция IsEmpty, которую я безрезультатно модифицировал по сравнению с предыдущим листингом: Кликните здесь для просмотра всего текста
Принцип работы следующий:
Посмотрите, пожалуйста, что я упускаю?
1
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
||||||
02.11.2012, 12:44 | 6 | |||||
Нужно понять почему зависает, видимо получается бесконечный цикл
Если после установки корабля сразу обвести его точками, то нет необходимости при построении проверять это условие Добавлено через 3 минуты за что отвечает переменная DECKS? возможно она получает цифру >3 от этого и зависоны Добавлено через 2 минуты я бы реализовал немного по другому, смысл вашей функции впихнуть корабль в координату. Хотя бы хоть как нибудь. Я тоже так делал и это вышло у меня довольно объемно. Проще при создании корабля создавать рандомно еще его направление, тогда проверка будет довольно простая. Добавлено через 11 минут кстати, я бы вам советовал использовать поле не 10х10, а 12х12 и контур сразу забить точками (выводить поле с 1 по 11). тогда например при описаном выше варианте создания кораблей не выйдет лажи типо вот такого
вы спокойно проверяете поле [3][0], так как контур у нас обведен точками, то функция дает отказ и вы генерируете следующие возможные координаты и направление корабля
1
|
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
|
|
04.11.2012, 00:01 [ТС] | 7 |
Спасибо, что вникли в код. Буду следовать вашим советам.
Переменная DECKS - это количество палуб, которые нужно разместить рядом с точкой {x,y}
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
06.11.2012, 10:22 | 8 |
вот вы и прояснили, скорее всего зависания происходят когда вы пытаетесь вставить однопалубник, соответственно DECKS равно 0
0
|
06.11.2012, 10:22 | |
Помогаю со студенческими работами здесь
8
Консольный морской бой Консольный морской бой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |