



Três escolhas que definiram o app
Motor separado da interface
Truco tem regra que muda de mesa para mesa, e uma variante autoral muda mais ainda. O motor do jogo é Swift puro, com zero SwiftUI: força das cartas, resolução de rodada, escada do truco e estado da partida vivem fora da interface, que é só uma casca. Isso permitiu provar as regras antes de existir tela — a suíte passou de 60 testes, incluindo os casos que só aparecem em partida real, como a alternância do direito de aumentar o truco. Regra de jogo autoral não tem documentação para consultar: ou está testada, ou é chute.
Bot heurístico, não busca em árvore
O adversário é um bot heurístico que roda inteiramente no dispositivo: avalia a força da mão, a posição na rodada e a carta em reserva, e decide por regras explícitas — inclusive quando blefar. A alternativa seria busca em árvore ou um modelo em runtime. Busca custa caro e joga mal em jogo de informação incompleta; modelo em runtime custa dinheiro por partida e transforma um jogo offline em dependência de rede. O bot ganha 94% contra jogadas aleatórias e fica perto de 50% contra si mesmo — forte o bastante para ser adversário, calibrado o bastante para não ser frustrante.
Determinismo por semente
Todo o acaso do jogo — embaralhar, a vira, quem começa — passa por um gerador injetável com semente. A partida é reproduzível: mesma semente, mesma partida. Foi isso que tornou a suíte de testes possível e que permitiu rodar o bot contra ele mesmo em milhares de partidas antes de qualquer tela existir. E é o que deixa multijogador viável depois sem reescrever o motor: se os dois lados derivam do mesmo estado, não é preciso sincronizar o jogo inteiro pela rede.
Com o que foi feito
Quer algo assim?
Me conte o que você tem em mente. Respondo em um dia útil.