"Sofisticando a programação"

Obviamente que a função "abreporta" não se resume unicamente a incrementar um registrador. Antes disso precisamos estabelecer o estado dela e tomar uma decisão em função disso. A essa decisão damos o nome de "desvio condicional".

Antes porém de entrarmos nesta questão é preciso tratar de um importante instrumento de programação no Micro Aventuras, o "label". Como o nome diz, um "label" ou "rótulo" é o nome dado a um pedaço do código do script, de forma que podemos "desviar" a execução das instruções para esses locais, em função de alguma condição. Por exemplo, no código a seguir...


O nome do label é ":Salto1" e foi colocado imediatamente antes da instrução que coloca o valor 10 no registrador número 5. É importante que o label comece sempre pelo caracter ":" e esteja no começo da linha.

A instrução "goto" fará um desvio incondicional para a posição do label, de tal forma que a instrução seguinte (colocar o valor 300 no registrador 2) nunca será de fato executada.

Voltando aos desvios condicionais, as principais instruções que tratam com registradores são:

ifreg= reg,dado,label - se o conteúdo do registrador número "reg" for igual a "dado" (valendo aqui tanto valores numéricos quanto alfanuméricos), desvia a execução para o ponto "label";

ifreg# reg,dado,label - se o conteúdo do registrador número "reg" for diferente de "dado" (valendo aqui tanto valores numéricos quanto alfanuméricos), desvia a execução para o ponto "label";

ifreg> reg,valor,label - se o conteúdo do registrador número "reg" for maior que "dado", desvia a execução para o ponto "label";

ifreg< reg,valor,label - se o conteúdo do registrador número "reg" for menor que "dado", desvia a execução para o ponto "label";

ifreg reg,valor1,valor2,label - se o conteúdo do registrador número "reg" estiver entre os valored "valor1" e "valor2", desvia a execução para o ponto "label";

No caso da porta do exemplo, vamos primeiro verificar qual é o estado dela e a partir daí apresentar ao leitor as alternativas (lembrando apenas que o leitor está executando esta função a partir do link "você pode tentar abri-la").


Se a porta está aberta, então ele tanto pode descrever o que vem após ela ou pode ainda já levar o leitor para uma nova posição. Vale lembrar que no caso da porta aberta faria mais sentido verificar essa condição no próprio script que descreve a posição, dando ao leitor a opção de atravessá-la.


No caso da porta estar apenas fechada, então realmente há a necessidade de um script adicional para abri-la e para isso basta trocar o status do registrador 3.

Para a porta trancada a situação é um pouco mais complexa porque irá exigir a posse de um objeto (veremos isso mais adiante). Note também que apenas nesse caso incrementamos o registrador 4, que conta quantas vezes o leitor tentou abrir a porta e não tinha a chave.


Ok, entendi

Recapitulando...

Índice das páginas