No
tempo da programação à vapor e do micro mono
função, era comum estruturar os jogos num único
e longo bloco de processamento, fazendo um desvio no final, para
um determinado ponto estratégico do código. A isso
dávamos o nome de looping principal.
Hoje,
com os micros tendo que executar duzentas coisas ao mesmo tempo
(assoviar e chupar cana ao mesmo tempo) não faz mais muito
sentido usar este tipo de esturura. Existe um jeito mais racional
e fácil de resolver a coisa: usando seções
autônomas de código.
Uma
seção de código é portanto um pedaço
do programa que é executado, independentemente de onde
esteja a execução normal, sempre que uma condição
se fizer presente. Nos dias antigos, dávamos o nome a isso
de Interrupções (ou ints,
para os mais íntimos). Nos dias atuais, chamamos de eventos.
No
caso do RDG, podemos ter (podemos, porque seu
uso não é obrigatório) até 5
seções distintas. São elas: @timer,
@keypr, @btlft, @btrgt
e @btmov. Essas seções
fazem, ou são executadas, quando ocorrer as condições
que seus nomes indicam:
@timer:
ocorre de tempos em tempos predeterminados;
@keypr:
ocorre sempre que uma tecla é pressionada;
@btlft:
ocorre sempre que o botão esquerdo do mouse for pressionado;
@btrgt:
ocorre sempre que o botão direito do mouse for pressionado;
@btmov:
ocorre sempre que o mouse for deslocado pela tela;
No
fonte, o nome da seção deve ser colocado sem nenhum
espaço (margem) esquerda, para que o caracter "@"
seja imediatamente identificado. Toda seção deve
sempre terminar com uma instrução de finalização:
end
Vejamos
como funciona isso no caso do nosso aviãozinho. Queremos
que ele vôe de um lado para outro na tela. Criamos então
uma seção @timer, que deve estar
preferencialmente no final do fonte:
@timer
cls
fig "av1",#20,50,0
add #20,5
if> #20,510,volta
end
:volta
let #20,-90
end
Fácil
de entender, não? A variável #20
vai ser somada de 5, até o avião chegar na lateral
direita da tela, quando ele então volta para uma posição
na lateral esquerda (dando a volta ao mundo).
Ao
iniciar o programa, então, é preciso definir de
quanto em quanto tempo essa seção seção
será processada.
cls
let #20,10
timer on,33
end
Esse
é portanto o trecho principal do nosso programa. A intrução
timer liga o temporizador (on),
com o valor 33 (33 milésimos de segundo
mais ou menos quer dizer que a seção será
executada umas 30 vezes a cada segundo).
Agora
vamos ver o uso do clique do mouse. A mecânica é
a mesma: definimos uma seção @btlft:.
@btlft
fig "av1",100,150,0
end
Esse
trecho apenas vai colocar um avião naquelas coordenadas
(100,150), para confirmar visualmente que a coisa toda funciona.
Para "ligar" o mouse:
mouse
on,off,off
O
primeiro parâmetro "on" liga
o botão esquerdo e o segundo "off"
deixa o botão direito desligado. O terceiro parâmetro
liga ou desliga a seção correspondente ao movimento
do cursor do mouse, sobre a tela. No caso do teclado, a instrução
para "ligá-lo" é:
kpress
on
De
agora em diante, fica a cargo do leitor, experimentar como as
demais seções funcionam.
Lembretes
importantes:
Nunca
esqueça de terminar uma seção, inclusive
a seção inicial ou principal, com uma instrução
end. Coisas horríveis podem acontecer
se não fizer isso.
No
caso da seção do teclado, ao ser pressionada uma
tecla, a variável #2 recebe o código
da tecla. No caso do mouse, as coordenadas x,y do cursor vão
para as variáveis #5 e #6.
Se
estiver com muita dificuldade em entender como funciona o conceito
de seção e como incorporá-las ao seu programa,
dê uma analisada no fonte a seguir...
cls
let #20,10
let #21,200
mouse on,on,off
kpress on
timer on,33
end
@timer
cls
fig "av1",#20,50,0
add #20,5
if> #20,510,volta
end
:volta
let #20,-90
end
@btlft
fig "av1",100,150,0
end
@btrgt
fig "av1",200,250,0
end
@keypr
fig "av1",#21,0,0
if= #2,32,anda
end
:anda
add #21,10
end
|