Módulo 2 · Aula 2.4 · Balanceamento e curva de dificuldade
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 8 h/a | ⭐⭐⭐ | papel, dados, calculadora, Scratch | C1, C3, C5 |
Objetivos de aprendizagem
- Medir se um jogo é justo coletando dados de partidas.
- Ler uma tabela de resultados de simulação e tirar conclusões.
- Calcular se um desafio é possível (alcance × tempo).
- Transformar números fixos do código em variáveis de ajuste.
- Desenhar uma curva de dificuldade.
Pré-requisitos
Aulas 2.1 e 2.3; Módulo 1 (variáveis e operadores).
Materiais
Tabuleiro da Trilha do Mandacaru, 2 dados, peões, calculadora, computador com o Caça-Estrelas.
Conceitos
- Balancear: ajustar números e regras até o jogo ficar justo e com a dificuldade certa.
- Justo (entre jogadores): cada um tem a mesma chance de ganhar no começo. Com 3 jogadores, 33,3% para cada.
- Vantagem do primeiro jogador: em jogos de corrida por turnos, quem começa costuma jogar uma vez a mais.
- Amostra: quantas partidas foram observadas. Com 10 partidas, a sorte engana muito. Com 100 mil (simulação no computador), o resultado é confiável.
- Simulação: um programa que joga milhares de partidas sozinho seguindo as regras. Não substitui o teste com pessoas (não mede diversão), mas mede justiça e duração muito bem.
- Variável de ajuste: número do jogo guardado em uma variável com nome claro (
velocidade_estrela), em um só lugar, para mudar sem caçar números pelo código. - Curva de dificuldade: como a dificuldade sobe ao longo do jogo. Boa curva: começa fácil, sobe aos poucos, tem pequenos descansos.
Exemplo 1: a Trilha do Mandacaru é justa?
Resultados reais de scripts/simular_trilha.py (100 mil partidas por linha):
| Cenário | Jogador 1 | Jogador 2 | Jogador 3 | Rodadas |
|---|---|---|---|---|
| A. 1 dado | 42,0% | 32,4% | 25,5% | 7,7 |
| C. 2 dados, todos escolhem bem | 48,7% | 30,5% | 20,8% | 6,0 |
| D. só o jogador 2 escolhe bem | 17,8% | 75,2% | 7,0% | 6,7 |
| E. C + 3º começa na casa 1 | 48,1% | 30,7% | 21,3% | 6,0 |
| F. C + começam nas casas 0, 2 e 4 | 35,0% | 31,1% | 33,9% | 5,7 |
| G. C + completar a rodada | 33,5% | 33,4% | 33,1% | 6,1 |
O histórico completo, com as conclusões, está em ../projetos/trilha-do-mandacaru/README.md.
Exemplo 2: toda estrela é alcançável?
No Caça-Estrelas, a estrela cai 340 pixels (de y = 170 a y = -170). O gato anda 10 pixels por quadro, e o Scratch roda 30 quadros por segundo.
- Quadros até a estrela cair = 340 ÷ velocidade da estrela.
- Alcance do gato = 10 × quadros.
- O palco tem 480 de largura; na pior situação, o gato precisa atravessar cerca de 440 pixels.
| Velocidade da estrela | Quadros até cair | Segundos | Alcance do gato | Estrelas possíveis de pegar* |
|---|---|---|---|---|
| 3 | 113 | 3,8 | 1.133 | 100% |
| 5 (original) | 68 | 2,3 | 680 | 100% |
| 8 | 43 | 1,4 | 425 | 100% |
| 10 | 34 | 1,1 | 340 | 99% |
| 12 | 28 | 0,9 | 283 | 94% |
| 15 | 23 | 0,8 | 227 | 86% |
| 20 | 17 | 0,6 | 170 | 75% |
*Calculado sorteando 200 mil posições de gato e estrela, com 50 pixels de margem para o encosto. É o máximo teórico, com reação perfeita; uma pessoa real pega menos, porque leva uns 0,2 a 0,3 segundo só para reagir.
Conclusão: a partir de velocidade 12, algumas estrelas ficam impossíveis mesmo para quem joga perfeitamente. Se o jogo acelera, o limite deve ficar em torno de 10, ou o gato precisa ficar mais rápido também.
Tutorial passo a passo
Parte A. Coletar dados à mão (2 h)
- Em grupos de 3, joguem a Trilha versão 1 (1 dado) 10 vezes, sempre na mesma ordem de jogadores. Anotem quem venceu e quantas rodadas durou cada partida.
- Somem a turma inteira no quadro (ex.: 8 grupos × 10 = 80 partidas). Calculem a porcentagem de vitórias de cada posição.
- Comparem com a linha A da tabela. Com mais partidas, o resultado da turma fica mais perto da simulação.
Parte B. Ler a simulação (1 h)
- Respondam em dupla, olhando a tabela do Exemplo 1:
- O que aconteceu com a vantagem do primeiro jogador quando todos passaram a escolher bem (C)?
- Por que E quase não mudou nada, se "dar uma casa a mais" parecia justo?
- O que o cenário D mostra sobre decidir bem?
- Por que G resolve o problema? (Dica: quantas vezes cada um jogou?)
Parte C. Variáveis de ajuste no Caça-Estrelas (3 h)
- Abra o seu Caça-Estrelas e salve como nova versão.
- Crie duas variáveis para todos os atores:
velocidade_estrelaevelocidade_gato. Desmarque as caixinhas para não aparecerem no palco. - No Gato, logo depois de "mude [vidas] para (3)", acrescente "mude [velocidade_estrela] para (5)" e "mude [velocidade_gato] para (10)".
- No Gato, troque o 10 de "adicione (10) a x" pela bolinha
velocidade_gato. No da esquerda, use "(0) - (velocidade_gato)". - Na Estrela, troque "adicione (-5) a y" por "adicione ((0) - (velocidade_estrela)) a y".
- Teste as velocidades 5, 10 e 15 só mudando o valor no Gato. Para cada uma, jogue 2 partidas e anote os pontos.
- Compare com a tabela do Exemplo 2: a partir de que velocidade você começou a perder estrelas "impossíveis"?
Parte D. Curva de dificuldade (2 h)
- Faça a estrela acelerar: na Estrela, quando pega a estrela, acrescente "adicione (0.5) a [velocidade_estrela]".
- Proteja o limite que a tabela mostrou: depois disso, "se <(velocidade_estrela) > (10)> então mude [velocidade_estrela] para (10)".
- Desenhe no papel a curva: eixo x = pontos, eixo y = velocidade. Ela sobe de 5 a 10 e fica plana. Onde o jogo fica mais tenso?
Imagens
Tabelas acima (dados reais de simulação e cálculo). Tabuleiro: ../projetos/trilha-do-mandacaru/tabuleiro.png
.
Indicação da interface
Variáveis: categoria Variáveis > Criar uma Variável. Operador "( ) - ( )": categoria Operadores.
Código completo
Alterações no Caça-Estrelas:
Ator Gato (começo do roteiro da bandeira):
quando ⚑ for clicado
vá para x: (0) y: (-130)
mude [pontos] para (0)
mude [vidas] para (3)
mude [velocidade_estrela] para (5)
mude [velocidade_gato] para (10)
repita até que <(vidas) < (1)>
se <tecla [seta para direita] pressionada?> então
adicione (velocidade_gato) a x
fim
se <tecla [seta para esquerda] pressionada?> então
adicione ((0) - (velocidade_gato)) a x
fim
fim
...
Ator Estrela (dentro do "sempre"):
adicione ((0) - (velocidade_estrela)) a y
se <tocando em [Gato]?> então
adicione (1) a [pontos]
adicione (0.5) a [velocidade_estrela]
se <(velocidade_estrela) > (10)> então
mude [velocidade_estrela] para (10)
fim
toque o som [Pop]
vá para x: (número aleatório entre (-220) e (220)) y: (170)
fim
...Explicação do código
- Todos os números de equilíbrio ficam no começo do roteiro do Gato. Para balancear, mexe-se em um só lugar.
- O gato inicia as variáveis porque, como vimos no Módulo 0, a estrela não deve confiar em quem roda primeiro. Na primeira volta, a estrela pode ler a velocidade da partida anterior por um instante; como a velocidade só muda o tamanho do passo, isso não quebra o jogo.
- 0,5 por estrela: depois de 10 estrelas a velocidade chega a 10 e para de subir.
Resultado esperado
Tabela de vitórias da turma comparada com a simulação; respostas da leitura da tabela; Caça-Estrelas com variáveis de ajuste, aceleração e limite; curva desenhada.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| A estrela sobe em vez de cair | usou "adicione (velocidade_estrela) a y" sem o "0 -" | usar "(0) - (velocidade_estrela)" |
| A estrela não se mexe na primeira partida | a variável começou em 0 | "mude velocidade_estrela para 5" no Gato |
| A velocidade não volta ao normal na nova partida | falta "mude velocidade_estrela para 5" na bandeira | conferir o Gato |
| Resultados da turma muito diferentes da simulação | poucas partidas | normal: com 80 partidas a variação é grande |
Exercício guiado
Com a tabela do Exemplo 2: se o gato andar 15 por quadro, qual o alcance com a estrela na velocidade 15? Resposta: 15 × (340 ÷ 15) = 340, igual ao da velocidade 10 com o gato a 10. Por quê? (Quando as duas velocidades sobem juntas, o alcance não muda.)
Desafio individual
Proponha outra forma de tornar a Trilha justa (diferente de G) e explique por que deve funcionar. Bônus: peça ao professor para incluir o seu cenário no simulador e veja o resultado.
Desafio avançado (opcional)
Abra scripts/simular_trilha.py com o professor, acrescente um cenário na lista CENARIOS e rode. Leia o código: onde ficam as regras de seca e açude?
Critérios de avaliação
- Dados da turma coletados e comparados.
- Respostas da leitura da tabela com justificativa.
- Caça-Estrelas balanceável funcionando.
Checklist de conclusão
Extensão
Escolha um jogo de celular que você joga e descreva a curva de dificuldade dele: onde ele fica difícil de repente? Onde dá um "descanso"?