Como dar o mesmo quebra-cabeça diário a todos sem servidor
Por Nesim Razon, desenvolvedor Android independente · 2026-11-10
Muitos jogos de quebra-cabeça oferecem um desafio diário idêntico para todos os jogadores, para que você compare sua pontuação com a dos amigos. Parece que seria preciso um servidor para distribuir o quebra-cabeça. Não é preciso. Aqui explicamos como fazemos nos nossos jogos e quais são os limites.
A ideia: a data é o quebra-cabeça
Um computador não consegue produzir sozinho números realmente aleatórios. Um gerador de números aleatórios é uma receita: você dá a ele um número inicial, chamado semente, e ele produz uma sequência longa que parece aleatória. O ponto importante é que a mesma semente sempre produz exatamente a mesma sequência.
Esse é todo o truque. Se cada celular transforma a data de hoje em um número e o usa como semente, todos os celulares montam o mesmo embaralhamento, as mesmas peças ou a mesma disposição. Ninguém precisa enviar nada. A data funciona como um segredo compartilhado que todos já têm.
Na prática, os jogos não usam a data sozinha. Eles a misturam com mais alguns números, como o tipo de quebra-cabeça ou o tamanho do tabuleiro, para que quebra-cabeças diferentes no mesmo dia não sejam cópias uns dos outros.
O que nossos jogos realmente fazem
O Cubbles transforma a data local em um único número no formato ano, mês, dia, por exemplo 20261110, e o usa como semente das peças. Cada conjunto de três peças sai de um gerador que parte do número do dia, do número do conjunto e de um contador de tentativas. Assim, o primeiro conjunto do dia é sempre o mesmo, o segundo também, e assim por diante.
O Cardles usa o número do dia como semente das distribuições. O código que embaralha é um pequeno gerador aleatório próprio e portátil, escrito para que a mesma semente dê a mesma distribuição em qualquer aparelho e versão do Android. O tipo de jogo também gira com o calendário, então o desafio diário percorre quatro paciências diferentes.
O Logiclings monta todo dia um pacote de três quebra-cabeças. A semente combina o número do dia com o tipo e o tamanho do quebra-cabeça, e o tipo gira entre as cinco variedades para que cada uma volte com regularidade. O Pentolings escolhe o quebra-cabeça diário de encaixe em um grupo fixo de fases médias pelo número do dia, e a rodada diária de blocos que caem usa uma semente derivada do dia.
Por que a aleatoriedade determinística basta
Determinístico quer dizer que o resultado depende apenas das entradas. Um embaralhamento que parte da mesma semente e segue os mesmos passos não pode sair diferente. Enquanto o código que monta o quebra-cabeça for idêntico em todos os celulares, o quebra-cabeça também será.
Isso mostra também que um bom quebra-cabeça diário depende mais do construtor do que da entrega. No Cardles, por exemplo, uma distribuição não é aceita às cegas. Algumas distribuições são impossíveis de vencer, então o jogo verifica a distribuição do dia e, se ela estiver travada ou não puder ser vencida, tenta a próxima semente próxima em uma ordem fixa. Todos os celulares seguem a mesma ordem, então todos chegam à mesma distribuição.
O Cubbles faz algo parecido. As três peças precisam poder ser colocadas juntas, então o jogo faz até quarenta tentativas com semente e usa a primeira que funciona. Já vamos ver o que isso significa para a justiça.
Fusos horários: a meia-noite de quem?
Sem servidor, não existe um relógio único que decida quando começa um novo dia. Nossos jogos usam a data do seu próprio celular. Quando já é amanhã em Sydney, um jogador em Los Angeles ainda está no quebra-cabeça de hoje. Os dois estão certos segundo o próprio calendário.
Para um jogador individual, é a escolha mais amigável. O quebra-cabeça novo aparece na sua meia-noite e a sua sequência acompanha os seus dias. O custo é que uma comparação diária global fica um pouco difusa: duas pessoas podem estar jogando dias diferentes ao mesmo tempo.
A sequência é calculada do mesmo jeito. Ela conta dias locais consecutivos e o jogo é tolerante: se você ainda não jogou hoje, o dia de ontem mantém a sequência viva até o dia acabar.
O mesmo quebra-cabeça, quase sempre
No sentido mais estrito, um quebra-cabeça com semente só é idêntico se cada passo depender da semente e de mais nada. O Cubbles é um exemplo honesto de que nem sempre é assim. A verificação de que cada conjunto de peças pode ser colocado depende do estado do seu tabuleiro. Se uma tentativa não cabe no seu tabuleiro, o jogo passa para a próxima, então dois jogadores podem ver, de vez em quando, conjuntos de peças diferentes. Na maior parte das vezes a primeira tentativa funciona e todos veem as mesmas peças, por isso descrevemos o jogo diário como igual para quase todos, e não para todos.
Há outra pequena ressalva para quebra-cabeças escolhidos de uma lista. Se uma atualização muda a lista de fases, a escolha de um dia específico pode mudar. Jogadores em versões diferentes podem ver quebra-cabeças diferentes por alguns dias.
São detalhes que vale decidir de propósito. Ou o quebra-cabeça não depende de nada além da semente, ou se aceita uma pequena diferença e se diz isso com clareza.
Trapaça, relógios e o que custa não ter servidor
O preço de abrir mão do servidor é a confiança. O jogo acredita na data do seu celular. Se você mudar o relógio, poderá abrir o quebra-cabeça de outro dia. Em um jogo feito para se divertir, em que as pontuações são compartilhadas como desafio entre amigos, achamos uma troca aceitável. Um servidor que verificasse cada pontuação exigiria contas, armazenamento e cuidado com os dados das pessoas, e seria mais uma coisa que pode quebrar.
As pontuações que vão para um ranking são informadas pelo aplicativo. Uma pessoa determinada pode enviar um número que o jogo não conquistou, e o aplicativo não consegue impedir isso por completo. Por isso tratamos os rankings como um jogo entre amigos, e não como uma competição com prêmios.
Se você for criar um, decida logo do que o quebra-cabeça diário nunca deve depender. Deixe-o depender só da semente, teste se dois aparelhos produzem o mesmo resultado e mantenha congelada a regra que monta o quebra-cabeça. Se precisar mudar o construtor, faça isso com uma nova versão do desafio diário, e não em silêncio, ou o quebra-cabeça de ontem deixará de coincidir.
Perguntas frequentes
Um desafio diário precisa de conexão com a internet?
Nos nossos jogos, não. O quebra-cabeça é montado no seu celular a partir da data, então funciona offline.
Meu amigo em outro país recebe hoje o mesmo quebra-cabeça?
Normalmente sim, mas o dia novo começa na meia-noite de cada jogador, então alguém distante pode estar um dia à frente ou atrás.
Dá para trapacear mudando o relógio do celular?
Dá para abrir o quebra-cabeça de outro dia. Sem servidor, o jogo confia na data do celular, por isso vemos o desafio diário como uma disputa amigável.
O que é uma semente?
É o número inicial de um gerador de números aleatórios. A mesma semente sempre dá a mesma sequência, e assim aparelhos diferentes montam o mesmo quebra-cabeça.
Mais do blog
- Como centenas de fases de quebra-cabeça são geradas e verificadas
Como garantimos que um Mahjong Paciência tenha solução
História do Mahjong Paciência e a diferença para o Mahjong- Jogo da velha: história de um jogo resolvido e suas variantes
- Magnitude e intensidade de um terremoto: qual é a diferença?
- Terremoto: o que fazer antes, durante e depois (guia AFAD)