Random 5 veses sem repetir o mesmo valor

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Random 5 veses sem repetir o mesmo valor

Mensagem por Janx em Dom 05 Out 2008, 15:48

è o seguinte:
tenho 5 objetos, dai eu quero que cada um ganhe um numero aleatorio de 0 a 4.
cada numero desses corresponde a um outro valor... para outra coisa
mas como eu fasso para fazer esses randoms sem repetir o valor???

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Gusba em Dom 05 Out 2008, 17:31

explique melhor

Gusba

Número de Mensagens : 1156
Idade : 21
Data de inscrição : 03/08/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.ciganospictures.hd1.com.br

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por RKNF1995 em Dom 05 Out 2008, 17:38

acho que ele quer que apareça 5 numeros aleatorias mas que nao se repitam

RKNF1995

Número de Mensagens : 1257
Idade : 21
Data de inscrição : 19/07/2008
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.rknf1995.blogspot.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Dom 05 Out 2008, 18:14

Coloque no evento CREATE em um objeto de inicializacao:
Código:

randomize();
depois no evento CREATE de cada objeto:
Código:

numero = ceil(random(5));

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Janx em Dom 05 Out 2008, 18:52

noossa explica porfavor?? O_O!"

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Gusba em Dom 05 Out 2008, 18:54

q codigo é esse, explica ae!

Gusba

Número de Mensagens : 1156
Idade : 21
Data de inscrição : 03/08/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.ciganospictures.hd1.com.br

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Froidz em Dom 05 Out 2008, 19:29

será que criando 5 alarms resolveria o problema?
Soh uma sugestão ^^

Froidz

Número de Mensagens : 1053
Idade : 23
Data de inscrição : 03/08/2008
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Janx em Dom 05 Out 2008, 19:37

Claudio Bruno escreveu:será que criando 5 alarms resolveria o problema?
Soh uma sugestão ^^
Nao O.o

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Dom 05 Out 2008, 19:46

Randomize() - Faz com que ao executar o seu jogo os números aleatórios gerados sejam sempre diferentes. Ele embaralha o gerador de números aleatórios. Assim quando voce usar a função random() ela vai funcionar melhor como se fosse um veradadeiro dado eletrônico. Você precisar executar a função randomize() ao menos uma vez em seus jogos se for utilizar números aleatórios. A função ceil() serve arredondar um número tipo 4.2 para o maior inteiro mais próximo do número. Você pode usar o floor() que faz o arredondamento para baixo. Tipo 4.2 vira 4. Usando o ceil() 4.2 vira 5. Então random(5) de 0 a 4.999 por isso uso o ceil(). Flw

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por rodrigo1434 em Dom 05 Out 2008, 20:13

var=floor(random(4))
tenta esse

ou cria um objeto que ira criar esse objetos

var a;
a=0
repeat(5){
bola=instance_create(random(room_width),random(room_height),obj_bola)
with(bola) valordabola=a
a+=1}


Última edição por rodrigo1434 em Dom 05 Out 2008, 20:21, editado 1 vez(es)

rodrigo1434

Ranking : Nota C
Número de Mensagens : 318
Idade : 23
Data de inscrição : 25/04/2008
Notas recebidas : C
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://brasilgame.forumbrasil.net

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Janx em Dom 05 Out 2008, 20:16

rodrigo1434 escreveu:var=floor(random(4))
tenta esse

isso pode dar o mesmo numero mais de uma vez.

Vunians:
Cara, mas dai se um valor é 'escolhido', esse valor nao vai ser mais escolhido dinovo ateh eu recomeçar o jogo?? digamos... que caiu 8
dai nunca mais pode cair 8 ateh eu fexa o jogo e abrir dinovo??

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por rodrigo1434 em Dom 05 Out 2008, 20:24

atualizei o post veja dinovo

rodrigo1434

Ranking : Nota C
Número de Mensagens : 318
Idade : 23
Data de inscrição : 25/04/2008
Notas recebidas : C
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://brasilgame.forumbrasil.net

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Seg 06 Out 2008, 03:06

Na verdade o randomize() faz com que a aleatorização seja mais real. Se vc quizer garantir que nao dê igual armazene os numeros em um vetor.
No evento CREATE de um objeto coloque este código e execute pra vc como funciona:
Código:

