Dez jogos, um motor
Adicionar uma nova variante de paciência aqui custa um objeto de configuração. Tudo o mais — arrastar, desfazer, dar dicas, marcar, salvar — já existe.
Dez jogos é nove jogos demais
Klondike, Spider, FreeCell, Yukon, Russo, Pirâmide, TriPeaks, Golfe, Quarenta Ladrões e Canfield são, do ponto de vista de um jogador, dez jogos diferentes. Do ponto de vista de código, eles são dez variações em um conjunto notavelmente pequeno de ideias: pilhas de cartas, uma regra sobre o que pode ser colocado onde, uma regra sobre quando o jogo é ganho, e um layout.
A maneira ingênua de construir um site como este é escrever dez jogos. Isso te dá dez implementações separadas de arrastar, dez sistemas de desfazer, dez bugs sutilmente diferentes, e um imposto permanente sobre a mudança de qualquer coisa. Nós escrevemos um motor em vez disso.
O que o motor possui
Tudo o que não é uma regra pertence ao motor partilhado. Isso acaba por ser quase todo o trabalho.
| O motor manuseia | Por que é compartilhado |
|---|---|
| Disposição e dimensionamento | Cada jogo é um conjunto de posições de pilha em um tabuleiro que deve caber em qualquer tela |
| Arrastar & soltar, tocar- tocar | Interação idêntica em todos os dez jogos; os jogadores nunca devem reaprender |
| Desfazer | Fotografar todo o estado, restaurá- lo. Regras- agnósticos por design |
| Temporizador, pontuação, contagem de movimentos | Mesmo HUD em todos os lugares, com regras de pontuação por jogo passado em |
| Dica | O motor pergunta ao jogo "o que é uma boa jogada aqui?" e anima a resposta |
| Salvando e retomando | Um serializador para cada jogo |
| Detecção e celebração de vitórias | O jogo fornece o teste; o motor fornece o confete |
O que um jogo realmente é
Um jogo, nesta base de códigos, é um objeto que responde a um punhado de perguntas. Quantos baralhos? Para onde vão as pilhas? Como é que o acordo inicial está definido? Dado uma carta e uma pilha de destino, é que movimento legal? O jogo é ganho? O que é uma dica sensata?
Yukon e Russian Solitaire são a ilustração mais clara. Eles são o mesmo jogo, exceto que Yukon constrói para baixo em cores alternadas e russo constrói para baixo no mesmo naipe. Eles compartilham um arquivo, e a diferença entre eles é um único booleano passado para a mesma função de fábrica.
Sem framework, sem passo de compilação
Não há nenhum React aqui, nenhum empacotador, nenhum transpiler e nenhum módulo_ nó as páginas são HTML estático, os estilos são duas folhas de estilo, e a lógica é simples módulos JavaScript carregados diretamente pelo navegador.
As próprias páginas são geradas — páginas de jogos, guias e este blog todos saem de pequenos scripts de Node que lêem um arquivo de conteúdo e escrevem HTML. Isso nos dá o verdadeiro benefício de um sistema de construção, que é que o mobiliário de página compartilhada não pode sair de sincronia, sem o custo, que é que nada funciona até que a cadeia de ferramentas faça.
Até os efeitos sonoros evitam o padrão. Cada flip, place, chime e buzz é sintetizado ao vivo com a API de áudio da Web em vez de carregado como um arquivo de áudio, então não há nada para baixar e nada para licenciar.
Quanto custa carregar?
O resultado prático é uma página de jogo que é algumas dezenas de kilobytes de marcação, estilos e script, além das imagens de cartas, que são pré-carregadas em páginas de jogo, de modo que o primeiro flip nunca aparece em branco, e em cache agressivamente porque um baralho de cartas não muda.
Sem rastreadores, sem scripts de anúncios, sem parede de consentimento na frente do tabuleiro. Isso é, em parte, uma decisão de valores e em parte um desempenho: o script de terceiros mais rápido é o que não está lá.
A única coisa que está na frente de tudo isso é o Cloudflare, que armazena o site e filtra o tráfego malicioso. política de privacidade soletra o que vê.
Onde o motor pára
O site agora tem doze jogos, e dez deles funcionam no motor descrito acima. Corações e Espadas, adicionado em agosto de 2026, não, ea razão vale a pena dizer claramente: eles não são jogos de paciência.
Tudo acima assume um jogador contra um baralho. As colunas que você arrasta cartas entre, um estado de tabuleiro, um teste para se o jogo é ganho. Corações e Espadas são jogos de pegação de truques para quatro. As mãos são distribuídas, as cartas são passadas ou as ofertas são feitas, quatro lugares jogam por sua vez, os truques são ganhos, e as pontuações acumulam-se ao longo de uma rodada até que alguém atinja um alvo. Não há pilha para largar uma carta e nenhuma posição vencedora. Forçando- se que através de um objeto de configuração projetado para tabuleiro teria produzido uma versão pior de ambos os jogos e um motor pior.
Então eles compartilham o que é genuinamente compartilhado: o baralho, a arte de cartas, os efeitos sonoros, o feltro, o cabeçalho, o hábito de salvar e retomar e o mobiliário da página. Por baixo eles têm seu próprio módulo de mesa pequeno, que sabe sobre assentos, uma ordem de turno, um truque no meio e adversários de computador que pensam sobre qual carta jogar em vez de escolher um legal ao acaso. Dois motores, doze jogos. A regra é a mesma regra que produziu o primeiro motor: compartilhar o que é realmente o mesmo, e parar lá.
Perguntas mais frequentes
Este site funciona offline?
Parcialmente. As páginas são estáticas e cache bem, e cada jogo salva seu estado localmente, então uma conexão flácida não perderá sua mão. Não há instalação offline completa.
Você rastreia jogadores?
As estatísticas de estado de jogo e de vida útil são armazenadas no seu próprio navegador usando o localStorage. Eles não são enviados para lugar algum, e limpar os dados do seu navegador os limpa.
Você vai adicionar mais jogos?
Sim. Para variantes paciência o motor é projetado de modo que um novo jogo é um objeto de configuração em vez de uma nova base de código, que é o que torna a adição deles realista. Jogos que não são paciência em tudo, como Hearts e Spades, obter o seu próprio módulo em vez de ser forçado através dele.