Olá pessoal! Bem vindo a segunda parte da nossa jornada na linguagem Monkey. Desta vez, vamos conhecer mais sobre expressões, instruções de repetição, e operadores.
ExpressõesPara se fazer cálculos ou manipular string e/ou outros elementos do seu programa você precisa de expressões. As expressões por sua vez, precisam de operadores para que possam realizar seu trabalho. Veja abaixo os operadores que você pode utilizar na linguagem Monkey:
Expressões aritméticasSão expressões onde há somente cáculos usando operadores matemáticos. Essas expressões podem conter variáveis, constantes, valores literais como 20.3, 30, -40, funções como Sin(), Cos(), Rnd() etc, vejamos:
- Código:
-
local calculo:int
local x:float
local y:float
Const MAX_INIMIGOS = 30 'uma constantante
x = Sin(30) * 40 + x
y = 120 + (800 mod x)
A linguagem Monkey assim como a maioria das linguagens tem uma regra de
precedência de operadores. Veja:
- Os operadores e expressões dentro de parenteses são analisados antes de todos.
- Operadores unários
- Depois vem os operações de multiplicação, divisão e módulo
- E por fim os operadores de + (soma), - (subtração)
Expressões LógicasAs expressões lógicas usam operadores lógicos e retornam
Verdadeiro ou
Falso. São utilizadas em tomadas de decisão, comandos de repetição e como expressões relacionais complexas usando
AND e
OR.
Digamos que você precise impedir que a sua nave não saia da parte visível da tela. Sabendo que sua nave é uma imagem de
32 x 32 pixels e que a sua tela contem 800 x 600 pixels você pode fazer algo como:
- Código:
-
if (KeyDown(KEY_LEFT))
if (x > 16) x = x - 1 'o ponto de referência é o centro da imagem
end
Observe que temos um
SE dentro de outro
SE. A função
KeyDown() é uma função booleana que retorna
TRUE se uma tecla for pressionada e false caso contrário. Então, traduzindo: Se o jogador pressionar
seta ESQUERDA E Se o x for
> (maior) que 16 diminuimos 1 de x. Você pode observar que essa é uma expressão composta de
duas expressões lógicas. Ou seja para que a expressão matemática x = x - 1 seja executada é necessario que as
duas expressões sejam
VERDADEIRAS. Veja agora essa mesma expressão escrita com operadores booleanos. Um operador booleano
AND ou
OR conecta duas expressões lógicas. Veja:
- Código:
-
if (KeyDown(KEY_LEFT)) and (x > 16)
x = x - 1
end
Viu como fica mais claro ? Você pode combinar AND's e OR's para criar as mais variadas expressões lócias de acordo com a lógica do seu game.
Controle de FluxoQuando o computador executa o seu programa a ordem natural de execução é de cima para baixo. Ele começa pela função Main() executa a primeira linha até ultima. Se a função Main() iniciar algum objeto ou chamar outra função, o mesmo acontece ou seja ele "pula" pra função ou método de objeto e excuta de cima pra baixo. Entretanto, muitas vezes precisamos que certas partes de um programa executem em uma ordem diferente, ou que seja repetida várias vezes, tome desvios baseado em certas condições. Para isso temos os comandos de controle de fluxo e de loop.
Comando IFO comando
IF permite que você execute um código se determinadas
condições forem satisfeitas. Se a expressão relacional ou booleana for avaliada como
TRUE (verdadeira) o comando/bloco será executado.
Vejamos um exemplo:
- Código:
-
contador = contador + 1
If (contador = 2000)
print "O contador chegou a 2000"
end
if (Sqrt(Abs(x - inimX) + Abs(y - inimY)) < 10)
PlaySound(sndBum)
score += 100
end
Neste exemplo de código o primeiro
if verifica se a
variável "contador" é
= (igual) que 2000 e caso seja
VERDADEIRO (True) imprime a mensagem "O contador chegou a 2000". No segundo
If verificamos se a distância entre dois personagens de um jogo está menor que 10 pixels e caso seja
TRUE (Verdadeiro), tocamos um som e aumentamos o score 100 pontos.
Sintaxe geral do comando IF:
if
Expressão [Then]
...Comandos...
ElseIf
Expressão [Then]
...Comandos
ElseIf
Expressão [Then]
...Comandos
Endif
Comando SelectO comando
Select é como se fosse um
IF turbinado. Você geralmente usa o Select quando você tem que testar a mesma variável com várias condições. Veja o exemplo abaixo:
- Código:
-
Select Level
Case 1, 3
adicionaInimigo(Rnd(DeviceWidth), -32, inimigo1)
Case 2, 4
adicionaInimigo(Rnd(DeviceWidth), -32, inimigo2)
Case 5
venceu()
End
Neste trecho de código, testamos a variável Level e de acordo com ela criamos certo tipo de inimigo ou jogador vence. Se fossemos usar um
If esse mesmo trecho de código poderia ser escrito assim:
- Código:
-
if (Level = 1) or (Level = 3)
adicionaInimigo(Rnd(DeviceWidth), -32, inimigo1)
elseif (Level = 2) or (Level = 4)
adicionaInimigo(Rnd(DeviceWidth), -32, inimigo2)
elseif (Level = 5)
venceu()
End
Observe que no If você deve repetir a variável Level em todas as condições causando uma maior digitação e tornando o código um pouco mais ilegível. Eu particularmente prefiro o Select, mas vai da escolha de cada um.
Comando de repetição WhileQuando precisamos repetir um trecho de código podemos usar o While. O comando While repete um trecho enquanto uma condição for verdadeira. Vejamos um exemplo:
- Código:
-
local c:int
c = 10
while (c > 0)
fazAlgo(c)
c -= 1
end
function fazAlgo(int c)
print c
end
Neste exemplo a
função fazAlgo() é chamada
10 vezes. Como você pode observar, o
While testa antes a condição, ou seja se a condição não for verdadeira ele nem entra no loop. O que você acha que aconteceria se não estivessemos colocado o comando "c -= 1" ? Pense nisso.
Comando de repetição Repeat..ForeverBem, forever em inglês significa "para sempre" e é exatamente o que o comando de repetição Repeat..Forever faz, ele fica eternamente "rodando". Mas como sair de um loop Forever? Simples, adicionamos alguma condição em nosso código que execute o comando Exit. Veja o exemplo:
- Código:
-
local c:int
c = 0
Repeat
c = c + 1
if (c == 10) Exit
Forever
Comando de Repetição FOR NuméicoVejamos agora mais um comando muito comum de repetição disponivel em diversas linguagens, o comando
FOR. Em Monkey utilizamos o comando FOR quando já sabemos o número exato de iterações que precisamos. Nesse caso basta coloca um inicio e um fim que o FOR automaticamente analisa as condições de termino do loop. Veja o exemplo abaixo:
Neste exemplo, precisamos imprimir a string "Monkey Brasil" 10 vezes. Veja, sabemos que queremos 10 vezes então vamos usar o FOR.
- Código:
-
For Local index = 1 to 10 Step 1
Print "Monkey Brasil"
End
Observe o uso da declaração Local. Como já vimos em outra parte desta série de artigos, "Local" declara uma nova variável de escopo local. Neste caso como estamos em um FOR a variável Index só podera ser usada dentro deste loop, e isso é exatamente oque queremos neste caso, ela é usada e destruida em seguida liberando memória e executando o trabalho.
A forma geral de uso do FOR numérico é a seguinte:
For [
Local ]
VariávelIndice =
ValorInicial To | Until ValorFinal [
Step ValorPasso].Comandos
Next|EndComo você pode observar o
Step é opcional se o valor do "ValorPasso" for
1. Para fechar o laço do FOR use Next ou End. Eu sempre uso End pois serve para qualquer laço e não tenho que ficar lembrando de usar Next, EndIF etc, apenas uso End e pronto.
Bom pessoal, por enquanto é isso. Terminamos nossa jornada nas expressões e nos principais comandos de LOOP. No próximo artigo, vamos tratar de coleções, For.. EachIn e Vetores. Até breve!
_________________________
Composed/Posted with [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]