LuizTools - Página 67 de 92 - Empreendedorismo e desenvolvimento de software
Empreendedorismo e desenvolvimento de software
Arquitetura de micro serviços em Node.js + MongoDB: Parte 5
A biblioteca math.* do Corona permite que você facilmente gere números aleatórios para uso em seus apps. De embaralhar as cartas de um baralho até determinar o quanto dano seu herói elfo levou do sopro de fogo do dragão, números aleatórios podem ser uma parte crítica do desenvolvimento do seu jogo.
Dito isso, números aleatórios gerados pela maioria dos sistemas computacionais não são verdadeiramente aleatórios. Ao invés disso, eles são pseudo-aleatórios – quer dizer, eles são gerados por um algoritmo matemático que dá resultados razoavelmente aleatórios, mas com o passar do tempo, os números começarão a se repetir. Números verdadeiramente aleatórios, como aqueles do random.org, são gerados a partir da leitura de sinais de rádio do ruído atmosférico o que sempre terá um resultado diferente, e o site oferece uma API RESTful para retorná-los se seu projeto realmente precisar disso.
Em geral, números aleatórios gerados pelo Corona são "aleatórios o bastante" para a maioria dos casos. Existem duas funções envolvidas na geração dos mesmos:
Em praticamente qualquer projeto que use números aleatórios, você deve incluir esta linha no topo do main.lua:
Isto irá garantir que seus números serão tão aleatórios quanto possível. Como? Bem, a função que na verdade gera os números aleatórios discutida abaixo, precisa de um valor inicial ou "seed" a partir do qual vai iniciar a cadeia de números aleatórios que será gerada. Usando valor de os.time(), o que nos dará o número de segundos desde 01/01/1970, o que lhe dará um seed diferente a cada vez que o ap for iniciado e portanto uma sequência diferente de números aleatórios.
Note que você somente precisa alimentar o gerador uma vez. Alguns desenvolvedores chamam math.randomseed() toda vez que vão chamar math.random() mas isto simplesmente não é necessário. Então você deve estar se perguntando "Porque o sistema já não inicializa a seed automaticamente?". Bem, existem ocasiões onde você pode querer inicializar com um valor constante definido por você ao invés de os.time(). Se você o fizer, receberá sempre a mesma sequência de números aleatórios, o que pode ser útil dependendo do seu caso. Uma vez trabalhei em um jogo espacial onde eu precisava aleatoriamente gerar cada planeta, mas eu não podia manter as informações de todos planetas em memória todo o tempo. Passando um número específico para cada mundo ao math.randomseed(), eu obtinha a mesma sequência exata de números aleatórios que me permitia colocar as mesmas cidades nos mesmos lugares com as mesmas populações a cada execução.
A função math.random() é o que você irá chamar para gerar um número aleatório. Dependendo dos parâmetros que você passar, o resultado irá variar.
Gerando um valor entre 0 e 1
Ao chamar math.random() sem nenhum parâmetro irá lhe retornar um valor com ponto flutuante entre 0 e 1, por exemplo 0.22, 0.98, ou 0.56. Em Corona, isto pode ser útil para gerar valores de cores aleatórias, uma vez que os parâmetros RGB esperam valores entre 0 e 1. Por exemplo:
local rectangle = display.newRect( 100, 100, 80, 200 ) rectangle:setFillColor( math.random(), math.random(), math.random() )
local rectangle = display.newRect( 100, 100, 80, 200 )
rectangle:setFillColor( math.random(), math.random(), math.random() )
Gerando um valor entre 1 e um número máximo
Se você quer computar um intervalo de números inteiros, por exemplo o resultado de rolar dados de 6 lados, você pode fazer:
local diceRoll = math.floor( math.random()*6 ) + 1
O resultado de math.floor( math.random()*6 ) gera um número entre 0 e 5, e adicionando 1 ao final obtém o seu intervalo desejado de 1-6.
Alternativamente, a função math.random() fornece muitos métodos utilitários que podem evitar que você tenha de computar seus números. Este código irá fazer exatamente a mesma coisa do anterior:
local diceRoll = math.random( 6 )
Gerando um valor entre um número inicial e um número final
local value = math.random( -2, 2 )
Esta variante irá gerar um intervalo de números, neste exemplo entre -2 e 2 (incluindo o mesmo). Um grande exemplo desta variante é embaralhar uma table de dados fixos, como um baralho de cartas, onde você precisa usar todos os valores em uma ordem aleatória. Para mais exemplos, leia este tutorial de embaralhar tables (em Inglês).
Como pôde ver, gerar números aleatórios em Corona é simples. Com este conhecimento, você está armado com a habilidade de dar ao seu app alguns elementos realmente aleatórios.
Traduzido do original Tutorial: Understanding random numbers in Corona
Publicado em 23/06/2016 29/05/2017 Categorias Corona SDK, MobileTags corona, mobileDeixe um comentário em Usando números aleatórios com Corona SDK
Sonho Grande – Resenha
Publicado em 21/05/2016 15/04/2017 Categorias LivrosTags livro, resenhaDeixe um comentário em Sonho Grande – Resenha
Publicado em 20/04/2016 20/05/2018 Categorias DesenvolvimentoTags experiencia6 comentários em Como aprender a programar