Solitário-Online
Notícias do Site

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 manuseiaPor que é compartilhado
Disposição e dimensionamentoCada jogo é um conjunto de posições de pilha em um tabuleiro que deve caber em qualquer tela
Arrastar & soltar, tocar- tocarInteração idêntica em todos os dez jogos; os jogadores nunca devem reaprender
DesfazerFotografar todo o estado, restaurá- lo. Regras- agnósticos por design
Temporizador, pontuação, contagem de movimentosMesmo HUD em todos os lugares, com regras de pontuação por jogo passado em
DicaO motor pergunta ao jogo "o que é uma boa jogada aqui?" e anima a resposta
Salvando e retomandoUm serializador para cada jogo
Detecção e celebração de vitóriasO 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.

Adicionar um décimo primeiro jogo é um objeto de configuração e um item de página. O motor já sabe como jogá-lo.

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.