r[1] = 0; r[2] = 0; r[3] = 0; r[4] = 0; r[5] = 0;
randomize(); //prepara gerador aleatorio
ss = " ";
while (ss <> "AAAAA")
{
  c  = 0;
  ss = "*****";
  repeat (5)
  {
      c += 1;
      r[c] = ceil(random(5));  //gera numero aleatório no vetor r
      //coloca uma letra 'A' pra marcar a posição
      s1 = string_copy(ss, 1,  r[c] - 1);
      s2 = string_copy(ss, r[c] + 1, string_length(ss) - r[c]);
      ss = s1 + 'A' + s2;
  }
}
c = 1; repeat(5) {r[c] = r[c] - 1; c += 1;}; //valores de 0 a 4 em r
//Depois que vc testar pode remover daqui pra baixo (é so pra mostrar como ficou)
c = 1; str = "-";
repeat(5) {str = str + string(r[c]) + "-"; c += 1; }
show_message('Numeros Gerados: ' + str);
Este é um código de exemplo que gera 5 numeros aleatórios diferentes entre si. Os numeros estão armazenados no vetor r[], dai agora é só vc pegar o valor r[1], r[2] etc e colocar numa variável nos seus 5 objetos. flw
*obs: código testado na versão 7 do GM[u]

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Volstagg em Seg 06 Out 2008, 10:55

Que "codigozão" heim! Shocked

Volstagg

Número de Mensagens : 353
Data de inscrição : 16/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Gusba em Seg 06 Out 2008, 13:13

muito bem pensado esse seu codigo vinians

Gusba

Número de Mensagens : 1156
Idade : 21
Data de inscrição : 03/08/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.ciganospictures.hd1.com.br

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por pedrosorio em Seg 06 Out 2008, 18:13

Demasiado complicado esse código, e não faz sentido usar strings.

Código:

r[4]=0;
randomize();
for(a=0;a<=4;a+=1) {
  n=floor(random(200))+1;
  nn=0;
  while(n>0) {
    while(r[nn]!=0)
      nn=(nn+1) mod 5;
    n-=1;
  }
  r[nn]=a+1;
}

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Seg 06 Out 2008, 19:41

pedrosorio escreveu:Demasiado complicado esse código, e não faz sentido usar strings.

Código:

r[4]=0;
randomize();
for(a=0;a<=4;a+=1) {
  n=floor(random(200))+1;
  nn=0;
  while(n>0) {
    while(r[nn]!=0)
      nn=(nn+1) mod 5;
    n-=1;
  }
  r[nn]=a+1;
}
Sério? bem eu testei o seu código e ele não esta funcionando sempre retorna a mesma sequencia 1-2-3-4-5...

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por pedrosorio em Ter 07 Out 2008, 03:49

LOL

É o que dá escrever código às tantas da noite sem testar, evidentemente faltava uma linha fundamental:

Código:

r[4]=0;
randomize();
for(a=0;a<=4;a+=1) {
  n=floor(random(200))+1;
  nn=0;
  while(n>0) {
    nn=(nn+1) mod 5;
    while(r[nn]!=0)
      nn=(nn+1) mod 5;
    n-=1;
  }
  r[nn]=a+1;
}

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por dani em Ter 07 Out 2008, 08:23

pedrosorio escreveu:LOL

É o que dá escrever código às tantas da noite sem testar, evidentemente faltava uma linha fundamental:

Código:

r[4]=0;
randomize();
for(a=0;a<=4;a+=1) {
  n=floor(random(200))+1;
  nn=0;
  while(n>0) {
    nn=(nn+1) mod 5;
    while(r[nn]!=0)
      nn=(nn+1) mod 5;
    n-=1;
  }
  r[nn]=a+1;
}

acho que não vai retornar o mesmo valor de antes.... pq tipo, o vetor r[4] vai adicionar sempre a sequência de 1 - 2 - 3 - 4 como mostra essa linha r[nn]=a+1; a meu ver tudo que está dentro do laço for será despresado.

@topic
não sei se o código do vinians explica isso, como não entendi vou perguntar... como que funciona exatamente esse randomize()? pois 1.2 é diferente de 1.3, mas como querem um inteiro vai ficar 1.. então se repetirá.

