Как реализовать полурандомизированный уровень в игре для iPhone? - PullRequest
2 голосов
/ 06 июля 2010

Я хочу создать игру со структурой уровней, аналогичной iCopter или Canabalt, в которой каждый уровень имеет случайный этаж (и крышу), но никогда не будет невозможно достичь высоты пола по сравнению с предыдущим. Я также не уверен в том, как постоянно увеличивать сложность. Я искал учебник или что-то в этом роде, но ничего не смог найти. Кто-нибудь может помочь?

Ответы [ 2 ]

3 голосов
/ 06 июля 2010

Это звучит как слишком конкретная необходимость быть предметом урока, если честно.Я играл в Canabalt, но не в iCopter, поэтому я расскажу об игре, подобной предыдущей.

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

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

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

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

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

Чтобы настроить сложность, вы можете начать с приведенных выше относительных значений высоты и расстояния, которые представляют крайние значения того, что возможно, и уменьшить их на пропорции, чтобы облегчить выполнение прыжков.Я мог бы начать с 50% сокращений, +/- 10% (в случайном порядке), чтобы обеспечить несколько более жестких прыжков.Затем, по ходу игры, я постепенно увеличивал это значение на 50% до 0, поэтому у игрока все меньше и меньше погрешностей.

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

1 голос
/ 09 июля 2010

Я не уверен, насколько вам удобно с математикой, физикой и т. Д., Но, на мой взгляд, это довольно простое решение:

Использование формулы для определения, будет ли запущенный мяч очистить забор на расстоянии, - разумный способ найти дугу, определяющую возможные самые дальние точки, которые может быть следующей платформой. Это стандартная формула, которую вы изучаете в физике при изучении движения снаряда. Есть довольно интерактивный пример здесь , который включает уравнение.

Я бы порекомендовал определить позицию для вашей следующей платформы следующим образом:

  1. Произвольно выберите горизонтальное расстояние X от конца текущей платформы до начала следующей платформы (определите разумный диапазон для X, сколько хотите).
  2. Используйте задачу забора, чтобы найти максимальное значение высоты Y, чтобы сделать платформу доступной.
    • Возможно, вам придется вычесть небольшое количество из максимальной высоты, чтобы обеспечить доступ к платформе в зависимости от того, как вы реализовали вещи.
  3. Выберите высоту Y, которая не превышает максимальную (помните, что вы можете и должны разрешать отрицательные значения для Y).
  4. Разместите следующую платформу за текущей на расстоянии X и высоте Y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...