Kenalan dengan lawan barumu: bot yang lebih cerdas dan hidup
Kini bot punya kepribadian — mereka bertukar, membangun, menawar, mengincar pemimpin, bahkan bereaksi dengan stiker. Setiap permainan terasa berbeda.

Dengan bahasa sederhana
Dulu bermain melawan komputer terasa agak hambar: bot lama hanya melempar dadu, membeli petak tempat mereka mendarat, dan tak banyak lagi. Sekarang tidak begitu. Lawan-lawanmu kini punya kepribadian sungguhan, dan mereka benar-benar bermain untuk menang.
Setiap bot dipadukan dari sebuah tingkat kesulitan (mudah, sedang, atau sulit) dan sebuah karakter. Kamu bisa berhadapan dengan bankir berhati-hati yang menimbun uang, penjudi nekat yang gemar Jackpot, spesialis yang mengejar satu grup warna, atau lawan pendendam yang keroyokan terhadap siapa pun yang memimpin — yaitu kamu.
- Mereka mengirimimu tawaran pertukaran — properti lebih ditambah uang demi petak yang mereka butuhkan — dan menjawab tawaranmu.
- Mereka membangun berdasarkan nilai, menaruh rumah di tempat sewa paling cepat membuahkan hasil.
- Mereka menawar dalam lelang, dan bot sulit akan membayar lebih demi melengkapi satu grup.
- Mereka bereaksi di obrolan dengan stiker saat sebuah kesepakatan terasa pedih atau sewa besar mendarat.
Karena tingkat kesulitan dan karakter diacak ke tiap meja, tidak ada dua permainan yang berjalan dengan cara yang sama. Sekarang papan punya kepribadian.
Untuk yang ingin tahu teknisnya
Setiap bot membawa profil opsional — sebuah tingkat kesulitan yang disilangkan dengan salah satu dari lima arketipe (monopolis, spesialis, pendendam, pengambil risiko, kura-kura), yang dicampur otomatis tiap permainan menjadi sembilan gaya bermain. Profil itu adalah sekumpulan tuas 0–1 yang membentuk setiap keputusan: membeli, membangun, bertukar, menawar di lelang, dan jaminan keluar penjara.
// 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
}Profil itu menumpang pada PlayerState.botProfile, dipanggang ke engine_state permainan saat mulai — persis seperti field tim — jadi tidak ada migrasi basis data. Bot mudah tanpa profil adalah lawan asli persis bita demi bita, itulah sebabnya setiap pengujian sebelumnya tetap lulus.
Bot sulit akan membayar di atas harga daftar untuk merampungkan sebuah monopoli, dengan batas agar lelang selalu tuntas:
// over-list bid, bounded so the auction always terminates
const maxBid = Math.round(listPrice * (1 + 0.4 * profile.aggression));Semuanya tetap deterministik dan dijamin selesai: pertukaran bot dibatasi ketat (satu tawaran terbuka pada satu waktu, frekuensi ber-seed, hanya menawarkan yang akan diterima penerima), dan simulator diuji tekan pada 2–6 pemain selama 400 putaran fast-check acak. Pengujian Engine 282 / daemon 91 hijau.