dani

Número de Mensagens : 30
Idade : 27
Data de inscrição : 03/10/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por pedrosorio em Ter 07 Out 2008, 16:08

Portanto, dani, você acredita sinceramente que um código que usa strings para gerar números aleatórios é um código conciso e correcto. Mas não se dá sequer ao trabalho de analisar um algoritmo simples para gerar números aleatórios não repetidos?

A meu ver, a linha r[nn]=a+1 vai colocar na posição nn do array r, o valor a+1, (1,2,3,4,5). Evidentemente a aleatoriedade se encontra no 'nn', isto é, na posição do array onde é colocado o número.

O algoritmo limita-se a gerar um número aleatório 'n' e a percorrer o array em busca de posições que ainda não têm valores atribuídos. Cada vez que encontra uma dessas, diminui o 'n' até chegar a 0. Quando aqui chega atribui à posição actual 'nn' o valor designado. Temos assim uma posição perfeitamente aleatória. Já tinha aliás mostrado este algoritmo noutro tópico da gmbr.

Embora o ciclo não tenha que ser percorrido muitas vezes, a verdade é que não vale a pena estar a diminuir n até chegar a 0. Um pouco de aritmética modular simples resultaria no seguinte código equivalente:

Código:

r[4]=0;
randomize();
for(a=0;a<=4;a+=1) {
  n=floor(random(200))+1;
  n=n mod (5-a);
  if(n==0)
    n=5-a;
  nn=0;
  while(n>0) {
    nn=(nn+1) mod 5;
    while(r[nn]!=0)
      nn=(nn+1) mod 5;
    n-=1;
  }
  r[nn]=a+1;
}

Pode parecer que me limitei a adicionar código "desnecessário" mas se quisermos gerar uma lista de números aleatórios muito grande, este código executará bem mais rápido que a minha versão anterior.

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Volstagg em Ter 07 Out 2008, 18:33

Desculpa a "newbice" mas o que é mod?

Volstagg

Número de Mensagens : 353
Data de inscrição : 16/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Ter 07 Out 2008, 18:52

dani escreveu:
@topic
não sei se o código do vinians explica isso, como não entendi vou perguntar... como que funciona exatamente esse randomize()? pois 1.2 é diferente de 1.3, mas como querem um inteiro vai ficar 1.. então se repetirá.
Dani, la no início do tópico eu dei uma explicada +- sobre isso, da uma olhada la, qualquer coisa me manda pm que te explico melhor.

pedrosorio escreveu:
Portanto, dani, você acredita sinceramente que um código que usa strings para gerar números aleatórios é um código conciso e correcto. Mas não se dá sequer ao trabalho de analisar um algoritmo simples para gerar números aleatórios não repetidos?
Amigo, não sei oque vc tem contra as strings :rooll: o GM possui grande facilidade de manipulação de strings, use-as!!! Alias sendo esse código utilizado no evento CREATE não causará problemas de velocidade. Lembre-se código bom é aquele que resolve o problema proposto ;)

Vitinho0 escreveu:
Desculpa a "newbice" mas o que é mod?
Amigo, o operador mod retorna o resto da divião.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por pedrosorio em Ter 07 Out 2008, 19:04

Eu não tenho absolutamente nada contra strings. Pura e simplesmente são um tipo de dados que nada tem que ver com a geração de números aleatórios e não faz qualquer sentido usá-las aqui.

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Ter 07 Out 2008, 20:10

pedrosorio escreveu:Eu não tenho absolutamente nada contra strings. Pura e simplesmente são um tipo de dados que nada tem que ver com a geração de números aleatórios e não faz qualquer sentido usá-las aqui.
Amigo, não esta especificado que um tipo ou outro de dado deve ser usado pra resolver esse ou aquele problema, certo? Srtrings guardam uma sequencia de caracteres que vc pode usar pra qualquer coisa, desde que resolva o seu problema. As próprias variaveis numéricas podem guardar códigos de caracteres que podem ser utilizados pra se converter numa... voila!! sequencia de caracteres!!, ou seja um string ;) Bem de qualquer modo creio que fica a cargo de cada um usar esse ou aquele tipo de dados, afinal é pra isso que eles servem, devem ser combinados pra se criar algum tipo de solução ;)

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por pedrosorio em Ter 07 Out 2008, 21:01

