Добавлен , опубликован
Всем привет. Давненько, а может и не очень, не виделись. Решил поделится с вами некоторой информацией, надеюсь кому-то пригодится.
"Достаточно ли ты 1337?
Хотел бы ты работать в Paradox Interactive, самом дружелюбном к утконосам работодателе на свете? Ты умеешь кодить? Отлично, выполни тестовое задание и возможно именно ты станешь частью нашей команды!"
Таков дословный перевод баннера с заглавной страницы парадоксплазы. Ребята из PI ищут талантливого программиста к себе в команду. Возраст, опыт, образование не имеют значения! Главное - талант, способность найти необычное решение проблемы.
Преамбулу к тестовому заданию можно прочитать тут:
Задание может быть выполнено на C, C#, C++, Go, Haskell, Java, JavaScript, Objective-C, PHP, Python 2 или Python 3. Нужно создать алгоритм поиска пути (path-finding algorithm) который позволяет проложить путь и вернуться обратно самым коротким путем между 2 точками на двухмерной плоскости. Лимит времени - 4 секунды. Лимит памяти - 1024 МБ.
Подробнее само тестовое задание можно почитать тут:
Если кто решиться его сделать - уважуха и респект. Расскажите потом как все прошло. Удачи.
Послесловие
Paradox Interactive - шведская компания, расположенная в Стокгольме, занимающаяся разработкой компьютерных игр, преимущественно глобальных исторических стратегий. Из наиболее известных игр - серии Europa Universalis, Hearts of Iron, Victoria и Crusader Kings.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
24
Авторитетно заявляю
Чем подкреплен авторитет, если не секрет?
30
darkowlom, тремя с половиной годами на должностях гейм-дизайнера/дизайнера уровней в паре крупных компаний.
14
Авторитетно заявляю, что если игра - стратегия, то такое не делается по куче причин.
Обоснуй пожалуйста! Я как автор одной-единственной, но стратегии (клона первого Starcraft'а) имею противоположный опыт. Я вообще использовал примитивный поиск в ширину, т.к. он никогда не искал в большой зоне, он был нужен только для поиска внутри мелких квадратов карты и для обхода динамических препятствий. Большие пути собирались из заранее рассчитанных. Только так я мог считать пути сразу для большого количества юнитов вне зависимости от расстояние на которое им нужно было переместиться. Проблемой может быть только динамически изменяющийся ландшафт карты, которого в моём случае не было.
30
Обоснуй пожалуйста!
Если руками прописывать роуты и вейпоинты каждой карте, то необходимые для нормального функционирования новых карт действия начнут выходить из компетенции дизайнера уровней, что приведёт к очень сильному повышению затрат на разработку игры в целом. Кроме того, такой подход полностью лишит игру расширяемости за счёт пользовательского контента.

Разумеется, я говорю о более-менее крупных проектах, которые делает команда и которые имеют бюджет в целом.
14
Clamp, никаких роутов и вейпоинтов. Делишь большую карту на крупные квадраты и рассчитываешь кратчайшие пути между центрами этих квадратов. Пути от каждого квадрата к каждому. Теперь когда тебе нужно найти путь из точки А в точку Б, то ты узнаешь в каком квадрате А, в каком квадрате Б. Путь между этими квадратами у тебя уже рассчитан заранее. Осталось просчитать коротенькие пути до центров этих квадратов и сгладить полученный конгломерат, чтобы естественно смотрелось. Дёшево и сердито. Зависимость времени расчета от длины пути - константа! Пофигу куда искать - в соседний тайл или в противоположный конец карты. Астар, не астар, любой честный проход по сетке не может иметь константную сложность.
30
Kozinaka, беру и по результатам плейтестов удаляю какой-нибудь проход, ставлю туда стену, для баланса, например. В результате тебе приходится пересчитывать всю карту и задавать новые значения, а в нормальных играх (давай не будем далеко ходить за примером: SC2 или WC3, или вообще любая игра с редактором) этого делать не надо, только автоматически генерится новая карта проходимости.
14
Ну вот генерация карты проходимости это предварительный расчет путей это одно и то же считай. У меня это считалось вообще при загрузке уровня.
30
генерация карты проходимости это предварительный расчет путей это одно и то же считай
Эм, нет?

Вообще речь шла о том, что в стратегиях такого не делают в силу возможности изменения этой карты проходимости во время игры, например, зданиями.
14
в стратегиях такого не делают
Давай так: такого не делали в той стратегии, с которой ты работал. И делали в стратегии с которой работал я. Излишние обощения зло.
30
такого не делали в той стратегии, с которой ты работал.
Такое не делают в полноценных RTS. Роут движения КАЖДОГО юнита правильно создавать в тот момент, когда он получает приказ.
24
Вставлю и я свои пять копеек - у меня тоже был опыт в использовании различных алгоритмов поиска пути в RTS. самую первую я вобще писал на delphi 7 с ручной отрисовкой спрайтов winapi функциями в канвас окна, это было ужасно, но работало на удивление шустро даже с учетом использования модифицированного поиска в ширину для нахождения пути по всей карте. В качестве одной из попыток оптимизации я пытался реализовать описанную Kozinaka идею - разбить карту на большие ячейки и искать пути по ним, а потом досчитывать недостающее. Запоролся этот подход когда я столкнулся с тем, что большая ячейка не всегда гарантированно проходима насквозь - может случиться так, что из центра большой ячейки до цели можно добраться за пару шагов, но юнит находится за стеной, проходящей через пол карты и обход к центру затронет множество других ячеек. Еще хуже это работает в динамически изменяемом окружении - маршрут и так приходится постоянно корректировать, а тут еще и добавляется необходимость постоянно пересчитывать связи между большими ячейками.
В итоге в тот раз я реализовал другие способы "оптимизации" - общее вычисление маршрута для группы юнитов при отдаче приказа вместо индивидуального плюс кеширование недавних вычисленных маршрутов и приоритет на поиск маршрута вдоль них, если они ведут в подходящем направлении.
С тех пор времени прошло изрядно и я попробовал множество разных способов, в том числе построение геолокационной карты, состоящей из участков гарантированной однородной проходимости с последующим поиском пути по ней. Тоже не идеальный способ - дороговато выходит пересчитывать триангуляцию при движении юнитов, а не только при строительстве и разрушении стационарных объектов вроде зданий, а без этого приходится изощряться чтобы корректно обработать невозможность проходить через движущиеся объекты, особенно когда дело доходит до большого кол-ва движущихся объектов в одном месте - приходится посылать лесом поиск пути и полностью отдавать контроль над движением другим системам. Последнее что я обдумывал в этой сфере было посвящено тому, не выйдет ли такие ситуации разрулить с помощью алгоритмов симуляции жидкостей. Даже запилил себе небольшую демку, в которой трактор легко расталкивал небольшую групку пехоты, застревал в средней, а большая толпа пехоты выносила его на руках на противоположный конец карты (концепции атаки в демке не было, только движение).
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.