Capítulo 09: Repita Para Sempre (Loops Contínuos e Automação)

🎯 Objetivo da Aula

Em um centro de distribuição moderno, muitos processos nunca param: a esteira de triagem de caixas roda sem cessar, os sensores de presença monitoram a portaria 24 horas por dia e os servidores de rastreamento via satélite escutam sinais continuamente. No Scratch, executamos rotinas contínuas através do laço sempre.

Ao final desta aula, você será capaz de:

  1. Compreender o funcionamento do laço infinito através do bloco 🟠 sempre.
  2. Compreender a arquitetura de um Laço de Execução Contínuo (Game Loop / Event Loop).
  3. Dominar o controle de cadência operacional utilizando o bloco 🟠 espere [segundos].
  4. Construir uma Esteira Automatizada de Descarregamento de Cargas da FastLog.

📥 Material de Apoio e Roteiro de Blocos:


🏢 O Cenário Prático (Seu Desafio)

Situação: O setor de expedição da FastLog instalou uma esteira rolante automatizada que transporta caixas da área de triagem até a caçamba dos caminhões. A caixa deve:

  1. Nascer no lado esquerdo da esteira ($x: -220$).
  2. Deslizar continuamente para a direita até o ponto de coleta ($x: 220$).
  3. Ao atingir a ponta, emitir um som de descarregamento, incrementar o placar de caixas despachadas e reaparecer instantaneamente no início da esteira para recomeçar o ciclo.

Missão: Programar o comportamento ininterrupto da esteira no Scratch, criando um fluxo operacional contínuo.


🧠 Fundamentos: Como Funciona o Laço sempre?

1. A Estrutura do Bloco sempre

O bloco 🟠 sempre possui formato de “boca” com uma seta curva na parte inferior. Ele não possui encaixe na parte de baixo, pois nada que for colocado abaixo dele seria executado: uma vez dentro do sempre, o Scratch repete os comandos eternamente até que a bandeira vermelha seja clicada ou o bloco pare [tudo] seja disparado.

graph TD
    A["Gatilho: quando clicar em 🏁"] --> B["Entra no Bloco SEMPRE"]
    B --> C["Posiciona Caixa no início: vá para x: -220 y: -60"]
    C --> D["Desliza até o final: x: 220 y: -60 (2 segs)"]
    D --> E["Incrementa Placar: adicione 1 a Caixas_Despachadas"]
    E --> F["Volta para o topo do laço SEMPRE"]
    F --> C
    
    style A fill:#f39c12,stroke:#fff,color:#fff
    style B fill:#e67e22,stroke:#fff,color:#fff
    style D fill:#3498db,stroke:#fff,color:#fff
    style E fill:#27ae60,stroke:#fff,color:#fff

2. A Importância Crítica da Cadência (espere)

O Perigo do Loop sem Pausa:
Se você criar um laço sempre apenas com blocos matemáticos ou movimentação sem nenhum intervalo de tempo, o Scratch tentará rodar o código milhares de vezes por segundo. Isso pode causar congelamento do navegador e superaquecimento da CPU!
Regra de Ouro: Sempre utilize um pequeno intervalo como espere (0.05) segundos ou use blocos de interpolação temporal como deslize por (N) segs.


📖 Exemplo Guiado: Esteira Transportadora Automatizada

Passo a Passo no Scratch 3.0:

  1. Crie a variável global: Caixas_Despachadas.
  2. Adicione o ator Caixa_Papelao (ou escolha o ator “Gift” ou “Box”).
  3. No código da caixa, monte o script contínuo:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
quando clicar em 🏁
mude [Caixas_Despachadas v] para (0)
mude o tamanho para (60)%

sempre
    // 1. Posição inicial na ponta esquerda
    vá para x: (-220) y: (-60)
    
    // 2. Movimento contínuo de deslizamento
    deslize por (2.5) segs até x: (220) y: (-60)
    
    // 3. Evento de descarregamento
    toque o som [Pop v]
    adicione (1) a [Caixas_Despachadas v]
    
    // 4. Pequena pausa antes da próxima caixa
    espere (0.5) segundos
fim

🛠️ Prática Obrigatória 1: Luz de Sinalização de Tráfego Intermitente

