[Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

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

[Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por dharrison em Sab 04 Dez 2010, 16:30

Objetivo: Ensinar como declarar IF, IF/ELSE e SWITCH.
Dificuldade: Fácil, só prestar atenção.
Ferramenta: GM7 ou GM8

Boa tarde galera! Feliz
Houve alguns imprevistos quanto a essa aula, mas aqui está.
Hoje veremos como usar os Statements IF/ELSE e SWITCH. E com alguns exercícios simples no final apenas para entendermos melhor como eles funcionam.
Para entender os termos usados, como Statements, Program e etc, você precisa ver as aulas anteriores para não confundir nada (caso você não saiba).
No demais a aula é bem simples, basta ter alguma atenção e, caso a explicação esteja complicada em algum ponto, digam que eu simplifico aqui num Edit.
Sem mais delongas, vamos a aula.


Aula 3 - As Declarações IF, ELSE e SWITCH

Declarando IF e ELSE

O Statement IF (PT: Declaração SE) serve para fazer verificações de variáveis, e baseado nessas verificações determinar novos valores para variáveis, executar funções ou executar scripts. Ou seja: você determina o que quer que seja verificado, e o que quer que aconteça caso a verificação dê uma resposta positiva à circunstância.
É mais facil entender vendo a fórmula:
Código:
if (CONDIÇÃO)
{
    DECLARAÇÃO;
};

Basicamente, o uso de IF é uma pergunta. IF significa SE em português, e você estrutura a pergunta da seguinte forma:
SE (ESSA CONDIÇÃO ACONTECER) então:
{
   ISSO QUE ESTÁ AQUI DEVE SER FEITO
}
Não tem segredo no uso do IF, é basicamente isso mesmo. Para melhor visualização vamos usar algumas variáveis, funções e expressões que estudamos anteriormente:
Código:
if (keyboard_check_pressed(ord('X'))
{
sprite_index=personagem_atirando
instance_create(x,y,obj_tiro)
var_balas-=1
}
(Esse código não vai funcionar no seu GM, é apenas um exemplo. Para faze-lo funcionar você precisaria dos objetos, sprites e variáveis declaradas.)

O que fizemos aqui?
Primeiro colocamos a seguinte Condição: SE A Tecla X por Pressionada...
{ (começa um Program)
Dentro do Program colocamos a Declaração:
1º - Muda o sprite para o Personagem Atirando
2º - Cria a instância Tiro
3º - Diminui a Variavel Local Balas em 1
} (termina o Program)

E observe que:
sprite_index é uma Built-in Variable
instance_create é uma Built-in Function
e
var_balas é uma Variavel Local (Definida pelo Programador, não pelo GM)
Ou seja, dentro de IF podemos declarar qualquer coisa: variaveis, constants, funções e outras coisas.


O funcionamento de IF é bastante simples e certamente é o Statement que você mais vai usar nos seus jogos.
"Mas o IF só faz isso?"
Sim, só isso.
"E se eu quiser que aconteça alguma coisa se a tecla não for pressionada, tenho que declarar outro IF?"
Não, e essa é a boa notícia! Existe um Statement que anda junto com o IF e só serve para ser usado com ele.
Esse Statement se chama ELSE, e ele dita algo que acontece SE NÃO (ELSE, literalmente) acontecer o que IF pediu.
Você pode usar apenas o IF, digamos que isso seria uma 'pergunta simples'
Mas caso sua pergunta precise ter mais uma opção, diretamente contrário, será usado ELSE.
A Fórmula de ELSE é a seguinte:
Código:
if (CONDIÇÃO)
{
    DECLARAÇÃO;
}
else
{
    DECLARAÇÃO;
};

Note que ela precisa ser acompanhada do IF para funcionar. E o funcionamento de ELSE se resume a:
SE (ESSA CONDIÇÃO ACONTECER) então:
{
   ISSO QUE ESTÁ AQUI DEVE SER FEITO
}
SE ELA NÃO ACONTECER
{
ESTA OUTRA COISA DEVE SER FEITA
}

ELSE nega diretamente o que IF pede, não tem segredo nisso: é uma pergunta que pode ter Sim ou Não como resposta. Um exemplo de uso do ELSE:
Código:
if (keyboard_check_pressed(ord('X'))
{
sprite_index=personagem_atirando
instance_create(x,y,obj_tiro)
var_balas-=1
}
else
{
sprite_index=personagem_normal
}
Aqui segue a mesma diretriz do primeiro exemplo, mas, se não acontecer tudo aquilo, simplesmente o sprite do objeto permanece sendo o Personagem Normal. Fácil não?

Você pode declarar IF dentro de outros Statements, e dentro dele mesmo.
Dessa forma:
Código:
if (CONDIÇÃO)
{
    if (CONDIÇÃO)
    {
        DECLARAÇÃO;
    }
    else
    {
        DECLARAÇÃO;
    };
    ;
}
else
{
    if (CONDIÇÃO)
    {
        DECLARAÇÃO;
    }
    else
    {
        DECLARAÇÃO;
    };
    ;
};
Você poderia usar isso quando, por exemplo, você quer que o personagem tenha Sprites para a Direita, Esquerda, e Parado pros dois lados. Você cria a variavel "direita", e a variavel "parado". Então:
Código:
if (parado=false) //SE o Personagem estiver em Movimento.
{
    if (direita=true) //SE estiver indo para a direita
    {
        sprite_index=personagem_andando_direita;
    }
    else //SE NÃO estiver indo para a direita, e sim para a esquerda.
    {
        sprite_index=personagem_andando_esquerda;
    };
    ;
}
else //SE NÃO estiver em Movimento.
{
    if (direita=true) //SE Estiver virado para a Direita.
    {
        sprite_index=personagem_parado_direita;
    }
    else // SE NÃO estiver virado para a Direita, e sim para a Esquerda.
    {
        sprite_index=personagem_parado_esquerda;
    };
    ;
};
E assim você controla o 4 Sprites do Personagem. É simples assim, sem segredos.

O arquivo de ajuda do GM diz para sempre usarmos os parênteses no IF (para prevenir bugs creio eu).
IF e ELSE podem trabalhar livremente com expressions, functions, variaveis de todos tipos e constants.


Declarando SWITCH

Vejamos o que o arquivo de ajuda do GM nos diz sobre o Statement SWITCH:

"Algumas vezes você quer que uma declaração aconteça de acordo com alguns valores exatos. Para isso você pode usar numeros IF Statement, ou um único SWITCH Statement. A fórmula do SWITCH é a seguinte:
Código:
switch (<expressão>)
{
  case <expressão1>: <declaração1>; ... ; break;
  case <expressão2>: <declaração2>; ... ; break;
  ...
  default: <declaração>; ...
}
Isso funciona da seguinte maneira:
Primeiro a Expressão é executada (sempre uma expressão, nunca uma função!!).
Então é comparada com os resultados das diferentes expressões depois dos Statements CASE (PT: CASO). A execução continua depois do Statement CASE que tiver o valor correto (que as informações 'baterem'), até que um Statement BREAK (PT: Frear, Quebrar, Parar) seja encontrado.
Se não houver nenhum Statement CASE com o valor correto a execução continua até passar pelo Statement DEFAULT (PT: Padrão). (Mas não é necessário haver um Statement DEFAULT).
Note que podem ser declarados multiplos Statements CASE. Por outro lado BREAK não é necessário. Se não houver um BREAK Statement a execução do código simplesmente continua até o próximo CASE."

Isso é o que o arquivo de ajuda nos diz sobre a Declaração SWITCH. Em outras palavras ela serve para ativar um ou mais eventos num único código. Para entender melhor vamos usar um exemplo que também está no arquivo de ajuda:
Código:
switch (keyboard_key) //se uma tecla for pressionada...
{
  case vk_left: //CASO seja a Seta para a Esquerda
  case vk_numpad4: //CASO seja o Número 4 do Teclado Numérico
    x -= 4; break; //Para ambos os Casos acima, a instância se moverá 4pxl para a esquerda. Então PÁRA a execução do Program.
  case vk_right: //CASO seja a Seta para a Direita
  case vk_numpad6: //CASO seja o Número 6 do Teclado Numérico
    x += 4; break; //Para ambos os Casos acima, a instância se moverá 4pxl para a direita. Então PÁRA a execução do Program.
}
Simples e direto ;)

Ao contrário de IF, SWITCH trabalha com expressões (comparações) e variáveis apenas. Funções podem ser colocadas no campo DECLARAÇÃO do SWITCH, mas não no EXPRESSÃO. Tenha isso em mente quando usá-lo.
No demais, ele é igual IF. Embora em certos casos IF funcione melhor. Afinal SWITCH faz varias checagens ao mesmo tempo, enquanto IF faz no máximo duas: Sim e Não. E devido a isso as vezes SWITCH não funciona tão bem como IF funcionaria.
Por exemplo, se você quer criar movimentos com SWITCH, vai perceber que ao apertar várias teclas juntas os comandos acabam se misturando, isso não aconteceria se tivesse feito com IF/ELSE.

Mas não há segredo aqui também.. No final da aula você poderá baixar o Aplicativo de Revisão da Aula 3, e nele verá um Exemplo de IF (sozinho), IF/ELSE, e SWITCH.

Agora vamos conhecer um Statement 'secundário' que é usado em SWITCH:


Declarando BREAK

Para usar esse Statement simplesmente digite:
Código:
break;
Se usado em conjunto com um Loop de FOR, WHILE, REPEAT ou os Statements SWITCH ou WITH, ele encerra esse Loop ou Statement.
Se usado fora destas declarações, ele simplesmente fecha o Program. (Não o jogo, só o Program, que já aprendemos o que é).

É isso galera, nada muito dificil, só prestar atenção nos detalhes e testar. Very Happy


Exercícios:

1 - Crie um objeto com um sprite qualquer. Nós vamos definir movimento para ele usando IF e ELSE.

Para isso use na CONDIÇÃO de IF a Function keyboard_check('tecla'), onde está 'tecla' você escolhe uma das Constants de tecla, para movimentos assim recomendo as Setas: vk_up, vk_down, vk_left e vk_right.
Depois no campo DECLARAÇÃO coloque a direção que corresponde a tecla escolhida. No caso seria hspeed-='n' (para vk_left), hspeed='n' (para vk_right), vspeed-='n' (para vk_up) ou vspeed='n' (para vk_down), onde 'n' é o valor que você vai querer usar, eu usei 4 no exemplo do Aplicativo de Revisão.

Crie uma Declaração IF para cada tecla que você fizer, cada uma com sua respectiva direção. E depois para cada uma adicione uma Declaração ELSE, declarando hspeed=0 ou vspeed=0, dependendo de qual tecla for (lembrando que hspeed serve para as teclas que movem para a Direita e Esquerda, e vspeed para Cima e para Baixo.)

Se você fez tudo corretamente vai ter o mesmo resultado demonstrando no Aplicativo de Revisão desta aula. Na opção IF/ELSE do mesmo.


2 - Delete todo o script usado no objeto e crie um novo. Nós vamos definir movimento para ele usando SWITCH.

Nesse novo script, Declare SWITCH da seguinte forma:
Como SWITCH não aceita Functions no seu campo incial, por isso se chama e não ; para definir tal Expressão use a variavel keyboard_key, ela será equivalente a Function keyboard_check neste exemplo.
Então declare 4 Cases, da seguinte forma:
   case vk_left: hspeed=-'n'; break;
   case vk_right: hspeed='n'; break;
   case vk_up: vspeed=-'n'; break;
   case vk_down: vspeed='n'; break;

Aqui 'a ordem dos tratores não altera o viaduto', então tanto faz como vc coloque as linhas, desde que elas sejam assim.
Rode o jogo e veja o que acontece!

Viu? Por algum motivo sobrenatural o bojeto não pára! Só muda de direção!
"Mas SWITCH não usa ELSE!! E agora??!! affraid"
Calma, está tudo sob controle. ;)

Para finalizar declare, depois de todos os Cases, o Default:
   default: hspeed=0;vspeed=0;

Teste novamente!
Agora sim né!! sorrindo

Se você tudo corretamente será igual o exemplo do Aplicativo de Revisão.

-----------------

É isso galera, espero que tenham gostado!!
Ainda estamos decidindo se a próxima aula será sobre FOR ou WHILE e DO/UNTIL. O Markituh ficou de fazer a de WHILE e DO/UNTIL, mas ele está fora de contato faz uns 2 dias.
Caso as explicações não estejam claras me digam que eu tentarei simplificar.

Sei que prometi todas aulas prontas até hoje, mas houveram alguns imprevistos mas vou postá-las do decorrer da semana que vem! Feliz
Caso o Markituh não apareça vai ficar dificil fazer as aulas de WHILE, DO/UNTIL e WITH, isso porque eu nunca usei essas Declarações e meus testes com elas têm falhado. Se algum puder ajudar será muitíssimo bem vindo.

E não se esqueçam  do Aplicativo de Revisão da Aula 3 para download abaixo.


Download do Aplicativo de Revisão (Versão Aula 4)*: Revisando a Aula 3.rar

*Contém as Aulas 1, 2, 3 e 4. Disponibilizei assim para maior comodidade.


E hoje ficamos por aqui, muito obrigado galera por estarem acompanhando. E se possivel comentem, opinem, sugiram ou critiquem.

Abraços
DHarrison.


------------------------------------------
O Curso:
° - Aula 1 (Parte 1) - Entendendo o Funcionamento do GML (O Básico)
° - Aula 1 (Parte 2) - Entendendo o Funcionamento do GML (As Estruturas do GML)
° - Aula 2 - Variáveis Locais, Globais, Arrays e Built-in Variables
° - Aula 3 - As Declarações IF, IF/ELSE e SWITCH
° - Aula 4 - A Declaração WITH
° - Aula 5 - A Declaração FOR

Aulas Complementares e Extras (Descontinuadas, pois já existe a Documentação Traduzida do Game Maker no fórum):

° - Extra 1 - Lista Completa e Explicada de Built-in Variables e Visão Geral sobre Constants
° - Extra 2 - Lista Detalhada e Explicada das Built-in Functions mais usadas em GML


Última edição por dharrison em Seg 05 Maio 2014, 11:44, editado 6 vez(es) (Razão : modificações)

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por Joton em Sab 04 Dez 2010, 18:16

Bem explicado, só não gostei dos exercícios Basketball esperando a próxima aula Happy felicidade feliz2

Joton

Ranking : Nota B
Número de Mensagens : 836
Idade : 28
Data de inscrição : 25/07/2010
Notas recebidas : A+B+C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

http://jotonsn.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por dharrison em Sab 04 Dez 2010, 18:17

ficou dificil os exercicios?
ou voce achou simples demais?
sauhsauh

Very Happy

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por Marley em Sex 21 Mar 2014, 22:45

Mano tentei o exercício 1 com os códigos keyboard tudim e não deu certo
nada se movia = ( 


alguém ai ajuda ?


Vc tinha q ter posto uma print caso o nosso tivesse certo ficaria de tal maneira = S

Marley

Número de Mensagens : 5
Data de inscrição : 19/03/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por dharrison em Sex 21 Mar 2014, 23:02

amigo se precisar de uma ajuda pode me mandar MP
o tópico é bem antigo e a versão que eu usava era o Game Maker 8, qual vc utiliza?

dharrison

Ranking : Nota B
Número de Mensagens : 1243
Idade : 25
Data de inscrição : 04/02/2009
Notas recebidas : A - B
Reputação : 89
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por Mr. Kaleb em Sex 21 Mar 2014, 23:04

Basicamente, o que ele pediu para fazer foi isso:
Código:
if keyboard_check(vk_left) {
 hspeed-=5;
} else {
 hspeed=0;
}

if keyboard_check(vk_right) {
 hspeed+=5;
} else {
 hspeed=0;
}

if keyboard_check(vk_up) {
 vspeed-=5;
} else {
 vspeed=0;
}

if keyboard_check(vk_down) {
 vspeed+=5;
} else {
 vspeed=0;
}

Veja se seu código está dessa forma, tudo isso vai no evento Step. E lembre-se, crie uma sprite e ponha no objeto, senão você não vai ver nada.

Mr. Kaleb

Ranking : Nota C
Número de Mensagens : 1400
Idade : 19
Data de inscrição : 07/09/2010
Notas recebidas : C
Reputação : 21
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por Marley em Sex 21 Mar 2014, 23:23

Vleeew galerinha
eu estava complicando a linguagem colocando ponto onde não tinha !
também estava colocando em create '-'
Vleeew
#deucerto

Marley

Número de Mensagens : 5
Data de inscrição : 19/03/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Curso de GML] Aula 3 - As Declarações IF, IF/ELSE e SWITCH

Mensagem por Conteúdo patrocinado Hoje à(s) 01:52


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