Módulo 6 · Aula 6.8 · Geração procedural simples (opcional)
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 4 h/a | ⭐⭐⭐ | GDevelop 5 | C1, C2 |
Objetivos de aprendizagem
- Explicar o que é geração procedural e quando ela ajuda.
- Sortear a posição dos itens a cada partida, evitando lugares proibidos.
- Usar o evento Repetir para criar vários objetos.
- Reconhecer o risco: o sorteio pode criar uma fase impossível.
Pré-requisitos
Aulas 6.1 a 6.4. Aula 3.6 (criar objetos e sorteio).
Materiais
Computador com o GDevelop; uma cópia do Cajueiral.
Conceitos
Geração procedural. Parte da fase é criada por regras no momento em que o jogo roda, e não desenhada à mão. Cada partida fica um pouco diferente.
Desenhado × sorteado. O Cajueiral é todo desenhado: o designer controla a curva de dificuldade. Sortear tudo pode gerar fases chatas ou impossíveis. Um meio-termo: cercas e cães desenhados, castanhas sorteadas.
Sortear e conferir. Sorteia-se a posição; se cair dentro de uma cerca, sorteia de novo. Na Aula 3.6 bastava limitar o sorteio a uma área segura; aqui as cercas ficam no meio da área, então é preciso conferir depois.
Evento Repetir. Faz as ações e subeventos de dentro um número fixo de vezes no mesmo quadro: "Repetir 5 vezes: criar uma castanha".
Exemplos
| Jogo | O que é gerado |
|---|---|
| jogos de mineração com blocos | o mundo inteiro, a partir de um número "semente" |
| jogos de cartas | a ordem das cartas |
| esta aula | só a posição das castanhas |
Tutorial passo a passo
As instruções abaixo não foram testadas nesta versão do curso. O professor deve montar uma vez antes da aula.
- Na cópia, apague as castanhas da
Fase1(fica o objeto, sem instâncias). - Nos eventos da
Fase1, antes do link das Regras: No começo da cena com um subevento Repetir5vezes → Criar um objetoCastanhaemRandomInRange(64, 720),RandomInRange(64, 520). - Evento: Colisão Castanha com Cerca → mudar a posição da Castanha para outro sorteio. Ele roda a cada quadro até nenhuma castanha estar dentro de cerca.
- Faça o mesmo para castanhas que caíram perto demais de um cão (Distância entre dois objetos < 100).
- Visualizar várias vezes. Anote: alguma partida ficou impossível? Alguma ficou fácil demais?
Imagens
Não há capturas desta aula.
Indicação da interface
| Item | Onde fica |
|---|---|
| Evento Repetir | botão Adicionar... no fim da folha de eventos (nome exato da opção não conferido) |
| Criar um objeto | ações, grupo de objetos |
O código completo
Cena Fase1 (cópia):
No começo da cena
subevento: Repetir 5 vezes → Criar o objeto Castanha na posição RandomInRange(64, 720); RandomInRange(64, 520)
Castanha está em colisão com Cerca → posição de Castanha = RandomInRange(64, 720); RandomInRange(64, 520)
Incluir eventos de RegrasExplicação do código
Repetir e conferir até dar certo é um laço com condição de parada, como o "repita até" do Scratch (Módulo 1). Aqui a parada é "nenhuma castanha dentro de cerca".
Resultado esperado
Cada partida com castanhas em lugares diferentes, nunca dentro de cerca, e uma lista no diário das partidas boas e ruins.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Castanha aparece por um quadro dentro da cerca | o conserto acontece no quadro seguinte | aceitável; ou esconder até confirmar |
| Placar mostra o total errado | Total continua 5 fixo | criar exatamente Total castanhas |
| Castanha fora da cena | sorteio maior que a fase | limitar o sorteio à área entre as bordas |
Exercício guiado
RandomInRange(64, 720) sorteia entre quantos valores inteiros? (Resposta: 657.)
Desafio individual
Sorteie também qual dos três desenhos de fase é usado, criando três "moldes" e escolhendo com RandomInRange(1, 3).
Desafio avançado (opcional)
Pesquise "semente aleatória" (seed): como dois jogadores podem jogar a mesma fase sorteada?
Critérios de avaliação
- Itens sorteados sem cair em lugar proibido.
- Registro de partidas boas e ruins com explicação.
Checklist de conclusão
Extensão
Faça um jogo de tabuleiro de papel em que o caminho é montado sorteando cartas. Depois de 3 partidas, alguma ficou injusta?