netlib.narod.ru< Назад | Оглавление | Далее >

Класс RandomHelper

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

В игре Breakout, которую вы напишете чуть позже, блоки генерируются случайным образом. Для уровня 1 вы используете вероятность 10%, для уровня 2 — 20% и т.д. Благодаря этому уровни становятся более заполненными, а сама игра труднее. Вы можете просто использовать класс Random и вызывать метод Next для получения нового случайного числа, но в том случае, если вы хотите сгенерировать случайный нормализованный вектор, вам придется написать следующие строки кода:

Random randomGenerator = new Random((int)DateTime.Now.Ticks);
Vector3 randomNormalVector = new Vector3(
  (float)randomGenerator.NextDouble() * 2.0f - 1.0f,
  (float)randomGenerator.NextDouble() * 2.0f - 1.0f,
  (float)randomGenerator.NextDouble() * 2.0f - 1.0f);
randomNormalVector.Normalize();

Вспомогательный класс, подобный RandomHelper будет очень полезен, чтобы вам не пришлось снова и снова повторять этот код. Основная структура класса RandomHelper показана на рис. 3.8.


Рис. 3.8

Рис. 3.8


Как видите, методы очень просты, и чтобы написать класс целиком потребуется всего несколько минут. Однако класс остается полезным и, благодаря внутреннему экземпляру класса Random globalRandomGenerator, класс RandomHelper быстрее генерирует случайные значения, чем вариант с созданием нового класса Random каждый раз, когда вам потребуется случайное число.

Генерирование случайных векторов

Вот метод из класса RandomHelper:

/// <summary>
/// Получение случайного Vector2
/// </summary>
/// <param name="min">Минимум для каждого компонента</param>
/// <param name="max">Максимум для каждого компонента</param>
/// <returns>Vector2</returns>
public static Vector2 GetRandomVector2(float min, float max)
{
  return new Vector2(
    GetRandomFloat(min, max),
    GetRandomFloat(min, max));
} // GetRandomVector2(min, max)

В классе RandomHelper нет никакой нужды в методах для тестирования модулей, поскольку все возвращаемые значения случайны, и вам не надо проверять возвращает ли GetRandomVector2 значение Vector2; он действительно делает это. Здесь почти нет того, что могло бы пойти неверно.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz