Voici vos nouveaux adversaires : des bots plus malins et plus vivants
Les bots ont désormais une personnalité — ils échangent, construisent, enchérissent, ciblent le leader et réagissent même avec des stickers. Chaque partie est différente.

En clair
Jouer contre l’ordinateur manquait un peu de relief : les anciens bots lançaient les dés, achetaient la case où ils tombaient, et pas grand-chose de plus. C’est fini. Vos adversaires ont maintenant une vraie personnalité, et ils jouent vraiment pour gagner.
Chaque bot est un mélange d’une difficulté (facile, moyenne ou difficile) et d’un caractère. Vous pourriez affronter un banquier prudent qui amasse de l’argent, un joueur imprudent qui adore le Jackpot, un spécialiste qui poursuit un seul groupe de couleur, ou un rival vindicatif qui s’acharne sur celui qui mène — c’est-à-dire vous.
- Ils vous envoient des propositions d’échange — une propriété en trop plus de l’argent contre la case qu’il leur faut — et répondent aux vôtres.
- Ils construisent selon la valeur, en posant les maisons là où le loyer rapporte le plus vite.
- Ils enchérissent aux enchères, et un bot difficile surpaiera pour compléter un groupe.
- Ils réagissent dans le chat avec des stickers quand un marché pique ou qu’un gros loyer tombe.
Comme les difficultés et les caractères sont mélangés à chaque table, deux parties ne se déroulent jamais de la même manière. Le plateau a maintenant une personnalité.
Pour les curieux techniques
Chaque bot porte un profil facultatif — un palier de difficulté croisé avec l’un des cinq archétypes (monopoliste, spécialiste, vindicatif, casse-cou, tortue), mélangés automatiquement à chaque partie en neuf styles de jeu. Le profil est un ensemble de curseurs 0–1 qui façonnent chaque décision : l’achat, la construction, l’échange, l’enchère et la caution de prison.
// 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
}Le profil voyage dans PlayerState.botProfile, intégré à l’engine_state de la partie au démarrage — exactement comme le champ d’équipe — il n’y a donc eu aucune migration de base de données. Un bot facile sans profil est, octet pour octet, l’adversaire d’origine, et c’est pourquoi tous les tests antérieurs passent encore.
Un bot difficile paiera au-dessus du prix affiché pour finir un monopole, plafonné pour que les enchères se résolvent toujours :
// over-list bid, bounded so the auction always terminates
const maxBid = Math.round(listPrice * (1 + 0.4 * profile.aggression));Tout reste déterministe et garanti de se terminer : les échanges des bots sont strictement encadrés (une seule offre ouverte à la fois, fréquence semée, ils ne proposent que ce que le destinataire accepterait), et le simulateur a été soumis à un test de charge sur 2–6 joueurs sur 400 exécutions aléatoires de fast-check. Tests Engine 282 / daemon 91 au vert.