O Desafio:

Crie uma luz amarela de atenção para a saída de veículos do pátio:

  1. Crie o ator Luz_Alerta com duas fantasias: Apagada (cinza) e Acesa (amarelo brilhante).
  2. Dentro de um laço sempre:
    • Mude para a fantasia Acesa.
    • Espere 0.6 segundos.
    • Mude para a fantasia Apagada.
    • Espere 0.6 segundos.
  3. Teste o pisca-pisca de segurança contínuo!

🛠️ Prática Obrigatória 2: Monitor Contínuo de Sensor de Presença

O Desafio:

Crie um sensor que vigia a aproximação de caminhões:

  1. Crie o ator Cancela e o ator Caminhao.
  2. No código da Cancela, utilize um laço sempre contendo um teste se então senão:
    • se <tocando em [Caminhao]?> então:
      • Mude para a fantasia Aberta e diga [Passagem Liberada].
    • senão:
      • Mude para a fantasia Fechada.
  3. Arraste o caminhão pelo palco com o mouse para ver a cancela reagindo em tempo real!

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo do projeto com o nome: Atividade_09_SeuNome_SeuSobrenome.sb3.
  2. Teste o funcionamento contínuo da esteira por pelo menos 10 caixas.
  3. No Microsoft Teams, envie na tarefa “Scratch Cap 09 - Laços Contínuos”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aplicar o conceito de Serviços em Segundo Plano (Daemons / Workers) e Loop de Mensagens. Em servidores Linux, sistemas de mensageria (como RabbitMQ e Apache Kafka) e sistemas operacionais de fábrica rodam exatamente dentro de laços infinitos como este, aguardando novas mensagens de processo.


🔥 Desafio de Fixação: Animação com Efeito de Giro da Esteira

Adicione um ator simulando os roletes da esteira. Faça os roletes girarem continuamente dentro de um bloco sempre usando o bloco 🔵 gire para a direita (15) graus com espere (0.05) segundos para criar a ilusão de rolamento contínuo.


🔑 Gabarito de Código (Blocos do Scratch)

Prática 1:

1
2
3
4
5
6
7
8
[Ator: Luz_Alerta]
quando clicar em 🏁
sempre
    mude para a fantasia [Acesa v]
    espere (0.6) segundos
    mude para a fantasia [Apagada v]
    espere (0.6) segundos
fim

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Ator: Cancela]
quando clicar em 🏁
sempre
    se <tocando em [Caminhao v]?> então
        mude para a fantasia [Aberta v]
        diga [Passagem Liberada]
    senão
        mude para a fantasia [Fechada v]
        diga [] // Limpa fala
    fim
    espere (0.1) segundos
fim

Desafio:

1
2
3
4
5
6
[Ator: Roletes_Esteira]
quando clicar em 🏁
sempre
    gire para a direita (15) graus
    espere (0.05) segundos
fim

📥 Download do Roteiro Completo desta Aula:
Baixe o arquivo consolidado Capitulo_09.txt ou o pacote compactado (.zip) com os scripts e desafios da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.

  1. Por que o bloco sempre não possui encaixe na parte de baixo?
  2. O que pode acontecer se você criar um laço sempre sem nenhum intervalo de tempo (espere)?
  3. Quais são as duas formas de interromper um laço sempre, segundo o capítulo?
  4. No Exemplo Guiado, qual é o nome da variável global que conta as caixas despachadas pela esteira?
  5. No Exemplo Guiado, qual bloco é usado para deslizar a caixa da posição inicial até a posição final ao longo de 2,5 segundos?
  6. Na Prática Obrigatória 1, quais são os nomes das duas fantasias do ator Luz_Alerta?
  7. Na Prática Obrigatória 2, que estrutura condicional é combinada dentro do laço sempre para verificar se a Cancela está tocando o Caminhao?
  8. Segundo o Checkpoint, que sistemas de mensageria reais foram citados como exemplo de uso de laços infinitos?
  9. Qual é a “Regra de Ouro” sugerida no capítulo para evitar o “Perigo do Loop sem Pausa”?
  10. Na Prática Obrigatória 1, quanto tempo (em segundos) o ator Luz_Alerta espera em cada fantasia antes de trocar para a outra?