Como ordenar objetos

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

Como ordenar objetos

Mensagem por Jane.upe em Sab 08 Jun 2013, 20:47

Estou fazendo um jogo que ao final de cada fase é preciso verificar se o jogador ordenou corretamente os objetos em ordem crescente e então, apresentar uma mensagem dizendo ao jogador que ele ordenou corretamente ou não.
Alguém tem alguma sugestão? Obrigada.

Jane.upe

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

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por Eudes - Hyo em Dom 09 Jun 2013, 00:18

olá. como o Player irá fazer essa ordenação dos objetos?

bom, caso o player tenha que ativar cada objeto , um de cada vez,
vc pode adicionar uma variável de cada Objeto em uma Lista.
Depois vc verifica se a lista está em ordem.
Spoiler:

Código:
// Cria e adiciona valores a Lista
lista = ds_list_create();
ds_list_add(lista, 1);
ds_list_add(lista, 2);
ds_list_add(lista, 5);
ds_list_add(lista, 6);

i = 0;
ordenado = 0;
// Percorre a Lista, e verifica se está em ordem
for(i = 0; i< ds_list_size(lista); i+= 1)
{
    if(i <> (ds_list_size(lista)-1)) {
    if((ds_list_find_value(lista,i)) < (ds_list_find_value(lista,i+1))) {
        ordenado = ordenado;}
    else {
        ordenado += 1; }
       
    }
}
Se a variável 'ordenar' for igual a 0(zero), então está em ordem crescente.
Se alguém souber uma maneira + prática(bem provável), por favor, nos diga.

Eudes - Hyo

Ranking : Nota B
Número de Mensagens : 513
Idade : 32
Data de inscrição : 02/06/2009
Notas recebidas : E + B+B
Reputação : 27
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por GameMakerTutoriais em Dom 09 Jun 2013, 00:44

Acho que tudo depende da forma COMO o jogador vai ordenar cada objeto. Seria clicando sobre cada um sequencialmente? Seria alinhando-os em fila? Atribuindo um valor a cada um? São vários objetos iguais? Objetos diferentes?

Há várias formas de organizar elementos e imagino que chegaríamos na melhor solução se pudesse dar mais detalhes sobre como é o jogo. À primeira impressão, ordenar "valores" quase sempre nos faz pensar em laços de repetição e arrays, mas, dependendo de como é a situação, pode haver alternativas mais simples.

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: Como ordenar objetos

Mensagem por Jane.upe em Dom 09 Jun 2013, 11:13

Bom, no caso desse jogo que estou fazendo o jogador conduz os objetos, que já vão está cada um com uma numeração, até o final do jogo. Então esses objetos ficarão alinhados verticalmente e o jogo tem que exibir uma mensagem dizendo ao jogador se ele ordenou corretamente ou não os objetos. E então se ordenou ele poderá prosseguir para a próxima fase.
Se alguém puder ajudar:) Obrigada.

Jane.upe

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

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por Eudes - Hyo em Dom 09 Jun 2013, 12:36

olá. Vc pode criar uma Lista global (ela vai existir durante todo o jogo)
Código:
globalvar lista;
lista = ds_list_create();
E no momento em que o Player for pegar/adicionar/setar um Objeto,
vc adiciona essa "numeração" dele à Lista.
Código:
ds_list_add(lista,obj_Seu.numero);

Dá uma olhada no código que postei acima, é para Verificar se os valores dentro da Lista estão em ordem.

Ainda ficou meio vago o momento e o jeito que o Player conduz/pega esses objetos

Eudes - Hyo

Ranking : Nota B
Número de Mensagens : 513
Idade : 32
Data de inscrição : 02/06/2009
Notas recebidas : E + B+B
Reputação : 27
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por GameMakerTutoriais em Dom 09 Jun 2013, 12:59



