O que é o presente frozen e como ele funciona na prática
Presente frozen é uma mecânica ou sistema que aparece em alguns jogos e frameworks que lidam com estados temporários. A ideia básica é "congelar" algo no tempo — seja um item, um estado de jogo, uma resposta de API — para que ele não se mova, não mude e possa ser recuperado depois. Não é nenhum conceito novo ou revolucionário. É basicamente um freeze frame com um handler por cima.
Presente frozen: como aplicar
Vou explicar do jeito que eu uso, que não é a teoria de livro. Na prática, você pega um objeto ou dado, cria uma snapshot dele em um ponto específico, e trava acesso de escrita até que alguma condição seja atendida. Isso é comum quando você precisa garantir que um item coletado no jogo não seja perdido durante transições de cena, por exemplo. Ou quando um estado de sessão precisa persistir mesmo se o servidor reiniciar.
O fluxo que eu sigo é esse: Passo 1: Identifique o objeto que precisa ser congelado. No meu caso, costumava ser um inventário de itens num RPG simples que eu estava desenvolvendo.
Passo 2: Crie uma cópia serializável. Isso significa transformar o estado atual em algo que pode ser salvo — JSON, um arquivo binário, ou uma entrada num banco de dados leve. Eu geralmente prefiro serializar para um dicionário Python com valores básicos, sem referências circulares. Passo 3: Ative o modo freeze. Isso é normalmente uma flag ou um wrapper que bloqueia operações de mutação. Se estiver usando um framework, verifique se ele tem um método nativo. Se não tiver, crie uma classe simples que delega leituras mas dispara erro em escritas.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Passo 4: Programe o descongelamento. Defina claramente quando e como o estado volta ao normal. Isso geralmente é acionado por um evento, uma condição de tempo, ou uma ação do jogador. Aqui vai um exemplo real que eu enfrentei: estava trabalhando num jogo onde o jogador podia "capturar" um momento específico do mundo. O problema era que, ao salvar e carregar, alguns objetos congelados perdiam referências de colisão e o jogador ficava preso dentro de paredes. A solução foi simples, mas só depois de três horas debugando: antes de serializar, eu precisa desconectar o objeto do sistema de física do jogo. Depois de desserializar, reconnectar explicitamente com uma inicialização de colisão.
Eu documentei esse detalhe porque raramente aparece em tutoriais formais. O freezing em si é fácil. O problema é o que acontece com as dependências do objeto que você está congelando. Outro ponto que pouca gente menciona: presente frozen não resolve problemas de concorrência sozinho. Se dois processos tentarem descongelar o mesmo estado ao mesmo tempo, você vai ter race conditions. Use locks ou uma fila serializada de operações de thaw.
Se o seu projeto é mais simples e não precisa de persistência complexa, considere apenas usar variáveis de estado com validação ao invés de um sistema completo de frozen. Às vezes o presente frozen é overkill — e você gasta tempo demais implementando algo que um boolean e uma verificação resolvem. Não existe download único ou pacote oficial chamado "presente frozen", porque não é uma biblioteca pronta. É um padrão de projeto. Mas se você quiser implementar rápido, a estrutura básica em Python seria algo como uma classe com um método _freeze() que faz deep copy do estado e um contexto manager que bloqueia mutações.
O timing é o que define se isso funciona ou falha. Congelar muito cedo e você perde informação. Congelar muito tarde e o estado já mudou. Teste com logs de antes e depois em cada transição para ter certeza do que está sendo salvo.