|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.05.2016, 21:43 | #1 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
Делаю игру - аналог морского боя.Зависает игра и не присваются данные
Всем привет, уважаемые эксперты. Пишу игру, которая похожа на морской бой. Генерируется поле 8х8, на котором нужно вместить все корабли. В ней три уровня сложности. Первый и третий я реализовал.А вот со вторым проблемы. На втором уровне сложности должен генерироваться не один вараинт правильной расстановки, а два. То есть я использую два массива одного размера. Первый массив у меня на всех уровнях заполняется нормально. А вот на втором программа виснет. Так и мало того - еще и не изменяются переменные, когда я заношу в них данные. Я например присваиваю u:=true; И это дложно заставить выйти из цикла вайл, но переменная остается равной false, хотя я нигде ей не присваиваю такое значение внутри цикла. Еще я использую рекурсии. Поэтому подозреваю либо дело в рекурсиях, либо дело в самом компиляторе - однажды компилятор выдавал чудеса...
Проблемный код тут: Код:
Так же прилагаю весь проект, так как логически в этом коде все правильно вроде. Пароль вроде не ставил на архив, но если поставил по привычке, то пароль 1: https://yadi.sk/d/4IbT9hpIrYxZr |
08.05.2016, 02:21 | #2 | |
Регистрация: 10.11.2012
Сообщений: 7
|
Цитата:
правильно так (not u). А вообще проще так: Код:
|
|
08.05.2016, 05:35 | #3 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,605
|
Числа random не случайные, а псевдослучайные. На каждой итерации могут генерироваться одни и те же числа, поэтому цикл становится бесконечным. Зерно для генерации псевдослучайных чисел нужно менять на каждой итерации.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
09.05.2016, 01:22 | #4 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
Спасибо за советы. Учел Ваши просьбы и есть некоторые сдвиги - код стал выполняться хоть иногда. Иногда зависает, но иногда и срабатывает. Правда при срабатывании ставит 2-3 корабля четырехпалубных почему-то. В Коде изменил на такого вида циклы, которые должны ставить 1 корабль:
Код:
Код:
Сам измененный проект прилагаю. Зависания происходят и неправильное количество кораблей становится если выбрать сложность среднюю в меню. https://yadi.sk/d/SSuYsejNrZzZF |
09.05.2016, 03:10 | #5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,356
|
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 09.05.2016 в 03:50. |
09.05.2016, 15:47 | #6 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
Поставил Ваши процедуры и переделал код именно под эти процедуры, но всеравно при заполнении одного массива все нормально, а при заполнении двух (при средней сложности) - пишет Stack is overflow. То есть переполняется стек, насколько я понимаю. Я подозреваю что тоже идет зацикливание (так как процедуры перезапускаются в случае если нельзя поставить нужное количество кораблей). Пока застрял на этом же моменте, что и в моем алгоритме (зависает или выдает ошибку при расстановке на втором поле).
Я не знаю как решить данную проблему. Компьютеру сложнее найти варианты расстановки еще и потому, что некоторые клетки запрещаются по краям карты для расстановки (а них заносится -1 и они рисуются черным цветом). Если не зацикливать процедуры, тогда часто на поле появляется меньше кораблей чем положено (ведь просто негде поставить). При клике по началу игры срабатывает следующий код: Код:
Код:
Код:
Проект |
09.05.2016, 23:04 | #7 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
Все. Проблема решена. При расстановке я закомментировал код обнуления. А мне нужно было обнулять ячейки, которые больше чем -1. Всем спасибо за советы. Тема закрыта. Еще раз спасибо всем огромное!
|
11.05.2016, 06:46 | #8 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,889
|
Вот мой морской бой, заготовочка с как бы игрой от/на 1 игрока (так изначально задумывалось), но наиболее проработанная часть это расстановка, которая может варьировать свои параметры, написана без кучи вложенных циклов с постоянным рандомом, а с вумной алгоритмизацией на классах. Код могу дать лично, но не публично, спрашивайте кому надо (форумчане, а не новички).
В демке есть опция ViewShips для показа расстановки. Настройки расстановки позволяют менять размер поля (длина стороны квадрата и размер кораблей Н (от 1го Н-палубника до Н 1-палубников). Можно покликать по кораблям, "стреляя" в них. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Делаю игру крестики на 19х19 | Nemfoman | Общие вопросы Delphi | 11 | 13.04.2012 00:29 |
Игра - аналог Pacman | Гром | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 32 | 16.03.2012 22:34 |
Делаю 3d игру | Alex2009 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 135 | 18.09.2009 15:11 |
Делаю простую игру, есть вопросы | Sergeu | Общие вопросы Delphi | 19 | 25.01.2009 22:46 |