मिलिए अपने नए प्रतिद्वंद्वियों से: ज़्यादा होशियार, ज़्यादा जीवंत बॉट
अब बॉट्स के अपने व्यक्तित्व हैं — वे व्यापार करते हैं, बनाते हैं, बोली लगाते हैं, अग्रणी खिलाड़ी को निशाना बनाते हैं और स्टिकर से प्रतिक्रिया तक देते हैं। हर खेल अलग महसूस होता है।

आसान शब्दों में
कंप्यूटर के ख़िलाफ़ खेलना पहले थोड़ा फीका लगता था: पुराने बॉट पासा फेंकते, जहाँ रुकते वहाँ ख़रीद लेते, और बस इतना ही। अब ऐसा नहीं है। आपके प्रतिद्वंद्वियों के अब असली व्यक्तित्व हैं, और वे सचमुच जीतने के लिए खेलते हैं।
हर बॉट एक कठिनाई (आसान, मध्यम या कठिन) और एक चरित्र के मेल से बना है। आपका सामना किसी सतर्क बैंकर से हो सकता है जो पैसा जमा करता रहता है, किसी लापरवाह जुआरी से जिसे जैकपॉट बेहद पसंद है, किसी विशेषज्ञ से जो एक ही रंग-समूह के पीछे पड़ा रहता है, या किसी प्रतिशोधी प्रतिद्वंद्वी से जो जो भी आगे हो उस पर टूट पड़ता है — यानी आप पर।
- वे आपको व्यापार के प्रस्ताव भेजते हैं — एक फ़ालतू संपत्ति के साथ नक़द, बदले में वह ख़ाना जो उन्हें चाहिए — और आपके प्रस्तावों का जवाब देते हैं।
- वे मूल्य के हिसाब से निर्माण करते हैं, घर वहीं बनाते हैं जहाँ किराया सबसे तेज़ी से वसूल हो।
- वे नीलामियों में बोली लगाते हैं, और एक कठिन बॉट किसी समूह को पूरा करने के लिए ज़रूरत से ज़्यादा भुगतान कर देगा।
- जब कोई सौदा चुभता है या कोई बड़ा किराया गिरता है, तो वे चैट में स्टिकर से प्रतिक्रिया देते हैं।
चूँकि हर मेज़ में कठिनाइयाँ और चरित्र आपस में मिला दिए जाते हैं, इसलिए कोई भी दो खेल एक जैसे ढंग से नहीं चलते। अब बोर्ड का अपना एक व्यक्तित्व है।
तकनीकी जानकारी
हर बॉट के पास एक वैकल्पिक प्रोफ़ाइल होती है — एक कठिनाई स्तर जो पाँच आदर्श-रूपों (एकाधिकारवादी, विशेषज्ञ, प्रतिशोधी, जोखिम-उठाऊ, कछुआ) में से किसी एक के साथ मिलता है, और हर खेल में अपने आप नौ खेल-शैलियों में मिश्रित हो जाता है। प्रोफ़ाइल 0–1 के नॉब्स का एक समूह है जो हर निर्णय को आकार देता है: ख़रीदना, निर्माण करना, व्यापार, नीलामी में बोली और जेल की ज़मानत।
// 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
}यह प्रोफ़ाइल PlayerState.botProfile पर सवार रहती है, और शुरुआत में खेल के engine_state में पक जाती है — बिलकुल टीम फ़ील्ड की तरह — इसलिए कोई डेटाबेस माइग्रेशन नहीं हुआ। बिना प्रोफ़ाइल वाला आसान बॉट बाइट-दर-बाइट वही मूल प्रतिद्वंद्वी है, यही वजह है कि पहले के सारे टेस्ट अब भी पास होते हैं।
एक कठिन बॉट किसी एकाधिकार को पूरा करने के लिए सूची-मूल्य से ज़्यादा भुगतान करेगा, पर एक सीमा के साथ ताकि नीलामियाँ हमेशा निपट जाएँ:
// over-list bid, bounded so the auction always terminates
const maxBid = Math.round(listPrice * (1 + 0.4 * profile.aggression));सब कुछ नियतात्मक रहता है और ख़त्म होने की गारंटी रहती है: बॉट के व्यापार पर कड़ी रोक है (एक समय पर एक ही खुला प्रस्ताव, बीज वाली आवृत्ति, केवल वही प्रस्ताव जिन्हें पाने वाला स्वीकार करेगा), और सिम्युलेटर का 2–6 खिलाड़ियों पर 400 यादृच्छिक fast-check रन में तनाव-परीक्षण किया गया। Engine 282 / daemon 91 टेस्ट हरे हैं।
