Сейчас 18:16:07 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Механика работы GetRandomInt/Real в Варкрафте
DuosoraДата: Пятница, 13 Марта 2015, 13:25:06 | Сообщение # 1
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Знаю, что уже достал здешний народ этими вопросиками о рандомизации, но, пожалуй, один подкину (причём этот вопрос гораздо интереснее других соседних).
Доподлинно известно, что Варкрафт применяет псевдослучайные числа, генерируемые в определённой последовательности.
Сама последовательность - математическая рекуррентная формула, которая состоит из определённых действий и из предыдущего члена выводит следующий. Первым членом такой последовательности является некое значение Random Seed. В Варкрафте им управляют функции SetRandomSeed и GetRandomSeed (изменение и получение).
В языке программирования С, на котором, собственно, Варкрафт и написан, по умолчанию есть только функция rand(), генерирующая случайное число от 0 до MAXINT, где MAXINT зависит от того, какой размер в битах у данного типа числа. Определённый диапазон значений (случайное число от a до b) получается путём обрезания по остатку от деления числа на верхнюю границу и прибавления нижней к результату (a+rand()%b).

Мой вопрос опять же просто формулируется - какой рекуррентной формулой задаются случайные числа в Варкрафте? Думаю, что этот же вопрос был бы интересен многим картостроителям.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

BruДата: Пятница, 13 Марта 2015, 13:49:27 | Сообщение # 2
i<3bo4k@
Группа: Акулы
Сообщений: 4750
Награды: 2
Репутация: 1960
Блокировки:
Интересен-то интересен, но ответ как найти? Разве что реверсить варкрафт?
 

SirNikolasДата: Пятница, 13 Марта 2015, 16:33:39 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата Duosora ()
В языке программирования С, на котором, собственно, Варкрафт и написан, по умолчанию есть только функция rand(), генерирующая случайное число от 0 до MAXINT, где MAXINT зависит от того, какой размер в битах у данного типа числа.
Во-первых, до RAND_MAX, которая на всех современных компиляторах равна 32767. Во-вторых, совсем не обязательно там использована стандартная rand. В-третьих, случайные числа потому и называются случайными, что пользователь не может и не должен знать закономерность выпадения.

P. S. Разве war3 написан не на C++?


 

BruДата: Пятница, 13 Марта 2015, 17:02:19 | Сообщение # 4
i<3bo4k@
Группа: Акулы
Сообщений: 4750
Награды: 2
Репутация: 1960
Блокировки:
Цитата SirNikolas ()
Во-первых, до RAND_MAX, которая на всех современных компиляторах равна 32767.

Позволю себе исправить: RAND_MAX может быть любым в зависимости от реализации, однако не меньше 32767.
Цитата SirNikolas ()
Разве war3 написан не на C++?

Так и есть.
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz