Conoce a tus nuevos rivales: bots más listos y con más vida
Ahora los bots tienen personalidad: intercambian, construyen, pujan, van a por el líder e incluso reaccionan con pegatinas. Cada partida se siente distinta.

En palabras sencillas
Jugar contra la máquina solía resultar un poco soso: los bots antiguos tiraban, compraban donde caían y poco más. Eso se acabó. Tus rivales ahora tienen personalidad de verdad, y juegan para ganar.
Cada bot se forma a partir de una dificultad (fácil, media o difícil) y un carácter. Puedes enfrentarte a un banquero cauto que acumula dinero, a un jugador temerario al que le encanta el Bote, a un especialista que persigue un grupo de color, o a un rival vengativo que se ensaña con quien va en cabeza: contigo.
- Te envían ofertas de intercambio —una propiedad que les sobra más dinero por la casilla que necesitan— y responden a las tuyas.
- Construyen según el valor, poniendo casas donde el alquiler rinde más rápido.
- Pujan en las subastas, y un bot difícil pagará de más para completar un grupo.
- Reaccionan en el chat con pegatinas cuando un trato escuece o cae un alquiler grande.
Como las dificultades y los caracteres se mezclan en cada mesa, no hay dos partidas que se desarrollen igual. Ahora el tablero tiene personalidad.
Para los más técnicos
Cada bot lleva un perfil opcional: un nivel de dificultad cruzado con uno de cinco arquetipos (monopolista, especialista, vengativo, arriesgado, tortuga), mezclados automáticamente en cada partida en nueve estilos de juego. El perfil es un conjunto de mandos de 0–1 que moldean cada decisión: comprar, construir, intercambiar, pujar en subastas y pagar la fianza de la cárcel.
// 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
}El perfil viaja en PlayerState.botProfile, integrado en el engine_state de la partida al inicio —igual que el campo de equipo—, así que no hubo ninguna migración de base de datos. Un bot fácil sin perfil es, byte a byte, el rival original, y por eso todas las pruebas anteriores siguen pasando.
Un bot difícil pagará por encima del precio de lista para completar un monopolio, con un tope para que las subastas siempre se resuelvan:
// over-list bid, bounded so the auction always terminates
const maxBid = Math.round(listPrice * (1 + 0.4 * profile.aggression));Todo sigue siendo determinista y con final garantizado: los intercambios de los bots están estrictamente acotados (una oferta abierta a la vez, frecuencia con semilla, solo ofrecen lo que el destinatario aceptaría), y el simulador se sometió a pruebas de estrés con 2–6 jugadores a lo largo de 400 ejecuciones aleatorias de fast-check. Pruebas de Engine 282 / daemon 91 en verde.
