Módulo 1 · Aula 1.11 · Projeto 2, parte 2: sortear, perguntar, corrigir e testar
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 8 h/a | ⭐⭐⭐⭐ | Scratch | C1, C2, C5 |
Objetivos de aprendizagem
- Sortear sem repetir (tirar o número sorteado da lista).
- Validar a entrada do jogador (aceitar só a, b ou c).
- Comparar a resposta com a lista de respostas e dar retorno.
- Testar o jogo com um plano de testes que cubra acerto, erro e entrada inválida.
Pré-requisitos
Aula 1.10 concluída.
Materiais
Computador; projeto da aula anterior; projeto quiz-sabidinho.sb3 (professor).
Conceitos
- Sortear sem repetir: sorteamos uma posição da lista
ordem, guardamos o número que está lá ematuale apagamos aquela posição. Assim ele não pode sair de novo. - Validação: conferir se o que o jogador digitou faz sentido antes de usar. "repita até que" a resposta ser a, b ou c.
- O "=" do Scratch ignora maiúsculas: "A" = "a" é verdadeiro. Por isso o jogador pode digitar com Caps Lock ligado.
- Plano de testes: lista de situações que precisam ser testadas, com o resultado esperado.
Tutorial passo a passo
Parte A. "sortear pergunta" (40 min)
- Monte a definição (código abaixo).
- Teste: com o mostrador de
ordemvisível, clique várias vezes no chapéu "defina sortear pergunta" (executa a definição). A lista diminui um item por clique eatualmostra o número que saiu.
Parte B. "fazer pergunta" (60 min)
- Monte a definição. A condição "resposta válida" é grande: "<(minha_resposta) = (a)> ou <<(minha_resposta) = (b)> ou <(minha_resposta) = (c)>>". Monte de dentro para fora: primeiro o "ou" de b e c, depois o "ou" de fora com a.
- Você vai precisar da mesma condição duas vezes. Monte uma vez e use Duplicar (botão direito) para a segunda.
Parte C. "corrigir" (40 min)
- Monte a definição com "se ... então ... senão".
Parte D. Testar (100 min)
- Execute o plano de testes abaixo, marcando cada linha.
| Nº | Como testar | Esperado | Ok? |
|---|---|---|---|
| 1 | responder tudo certo | "Fim! Você acertou 5 de 5 perguntas." | |
| 2 | responder tudo errado | "Fim! Você acertou 0 de 5 perguntas." e a resposta certa aparece a cada erro | |
| 3 | digitar "x" | "Responda só com a letra a, b ou c." e pergunta de novo | |
| 4 | digitar "B" maiúsculo quando a certa é b | conta como acerto | |
| 5 | anotar as 5 perguntas que saíram | nenhuma repetida | |
| 6 | jogar duas partidas seguidas | a segunda começa com acertos 0 e rodada 0 | |
| 7 | apertar Enter sem digitar nada | pede de novo |
O código completo
As definições desta aula (o roteiro principal e "preparar ordem" estão na Aula 1.10):
defina sortear pergunta
mude [posicao] para (número aleatório entre (1) e (tamanho de [ordem]))
mude [atual] para (item (posicao) de [ordem])
apague (posicao) de [ordem]
defina fazer pergunta
mude [minha_resposta] para ()
repita até que <resposta válida>
pergunte (junte (rodada) com (junte () ) com (junte (item (atual) de [perguntas]) com (junte ( ) com (item (atual) de [alternativas]))))) e espere
mude [minha_resposta] para (resposta)
se <não <resposta válida>> então
diga (Responda só com a letra a, b ou c.) por (2) segundos
fim
fim
defina corrigir
se <(minha_resposta) = (item (atual) de [respostas])> então
adicione (1) a [acertos]
toque o som [Pop]
diga (junte (Certo! ) com (item (atual) de [explicacoes])) por (4) segundos
senão
diga (junte (Não foi dessa vez. A resposta era ) com (junte (item (atual) de [respostas]) com (junte (. ) com (item (atual) de [explicacoes])))) por (5) segundos
fimOnde está escrito resposta válida, monte: <<(minha_resposta) = (a)> ou <<(minha_resposta) = (b)> ou <(minha_resposta) = (c)>>>.
O texto da pergunta fica, por exemplo: "3) Quanto é 7 x 8? a) 54 b) 56 c) 64".
Projeto pronto: ../projetos/quiz-sabidinho/quiz-sabidinho.sb3.
Explicação do código
posicaoé o lugar na listaordem;atualé o número da pergunta. Exemplo: ordem = [1, 2, 5, 7], sorteou posição 3 → atual = 5 → apaga a posição 3 → ordem = [1, 2, 7].minha_respostacomeça vazia para o "repita até que" rodar pelo menos uma vez.- No "corrigir", a mesma posição
atualé usada nas listasrespostaseexplicacoes: é aqui que as listas paralelas mostram seu valor.
Resultado esperado (testado)
O projeto de referência passou nos testes automáticos: acertando tudo dá 5 de 5 com 5 perguntas diferentes; errando tudo (com letras maiúsculas) dá 0 de 5 e mostra a resposta certa; a resposta "x" faz o apresentador pedir de novo.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Pergunta repetida | falta "apague (posicao) de [ordem]" | último bloco do "sortear" |
| Aparece pergunta vazia | listas desalinhadas ou tamanhos diferentes | conferir comprimentos (Aula 1.10) |
| Sempre "Não foi dessa vez" | a lista respostas tem espaço depois da letra ("b ") | editar o item no mostrador |
| Nunca sai do "Responda só com..." | o "ou" está montado errado (um "e" no lugar) | conferir os dois "ou" |
| Erro depois de 10 perguntas | rodadas maiores que o banco | "repita (5)" com 10 perguntas; se aumentar as rodadas, aumente o banco |
Exercício guiado
Rode o teste 3 com o professor no projetor e explique, bloco por bloco, por que o "x" é recusado.
Desafio individual
Mostre uma mensagem final diferente conforme o desempenho: 5 acertos "Sabidinho de ouro!", 3 ou 4 "Muito bem!", menos de 3 "Estude mais e tente de novo!".
Desafio avançado (opcional)
Crie um tempo limite de 10 segundos por pergunta com o cronômetro (em Sensores: "zere o cronômetro" e "cronômetro"). Dica: isso exige um segundo roteiro rodando em paralelo, que transmite uma mensagem quando o tempo acaba.
Critérios de avaliação
Rubrica R1 de AVALIACAO.md, com atenção a:
- Funcionalidade: os 7 testes do plano passam.
- Documentação e testes: plano de testes preenchido e entregue.
- Game design: perguntas revisadas e explicações que ensinam.
Checklist de conclusão
Extensão
Troque o quiz com um colega de outra disciplina e jogue. Anote uma coisa que você aprendeu com o quiz dele.