Lua: Случайный: Процент - PullRequest
       13

Lua: Случайный: Процент

3 голосов
/ 07 июня 2010

Я создаю игру, и в настоящее время мне приходится иметь дело с некоторыми math.random Несс.

Поскольку я не настолько силен в Луа, как вы думаете

  • Можете ли вы сделать алгоритм, который использует math.random с заданным процентом?

Я имею в виду такую ​​функцию:

function randomChance( chance )
         -- Magic happens here
         -- Return either 0 or 1 based on the results of math.random
end
randomChance( 50 ) -- Like a 50-50 chance of "winning", should result in something like math.random( 1, 2 ) == 1 (?)
randomChance(20) -- 20% chance to result in a 1
randomChance(0) -- Result always is 0

Однако я понятия не имею, как поступить, и я полностью отстой в алгоритмах

Надеюсь, вы поняли мое плохое объяснение того, чего я пытаюсь достичь

Ответы [ 2 ]

7 голосов
/ 07 июня 2010

Без аргументов функция math.random возвращает число в диапазоне [0,1).

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> =math.random()
0.13153778814317
> =math.random()
0.75560532219503

Так что просто конвертируйте свой «шанс» в число от 0 до 1: то есть

> function maybe(x) if math.random() < x then print("yes") else print("no") end end
> maybe(0.5)
yes
> maybe(0.5)
no

Или умножьте результат random на 100, чтобы сравнить с int в диапазоне 0-100:

> function maybe(x) if 100 * math.random() < x then print(1) else print(0) end  end                                                                             
> maybe(50)
0
> maybe(10)
0
> maybe(99)
1

Еще одна альтернатива - передать верхний и нижний пределы на math.random:

> function maybe(x) if math.random(0,100) < x then print(1) else print(0) end end
> maybe(0)
0
> maybe(100)
1
6 голосов
/ 07 июня 2010

Я бы не стал возиться с числами с плавающей точкой;Я бы использовал math.random с целочисленным аргументом и целочисленными результатами.Если вы выберете 100 чисел в диапазоне от 1 до 100, вы должны получить желаемый процент:

function randomChange (percent) -- returns true a given percentage of calls
  assert(percent >= 0 and percent <= 100) -- sanity check
  return percent >= math.random(1, 100)   -- 1 succeeds 1%, 50 succeeds 50%,
                                          -- 100 always succeeds, 0 always fails
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...