Помощь - Поиск - Пользователи - Календарь
Полная версия: Просчет ходов в пошаговых Rpg
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
AlienEmperor
Господа! Собственно, такой вопрос: как Вы считаете - какой оптимальный путь создания системы перемещения для turn-based RPG ? Т.е. по своей сути, в такого рода игре (взять тот же Fallout) игрок не может переместиться в *любую* точку ландшафта - он может только встать на некую клетку, за счет чего возможно просчитать сколько ходов он потратил на перемещение. Но это вносит свои ограничения: в Fallout, например, направлений движения (поворот игрока) - всего 6. Даже если сделать 8, то система уже рушится, появляются "мертвые" точки, в которые попасть просто не реально. Предположим, что взяли 6 направлений (как в Fallout и Heroes of Migth & Magic) , тогда как, по Вашему: надо делать пересчет передвижения игрока по матрице (двумерный вариант изометрической карты), а потом двигать его по клеткам ? Есть ли другой способ ? Особенна актуальна проблема оружия: к примеру - при выстреле из "базуки" снаряд должен лететь явно "из точки в точку", т.е. никак не по клеткам, как в таком случае просчитать столкновение хотя бы со стеной (она-то на клетках) ? В общем, если есть предложения или ссылки на готовые алгоритмы, я был бы очень благодарен за них...
Shura
Нужно просто пронумеровать все ячейки построчно, а потом как-нибудь, скажем, раздвинуть строки и сдвинуть столбцы, ну или что-то типа того. Вот пример для 6-гранных ячеек:
Пример преобразования (2 Кб)
P.S. Только законы перемещения объектов по получившейся обычной матрице будут не совсем обычными.
AlienEmperor
В принципе, так я и представлял... Спасибо за наглядную картинку. Насчет передвижения: это заметно по Fallout: он там любит "конем" ходить smile.gif
P@sh@
насчет стрельбы через квадратную сетку, я когда-то делал подобие х-кома - тактический боевик, тут выкладывал немного недоделанную версию, там это есть:
http://forum.pascal.net.ru/index.php?showtopic=1654&st=160
во втором посте
SKVOZNJAK
Для расчётов перемещения точки за 1 шаг можно использовать не клетки а расстояния. После чего помещать точку в ближайшую клетку - округлять результат. Поле - прямоугольник разбитый на клетки, точка перемещается по направлению из точки А в точку Б. Соединяем А и Б отрезком, отмеряем на нём расстояние которое могла преодалеть точка при заданной скорости, округляем значение до клетки.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.