Random de objetos na room?

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

Random de objetos na room?

Mensagem por Geferson em Qua 30 Maio 2012, 00:41

Alguem sabe algum codigo para eu colocar na room ou em um objeto para que com esse codigo seja criado na room, de forma "random" um objeto, mas que esse random seja de varios objetos, tipo fazer um random em uns 50 objetos?

Geferson

Número de Mensagens : 30
Idade : 33
Data de inscrição : 20/07/2011
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 de objetos na room?

Mensagem por GameMakerTutoriais em Qua 30 Maio 2012, 08:30


Se você quiser vários objetos aleatórios, veja se esse tópico te ajuda:
http://gmbr.forumeiros.com/t22455-como-tornar-isto-possivel

Mas se forem posições aleatórias pra várias instâncias de um mesmo objeto, você pode tentar fazer o seguinte no evento de criação da room:

Código:
repeat (numero_de_instancias)
{
    instance_create(random(room_width), random(room_height), qual_objeto);
}

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
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 de objetos na room?

Mensagem por luan.alc em Qua 30 Maio 2012, 11:06

Cara estou fazendo um jogo e precise disto, e usei um pouco de logica ...

Estou usando o comando choose !!

Exemplo : choose(obj_pnts10,obj_pnts20,obj_pnts50,obj_vida01,obj_pnts100)

e lá da certo ! abraços qualquer duvida .

luan.alc

Ranking : Nota B
Número de Mensagens : 293
Idade : 20
Data de inscrição : 13/03/2012
Notas recebidas : B
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por Geferson em Qua 30 Maio 2012, 14:55

a principio tentarei o codigo do luan, parece ser o que eu to precisando, quanto o do ninja parece que se fizer modificação tambem posso ter resultado...só que não é random de posição que procuro e sim de objeto, todos os objetos a ser criados por random estarão sempre na mesma posição na room

Geferson

Número de Mensagens : 30
Idade : 33
Data de inscrição : 20/07/2011
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 de objetos na room?

Mensagem por luan.alc em Qua 30 Maio 2012, 15:48

Se entendi direito pode tentar o choose, que dará certo, no meu jogo GlowBallhttp://gmbr.forumeiros.com/t22480-glowball-03p-lancado-03

estou usando este código, e está suprindo minhas necessidades
!

luan.alc

Ranking : Nota B
Número de Mensagens : 293
Idade : 20
Data de inscrição : 13/03/2012
Notas recebidas : B
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por saim em Qua 30 Maio 2012, 15:50

O problema do código do luan.alc é que a função "choose" tem um limite de argumentos (16 itens, eu acho). Mas você pode criar um script rápido pra sortear um objeto entre quantos quiser. Coloque cada um dos objetos numa array e sorteie o número do índice.
Código:
var i, sorteio, indiceSorteado;
i = 0;
sorteio[i] = objeto0; i += 1;
sorteio[i] = objeto1; i += 1;
...
sorteio[i] = objetoN;
indiceSorteado = irandom(i);
instance_create(x, y, sorteio[indiceSorteado]);
Você não precisa dessa sintaxe com o índice "i", mas eu gosto dela. Ela te permite mudar as posições das linhas e incluir novos elementos sem se preocupar com a numeração da array.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por luan.alc em Qua 30 Maio 2012, 17:41

Não sabia desta limitação, no meu eu uso uns 7 itens sendo que um deles ...

choose(asd,asd,asd,asd,asd,asd, ALEATÓRIO)

o valor do aleatório é o valor de outra Choose que usei, kkk

Agora essa parte de Script, eu tenho que aprender, nunca usei script em meus jogos, só quando tem dll e tal .

luan.alc

Ranking : Nota B
Número de Mensagens : 293
Idade : 20
Data de inscrição : 13/03/2012
Notas recebidas : B
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por gabrielsch em Qua 30 Maio 2012, 21:55


Se eu entendi, outro método seria usar o switch :

Código:
var r_n, r_o;

r_n = irandom(5)

switch (r_n)
{
    case 0: r_o = objeto0; break;
    case 1: r_o = objeto1; break;
    case 2: r_o = objeto2; break;
    case 3: r_o = objeto3; break;
    case 4: r_o = objeto4; break;
    case 5: r_o = objeto5; break;
}
 
instance_create(x,y,r_o)


Caso tenha alguma duvida, é só falar! o/

Flw! sorrindo2

___________


Acesse: http://foxen.com.br/



gabrielsch

Ranking : Nota A
Número de Mensagens : 1229
Idade : 21
Data de inscrição : 06/12/2009
Notas recebidas : D + A + A
Reputação : 28
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por saim em Qui 31 Maio 2012, 08:40

@luan.alc: nesse seu código, a probabilidade de sair o valor armazenado em "ALEATÓRIO" é a mesma que a de sair qualquer um dos "asd", ou seja, uma em (...deixa eu contar...) 7! Dentro de "ALEATÓRIO", cada item tem uma probabilidade X de ser escolhido, então a probabilidade de ser escolhido um item dentro de ALEATÓRIO é de uma em (7 x X), ou seja, bem menor que os demais itens. Funcionar, funciona, mas você pode passar muito tempo sem ver aquele item específico - o que, dependendo do jogo e do item, pode ser bom, basta saber dosar a probabilidade.

@gabrielsch: Seu método é perfeito. A única desvantagem, se é que isso é uma desvantagem, é que, pra alterar o código, o programador precisa se lembrar de incluir uma linha E alterar o valor dentro do "irandom". Eu gosto mais do meu por isso, porque eu posso copiar/colar uma linha em qualquer lugar pra adicionar outro item à lista que os cálculos se adaptam automaticamente.
Mas se a lista já entra completa desde o princípio, o seu método tem o mesmo resultado e é mais rápido de ser processado pela máquina.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por GameMakerTutoriais em Qui 31 Maio 2012, 10:25


Tem uma forma "preguiçosa" de fazer isso sem escrever muito código. soneca Se você tiver criado todos os objetos em sequencia (no projeto) e não apagado nenhum, você pode usar o índice de um e do outro pra gerar o número aleatório:

"Primeiro" e "último" aqui seriam a ordem de criação:

Código:
objeto := irandom_range(primeiro_objeto, ultimo_objeto);

Se tiver apagado algum, você pode associar um parente a todos aqueles que serão sorteados, também fica fácil, porque através do "primeiro" e do "último" índices você controla o "range" entre quais os que quer incluir no random:

Código:
obj = -1;
while (object_get_parent(obj) <> parente) obj := irandom_range(primeiro_objeto, ultimo_objeto);
instance_create(x, y, obj);

Tem vários jeitos, aí depende de você ver qual se encaixa melhor no seu código. Happy

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
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 de objetos na room?

Mensagem por luan.alc em Qui 31 Maio 2012, 12:42

@saim por isso mesmo esta me satisfazendo porque eu quero que uns itens saiam em menas quantidade que outros, então tive a ideia de fazer isto !

luan.alc

Ranking : Nota B
Número de Mensagens : 293
Idade : 20
Data de inscrição : 13/03/2012
Notas recebidas : B
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por Geferson em Ter 05 Jun 2012, 03:19

Ninja8086
o codigo que vc disse ser forma "preguiçosa", funciona com objetos em uma pasta tipo
pasta 1=objeto01 ao objeto10
pasta 2=objeto11 ao objeto20
se eu criar um objeto para fazer o random da pasta 1 e outro objeto para fazer o random da pasta 2 da certo?

Saim
no codigo que vc postou alem do objeto, eu devo alterar mais alguma coisa, se sim o que?


Geferson

Número de Mensagens : 30
Idade : 33
Data de inscrição : 20/07/2011
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 de objetos na room?

Mensagem por saim em Ter 05 Jun 2012, 08:38

No código do Nina8086, o importante é você entender que os objetos, além dos nomes recebem índices. O computador trata eles como índices, os nomes só servem pra nós, humanos. O que está sendo feito é um sorteio entre os índices dos objetos, diretamente. No meu código, eu coloco esses índices numa array e sorteio qual a posição da array será lida.

Explicando meu código com um pouco mais de detalhes:
1 - Crio uma array pra colocar os objetos. Em cada índice, um objeto. Ao invés de usar "i", você pode usar o valor de cada índice, diretamente, eu só uso essa sintaxe pra facilitar alterações posteriores.
2 - No final da criação da array, o tamanho dela estará armazenado em "i". Você pode usar uma outra variável, se preferir.
3 - Sorteio qual índice da array será lido. Como os índices são sempre números inteiros, "irandom" é uma boa função de se usar.
4 - Crio o objeto armazenado naquele local que foi sorteado.

Espero que agora esteja claro. Há um tutorial a respeito de arrays na minha assinatura, se é a primeira vez que você toca no assunto, pode ser uma boa dar uma lida.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por Geferson em Ter 05 Jun 2012, 17:55

Gente vou explicar melhor o que eu to tentando fazer:

"tenho 5o objetos, nominados de forma crescente assim: mil_01,...,mil_50, (todos esses objetos tem a mesma posição determinada na room que e´x=100 e y=100) e e tenho uma room de nome "cassino".
O que eu quero é quando chegar na room "cassino" seja criado apenas um desses cinquenta objetos (mas que seja qualquer um deles) para que a cada vez que jogar possa ou não repetir."


E que forma seria melhor? eu criar um objeto para fazer esse random, ou inserir o codigo na room (que seria mais interessante) Talvez agora seja mais facil me dizerem qual codigo devo inserir!

Geferson

Número de Mensagens : 30
Idade : 33
Data de inscrição : 20/07/2011
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 de objetos na room?

Mensagem por Esaucm98 em Ter 05 Jun 2012, 20:39

cara, apesar de nao ter entendido direito, eu vou te falar como eu faço talvez ajude.. pra mim quando o assunto é aleatório eu uso o random_set_seed(seed)

ou o action icon Action If Dice

no código onde tem (seed) é como os lados de um dado, quanto mais lados , mais dificil do evento acontecer, ai voce bota as instancias a serem criadas abaixo.

talvez nao seja oque voce procura, mas talvez possa ajudar

outro modo que eu uso é o CHOOSE

vc bota choose(obj1,obj2,obj3,obj4); talvez isso ajude flws

Esaucm98

Ranking : Nota D
Número de Mensagens : 275
Data de inscrição : 13/05/2012
Notas recebidas : D
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.legioncrafters.tk

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por Limalokão em Ter 05 Jun 2012, 21:55

Então amigo, não sei se ja foi resolvido mas consegui aqui Happy

Então assim, você disse que tem 50 objetos

obj_1...obj_50

Cria um obj_controlador no create dele voce coloca:
valormin=obj_1
valormax=obj_50

Depois no evento que você quer que apareça o objeto:(eu usei o global left pressed"MOUSE")
instance_create(320,240,irandom_range(valormin,valormax))

Eu fiz testes aqui e criei um obj_ramdom pra ver se ele nao iria sair no meio desses mas não saiu deu certinho Happy testa aí... flws

Link aqui: objetos aleatorios

EDIT

Quase consegui agora ele ta dando um erro estranho:
___________________________________________
ERROR in
action number 1
of Mouse Event for Glob Left Pressed
for object object0:

Creating instance for non-existing object: 5

Alguém tem ideia?

EDIT²

Mesmo nomeando no create objeto por objeto num1 num2 num3 num4 ta dando o mesmo erro =/ que tenso foi mal ai cara FAIL :s

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
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 de objetos na room?

Mensagem por saim em Qua 06 Jun 2012, 08:18

Soul, dê uma olhada no código do Ninja. Ele funciona da mesma forma que você idealizou o seu, mas sem o risco dos erros.
O erro acontece porque entre a criação de um objeto e outro (OBJETOS mesmo, não instâncias), você acabou deletando aquele que teria a id == 5.
Alterar os nomes dos objetos não faz a MENOR diferença pro código, porque a máquina não vê os nomes, ela vê as id's. O código do Ninja prevê um contorno pro problema de espaços vazios entre as id's.

Esses espaços existem por causa da forma que o game maker atribui id's aos objetos, sempre em ordem crescente, mesmo que algum tenha sido deletado. Então se você cria 10 objetos, suas id's serão (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) - não acho que exista a id "0", mas não testei, então pode haver um pequeno erro nessa frase. Bom, se você, durante o desenvolvimento do projeto, conclui que o objeto "objLimaLoko", que tinha recebido a id = 5, não é mais necessário e deleta o objeto, as id's passarão a ser (1, 2, 3, 4, 6, 7, 8, 9, 10). Aí você mete a mão na testa e pensa " , o objLimaLoko é ESSENCIAL! Vou ter que criá-lo de novo!" Vai lá, mete a mão na massa e escreve tuuudo de novo. Só que a id do novo objLimaLoko não será 5, mas 11. Você terá os mesmos objetos, dispostos da mesma forma na sua árvore de recursos, mas com as id's (1, 2, 3, 4, 6, 7, 8, 9, 10, 11).
Aí, se tentar simplesmente criar um objeto entre 1 e 11, o "random" pode retornar "5", que é uma id que não tem nenhum objeto a ser associado.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Random de objetos na room?

Mensagem por GameMakerTutoriais em Qui 07 Jun 2012, 12:37


"tenho 5o objetos, nominados de forma crescente assim: mil_01,...,mil_50, (todos esses objetos tem a mesma posição determinada na room que e´x=100 e y=100) e e tenho uma room de nome "cassino".
O que eu quero é quando chegar na room "cassino" seja criado apenas um desses cinquenta objetos (mas que seja qualquer um deles) para que a cada vez que jogar possa ou não repetir."

Uai, se for assim, com os nomes todos enumerados, é mais fácil ainda. É melhor então você usar o método que o saim postou. Porque aí você faz um loop e já indexa todos de uma só vez (usando o prefixo do nome). Por exemplo (no código do saim):

Código:
var inicio, sorteio, indiceSorteado, fim;

inicio = 1;
fim = 10; // por exemplo, (de 1 a 10)

for (i = inicio; i <= fim; i += 1)
{
execute_string('sorteio[' + string(i) + '] = object' + string(i))
}
...
indiceSorteado = irandom_range(inicio, fim);
instance_create(x, y, sorteio[indiceSorteado]);

Coloca isso no código de inicialização da room, que eu acho que vai dar certo. (não testei, não tenho o GM aqui)

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
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 de objetos na room?

Mensagem por Conteúdo patrocinado Hoje à(s) 04:56


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