Fase 3 8 horas Intermediário

# O Salto da Rampa

Quem não tinha velocidade suficiente na rampa caía no buraco. Quem tinha, voava. Aqui você aprende a automatizar construções — com Minecraft Education e animações Pillow.

Progresso: 0/10 (0%)

## Objetivos da Fase

#### O que você vai aprender:

- API do Minecraft Education Edition em Python
- Sistema de coordenadas 3D (x, y, z)
- Automação de construções com loops aninhados
- Biblioteca Pillow (PIL) para manipulação de imagens
- Criação de animações GIF programaticamente
- Leitura e escrita de arquivos de imagem
- Parâmetros de física: gravidade, velocidade inicial, trajetória

#### O que você vai criar:

- Torre automatizada no Minecraft (50 blocos)
- Pirâmide gerada por loops aninhados
- Animação GIF da trajetória do salto
- Simulador de física: `calcular_salto()`
- Relatório de saltos: BURACO / QUASE / VOOU / LENDÁRIO

## 3.1 — A Física do Salto

Na rampa de Palotina, o resultado dependia da velocidade de entrada. Abaixo de 5 m/s — buraco. Acima de 10 m/s — lendário. Isso é um bloco de condicionais aplicado à física real.

#### 🏁 Velocidade e resultado

- v < 5 m/s → BURACO — nem saiu do chão
- 5 ≤ v < 8 m/s → QUASE — saltou mas aterrou curto
- 8 ≤ v < 10 m/s → VOOU — bom salto, aplausos
- v ≥ 10 m/s → LENDÁRIO — o salto que virou história

    # calcular_salto() — da pista para o código
    def calcular_salto(velocidade: float) -> str:
        atrito = 0.5  # terra vermelha de Palotina
        velocidade_ajustada = velocidade - atrito

        if velocidade_ajustada < 5:
            return "BURACO"
        if velocidade_ajustada < 8:
            return "QUASE"
        if velocidade_ajustada < 10:
            return "VOOU"

        return "LENDÁRIO"

    >>> calcular_salto(10.5)
    'LENDÁRIO'

## 3.2 — Automação no Minecraft

Construir 50 blocos manualmente levaria horas. Com um loop Python, leva 2 segundos. Isso é o poder da automação: a rampa é construída pelo código, não pelo piloto.

    # Construindo a rampa da Paineira no Minecraft
    from mcpi.minecraft import Minecraft
    import mcpi.block as block

    mc = Minecraft.create()
    x0, y0, z0 = mc.player.getTilePos()

    # Torre de 50 blocos de pedra — o pilar da rampa
    for h in range(50):
        mc.setBlock(x0, y0 + h, z0, block.STONE.id)

    # Pirâmide 10×10×10 — a pista vista de cima
    for nivel in range(10):
        for dx in range(nivel, 10 - nivel):
            for dz in range(nivel, 10 - nivel):
                mc.setBlock(
                    x0 + dx,
                    y0 + nivel,
                    z0 + dz,
                    block.GRASS.id,
                )

## 3.3 — Animação GIF com Pillow

    # Gerar frames da trajetória e salvar como GIF
    from PIL import Image, ImageDraw
    import math

    frames = []
    for t in range(0, 50):
        img = Image.new("RGB", (400, 200), (26, 122, 60))
        draw = ImageDraw.Draw(img)
        x = int(t * 8)
        y = int(200 - (10 * t - 0.5 * 9.8 * t**2 / 10))
        y = max(10, min(190, y))
        draw.ellipse([x - 8, y - 8, x + 8, y + 8], fill=(244, 196, 48))
        frames.append(img)

    frames[0].save(
        "salto_palotina.gif",
        save_all=True,
        append_images=frames[1:],
        duration=50,
        loop=0,
    )
    Arquivo salvo: salto_palotina.gif

## ✅ Checklist da Fase 3

Implementei `calcular_salto()` com os 4 resultados corretos
Testei todos os casos-limite da física do salto
Conectei ao Minecraft Education e obtive a posição do jogador
Construí a torre de 50 blocos com loop simples
Construí a pirâmide com loops aninhados (3 níveis)
Instalei Pillow e abri/modificou uma imagem existente
Gerei pelo menos 10 frames da animação do salto
Salvei o GIF animado e abri no Windows
Criei a classe `Bicicleta` com `pedalar()` e `frear()`
Simulei 4 pilotos com esforços diferentes e relatei resultados

#### 🏎 Projeto da Fase 3

Crie um simulador completo: 4 pilotos com bicicletas (`Bicicleta`), cada um com esforço diferente. Calcule o resultado do salto para cada um, gere um GIF animado da trajetória e exiba o relatório final no console com a classificação de cada piloto.

🔒 LGPD — Usamos localStorage para salvar progresso.