WWWoWaNuS
Posts: 138
|
Ранее спрашивал про VR:R и VR:Т.
Horn, 28 Oct 2006, 17:23 Wrote:Druin,25 Sep 2006, 13:22 Wrote:Системного времени...
Чесс гря сам до конца не понимаю где там что и как, но не раз сталкивался в паскале с следущим: простой генератор при каждом запуске програмы выдавал одну и туже комбинацию чисел, генератор со временем всегда разную...
1. Комп не умеет генерить настоящие случайные числа, т.к. любой алгоритм (пока что) вещь в принципе жестко детерминированная.
2. Стандартный ГСЧ выдает последовательность псевдослучайных чисел, каждое из которых однозначно определяет последующие по некоторому правилу (тут есть разные варианты, чаще всего используют остатки от деления на большие числа). Текущее число, по которому будет определяться следующее, называется "зерном" генератора. В сетевом бою при ударе одного монстра другим, например, урон на каждой машине рассчитывается отдельно, а не передается по сети. Но для этого в начале боя машины синхронизируются, устанавливая одинаковое зерно (в ЕРМ есть специальная команда для этого). И в дальнейшем нужно, чтобы количество запусков ГСЧ на машинах игроков строго совпадало, иначе может случиться та самая печально известная рассинхронизация - у одного игрока ходит гоблин противника, а на компе противника выпал бОльший урон, в результате этот гоблин уже труп и ходит другой отряд.
3. VR:R - это тот самый ГСЧ, стартующий всегда с одной и той же точки. То есть первый его вызов (первый - после запуска НММ) даст всегда Х1, второй - Х2 и т.д.
4. А в VR:Т в качестве зерна используется системное время (с точностью до миллисекунд), поэтому иногда он предпочтительнее. С другой стороны, если его вызвать в цикле несколько раз подряд, то он возможно вернет одно и то же число, ведь цикл успеет прокрутиться несколько раз в течение одной миллисекунды.
5. В ТЕ я сделал так - в начале партии генерю число с помощью VR:Т, записываю в переменную, а в дальнейшем вызываю только VR:R, но к результату "подмешиваю" это число. Интересующиеся могут глянуть текст функции 23013 (она генерит случайное число между х1 и х2) скрипта01. Есть еще интересная функция 23017, переставляющая случайным образом значения v-переменных в диапазоне vx1 - vx2. Нашёл на DF2, м.б. кому полезно будет..
(This post was last modified: 18.12.2013 12:36 by WWWoWaNuS.)
|
|
18.12.2013 12:31 |
|