Módulo 4 · Aula 4.9 · Listas: guardar os tempos de cada vitória
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 6 h/a | ⭐⭐⭐ | GDevelop 5 (gdevelop.io) | C2 |
Objetivos de aprendizagem
- Criar uma variável do tipo array (lista).
- Adicionar um valor no fim da lista.
- Ler o tamanho da lista e o último valor.
- Conhecer as variáveis estruturadas (com campos dentro).
Pré-requisitos
Aulas 3.5 (variáveis) e 3.9 (cenas e variáveis globais).
Materiais
Computador com o GDevelop.
Conceitos
Array (lista). Uma variável que guarda vários valores em fila, numerados a partir de 0. A Trilha guarda o tempo de cada vitória em Tempos: [48, 41, 39]. Tempos[0] é 48, Tempos[2] é 39.
Global. Tempos é variável global para sobreviver à troca de cena (Jogo → Fim → Jogo). Ela só some quando o jogo é fechado; por isso a tela final diz "Vitórias nesta sessão".
Adicionar valor à variável de array. Ação que põe um número no fim da lista. A Trilha guarda round(TimerElapsedTime("Fase")): o tempo da fase em segundos inteiros.
Tamanho. VariableChildCount(Tempos) diz quantos itens há. O último está na posição tamanho − 1 (porque começa em 0): Tempos[VariableChildCount(Tempos) - 1].
Estrutura. Outro tipo de variável, com campos nomeados: Recorde.Tempo, Recorde.Castanhas. Lista é "vários do mesmo"; estrutura é "uma coisa com várias partes". As duas podem ser combinadas: uma lista de estruturas.
Exemplos
| Dado | Tipo |
|---|---|
| tempos de cada vitória | array de números |
| itens da mochila | array de textos |
| ficha do jogador (nome, nível, vidas) | estrutura |
| ranking (nome e pontos de cada um) | array de estruturas |
Tutorial passo a passo
Parte A. A lista (40 min)
- Gerenciador do projeto → Variáveis globais → nova variável
Tempos, tipo Array, sem itens. - Também globais:
Resultado(texto) eUltimasCastanhas(número).
Parte B. Guardar o tempo (40 min)
- No No começo da cena de
Jogo, reinicie o temporizador"Fase". - No evento da porteira:
Resultado="venceu";UltimasCastanhas=Castanhas; Adicionar valor à variável de arrayTemposcomround(TimerElapsedTime("Fase")); Trocar a cena para"Fim". - No evento de
Vidas≤ 0:Resultado="perdeu";UltimasCastanhas=Castanhas; trocar para"Fim"(sem guardar tempo).
Parte C. Mostrar (60 min)
- Na cena
Fim, o textoMensagemquando venceu:"Você chegou na porteira!" + NewLine() + "Castanhas: " + ToString(UltimasCastanhas) + NewLine() + "Tempo: " + ToString(Tempos[VariableChildCount(Tempos) - 1]) + " s" + NewLine() + "Vitórias nesta sessão: " + ToString(VariableChildCount(Tempos)) - Visualizar. Vença duas vezes seguidas e confira "Vitórias nesta sessão: 2".
Imagens
- Captura real, grupo "Placar e fim" com a ação de adicionar à lista:
recursos/imagens/gdevelop/captura-trilha-eventos-5.png
.
Indicação da interface
| Item | Onde fica |
|---|---|
| Variáveis globais | gerenciador do projeto |
| Tipo Array | menu de tipo ao lado do nome da variável |
| Ação de adicionar valor à lista | ações de variáveis (pesquisar "matriz" ou "array"); na folha aparece "Adiciona o valor ... à variável de matriz" |
O código completo
Comentário: Chegou na porteira: venceu. Guarda o tempo numa lista (array) de tempos.
Jogador está em colisão com Porteira → Alterar a variável Resultado: definir como "venceu"
Alterar a variável UltimasCastanhas: definir como Castanhas
Adiciona o valor round(TimerElapsedTime("Fase")) à variável de matriz Tempos
Alterar para a cena "Fim"
A variável Vidas ≤ 0 → Alterar a variável Resultado: definir como "perdeu"
Alterar a variável UltimasCastanhas: definir como Castanhas
Alterar para a cena "Fim"
Cena Fim:
A variável Resultado = "venceu" → Alterar o texto de Mensagem: "Você chegou na porteira!" ...
"Tempo: " + ToString(Tempos[VariableChildCount(Tempos) - 1]) + " s" ...
"Vitórias nesta sessão: " + ToString(VariableChildCount(Tempos))
A variável Resultado = "perdeu" → Alterar o texto de Mensagem: "As vidas acabaram." ...(Na folha, o GDevelop em português chama o array de "variável de matriz". Os textos da cena Fim estão resumidos.)
Explicação do código
- A derrota não guarda tempo, então o tamanho da lista conta só vitórias.
UltimasCastanhasexiste porqueCastanhasé variável da cenaJogoe some ao trocar de cena.
Resultado esperado (testado)
Teste automático: ao chegar na porteira, Tempos passou a ter 1 item e a tela final mostrou castanhas, "Tempo: N s" e "Vitórias nesta sessão: 1"; numa derrota em seguida, a lista continuou com 1 item e a mensagem começou com "As vidas acabaram".
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| A lista volta a zero a cada partida | Tempos criada como variável de cena | criar em Variáveis globais |
| Mostra 0 no tempo | leu Tempos[VariableChildCount(Tempos)] (passou do fim) | subtrair 1 |
| "Castanhas: 0" na tela final | usou Castanhas na cena Fim | usar UltimasCastanhas |
| Tempo com muitas casas decimais | faltou round | round(TimerElapsedTime("Fase")) |
Exercício guiado
Tempos = [52, 47, 44, 50]. Quanto valem VariableChildCount(Tempos), Tempos[0] e o último? (Resposta: 4, 52 e 50.)
Desafio individual
Mostre na tela final o melhor tempo da sessão. Dica: guarde também uma variável global Recorde e atualize quando o tempo novo for menor.
Desafio avançado (opcional)
Mostre os três últimos tempos, um por linha, usando Tempos[VariableChildCount(Tempos) - 2] e - 3 com cuidado para não ler posições que não existem.
Critérios de avaliação
- Lista global recebendo um valor por vitória.
- Tela final lendo o último valor e o tamanho.
Checklist de conclusão
Extensão
Anote o tempo de 5 colegas na Trilha. Calcule a média e a mediana. Qual representa melhor a turma?