← Nesim Apps

Como garantimos que um Mahjong Paciência tenha solução

Por Nesim Razon, desenvolvedor Android independente · 2026-11-10

Um tabuleiro de Mahjong Paciência que não dá para terminar é uma pequena traição. Você passa dez minutos pensando e depois descobre que nada do que fez poderia funcionar. No Tilelings toda distribuição tem solução, e não ficamos torcendo para isso: nós a construímos. Este texto explica o método em linguagem simples, incluindo o ponto em que a garantia termina.

O problema das distribuições aleatórias

O jeito óbvio de montar um tabuleiro é pegar as peças, embaralhar e colocar no desenho. É rápido e é o que muitos jogos simples fazem. O problema é que o Mahjong Paciência é um jogo de bloqueios. As peças ficam umas sobre as outras e umas ao lado das outras, e uma peça só sai quando está livre. Se duas peças idênticas caírem nos lugares errados, por exemplo uma bem em cima da outra, nenhuma poderá ser removida jamais. Uma distribuição aleatória pode conter essas armadilhas sem que ninguém perceba.

Dá para embaralhar e testar se o tabuleiro tem solução, e embaralhar de novo se não tiver. Funciona, mas testar é um problema de busca que pode ser lento no celular e não dá nenhum controle sobre o quanto o resultado será difícil. Escolhemos outro caminho.

A ideia: jogar antes de as peças existirem

Em vez de colocar as imagens primeiro e conferir depois, começamos com um desenho sem imagens, só com posições vazias. Depois jogamos nele uma partida de paciência de mentira. A cada passo olhamos quais posições estão livres, escolhemos duas ao acaso e as tiramos do tabuleiro. Anotamos as duas posições. Repetimos até o desenho ficar vazio.

A lista que anotamos é uma sequência completa de jogadas legais: cada par estava livre no momento em que foi retirado. Agora vem a parte esperta. Distribuímos as imagens seguindo essa lista. O primeiro par recebe duas peças com a mesma imagem, o segundo recebe outro par igual, e assim por diante. Quando você joga o tabuleiro pronto, a mesma sequência de jogadas está disponível para você, porque cada par de posições estava livre na sua vez e cada par agora combina. A solução existe por construção.

O que acontece num beco sem saída

Escolher pares ao acaso pode nos encurralar. Se restam muitas peças mas só uma posição livre, a partida de mentira não pode continuar. Por isso o construtor segue uma regra: depois de tirar um par, devem sobrar pelo menos duas posições livres, a menos que o tabuleiro esteja vazio. Se a regra falha, o construtor volta um passo e tenta outro par. Isso se chama busca com retrocesso.

Para ficar rápido no celular, a busca tem um limite de alguns milhares de passos. Se chegar ao limite, descarta a tentativa e recomeça com outra escolha aleatória. Na prática, uma boa sequência é encontrada logo e o jogador nunca espera.

Um exemplo minúsculo

Imagine um desenho de apenas seis posições em uma fileira, sem nada empilhado. Uma peça de uma fileira está livre quando o lado esquerdo ou o direito está aberto, então no início só as duas posições das pontas estão livres. Tiramos as duas pontas e as anotamos como o passo um. Agora as duas posições seguintes são as novas pontas, então as tiramos como o passo dois, e as duas últimas posições formam o passo três.

Depois distribuímos as imagens seguindo esses passos. O passo um recebe um sol e um sol, o passo dois uma lua e uma lua, o passo três uma estrela e uma estrela. A fileira pronta diz sol, lua, estrela, estrela, lua, sol. Ao jogar, você tira os sóis, depois as luas, depois as estrelas: a mesma ordem que construímos. Um embaralhamento aleatório das mesmas seis peças poderia dar uma fileira como sol, estrela, lua, sol, estrela, lua, em que os sóis nunca ficam livres ao mesmo tempo. Os desenhos reais têm torres e muitas fileiras, então as armadilhas são bem menos óbvias, mas a ideia é exatamente a mesma.

Distribuir as imagens

A maioria das imagens do jogo aparece quatro vezes. As flores são quatro peças diferentes que combinam entre si, e as estações também. Ao atribuir as peças, nós as agrupamos em pacotes: cada imagem comum contribui com dois pares, que juntos formam as suas quatro peças. Os pacotes são embaralhados e distribuídos pelos passos da solução.

