Conectar-se
Quem está conectado
15 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 15 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 08/06/2013
Número de Mensagens : 5
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

Como ordenar objetos

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.
avatar
Ranking : Nota B
Notas recebidas : E + B+B
Data de inscrição : 02/06/2009
Número de Mensagens : 513
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
avatar
Data de inscrição : 08/06/2013
Número de Mensagens : 5
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
avatar
Ranking : Nota B
Notas recebidas : E + B+B
Data de inscrição : 02/06/2009
Número de Mensagens : 513
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Como ordenar objetos

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
Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
avatar
Data de inscrição : 08/06/2013
Número de Mensagens : 5
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
avatar
Ranking : Nota B
Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Número de Mensagens : 2490
Insígnias de JAM :

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

Prêmios
   : 0
   : 2
   : 1
Ver perfil do usuáriohttp://xcreatorgames.weebly.com/

Re: Como ordenar objetos

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!


Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
avatar
Data de inscrição : 08/06/2013
Número de Mensagens : 5
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
avatar
Data de inscrição : 08/06/2013
Número de Mensagens : 5
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

Re: Como ordenar objetos

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.
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum