INTRODUÇÃO EM GML
Aula 04 - If/While e Expressões
(Atualizado 08/02/2015)
IF:
É uma estrutura de checagem condicional que em português significa "se". Agora explicarei uma estrutura básica de código usando if:
Código: Selecionar todos
if variavel == 0
{
variavel2 = 100
}
Código: Selecionar todos
Se variavel é igual a 0 o que esta entre chaves acontece, ou seja, variavel2 igual a 100.
Baixe a seguinte engine:
[GM:S] DOWNLOAD DA ENGINE
[GM8] DOWNLOAD DA ENGINE
Nela a movimentação do personagem está pronta. Não se preocupe em entender esses códigos de movimento e gravidade, pois nas próximas aulas estarei ensinando a movimentação.
No evento Other>>Game Start do controle coloque:
Código: Selecionar todos
//Número de vidas
global.vidas = 3
//Número de moedas
global.moedas = 0
Agora no step vamos fazer uma checagem de variáveis, e como o step é constante ele sempre estará checando:
Código: Selecionar todos
//Se moedas for maior ou igual a 100
if global.moedas >= 100
{
//Retira 100 moedas
global.moedas -= 100
//Ganha uma vida
global.vidas += 1
}
Colocamos esse operador ali porque se você aumentar o número de moedas muito rápido, global.moedas pode passar de 100. Se fosse "if global.moeda =100..." o código não funcionaria bem, pois só se fosse exatos 100 que a outra expressão aconteceria.
Na engine tem um objeto chamado "moeda", cuidado!!! Nunca de nomes de variáveis e objetos e qualquer outro elemento(background, sprite, sons, rooms, fonts, paths e etc) iguais, senão acontecerão erros. Ex: você não pode dar o mesmo nome a uma sprite e a um objeto.
Então você percebeu agora, porque a variável se chama "global.moedas" e o objeto "moeda"?
Nesse objeto moeda adicione o evento Collision e selecione o objeto player e coloque o seguinte código:
Código: Selecionar todos
global.moedas += 1
instance_destroy()
Agora para vermos as variáveis vamos ao objeto controle para desenhar as nossas variáveis. Sempre use um objeto separado para desenhar coisas como pontuação, vidas e etc.
No evento Draw do objeto controle abra o editor de códigos e coloque o seguinte código:
Código: Selecionar todos
draw_text(10,10,"Vidas: " + string(global.vidas) + "#" + "Moedas: "+string(global.moedas))
Quando for desenhar textos sempre os coloque-os entre aspas "texto". E ja que estamos desenhando textos, tivemos que converter valores reais (números) em strings (palavras) usando a função string(str).
"#" serve para pular uma linha. E sempre que for adicionar mais de um texto e mais de uma variável intercalados usa-se o somando seus valores para formar um novo texto.
Agora testem suas engines, para ver como saíram os resultados. Caso tenha saído algo errado baixe esta outra engine que esta completa:
[GM:S] DOWNLOAD DA ENGINE
[GM8] DOWNLOAD DA ENGINE
WHILE:
while é quase igual ao if, só há uma diferença:
Imagine todo o jogo como um ciclo que ocorre infinitamente. Quando esse ciclo passa pelo if ele faz a checagem normalmente, independente se a condição for verdadeira ou não e continua sem interromper esse ciclo.
Já quando o ciclo passa pelo while (que é um ciclo também), o ciclo pausa até que a condição vinculada a ele seja falsa. Exemplo:
- Crie um novo projeto.
- Adicione um novo objeto e um nova room.
- No Create do objeto coloque:
Código: Selecionar todos
moeda=0
if moeda < 100
{
moeda += 1
}
Código: Selecionar todos
draw_text(10, 10, moeda)
O valor da variável moeda mostrado é 1. Isso porque o Create ocorre apenas uma vez no inicio do ciclo do objeto e só deu tempo de checar a condição uma única vez.
- Agora troque o IF por WHILE e execute novamente.
Repare que:
- A tela fica preta por alguns instantes (Essa é a pausa no ciclo principal do jogo, aguardandoo ciclo while acabar).
- O valor de moeda agora é 100.
Ou seja, o while segurou o Create até que a variável moeda não fosse mais menor que 100.
Muito cuidado ao usar o while, se a condição nunca ficar falsa o jogo vai ficar travado.
EXPRESSÕES:
Vimos que para if e while funcionarem, antes eles checam uma condição para que o que está dentro das chaves ocorra.
Essa condição é uma expressão. As que usamos até agora foram simples, mas há formas de checar mais de uma condição em uma mesma expressão, e ainda usar uma expressão em uma operação aritmética.
Para que fique tudo mais organizado, pegue o costume de usar parenteses nas suas condições. Ex:
if (moedas >= 100) ...
A nossa expressão é (moedas >= 100), ela retorna 1 (true) ou 0 (false) para o if. Ou seja um valor booleano.
Operadores de comparação:
> maior que
< menor que
>= maior ou igual que
<= menor ou igual que
== igual a (É diferente de apenas =, que significa atribuição)
!= diferente de
Agora vamos as expressões compostas:
AND:
Código: Selecionar todos
if ( (energia > 50) and (arma == 3) )
{
energia -= 50
}
OR:
Código: Selecionar todos
if ( (cor == c_red) or (cor == c_orange) )
{
cor_quente = true
}
Como vimos expressões nos devolvem 1 ou 0 como valor. Podemos usar isso para simplificar códigos:
Código: Selecionar todos
x += (anda == true) * 5;
Código: Selecionar todos
x += (anda) * 5;
Código: Selecionar todos
if ( moedas >= 100 ) == true
{
}
Enfim terminamos mais essa!
Aula Anterior: #IEM Aula 03 - Operações matemáticas
Próxima aula: #IEM Aula 05 - Else e Switch
FLWS!