FOR and WHILE loops
Mais ações
Loops podem reduzir dramaticamente o tamanho de um script quando uma ação precisa ser executada repetidamente.
Neste script há vários setores, aqui de 1 até X. É claro, X deve ser substituído pelo maior número de ID de setor. Cada setor tem o special Floor_Waggle.
Isso é fácil de configurar com copiar e colar, mas aí os IDs dos setores precisam ser alterados manualmente. O script poderia ser escrito assim:
#include "zcommon.acs" SCRIPT 1 OPEN { Floor_Waggle (1, 200, 50, 0, 0); delay (7); Floor_Waggle (2, 200, 50, 0, 0); delay (7); Floor_Waggle (3, 200, 50, 0, 0); delay (7); | | | Floor_Waggle (X, 200, 50, 0, 0); delay (7); }
Uma forma mais fácil seria se um script atualizasse os IDs de setor em um loop. Tanto um loop FOR quanto um loop WHILE podem ser usados.
Loop FOR
O loop for pode ser escrito de duas maneiras; a diferença é como a variável é declarada.
#include "zcommon.acs" SCRIPT 1 OPEN { for ( int sid = 1; sid < X; sid++ ) // sid é o ID do setor { Floor_Waggle (sid, 200, 50, 0, 0); delay (7); } }
ou assim
#include "zcommon.acs" script 1 OPEN { int sid = 0; for ( sid = 1; sid < X; sid++ ) // sid é o ID do setor { Floor_Waggle (sid, 100, 20, 0, 0 ); delay (7); } }
A primeira parte da instrução for (aqui sid = 1) é executada uma vez antes do loop começar a rodar. A terceira parte da instrução for (aqui sid++) é executada a cada iteração do loop, logo antes de ele reiniciar ou terminar. A segunda parte da instrução for (aqui sid < X) é a condição que precisa ser verdadeira para continuar repetindo.
Neste exemplo, o loop for define sid como 1 (sid = 1) antes que qualquer coisa dentro do loop execute. Depois do delay, ele incrementa sid em um (sid++). Enquanto sid for menor que X (sid < X), ele repetirá tudo dentro das chaves.
Loop WHILE
#include "zcommon.acs" script 1 OPEN { int sid = 1; // sid é o ID do setor while ( sid < X ) { Floor_Waggle (sid, 100, 20, 0, 0); delay (7); sid++; } }
Num caso como este, a decisão de usar for ou while depende da preferência do programador, porque no for todas as instruções de controle do loop ficam em um único lugar.
Loop UNTIL
#include "zcommon.acs" script 1 OPEN { int sid = 1; // sid é o ID do setor until ( sid >= X ) { Floor_Waggle (sid, 100, 20, 0, 0); delay (7); sid++; } }
Um loop until é o oposto de um loop while. Um until continuará repetindo até que uma condição se torne verdadeira, enquanto um while continuará repetindo até que uma condição se torne falsa.