List System

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

Qualidade List System

Mensagem por Borgo em Ter 06 Jan 2009, 15:53

Boa tarde pessoal,

isso que irei postar não é exatamente um tutorial, mas partes de um código que irá gerar uma lista que será exibida na tela e que ao pressionar uma determinada tecla ou quando ocorrer algum evento, esta lista será ordenada em ordem alfabética, podendo ela ser alterada ou acessada durante o game.



Suponhamos que tenha sido criado um objeto chamado PC

No evento Create, utilizaremos o seguinte código:

for (i=1; i<=512; i += 1)
{
a[i]='zzzz';
}

Este código irá reservar espaço na memória para uma lista de 512 linhas e uma variável chamada "a" que armazenará as informações, todas estas linhas terão o valor zzzz como padrão.

Para adicionar dados a esta lista, basta utilizar o seguinte comando:
PC.a[512]='qualquer coisa que deseje adicionar a lista';

Obs.: o número 512 pode ser qualquer um entre 1 e 512 mas cuidado para não alterar uma linha que já contenha alguma coisa.

Para desenhar a lista na tela, no evento DRAW execute o seguinte código:

p=0;
for (i=1; i<=512; i+=1)
{
if a[i] <> 'zzzz'
{
draw_text(0,p,a[i]);
p += 16;
}

}

Explicação: o laço FOR irá procurar em cada linha valores que sejam diferentes a zzzz, ou seja, só será exibido na tela as linhas que inserimos outros valores.
A variável p irá orientar o texto a descer 16px a cada vez que encontrar um valor na lista, ou seja, todos os valores desta lista terão uma distância de 16px entre si.

Para finalizar a mágica, adicione o código a seguir em qualquer evento - pressionar alguma tecla, ao pressionar algum botão na tela, enfim...

troca='0';
for (h=1; h<=512; h+=1)
{
for (i=1; i<=511; i+=1)
{
if PC.a[i] > PC.a[i+1]
{
troca=PC.a[i];
PC.a[i]=PC.a[i+1];
PC.a[i+1]=troca;
}
}
}

IMPORTANTE: não esqueça que no lugar do nome PC, você deve digitar o nome do objeto em que inserimos o código para o evento Create.
Obs.: quando ordenar a lista os valores irão "cair" na lista, por exemplo:

Inserimos na posição 114 o valor 'Mago das trevas'(PC.a[114]='Mago das trevas') e na posição 250 o valor 'Feiticeiro'(PC.a[250]='Feiticeiro')

Após ordenarmos a lista o nome Feiticeiro irá para a posição 1 da lista e o Mago das trevas para a posição 2 da lista.
As demais linhas estarão com os valores padrão "zzzz"

Dúvidas... mail-me adm.neonerds@gmail.com

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

Qualidade Re: List System

Mensagem por minato.11 em Ter 06 Jan 2009, 16:16

eu ainda não testei o tuto
mais de ve ser bom
belo tutorial para um novato de 2 posts :|

minato.11

Número de Mensagens : 170
Idade : 21
Data de inscrição : 14/12/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: List System

Mensagem por Lap1994 em Ter 06 Jan 2009, 16:44

Lmao, tem isso num jogo meu XP
Daora o tuto, muito embora eu já conheça esse código de cor, msm assim vai ajudar um monte de gente ;)

Lap1994

Número de Mensagens : 350
Idade : 22
Data de inscrição : 20/11/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://lap1994.deviantart.com/

Voltar ao Topo Ir em baixo

Qualidade Re: List System

Mensagem por Borgo em Ter 06 Jan 2009, 17:42

Minato, é que eu achei o fórum só hj rsrs
Obrigado!

Brinco com este programa a alguns anos (comecei com 14...)

Gosto de usar esses códigos pois existem coisas tão simples para problemas tão complexos...
Algumas vezes queremos fazer algo que parece ser tão difícil e decoramos tudo quanto é comando, mas muitas vezes não conseguimos assimilar.

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

Qualidade Re: List System

Mensagem por Janx em Ter 06 Jan 2009, 18:07

interessante, mas me fala uma coisa,

Isso ai poe em ordem alfabetica ou pega as coisas e deixa apartir de 0 a n coisas?
ex:
pc.a[100] = 'a'
pc.a[101] = 'c'
pc.a[102] = 'b'
pc.a[103] = 'd'
pc.a[104] = 'e'

ficaria assim:
pc.a[0] = 'a'
pc.a[1] = 'c'
pc.a[2] = 'b'

pc.a[3] = 'd'
pc.a[4] = 'e'

ou ficaria assim:
pc.a[0] = 'a'
pc.a[1] = 'b'
pc.a[2] = 'c'

pc.a[3] = 'd'
pc.a[4] = 'e'

Vlw!

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

Qualidade Re: List System

Mensagem por Borgo em Ter 06 Jan 2009, 20:24

As duas coisas!!

tanto põe em ordem como deixa a partir do índice 1, como seu último exemplo (deixei de fora o zero pois eu mesmo me confundo as vezes)

---

O único problema, como não me puz a pensar demais no algoritmo é que ele checa as linhas diversas vezes em um único step.
Logo, se criarmos uma lista com 512 linhas, em um único step, será checado 512*512 vezes, ou seja 262144 vezes, algo não muito relevante nos computadores modernos, mas não aconselho deixá-lo no evento STEP, pois haverá um grande "slow down" no game.

---

Ah sim... o melhor, caso "apague" o conteúdo de uma linha (digo apague entre aspas é por que não iremos apagar o conteúdo, mas sim apenas alterá-lo para o valor padrão que é 'zzzz' a lista irá fazer um "Drop Down"

ou seja se tivermos
pc.a[1] = 'a'
pc.a[2] = 'b'
pc.a[3] = 'c'
pc.a[4] = 'd'
pc.a[5] = 'e'

e alterarmos o pc.a[1] para 'zzzz', ao rodar o script que atualiza, a lista irá cair deste modo:
pc.a[1] = 'b'
pc.a[2] = 'c'
pc.a[3] = 'd'
pc.a[4] = 'e'

Ou seja, não haverá lacuna/buracos entre os itens da lista XD

Edit by Froidz: Não faça posts triplos, da próxima vez, perderá 25% da barra de 'warning'. Isso é só um aviso. ;)
Re: Desculpe, é que eu fui lembrando aos poucos hehehe


Última edição por Borgo em Ter 06 Jan 2009, 20:42, editado 1 vez(es)

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

Qualidade Re: List System

Mensagem por Froidz em Ter 06 Jan 2009, 20:41

Não faça posts triplos, seu post já foi editado, e com aviso no final.

Preste mais atenção da próxima vez, existe o botão
"Editar" em cada mensagem enviada, edite sempre que precisar.

Valeu! 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

Qualidade Re: List System

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


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