Então eu vou fazer uma análise mais detalhada:

1) O porquê de não usar strings - strings são por definição um tipo de dados que consiste numa sequência de caracteres, geralmente utilizada para guardar informação de tipo textual, como nomes, etc. Nada nos impede de usar strings mas para quê usar funções "complicadas" quando o tipo natural de dados para o que você quer é o vector (saber se o número x já saiu ou não).

2) Você poderia argumentar que você tem um while no qual é feita a verificação imediata para saber se saíram todos os números (ss<>"AAAAA") e tal seria impossível de fazer com um vector. Você está correcto. O problema é que você apenas tem que fazer essa verificação porque a estrutura do programa não é a correcta. Nesse momento você gera 5 números aleatórios e vai ver se saíram todos diferentes. Em "boa programação" deveria verificar a cada "extracção" se o número já saiu e nesse caso repetir. Porquê? Porque em 5 números não faz diferença, mas para conjuntos maiores, o seu método ineficiente não pode ser utilizado. Como pode ver, ao verificar se o número já saiu a cada extracção já não é necessário verificar todos os números ao mesmo tempo, e um vector passa a ser a escolha natural.

3) ceil(random(5))
random(x) Returns a random real number between 0 and x. The number is always smaller than x.
Significa isto que, aplicando a função ceil a random(5) vamos obter um número entre 0 e 5. Sempre que quiser obter um número entre 1 e n faça 1+floor(random(n)).

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por rodrigo1434 em Ter 07 Out 2008, 21:55

Viu meu post !!!
crie um objeto criador dessas ''bolas'' //exemplo



var a;
a=0
repeat(5){
bola=instance_create(random(room_width),random(room_height),obj_bola)
with(bola) valordabola=a
a+=1}

rodrigo1434

Ranking : Nota C
Número de Mensagens : 318
Idade : 23
Data de inscrição : 25/04/2008
Notas recebidas : C
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://brasilgame.forumbrasil.net

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por vinians em Ter 07 Out 2008, 22:50

pedrosorio escreveu:Então eu vou fazer uma análise mais detalhada:

1) O porquê de não usar strings - strings são por definição um tipo de dados que consiste numa sequência de caracteres, geralmente utilizada para guardar informação de tipo textual, como nomes, etc. Nada nos impede de usar strings mas para quê usar funções "complicadas" quando o tipo natural de dados para o que você quer é o vector (saber se o número x já saiu ou não).

2) Você poderia argumentar que você tem um while no qual é feita a verificação imediata para saber se saíram todos os números (ss<>"AAAAA") e tal seria impossível de fazer com um vector. Você está correcto. O problema é que você apenas tem que fazer essa verificação porque a estrutura do programa não é a correcta. Nesse momento você gera 5 números aleatórios e vai ver se saíram todos diferentes. Em "boa programação" deveria verificar a cada "extracção" se o número já saiu e nesse caso repetir. Porquê? Porque em 5 números não faz diferença, mas para conjuntos maiores, o seu método ineficiente não pode ser utilizado. Como pode ver, ao verificar se o número já saiu a cada extracção já não é necessário verificar todos os números ao mesmo tempo, e um vector passa
a ser a escolha natural.

Bem, quanto estou jogando um jogo num deixo de usar ele porque o programador usou 'strings' no lugar de 'inteiros', pense nisso ;)


pedrosorio escreveu:
3) ceil(random(5))
random(x) Returns a random real number between 0 and x. The number is always smaller than x.
Significa isto que, aplicando a função ceil a random(5) vamos obter um número entre 0 e 5. Sempre que quiser obter um número entre 1 e n faça 1+floor(random(n)).
É vero!!! ;)

Concordo com seu argumento e acho que vc deve ser um bom programador!! Só acho que não devemos olhar um problema por apenas um angulo, ou achar que só uma solução é correta!! Mais se eu tivesse algum projeto de game iria gostar de te-lo como colaborador! Abraços, Vinians

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por pedrosorio em Qua 08 Out 2008, 08:37

