Jump to content

Randomizar resultados com mais eficiência


Recommended Posts

então atualmente eu estou usando o math.random, porém percebi que ele vicia muito
a chande é assim math.random(1, 10), então caso o resultado seja 6 aconteça alguma coisa de 1 em 10
porém de vez enquando o resultado vicia em cair 6 toda hora ou vicia em quase nunca cair em 6.
Resumindo a chance não ta em 1 de 10 ao que aparenta, existe alguma forma de randomizar com mais eficiência?

Link to comment
7 hours ago, SciptNovato said:

então atualmente eu estou usando o math.random, porém percebi que ele vicia muito
a chande é assim math.random(1, 10), então caso o resultado seja 6 aconteça alguma coisa de 1 em 10
porém de vez enquando o resultado vicia em cair 6 toda hora ou vicia em quase nunca cair em 6.
Resumindo a chance não ta em 1 de 10 ao que aparenta, existe alguma forma de randomizar com mais eficiência?

Não sei se ira lhe ajudar, mas usei isso em um projeto meus e não tive problemas, peguei do discord do mta.
 

Probabilidade por porcentagem.

function prob(numberOfChance)
    local factor = numberOfChance / 100 -- Pega o fator da chance, ou seja, se for 40, então o fator será 0.4.
    return 10 + (factor * math.random(100)) < numberOfChance -- No começo, eu coloquei um '10', que seria a margem de erro da probabilidade, e também 10% de chance seria bem difícil. Depois, eu multipliquei o nosso fator (0.4, no exemplo citado acima) por um número aleatório de 1 a 100, pra gerar alguma aleatoriedade bem simples. Caso o resultado dessa multiplicação for menor que o número da chance, então ele é verdadeiro. Quanto menor o número, mais difícil fica.
end

 

Link to comment
  • Other Languages Moderators

Você também pode usar a função útil math.randomDiff para nunca repetir o mesmo valor gerado anteriormente.

Um dos exemplos inclusive faz ele gerar um valor numa série sem repetir nenhum até que a sequência inteira já tenha sido gerada.

  • Thanks 1
Link to comment
18 hours ago, FelipeX said:

Não sei se ira lhe ajudar, mas usei isso em um projeto meus e não tive problemas, peguei do discord do mta.
 

Probabilidade por porcentagem.

function prob(numberOfChance)
    local factor = numberOfChance / 100 -- Pega o fator da chance, ou seja, se for 40, então o fator será 0.4.
    return 10 + (factor * math.random(100)) < numberOfChance -- No começo, eu coloquei um '10', que seria a margem de erro da probabilidade, e também 10% de chance seria bem difícil. Depois, eu multipliquei o nosso fator (0.4, no exemplo citado acima) por um número aleatório de 1 a 100, pra gerar alguma aleatoriedade bem simples. Caso o resultado dessa multiplicação for menor que o número da chance, então ele é verdadeiro. Quanto menor o número, mais difícil fica.
end

 

poderia me dar um exemplo de como usar isso? uma chance de 10% de exibir uma mensagem no chat e os outros 90% aparecer outra mensagem, só pra eu saber

Link to comment
8 hours ago, SciptNovato said:

poderia me dar um exemplo de como usar isso? uma chance de 10% de exibir uma mensagem no chat e os outros 90% aparecer outra mensagem, só pra eu saber

--[[

 █▀▀█ █▀▀▀█ █▀▄▀█ █▀▀▀█   █░▒█ █▀▀▀█ █▀▀█ █▀▀█
 █░░░ █░░▒█ █▒█▒█ █░░▒█   █░▒█ ▀▀▀▄▄ █▄▄█ █▄▄▀
 █▄▄█ █▄▄▄█ █░░▒█ █▄▄▄█   ▀▄▄▀ █▄▄▄█ █░▒█ █░▒█

]]

local Sucesso = prob(90) -- Retorna a função util que enviei antes, agora definido a porcentagem ( 90 ).
if Sucesso then -- Se a chance for dentro dos 90%, então:
    -- Exibe 1 mensagem no chat.
else -- Se não, então:
    -- Exibe outra mensagem no chat.
end

--[[

 █▀▀▀ █░▒█ █▄░▒█ █▀▀█ █▀▀█ █▀▀▀█   █░▒█ ▀▀█▀▀ ▀█▀ █░░░
 █▀▀▀ █░▒█ █▒█▒█ █░░░ █▄▄█ █░░▒█   █░▒█ ░▒█░░ ░█░ █░░░
 █░░░ ▀▄▄▀ █░░▀█ █▄▄█ █░▒█ █▄▄▄█   ▀▄▄▀ ░▒█░░ ▄█▄ █▄▄█

]]--

function prob(numberOfChance)
    local factor = numberOfChance / 100 -- Pega o fator da chance, ou seja, se for 40, então o fator será 0.4.
    return 10 + (factor * math.random(100)) < numberOfChance -- No começo, eu coloquei um '10', que seria a margem de erro da probabilidade, e também 10% de chance seria bem difícil. Depois, eu multipliquei o nosso fator (0.4, no exemplo citado acima) por um número aleatório de 1 a 100, pra gerar alguma aleatoriedade bem simples. Caso o resultado dessa multiplicação for menor que o número da chance, então ele é verdadeiro. Quanto menor o número, mais difícil fica.
end

 

  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...