netlib.narod.ru | < Назад | Оглавление | Далее > |
Взгляните на один из вспомогательных классов. 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 |
Как видите, методы очень просты, и чтобы написать класс целиком потребуется всего несколько минут. Однако класс остается полезным и, благодаря внутреннему экземпляру класса 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 | < Назад | Оглавление | Далее > |