|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.02.2022, 21:54 | #31 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Здесь измененная программа.
|
02.02.2022, 21:58 | #32 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,316
|
Чего именно вы пытались добиться, добавляя k и l? Сейчас получается, например, если клетка сверху свободна, то снизу будет проверяться не соседняя клетка, а через одну.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
02.02.2022, 22:55 | #33 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Как же для первоначальной версии сделать Алгоритм Ли на C , чтобы идти по всему полю.В интернете
алгоритм написан математически,не на C. |
03.02.2022, 00:14 | #34 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,316
|
Вторая ссылка в поиске ведет на подходящий пример реализации - Реализации алгоритмов/Алгоритм Ли.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
03.02.2022, 16:23 | #35 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Непонял выбираем одну из клеток,если помечены все клетки , а если нам встретилась помеченная
клетка,то мы выбираем первую помеченную и выходим оператором break, а остальные пути не рассматриваем? for(k= 0; k < 4; ++k) { int iy=y + dy[k], ix = x + dx[k]; if ( iy >= 0 && iy < H && ix >= 0 && ix < W && grid[iy][ix] == d) { x = x + dx[k]; y = y + dy[k]; // переходим в ячейку, которая на 1 ближе к старту break; } } Не совсем понял как помечаются массивы dx[4] и dy[4] Предположим мы нашли путь в px[d] и py[d] и его длину в d , как это использовать в программе , чтобы двигаться по полю. |
03.02.2022, 20:14 | #36 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,316
|
Цитата:
А они не помечаются. В них хранятся смещения, чтобы не делать 4 ифа, как в вашем текущем коде, а чтобы делать проверку соседних клеток в цикле. Допустим, построить путь в начале работы программы и иметь счетчик шагов. Брать координаты клетки из px, py и изменять счетчик шагов на единицу. Когда достигли последней клетки в пути, то построить новый путь до другой клетки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
05.02.2022, 20:37 | #37 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Как выбирать начальную и конечную точку в каждом проходе?Как их помечать ' ' или '.'.
|
05.02.2022, 23:04 | #38 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,316
|
Самую первую начальную точку для противника можно задавать самому, как сейчас. А конечную как хотите: можно брать случайную точку с карты, проверяя, что координаты не совпали с начальной и клетка пустая; можно выбирать случайную точку, где есть звездочка. А когда маршрут пройден, то конечная точка становится начальной, а конечная выбирается заново.
А зачем их помечать? Координаты начальной и конечной точек нужно передать функции, которая построит маршрут. А для алгоритма Ли нужен отдельный массив, где для каждой клетки будет указан номер шага, на котором эта клетка достижима из изначальной клетки. Как еще одна идея. Можно сначала строить волну на всё поле, а затем выбрать ту из зведочек, до которой путь короче, потом уже строить маршрут до неё и идти к ней.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
06.02.2022, 17:02 | #39 |
Форумчанин
Регистрация: 16.02.2013
Сообщений: 169
|
Можно написать так?
Код:
Последний раз редактировалось BDA; 07.02.2022 в 00:00. |
07.02.2022, 00:08 | #40 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,316
|
Сейчас у вас проход по маршруту проходит целиком за один тик таймера. От цикла "while(s < d)" надо отказаться. А нужно примерно так: если маршрут есть, то сделать шаг по нему; если маршрута нет, то построить его и сделать шаг. Выбор координат bx и by нужно производить до тех пор, пока они не удовлетворят условию в вашем if, а сейчас получается, что туда переход все равно осуществится.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с загрузкой звука в игре типа Pacman | Timurkh77 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 12 | 13.09.2018 05:23 |
Графическая ошибка в игре типа Pacman | Timurkh77 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 18.08.2018 22:08 |
Какие знания по php и mysql нужно иметь, что бы в игре сделать такой бой в онлайн текстовой игре | jonikster | Общие вопросы Web | 4 | 15.06.2016 18:10 |
Интеллект компьютера в игре покер на костях | Pepsy | Общие вопросы C/C++ | 1 | 06.04.2013 21:17 |
Зависание игры после отбивания шара (TShape) противником (Delphi) | alex 2000 | Помощь студентам | 0 | 06.02.2012 13:47 |