Seções de código
Pedaços do programa que funcionam de forma independente

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

 
online