Avia corporation. Алгоритм Флойда - Уоршелла
Это игра экономическая стратегия в которой вам необходимо распределять и оптимизировать управление пассажиропотоком построив свою успешную авиакомпанию. Игра не осложнена ненужными элементами:
- контролем выбросов в окружающую среду;
- установкой количества мест бизнес или эконом класса;
- управлением расписанием самолетов; и др.
В этой статье я расскажу, об основной игровой механике, без которой не было бы этой игры. Речь пойдет о системе пересадки пассажиров.
Первое, что мне хотелось создать это кратчайший путь до пункта назначения. Столкнувшись с проблемой поиска этого пути, я начал искать плагины для этого, но все не так просто. Игровой мир это шар.
Посчитав максимальное количество потенциальных маршрутов, оно составило бы 20736, так как в игре есть 144 города и игрок может создавать их в любом порядке.
Из-за создания маршрутов в любом порядке это могло привести к хаосу и неопределенности в передвижении пассажиров. Стал вопрос в динамическом создании пути.
Поэтому мне необходимо было искать кратчайший путь после того как игрок создаст маршрут.
Для решения этой задачи я воспользовался алгоритмом Флойда — Уоршелла Википедия. Алгоритм работает пошагово, он перебирает все вершины и проверяет возможность пройти от одной к другой через текущую вершину. Алгоритм выполняется до тех пор, пока все возможные пути не будут найдены.
К примеру.
У нас есть точки и расстояния между ними. Чтобы узнать кратчайший путь нам необходимо создать матрицу расстояний. Игра разрабатывается на Unity Engine поэтому код будет на C#. Создаем двумерный массив, где 999 - это бесконечность когда точки не объединены между собой, а другие цифры это дистанция между объединенными точками.
Сам алгоритм поиска выглядит вот так:
Это рабочий пример, но мы помним что потенциально может быть 20736 маршрутов и этот код слишком медленный для такого количества. Поэтому в игре используется различная оптимизация что бы просчет не влиял на опыт игрока.
Наконец мы его запускаем и видим результат
Мы получили финальную матрицу, и на первый взгляд не видно самого пути. Здесь уже все гораздо проще. Для поиска пути мы берем номер финишной точки к примеру это 3. Номер 3 будет столбцом, а строкой цифра 0 - это стартовая точка.
Как видно мы нашли путь от 0 до 3, но этот путь довольно легкий. Возьмем финишную точку 5
Есть два пути, но очевидно что 0,1,4,5 будет лучшим. Это просто для человека, но как это поймет программа?
Отлично, мы нашли путь по нашей предварительно подготовленной матрице. Как я писал выше, вариант с просчетом путей заранее не подходит, следовательно я написал свой довольно сложный алгоритм по созданию матрицы дистанций.
Кстати можете сами поискать путь из других точек, стартовая и конечная может быть любая.
Теперь наши пассажиры могут спокойно добраться до пункта назначения если даже туда нет прямого рейса.
Игра выйдет 9 июня 2023 в Стим, Nintendo eShop, IOS, Android
Добавляйте в вишлисты
Ееее. Графы. Как давно я их не видел
Мне теперь нужен алгоритм для Oxigen not included, который позволит пройти игру дальше первых двух биомов!
Охлаждение, переработка и достаточное количество туалетов — вот главные условия для успеха колонии)
Комментарий недоступен
o vi iz anglii
Столкнувшись с проблемой поиска этого пути, я начал искать плагиныа зачем? никогда не понимал таких разработчегоф. Дальше правда лучше пошло!