Как сообщить об ошибках, обнаруженных на процедурно сгенерированных уровнях?

8

Есть много тем о том, как работает процедурная генерация, но я не смог найти никакой информации о том, как тестировать и - что более важно - как сообщать об ошибках, которые могут возникнуть на процедурно генерируемых уровнях. Как лучше всего описать ошибку, например, связанную с дизайном уровня, на карте, которая будет выглядеть по-разному каждый раз, когда вы играете в новую игру? Какую информацию следует включить в отчет об ошибках, чтобы ее воспроизведение было проще для дизайнера уровней, художника уровней и т. Д., А также во время процесса регрессии?

РЕДАКТИРОВАТЬ: Стоит отметить, что игра, которую я готовлю к тестированию, находится на очень ранней стадии разработки и постоянно меняется вместе с системами, отвечающими за генерацию уровней. Цель этого исследования - научиться описывать ошибки (какую информацию включать в отчет), чтобы регрессия в изменяющейся среде была как можно менее трудоемкой и максимально эффективной.

BoYLER
источник
2
Кто ваша целевая аудитория? Я имею в виду, кто будет заполнять эти отчеты об ошибках?
Vaillancourt
1
Одним из возможных решений является добавление «сохраняющих» функций или, по крайней мере, некоторого механизма хеширования. Таким образом, тестер может включить весь уровень в свой отчет или, по крайней мере, включить текстовый хэш, который впоследствии может быть преобразован в набор одинаковых уровней. Первый вариант прост, но ест трафик / пространство. Второй вариант требует серьезного мозгового штурма для реализации. Ps я могу ошибаться, но насколько я помню Diablo 2 использовал хеширование. Таким образом, уровень (и другие уровни, которые более или менее похожи на него) был описан хешем.
Sergey.quixoticaxis.Ivanov
Какой тип игры? Методы IE, используемые в пошаговой игре, могут плохо подходить для игры в реальном времени и наоборот.
Пикалек
@ Alexandre Vaillancourt: тестеры будут сообщать об ошибках, используя автоматический инструмент, который будет собирать некоторую простую информацию, такую ​​как количество физических объектов, количество ИИ и т. Д. Мне интересно, что еще может быть включено не только в эти автоматические отчеты, но и в обычные отчеты, написанные тестерами. @Pikalek: Это экшн-игра FPP с открытым миром и геймплеем в реальном времени.
BoYLER

Ответы:

18

Это также может быть очень полезно, когда ваш алгоритм генерации карты детерминирован и повторяется на основе начального начального значения. Поэтому, когда вы вводите то же самое начальное значение, вы получаете ту же карту. Это может быть легче реализовать, чем вы думаете. Большинство API генерации случайных чисел можно инициализировать начальным значением, а затем всегда генерировать одну и ту же последовательность случайных чисел для одного и того же начального числа. Если вы используете одну из немногих платформ, где это не так (например, JavaScript на основе браузера), вы можете реализовать свой собственный генератор случайных чисел. Существует множество алгоритмов, которые не очень сложны в реализации и обычно всегда требуют начального значения.

Затем ваши тестеры могут упомянуть семя карты в своих отчетах об ошибках. Отчеты об ошибках типа «Деревья растут посреди озера» могут содержать инструкцию по воспроизведению «Создайте карту с семенами a4f6dd32 и перейдите в положение 4321500: 1269100». После того, как вы проверили это, вы можете установить условную точку останова отладчика в алгоритме генерации карты, которая сработает на затронутом фрагменте карты и точно выяснит, что происходит.

Детерминированный алгоритм генерации карт также позволяет реализовать автоматизированный тест. У вас могут быть различные начальные значения тестов с известными выходными данными, а затем ваши автоматические тесты проверят, остается ли этот вывод тем же после того, как вы сделали некоторые улучшения производительности в своем алгоритме генерации.

Philipp
источник
Спасибо всем за идеи. Я пока не могу попробовать использовать их, поскольку игра не находится в играбельном / тестируемом состоянии. На самом деле потребуется гораздо больше времени, чтобы быть готовым к тестированию. Пока я просто занимаюсь исследованиями в этом вопросе.
Бойлер
Это отличный ответ. В настоящее время я создаю игру, в которой используется Dungeon Architect для случайного создания уровней на основе начального числа. Я пошел дальше и создал случайный одноэлементный класс, который распределяет значения Random во ВСЕ подсистемы, как DA, так и мою собственную. Преимущество состоит в том, что если я знаю начальное значение и значение самого уровня (скажем, подземелье 1-1 или лес 3-6), я могу воссоздать точно такой же уровень, с теми же монстрами, в тех же местах с тем же лут столы и все. Поскольку это значение записывается в журнал, мне было бы легко проанализировать отчет об ошибке и воссоздать сценарий.
Джесси Уильямс