Eu admito que fui um pouco agressivo demais nesse tópico. Vinians, concordo plenamente que a sua solução funciona perfeitamente, assim como muitas outras, e é óbvio que desde que a experiência de jogo seja satisfatória, ninguém vai deixar de jogar porque o programador escolheu fazer desta ou daquela maneira.

Peço desculpa por me ter exaltado, a verdade é que encarei este tópico como uma dúvida de programação e queria dar uma solução que do ponto de vista da programação fosse mais "limpa" digamos assim e também explicar o porquê desse tipo de solução.

Acho que a sua forma de resolver o problema é sem dúvida imaginativa mas numa situação complexa em que o desempenho é fundamental (e isso no game maker acontece por vezes) é bom saber o que devemos usar para resolver um problema da forma mais eficaz.

Na realidade, o grande problema para mim foi ver que o seu código faz o equivalente a pegar em 5 bolas, atirá-las para um campo com 5 buracos, e esperar que todas caiam em 5 buracos diferentes, e quando não o fazem repetir. Para 5, e com a velocidade dos computadores actuais é razoável (a probabilidade de sair certo a cada vez é 5!/5^5 = 0.04). Mas tente aumentar esse número para 15. Qual a probabilidade de as 15 bolas caírem todas em buracos diferentes? Muitíssimo menor, (15!/15^5 = 0.000003) teste o seu código com 15 algumas vezes. O pior disso é mesmo que no pior caso, elas podem NUNCA cair e a probabilidade de não caírem cresce exponencialmente com o número de bolas. Na verdade para um valor tipo 30 números aleatórios, você tem que esperar muito tempo (a probabilidade de caírem as 30 bolas em 30 buracos diferentes é de 30! / 30^30 aproximadamente 0.000000000001 ou seja, você tem que fazer em média 1000000000000 ciclos, se tiver sorte podem ser 10000 - extremamente rápido, se tiver azar, o programa bloqueia).

Mais uma vez queria pedir desculpa por alguma agressividade, a imaginação também é algo fundamental para resolver os problemas em programação. Não é pelo facto de você usar strings que vão surgir problemas neste caso, mas espero que tenha percebido as falhas no algoritmo.

Se tiver alguma questão sobre o seu ou o meu código, ou sugestões para melhorar o meu, diga vinians. Abraço

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Jiraiya_lo em Sex 08 Maio 2009, 11:24

E se eu quizesse fazer 5 sprites aparecerem randomicamente?

Jiraiya_lo

Número de Mensagens : 1
Data de inscrição : 08/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Igor KinGamer em Sex 08 Maio 2009, 13:40

Não faça perguntas nos tópicos dos outros (ainda mais assim revivendo, olhe a data do último post antes do seu), crie um tópico perguntando isso e seja bem específico sobre o que você quer ;)

Igor KinGamer

Número de Mensagens : 890
Idade : 21
Data de inscrição : 26/09/2008
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Borgo em Sex 08 Maio 2009, 16:34

EDIT: agora que eu vi que este post é antigo e tem 3 páginas hehehe, mas em todo caso, se alguém ainda precisar do script que gera numeros aleatórios sem se repetir hehehehe


Borgo is back huHAuhAu

Mude apenas o qt_nrs para a quantidade desejada e vualá!!!
será retornado um array chamado numero[] que armazena estes numeros aleatórios sem repetições.
inicia pelo 1...
numero[1]
numero[2]
numero[3]
até o número informado Smile

Código:


qt_nrs=10 //altere para quantos números precisa
for (i=1;i<=qt_nrs;i+=1){
numero[i]=0 //inicia o array
}
for (i=1;i<=qt_nrs;i+=1){
    while (numero[i]=0){
          numero[i]=round(random(qt_nrs-1)+1)
          for (j=1;j<i;j+=1){
              if numero[i]=numero[j]
              numero[i]=0
          }   
    }
}

Borgo

Número de Mensagens : 69
Idade : 29
Data de inscrição : 06/01/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.neonerds.com.br

Voltar ao Topo Ir em baixo

Re: Random 5 veses sem repetir o mesmo valor

Mensagem por Conteúdo patrocinado Hoje à(s) 22:14


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum