GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

5 participantes

Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por Adriano Heartless Ter 20 Mar 2012, 18:00

Olááá pessoal XD
Bom estou precisando de uma ajudinha aqui porque to batendo cabeça. Não sou muito experiente em GML mas acredito que não deve ser dificil isso que vou perguntar =/

Bom, eu tenho 4 variaveis ( na verdade são 20 mas vamos comçar co 4 )

item_1= obj_caixa

item_2= obj_morango

item_3= obj_banana

item_4= obj_arroz

até ai tudo bem...agora quero embaralhar esses itens aleatoriamente e colocar em uma das 4 posições que inventei vamos lá

// SORTEIANDO
evento alarm[1]
posicao_1= choose(item_1,item_2,item_3,item_4)
posicao_2= choose(item_1,item_2,item_3,item_4)
posicao_3= choose(item_1,item_2,item_3,item_4)
posicao_4= choose(item_1,item_2,item_3,item_4)



Bom a minha dúvida está exatamente ai.....as variaveis posicao não podem ser iguais..eu queria saber como fazer assim por exemplo

SE AS 4 VARIAVEIS "posicao" tiver valores iguais então começa alarm[1] novamente até as 4 ficarem diferente





Última edição por Adriano Heartless em Seg 26 Mar 2012, 16:37, editado 1 vez(es)
Adriano Heartless
Adriano Heartless

Data de inscrição : 12/02/2011
Reputação : 2
Número de Mensagens : 95
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://ganelse.blogspot.com.br/

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por Zero. Ter 20 Mar 2012, 19:02

cara vc pode fazer assim
irandom(4)=variavel
if irandom=1
{
//tal coisa acontece
}

se vc usar choose o choose pode escolher mais de um.

Duvida questione novamente.
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por JonathanMatemático Ter 20 Mar 2012, 19:12

Caro Adriano Heartless, para solucionar seu problema poderíamos pensar da seguinte forma: a cada valor sorteado, esse passa a ser excluído dos próximos sorteios. Na prática, seria um código mais ou menos com essa estrutura:

Código:
n=4;
v[0]=item_1;
v[1]=item_2;
v[2]=item_3;
v[3]=item_4;

posicao_1=choose(v[0],v[1],v[2],v[3]);
posicao_2=choose(v[0],v[1],v[2]);
posicao_3=choose(v[0],v[1]);
posicao_4=choose(v[0]);

Mas, dessa forma, não funcionaria, pois não declaramos, ou seja, "dissemos" que, após um valor ser sorteado, ele deveria ser descartado. Para tal deveríamos usar uma estrutura nesse formato:

Código:
p=0;
for(i=0; i<n; i+=1){
if(v[i]=vs;){p=1;}
if(p=1){v[i]=v[i+1];}}

Esse script será complicado de você entender, primeiramente te recomendo, caso não conheça, pesquisar as estrutura condicionais if e for, pois não a explicarei aqui. Nessa estrutura que passei, p é a variável definida para estabelecer quando o valor que deve ser eliminado foi detectado. O for compara todos os valores da array, que tem sua dimensão definida em n, até achar o valor que se deseja eliminar, ponto em que define p=1. A partir desse momento, todas as variáveis da array recebem o valor da que vem a frente delas, ou seja, os valores são reorganizados. Se desconhece o que é uma array, terá que pesquisar também.

Assim, o código final seria:
Código:
n=4;

v[0]=item_1;
v[1]=item_2;
v[2]=item_3;
v[3]=item_4;

posicao_1=choose(v[0],v[1],v[2],v[3]);
vs=posicao_1;
for(i=0; i<n; i+=1){
if(v[i]=vs;){p=1;}
if(p=1){v[i]=v[i+1];}}

posicao_2=choose(v[0],v[1],v[2]);
vs=posicao_2;
for(i=0; i<n; i+=1){
if(v[i]=vs;){p=1;}
if(p=1){v[i]=v[i+1];}}

posicao_3=choose(v[0],v[1]);
vs=posicao_3;
for(i=0; i<n; i+=1){
if(v[i]=vs;){p=1;}
if(p=1){v[i]=v[i+1];}}

posicao_4=choose(v[0]);

Eu poderia simplificar mais esse código aplicando mais uma array e mais algumas estruturas for, mas prefiro deixar-te pensar sobre essa solução mais simples. Ok?

Qualquer dúvida é só falar.
JonathanMatemático
JonathanMatemático

Data de inscrição : 17/03/2012
Reputação : 1
Número de Mensagens : 33
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por Zero. Ter 20 Mar 2012, 19:21

Interessante Happy
Jonatan como essa estrutura se chama e onde posso estuda-la e pra que ela serve ?

@Topico
Ah vc quer escluir um após selecionar ele aleatoriamente ?
se não o random serve Happy
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por JonathanMatemático Ter 20 Mar 2012, 19:29

Não sei se ele quer excluir, mas foi a ideia que tive. É que não conhecia o código random, é mais eficiente no caso. Mas ficam as duas soluções para enriquecer a resposta.

