Módulo 8 · Aula 8.8 · Dados: Resource e dicionário
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 6 h/a | ⭐⭐⭐ | Godot 4.7 | C2, C3 |
Objetivos de aprendizagem
- Guardar textos num dicionário (
{"chave": "valor"}) e ler pela chave. - Criar um tipo de dado próprio com
class_nameeextends Resource. - Criar e editar arquivos
.tresno Inspetor, sem mexer no código. - Mostrar dinheiro em centavos como "R$ 7,65" com
%de%02d.
Pré-requisitos
Aula 7.2 (lista de estruturas na Feira do Troco). Aula 7.7 (centavos inteiros). Aula 8.7.
Materiais
Godot 4.7; laboratório: dados/fregues.gd, dados/rita.tres, joao.tres, lia.tres, cena fregueses.tscn.
Conceitos
Dicionário. Guarda pares chave → valor. É a "estrutura" do GDevelop (Aula 4.9) em forma de código.
const FALAS := {
"ola": "Bom dia!",
"pedido": "Vou levar %s.",
}
print(FALAS["ola"]) # Bom dia!Resource próprio. Um molde de dados com campos fixos. Cada freguês da Feira vira um arquivo .tres com nome, item, preço, pagamento e retrato. Quem não programa (o professor parceiro do Projeto 4, por exemplo) pode mudar os preços no Inspetor sem abrir o código.
class_name Fregues
extends Resource
@export var nome := ""
@export var preco_centavos := 0class_name Fregues dá um nome ao tipo: depois disso, Fregues aparece como opção ao criar um recurso novo e pode ser usado no código (Array[Fregues]).
Lista tipada. @export var fregueses: Array[Fregues] = [] mostra no Inspetor uma lista onde só entram fregueses.
Dinheiro formatado.
func reais(centavos: int) -> String:
return "R$ %d,%02d" % [floori(centavos / 100.0), centavos % 100]%02d escreve o número com 2 dígitos, completando com zero: 5 vira "05". Bem mais curto do que a conta da Feira no GDevelop (Aula 7.7), que precisava de SubStr.
Exemplos
| Dado | Melhor jeito |
|---|---|
| falas fixas do jogo | dicionário (const) |
| fregueses, inimigos, itens com vários campos | Resource próprio em arquivos .tres |
| pontos da partida | variável |
Tutorial passo a passo
Parte A. Ler o exemplo (60 min)
- Abra
dados/rita.trescom dois cliques: o Inspetor mostra os campos deFregues(captura abaixo). - Abra
fregueses.tscn, selecione a raiz e veja a listaFreguesesno Inspetor com os três arquivos. - Execute a cena. Enter chama o próximo freguês; no fim aparece "Acabou a fila. Até sábado!".
Parte B. Novo freguês sem código (60 min)
- Na aba Arquivos, clique com o botão direito na pasta
dadose crie um recurso novo do tipoFregues(o caminho exato do menu não foi conferido nesta versão). Salve comochico.tres. - Preencha no Inspetor: Seu Chico, rapadura e queijo, 1235, 2000, e arraste um retrato.
- Acrescente o arquivo na lista
Freguesesda cena e execute. O troco aparece como "R$ 7,65"?
Parte C. Dicionário de falas (90 min)
- Acrescente ao
FALASa chave"obrigado"e mostre essa fala junto. - Faça falas diferentes por freguês: acrescente um campo
@export var jeito_de_falar := ""noFreguese use no texto.
Parte D. Testar a formatação (30 min)
- No
_ready, mostre comprinto resultado dereaispara 5, 50, 100, 765 e 1000. Confira cada um.
Imagens
../../../recursos/imagens/godot/captura-godot-recurso-fregues.png
: o arquivo rita.tresaberto no Inspetor.../../../recursos/imagens/godot/laboratorio-tela-fregueses.png
: a cena rodando com a Dona Rita.
Indicação da interface
| Item | Nome na tela |
|---|---|
| campos do Resource | Inspetor, numa seção com o nome do tipo (Fregues) |
abrir um .tres | dois cliques na aba Arquivos |
| salvar o recurso | ícone de disquete no alto do Inspetor |
| lista de fregueses da cena | propriedade Fregueses da raiz da cena |
O código completo
dados/fregues.gd:
class_name Fregues
extends Resource
@export var nome := ""
@export var item := ""
@export var preco_centavos := 0
@export var pago_centavos := 0
@export var retrato: Texture2D
func troco() -> int:
return pago_centavos - preco_centavosscripts/fila_de_fregueses.gd:
extends Control
const FALAS := {
"ola": "Bom dia!",
"pedido": "Vou levar %s.",
"troco": "O troco é %s.",
"fim": "Acabou a fila. Até sábado!",
}
@export var fregueses: Array[Fregues] = []
var vez := 0
@onready var retrato: TextureRect = $Retrato
@onready var fala: Label = $Fala
func _ready() -> void:
mostrar()
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_accept"):
vez += 1
mostrar()
func mostrar() -> void:
if vez >= fregueses.size():
retrato.texture = null
fala.text = FALAS["fim"]
return
var f := fregueses[vez]
retrato.texture = f.retrato
fala.text = "%s: %s\n%s\n%s" % [f.nome, FALAS["ola"], FALAS["pedido"] % f.item,
FALAS["troco"] % reais(f.troco())]
func reais(centavos: int) -> String:
return "R$ %d,%02d" % [floori(centavos / 100.0), centavos % 100]Explicação do código
%spõe um texto no lugar;FALAS["pedido"] % f.itemvira "Vou levar 1 kg de feijão.".troco()mora no próprio Resource: o dado sabe fazer a conta dele.centavos / 100.0(com.0) evita o aviso de divisão de inteiros;flooriarredonda para baixo.- O teste automático confere: três fregueses carregados, troco de 300,
reais(765)= "R$ 7,65",reais(5)= "R$ 0,05", a fala completa e a fala de fim.
Resultado esperado
Novo freguês criado só pelo Inspetor, dicionário de falas ampliado e formatação de dinheiro conferida.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
Fregues não aparece na lista de tipos | falta class_name, ou o script tem erro | conferir a primeira linha e salvar |
| campo novo não aparece no Inspetor | faltou @export | acrescentar @export |
| 5 centavos aparece "R$ 0,5" em vez de "R$ 0,05" | usou %d nos centavos | %02d |
| erro de chave no dicionário | chave escrita diferente | conferir aspas e acentos ("ola" ≠ "olá") |
Exercício guiado
Quanto dá reais(1005)? (Resposta: "R$ 10,05".)
Desafio individual
Refaça a Feira do Troco em Godot só com a parte do diálogo: cinco fregueses em .tres, a fala de cada um e o troco certo.
Desafio avançado (opcional)
Acrescente ao Resource um campo @export_multiline var fala_extra := "" e veja como o Inspetor muda para uma caixa de texto grande.
Critérios de avaliação
- Resource próprio com
class_namee campos@export. - Dados editados no Inspetor, sem mexer no código.
- Formatação de dinheiro correta.
Checklist de conclusão
Extensão
Português: escreva as falas de três fregueses com jeitos de falar diferentes (Aula 7.1) e guarde no Resource.