Conheça seus novos adversários: bots mais espertos e cheios de vida
Agora os bots têm personalidade — eles trocam, constroem, dão lances, vão atrás do líder e até reagem com figurinhas. Cada partida fica diferente.

Em palavras simples
Jogar contra o computador costumava ser meio sem graça: os bots antigos rolavam os dados, compravam onde caíam e pouco mais que isso. Acabou. Seus adversários agora têm personalidade de verdade, e jogam mesmo para vencer.
Cada bot é uma mistura de uma dificuldade (fácil, média ou difícil) e um caráter. Você pode enfrentar um banqueiro cauteloso que acumula dinheiro, um apostador imprudente que adora o Jackpot, um especialista que persegue um grupo de cor, ou um rival rancoroso que se junta contra quem está na frente — ou seja, você.
- Eles enviam propostas de troca — uma propriedade que sobra mais dinheiro pela casa de que precisam — e respondem às suas.
- Eles constroem por valor, colocando casas onde o aluguel rende mais rápido.
- Eles dão lances nos leilões, e um bot difícil pagará a mais para completar um grupo.
- Eles reagem no chat com figurinhas quando uma negociação dói ou cai um aluguel alto.
Como as dificuldades e os caracteres são embaralhados em cada mesa, não há duas partidas que se desenrolem do mesmo jeito. Agora o tabuleiro tem personalidade.
Para os mais técnicos
Cada bot carrega um perfil opcional — um nível de dificuldade cruzado com um de cinco arquétipos (monopolista, especialista, vingativo, arriscado, tartaruga), misturados automaticamente em cada partida em nove estilos de jogo. O perfil é um conjunto de botões de 0–1 que moldam cada decisão: comprar, construir, trocar, dar lances em leilão e pagar a fiança da prisão.
// packages/game-engine/src/bot/profile.ts
export type Difficulty = 'easy' | 'medium' | 'hard';
export type Archetype =
| 'monopolist' // hoards a colour group, denies opponents' sets
| 'specialist' // commits to one or two groups
| 'vindictive' // piles pressure on the net-worth leader
| 'risktaker' // bids high, plays the Jackpot
| 'turtle'; // builds slowly, hoards cash
export interface BotProfile {
difficulty: Difficulty;
archetype: Archetype;
aggression: number; // 0..1 — buy/bid/build appetite
tradeAppetite: number; // 0..1 — how often it proposes deals
}O perfil viaja em PlayerState.botProfile, embutido no engine_state da partida no início — exatamente como o campo de equipe — então não houve nenhuma migração de banco de dados. Um bot fácil sem perfil é, byte a byte, o adversário original, e é por isso que todos os testes anteriores continuam passando.
Um bot difícil pagará acima do preço de tabela para fechar um monopólio, com um teto para que os leilões sempre terminem:
// over-list bid, bounded so the auction always terminates
const maxBid = Math.round(listPrice * (1 + 0.4 * profile.aggression));Tudo permanece determinístico e com fim garantido: as trocas dos bots são estritamente limitadas (uma oferta aberta por vez, frequência com semente, só oferecem o que o destinatário aceitaria), e o simulador passou por testes de estresse com 2–6 jogadores ao longo de 400 execuções aleatórias de fast-check. Testes Engine 282 / daemon 91 no verde.
