O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

(DestinyScript) 4 - Estruturas If e Case

Iniciado por Avenger_B7, 15/04/2014 às 01:32

Aulas Anteriores

1 - Criando a Tela de Título

2 - Salvar, Carregar, Iniciar e Sair

3 - Diferentes técnicas com as teclas.




Introdução

Fala, rapaziada! Hoje eu vou ensinar um comando que eu aprendi há pouco tempo e que já o utilizei no meu jogo. Se vocês abrirem-no pelo editor vão reparar que eu substituí as condições possíveis e compatíveis com esse comando ao máximo no intuito de otimizar o código e reduzir o lag do jogo.

O tal comando é o Case, útil para criar inúmeras condições com diferentes valores exatos de variáveis. Usando o case o seu código ficará mais limpo e curto.

No projeto que eu terminei há poucos dias eu usei o código "Case" em inúmeros casos mas, praticamente, com o mesmo objetivo. Duas situações importantes que você poderá utilizá-lo: Title e Timer.

Daqui a pouco vocês vão falar que eu só sei explicar title. kkk' Tira a mão de mim, deixa eu vacilar. Mas isso não é verdade, eu acho. haha'

Bem, nenhum novato no 2k começa aprendendo destiny script e depois parte para eventos. Ninguém faz isso. Então se você está aqui é porque já tem uma base sobre o que são switches, variáveis, condições e como aplicá-las.

Eu vou falar hoje sobre as condições. Irei me restringir às condições If e Case porque são as que eu sei um pouco para explicar. Conforme eu for aprendendo irei atualizá-los do meu conhecimento.




Condições

• Condições IF (Se)

Esse tipo de condição é bem amplo. Com ele você pode verificar diversas coisas que não são possíveis por eventos. E existem dois tipos de condições If, as simples e compostas.

- Simples

São aquelas condições diretas. Você verifica algo e pronto. Por exemplo: "SE hoje fizer calor vou para a praia." Há uma questão sem nenhum argumento caso haja uma exceção. É prático.

Exemplo no destiny: Verificar se uma switch está ligada. Se sim, mudar o valor de uma variável.

$
if (s[1] == true)
  v[1] = 7;
endif;

Diretas porque caso a switch tal não esteja ligada nada acontecerá e o programa passará para o código seguinte.


- Composta

São as indiretas. Você verifica se algo acontece e se não acontecer realiza-se um comando. Não há como pulá-la. O código presente na condição será lido de qualquer maneira. Exemplo na vida: Se o Sol aparecer eu vou à praia, SE NÃO ficarei dormindo.

Exemplo no destiny: Se uma imagem tem a metade do seu tamanho original então ative uma switch.

$
if (Picture[1].Magnification == 50)
  s[1] = true;
endif;


• Case

Ao contrário das condições If, a estrutura Case é um pouco mais limitada. Eu ainda não testei se ela permite com que eu crie diversas condições como tamanho de uma imagem, etc. Só testei com valores de variáveis.

- Criando um Timer de 7 segundos. ( por imagens )

Crie um outro evento ( processo paralelo ) que a cada segundo diminua uma unidade da variável utilizada.

Case/Timer
$
switch(v[1])
  case 7: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 6: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 5: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 4: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 3: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 2: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 1: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
  case 0: Command.ShowPicture(ID,"Nome da Imagem",X,Y); break;
endswitch;
[close]

- Otimizando a title

Se você não lembra dos códigos da title clique aqui para se lembrar.

( supondo que a title tenha 3 opções na vertical e que cada imagem seja uma opção )

Title/CIMA
$ // CIMA
if (Keyboard.GetKeyState(VK_UP))
switch(v[1])
  case 1: Command.ShowPicture(ID,"Nome da Imagem",X,Y); Command.Wait(1); v[1] = 2; break;
  case 2: Command.ShowPicture(ID,"Nome da Imagem",X,Y); Command.Wait(1); v[1] = 3; break;
  case 3: Command.ShowPicture(ID,"Nome da Imagem",X,Y); Command.Wait(1); v[1] = 1; break;
endswitch;
[close]

Title/BAIXO
$ // BAIXO
if (Keyboard.GetKeyState(VK_DOWN))
switch(v[1])
  case 1: Command.ShowPicture(ID,"Nome da Imagem",X,Y); Command.Wait(1); v[1] = 3; break;
  case 2: Command.ShowPicture(ID,"Nome da Imagem",X,Y); Command.Wait(1); v[1] = 1; break;
  case 3: Command.ShowPicture(ID,"Nome da Imagem",X,Y); Command.Wait(1); v[1] = 2; break;
endswitch;
[close]

Title/ENTER
$ // Escolher apertando enter
if (Keyboard.GetKeyState(VK_RETURN))
switch(v[1])
  case 1: Command.Wait(1); v[1] = 4; break;
  case 2: Command.Wait(1); v[1] = 5; break;
  case 3: Command.Wait(1); v[1] = 6; break;
endswitch;
[close]

Lembrando que você deve criar Fork's logo abaixo desse comando caso queira resultados mais dinâmicos, como por exemplo informar alguma mensagem.




Partiu

Isso é tudo, pessoal! Até a próxima. (:
Unique Destiny | um novo conceito de RPG Maker 2000!