As propriedades da GML que usei foram: if, for e array.

O if é a condição básica que checa um estado finito de uma ou mais variáveis, o for é um loop (algo que se repete) que, dentro de sua própria estrutura, cria uma sequência lógica, no caso da minha estrutura, o for faz i+=1 a cada reinício. Muito útil, ferramenta que simplifica códigos de dezenas de linhas em algumas unidades.

E array é uma tabela, onde, em uma única variável, se declaram finitos valores que são, até onde sei, virtualmente ilimitados.

Material sobre tudo que citei pode ser encontrado no fórum, tanto que em minha época de primeiro contato com a GML, foi assim que aprendi, tutoriais da GMBR.

Qualquer dúvida, é só emendar aí. Cool
JonathanMatemático
JonathanMatemático

Data de inscrição : 17/03/2012
Reputação : 1
Número de Mensagens : 33
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por Kabeção Qua 21 Mar 2012, 11:25

Embaralhar valores é exatamente como JonathanMatemático fez, escolher um e exclui-lo do próximo sorteio.
Mas isso é uma ação rotineira então o GML para facilitar nossa vida tem recursos para lidar com isso, o problema é que eles estão meio escondidos e pouca gente os percebe ou lembra deles (inclusive eu). Happy

Para 20 valores a solução do JonathanMatemático seria bem complicada mas usando datas estruturadas simplificaria.

Primeiro você cria uma ds_list e coloca todos os valores nela :
Código:
lista = ds_list_create();
ds_list_add(lista,item1);
ds_list_add(lista,item2);
....
Depois use a função ds_list_shuffle(lista), ela embaralha os valores da list.
Ai é só recuperar-los com algo assim:
Código:
for (i = 0; i < ds_list_size(lista); i += 1) {
    posicao[i] = ds_list_find_value(lista,i);
}
No final delete a list com ds_list_destroy.

Não crie 20 variáveis para uma mesma finalidade em comum!
Um array ou uma list é muito mais eficiente e fácil de se controlar.
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por shatterhand2 Qua 21 Mar 2012, 18:07

A melhor forma de fazer isso realmente é usando array ou lista.

Mas se você é inexperiente em programação, array pode ser um conceito meio complexo de entender (Na verdade é bem simples, mas sempre vejo muita gente tendo dificuldade pra entender)

Vai uma sugestão sem array, que vai ficar um código bem mais longo, mas talvez mais facil de entender:

Código:

item_1= obj_caixa
item_2= obj_morango
item_3= obj_banana
item_4= obj_arroz
item_troca = null
//muda o item1 de lugar aleatoriamente com outro
sorteio = ceil(random(4))
if sorteio == 2
{
   item_troca = item_1
   item_1 = item_2
   item_2 = item_troca
}
if sorteio == 3
{
   item_troca = item_1
   item_1 = item_2
   item_3 = item_troca
}
if sorteio == 4
{
   item_troca = item_1
   item_1 = item_3
   item_3 = item_troca
}
//muda o item2 de lugar aleatoriamente com outro
sorteio = ceil(random(4))
if sorteio == 1
{
   item_troca = item_2
   item_2 = item_1
   item_1 = item_troca
}
if sorteio == 3
{
   item_troca = item_2
   item_2 = item_3
   item_3 = item_troca
}
if sorteio == 4
{
   item_troca = item_2
   item_2 = item_4
   item_4 = item_troca
}
//muda o item3 de lugar aleatoriamente com outro
sorteio = ceil(random(4))
if sorteio == 1
{
   item_troca = item_3
   item_3 = item_1
   item_1 = item_troca
}
if sorteio == 2
{
   item_troca = item_3
   item_3 = item_2
   item_2 = item_troca
}
if sorteio == 4
{
   item_troca = item_3
   item_3 = item_4
   item_4 = item_troca
}
//muda o item4 de lugar aleatoriamente com outro
sorteio = ceil(random(4))
if sorteio == 1
{
   item_troca = item_4
   item_4 = item_1
   item_1 = item_troca
}
if sorteio == 2
{
   item_troca = item_4
   item_4 = item_2
   item_2 = item_troca
}
if sorteio == 3
{
   item_troca = item_4
   item_4 = item_3
   item_3 = item_troca
}


Como você pode perceber, é simples de entender, mas com muitos itens vai ficar um código extremamente longo e confuso. Você pode ser sagaz e transformar isso num script, é muito mais inteligente.

Ou você pode ser ainda MAIS sagaz, e realmente estudar um pouquinho sobre arrays e lista, e perceber que são recursos muito mais apropriados para você fazer o que precisa Very Happy Essa mesma lógica que eu apliquei no código acima ficaria muito mais simples e reduzida com a utilização de um array Very Happy
shatterhand2
shatterhand2

Data de inscrição : 21/10/2009
Reputação : 11
Número de Mensagens : 649
Prêmios : [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


http://bananabytes.com.br/

Ir para o topo Ir para baixo

[DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis Empty Re: [DÚVIDA RAPIDA] condição para determinar valores diferente nas variaveis

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos