Как генерировать монстров / оружие определенного уровня? - PullRequest
2 голосов
/ 07 декабря 2010

Фон

Предположим, что у нас есть игра, в которой монстры и оружие генерируются "случайно".

A оружие можно определить так:

  • тип: топор (1.2) / меч (1.4) / копье (1) / дубина (0.7)
  • диапазон: 1 - 3
  • магия: лед (10) /огонь (10) / нет (1)
  • состояние: резкое (2) / нормальное (1) / тусклое (0,5)

Некоторые из этих значений могут иметь зависимости (например, типи дальность).

Используя генератор случайных чисел, мы можем получить, например, Тупой Топор Огня (диапазон 2) .Тогда у нас может быть формула, которая вычисляет уровень этого оружия.Пример формулы:

level = floor(type * range * magic * state)

У тупого Топора Огня (диапазон 2) будет тогда уровень floor(1.2 * 2 * 10 * 0.5) = 12.

Простой, но приятный!

У нас также может быть мир , где игрок все глубже и глубже опускается в опасные пещеры, начиная с пещерного уровня 1.

Вопрос

Допустим, игрок находится на уровне пещеры 12. (S) он вошел в комнату, где мы хотим поместить оружие в сундук.

Какой будет хороший алгоритм для создания уровня 12оружие? (или любой другой уровень конечно)

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

Небольшие или существенные изменения в определении оружия могут быть внесены для облегчения лучшего решения.

РЕДАКТИРОВАТЬ:

Похоже, * 1057Решение * High Performance Mark является лучшим, если набор комбинаций достаточно ограничен.Если нет, или если у нас есть непрерывные значения и «неограниченный» набор комбинаций, один из других ответов может быть более подходящим.Я говорю «может», поскольку, возможно, справочную таблицу можно использовать даже в непрерывной версии для подмножества значений, чтобы выбрать хорошую начальную точку, а затем можно добавить небольшую случайную дельту для заполнения.

Пример: диапазон непрерывен от 10 до 200. Таблица поиска содержит значения (10, 20, 30, ..., 190, 200).Алгоритм выбирает 110 для диапазона, а затем добавляет к нему случайное число (-5,0, 5,0) для конечного значения, скажем, 108,72.Тогда конечный уровень оружия будет достаточно близок к желаемому значению.Как это звучит?

Ответы [ 3 ]

4 голосов
/ 07 декабря 2010

Если у вас есть, скажем, 5 вариантов выбора типа, диапазона, магии и состояния, то у вас есть 5 ^ 4 варианта оружия. Это довольно небольшое число, и вы можете легко хранить их все в справочной таблице, проиндексированной на уровне оружия. Когда вы хотите получить случайное оружие 12-го уровня, вы выбираете одно из доступных оружий 12-го уровня.

2 голосов
/ 07 декабря 2010

В зависимости от элемента, выбранного в первом списке, какие максимальные и минимальные значения уровня вы можете достичь? Например, для клуба вы можете достичь любого уровня от floor(0.7 * 1 * 1 * 0.5) = 0 до floor(0.7 * 3 * 10 * 2) = 43. Так что, если вы искали оружие 44-го уровня, вы никогда не должны выбирать дубинку. Это поможет вам ограничить набор допустимых вариантов в первом списке.

Эти значения min-max могут быть вычислены на лету для простой монотонной функции, подобной этой, но также могут быть предварительно вычислены заранее, если функция уровня слишком сложна.

Повторите процесс для других списков, заканчивая списком, который допускает непрерывные значения, такие как ущерб (будучи непрерывным, вы можете выбрать значение выдумки, которое выбирает соответствующий уровень).

Например, при поиске оружия 12-го уровня можно было бы случайно выбрать топор (минимум: 0, максимум: 72), выбрать случайным образом «огонь» (минимум: 6, максимум: 72), устранить «острый» (мин: 24, макс: 72), выберите случайным образом «скучно» (мин: 6, макс: 18), а затем используйте значение выдумки 2 = 12/6 для диапазона.

2 голосов
/ 07 декабря 2010

Если формула для расчета уровня оружия проста, как в этом случае, вы можете подумать о выборе уровня случайным образом, а затем вычислить параметры оружия, повторяя деление уровня на случайные факторы.

Например, у вас есть уровень 12. Затем вы случайным образом генерируете тип оружия. Вы получаете копье (1,0) и делаете 12 / 1,0 = 12. Затем вы случайным образом выбираете магию и получаете огонь (10). Тогда у вас есть 12/10 = 1,2. Вы продолжаете, пока у вас нет только одного параметра для установки, и в итоге вы выбираете это значение. Для более сбалансированной системы вы можете изменить порядок параметров для угадывания и / или вероятности случайных генераторов в зависимости от текущих значений вашего предположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...