Nas fases difíceis há uma reviravolta extra. Os dois pares da mesma imagem são espalhados entre a primeira metade e a segunda metade da solução. Assim, as peças idênticas tendem a ficar livres em momentos diferentes e você não consegue simplesmente pegar combinações que estejam disponíveis juntas. O tabuleiro fica mais apertado e exige mais planejamento.

Escolher a dificuldade

Para cada fase montamos várias distribuições candidatas, seis na versão atual. Depois medimos cada uma reproduzindo a sua solução e contando, a cada passo, quantos pares combinando estavam disponíveis para o jogador. A média é um bom indicador de dificuldade. Média alta significa muitas opções e um tabuleiro tolerante. Média baixa significa poucas opções e um tabuleiro exigente.

O Fácil pega o candidato com mais opções, o Difícil o que tem menos e o Normal o do meio. Os três têm solução. A diferença é de quantas maneiras você pode errar.

A mesma semente, o mesmo tabuleiro

As escolhas aleatórias vêm de um gerador com semente, então uma semente dada sempre produz o mesmo tabuleiro. É por isso que o desafio diário pode ser idêntico para todos e uma partida pela metade pode ser restaurada: o jogo guarda apenas as suas jogadas e a semente, e reconstrói o tabuleiro repetindo-as.

Embaralhar, dicas e o limite honesto

A garantia diz respeito à distribuição com que você começa. Ela não diz que qualquer sequência de jogadas termina em vitória. Um jogador ainda pode pegar um par que enterra as duas últimas cópias de uma peça, e a partir daí o tabuleiro fica impossível. Isso faz parte do quebra-cabeça.

Para esses momentos o jogo tem ajudas. A Dica usa um solucionador de verdade. Ele busca na posição atual, tenta primeiro as jogadas que liberam mais peças, lembra as posições que já provou serem sem saída e tem um limite para o número de posições que vai examinar. Se achar uma solução completa, a dica é a primeira jogada dela. Se bater no limite, recorre à jogada que libera mais peças. O Embaralhar executa de novo o mesmo processo de construção de trás para frente, agora sobre as posições restantes e com as imagens restantes agrupadas em pares. O tabuleiro embaralhado volta a ter solução. Muito raramente o problema são as próprias posições restantes, por exemplo quando duas peças ficam empilhadas. Aí nenhum embaralhamento ajuda e o jogo avisa, para que você possa desfazer ou recomeçar.

O modo Conectar usa o mesmo truque

O Conectar, o modo em que você liga peças com um caminho de no máximo duas curvas, é montado do mesmo jeito. Começamos com uma grade cheia, escolhemos repetidamente duas peças que possam ser conectadas naquele momento, as removemos, aplicamos a regra de deslizamento daquela fase e anotamos o par. As imagens são distribuídas seguindo a lista anotada. O tabuleiro tem solução, e o embaralhado também.

Por que nos importamos

Dificuldade honesta importa. Quando um quebra-cabeça é difícil porque exige planejamento, parece justo e você quer tentar de novo. Quando é difícil porque a distribuição estava quebrada, parece um truque. Montar os tabuleiros de trás para frente nos permite prometer o primeiro tipo. Se um dia você encontrar um tabuleiro que parece impossível, use Desfazer, peça uma dica ou embaralhe. Desde o início sempre há um caminho.

Perguntas frequentes

Toda distribuição de Mahjong Paciência no Tilelings tem solução?

Sim. Cada distribuição é montada a partir de uma sequência de jogadas legais, então ao começar existe pelo menos uma solução.

Então como posso travar?

Porque algumas sequências das suas próprias jogadas podem enterrar peças que combinam. A garantia cobre a distribuição inicial, não todos os caminhos.

Como o Embaralhar continua solucionável?

Ele reconstrói as posições restantes com o mesmo método de trás para frente e com as imagens restantes.

As dicas estão sempre certas?

Uma dica vem de uma busca na posição atual. Se a busca termina, ela segue uma solução real. Se não, sugere a jogada que libera mais peças.

Mais do blog