Você pode estar fazendo isso de duas formas, mas ainda não explicou qual. A primeira é estar usando vários objetos diferentes (cada um com um nome). A segunda é estar usando várias cópias do mesmo objeto. Vou tentar ajudar com uma solução para os dois modos, mas eu não testei.


  1. Como exemplo, vou usar as letras "A", "B", "C" e "D" pra distinguir a ordem dos objetos e vou colocar isso no evento Create de cada um (separadamente), por exemplo:
    Código:
    meu_valor_unico := "A";
    Isso também poderia ser feito usando o próprio nome do objeto, no caso dos objetos separados.

  2. Crie um objeto para funcionar como parent e associe-o a todos os que farão parte do jogo de sequências. Vou chamá-lo de "obj_parente".

  3. Crie um outro objeto para fazer o trabalho de conferir essa ordem. Vou chamá-lo de "obj_monitor".

  4. No evento Create do obj_monitor, crie uma ds_priority. É uma lista de prioridades e vamos usá-la pra ordenar todas as instâncias assimiladas ao obj_parente, de acordo com a posição vertical de cada uma:

    Código:
    global.ordem_atual := '';
    global.prioridade := ds_priority_create();

  5. Num evento "mouse click" (apenas para testar) do objeto_monitor, coloque esse código abaixo. Quanto menor for a posição y de cada instância, menor será a prioridade, portanto, teremos a ordem de todas no eixo vertical:

    Código:
    with (obj_parente) ds_priority_add(global.prioridade, id, y);
    while ds_priority_size(global.prioridade) > 0
    global.ordem_atual += (ds_priority_delete_min(global.prioridade)).meu_valor_unico;

  6. Agora é só conferir a ordem:

    Código:
    // Especifique uma ordem qualquer:
    if global.ordem_atual = "ABCD" then
    begin
    /* Faça alguma coisa... */
    end;


Se achar mais fácil, você também pode pedir um projeto de exemplo na sessão de pedidos e com certeza alguém fará pra você. Ou também pode esperar novas respostas e mais alternativas.

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: Como ordenar objetos

Mensagem por Jane.upe em Seg 10 Jun 2013, 15:50

Quanto a dúvida de como o Player vai conduzir/pegar esses objetos será arrastando o mesmo com o mouse até o um ponto de chegada, nesse caminho até lá o jogador mesmo vai fazendo as comparações de dois em dois números e então usando a lógica (pois, trata-se de um jogo educativo) ele terá que chegar no final com esse números ordenados.
O que temos que fazer após esses objetos(cada um com uma numeração respectiva) terem sido colocados alinhados verticalmente pelo jogador é apresentar a mensagem dizendo se ele ordenou corretamente.

Em relação a sua resposta fiquei com algumas dúvidas:
No caso, gostaria que explicasse melhor os pontos 2 e 3, fiquei sem saber
onde devo criar esses objetos e como associá-los a todos os que farão parte do jogo de sequências.
Obrigada.

Jane.upe

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

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por vinians em Seg 10 Jun 2013, 16:17

Você pode fazer como o Brendam disse ou fazer do jeito que vou lhe explicar. Para que você não precise se preocupar com isso você pode criar slots onde os objetos serão "encaixados", na verdade, os "slots" nada mais sãp que objetos que quando você colidir com eles marcara o local. Depois pra verificar a ordem você faz um script assim:
script_verifica()
Código:

//objSlot 1
if (instance_place(objSlot1.x, objSlot1.y, objSeq1) != noone)
{
  return false;
}
if (instance_place(objSlot2.x, objSlot2.y, objSeq2) != noone)
{
  return false;
}
.
.
// Faca isso para cada SLOT
return true;
Depois basta fazer uma pergunta usando o Script acima criado:
Código:

if( script_verifica() == false)
{
  show_message("Fora de sequencia! Tente novamente!");
}
Flws!



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: Como ordenar objetos

Mensagem por GameMakerTutoriais em Seg 10 Jun 2013, 18:37


Eu acho que acabei complicando tudo sem necessidade. O jeito que o vinians postou é melhor. Além disso, dessa forma que ele explicou você poderia conferir os objetos em qualquer ordem e em qualquer posição.

Eu peguei o script dele e montei um projeto de exemplo. Está [aqui]. É um projeto simples e não prevê nenhum erro, mas exemplifica o que você quer fazer.

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: Como ordenar objetos

Mensagem por Jane.upe em Seg 10 Jun 2013, 18:46

Certo, seu código é bem direto. Só fiquei com uma dúvida: no caso, os slots teriam algum código? ou só bastará o script_verifica()?
Obrigada.

Edit:
Brendan640, sua ajuda foi essencial para o desenvolvimento do jogo. Agora posso passar para próxima fase do jogo. Muito obrigada. Laughing


Postagens unidas, evite post duplos, leia as regras e edite suas postagens, isso melhora e organiza o fórum.
O problema foi resolvido? CRP-Max.

Jane.upe

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

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por Jane.upe em Seg 10 Jun 2013, 22:14

Problema resolvido Laughing . Obrigada.



Como o tópico ja foi resolvido, ele sera trancado.
Caso o autor deseje inserir mais alguma informação, contacte um moderador.
Att: CRP-Max.


Obs: Novamente poderia tem editado o post... +5 alerta.

Jane.upe

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

Voltar ao Topo Ir em baixo

Re: Como ordenar objetos

Mensagem por Conteúdo patrocinado Hoje à(s) 12:45


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