مسئلهای که باید حل میکردم
وقتی دو نفر با دستهای دو و یک کارت میمونن، بعضی نوبتها فقط کشیدن اجباریاند و انتخابی ندارند. من این حالت را به قانون روشن شمارش تبدیل کردم.
پیادهسازی در نسخهٔ فعلی
JokerGame.SkipForcedFinalDraw در حالت دقیقاً دو بازیکن فعال و شمارش دو در برابر یک، نوبت گیرندگی نفر دوکارتی را رد میکنه. نفر یککارتی باید از دو کارت انتخاب کنه.
تصمیم و هزینهٔ طراحی
قانون به تعداد وابسته هست، نه اینکه کدوم کارت جوکر باشد. همان شرط برای انسان و ربات اعمال میشود و صندلیهای خالی از چرخه کنار میروند.
مرزهای فعلی
سه بازیکن فعال یا شمارش دو در برابر سه این استثنا را فعال نمیکنه. پایان هم فقط با یک جوکر باقیمانده و سه نفر در FinishOrder معتبر هست؛ خالیشدن یک دست پایان مسابقه نیست.
سناریوهای بررسی و معنای قرارداد
استثنای پایان را با وضعیت دقیق دو صندلی فعال میشود توضیح داد. یکی دو کارت داره و دیگری فقط یک کارت. اگر صاحب دو کارت مجبور بشه از دست تککارتی بکشد، انتخاب واقعی انجام نمیدهدد. رد کردن همین نوبت، انتخاب را به صاحب یک کارت میدهد که بین دو کارت مقابل تصمیم میگیرد. نکتهٔ مهم این هست که تشخیص بر اساس تعداد کارتهاست، نه خواندن محل جوکر برای ساختن نوبت مطلوب. بنابراین قانون برای انسان و ربات یکسان هست و نباید آن را کمک پنهانی به یک طرف معرفی کرد. از بیرون هم میشود دلیل تغییر نوبت را با شمار کارت توضیح داد.
دقت شرط جلوی تعمیم بیقاعده را میگیرد. داشتن دو بازیکن به تنهایی کافی نیست؛ اگر تعداد کارتها دو و سه باشد این استثنا فعال نمیشود. داشتن سه صندلی فعال نیز همان وضعیت نیست، حتی اگر دو دست کوچک باشند. در پایان، خالی شدن یک دست فقط آن صندلی را از چرخش خارج میکنه و هنوز به معنای پایان کل مسابقه نیست. شرط باقی ماندن یک جوکر همراه با ترتیب پایان سه صندلی، تعریف کاملتری میدهد. بررسی این مرزها کمک میکنه پیام برنده شدن یا باختن زودتر از حالت واقعی نمایش داده نشود و مرحلهٔ آخر همچنان به قواعد مدل وابسته بماند.
شرح کوتاه این استثنا باید پیش از آن باشد که کاربر تغییر نوبت را خطا بداند. قانون شمار کارت قابل توضیح هست و نیاز نداره کارت پنهان را آشکار کنیم. چنین پیام یا راهنمایی یک پیشنهاد تجربه هست، نه ادعای وجود متن نهایی در صحنه. در این مرحله برای من ارزش اصلی، قابلیت توضیح رفتار مدل با اطلاعات مجاز بازیکن هست؛ نمایش باید بتواند همان دلیل را منتقل کنه.
چیزی که از این مرحله یاد گرفتم
برای من، این تغییر تصمیم پایانی را حفظ کرد. بازیکن باید انتخاب واقعی داشته باشد، ولی برنامه برای ساختن آن اطلاعات مخفی را لو ندهد یا فقط به نفع انسان ترتیب نوبت را عوض کنه.
مثال عملی دو بازیکن آخر جوکر
یک روش کاربردی برای بررسی دو بازیکن آخر جوکر این است که به جای چند تغییر همزمان، تنها یک مسیر کوتاه بسازی. یکی از دو بازیکن کارت آخرش را از دست میدهد و بازیکن دیگر با یک کارت باقی میماند. سپس وضعیت قبل و بعد را کنار هم قرار بده. چه بخشی از داده تغییر کرده و کدام بخش فقط ظاهر تازهای پیدا کرده است؟ پاسخ باید از همان تعریف موضوع بیاید. این موقعیت یک مثال آموزشی است و آمار واقعی محصول یا وعدهٔ قابلیت جدید محسوب نمیشود.
خطای رایج و علت آن
قفل کردن انتخاب روی نوبت قبلی ممکن است تصمیم پایان بازی را به بازیکن اشتباه بدهد. این خطا معمولاً وقتی پنهان میماند که فقط مسیر موفق و ظاهر نهایی را ببینیم. برای پیدا کردن علت، آخرین وضعیت درست را از نخستین وضعیت نادرست جدا کن و ببین تغییر دقیقاً در کدام مرز رخ داده است. رفتار انتهایی را نباید از گردش معمول چهار نفره به صورت ضمنی نتیجه گرفت. اگر این تفاوت در قرارداد مشخص نباشد، اصلاح یک نشانه ممکن است همان مسئله را در بخش دیگری دوباره ایجاد کند.
چطور نتیجه را بررسی کنیم؟
حالت دست خالی، کارت تک و تشخیص پایان را طبق قانون همین نسخه آزمایش کن. اجرای یکباره برای نتیجهگیری کافی نیست؛ یک بار مسیر معمول و بار دیگر همان موقعیت را با ورودی مرزی یا تکرار اقدام بررسی کن. اگر نتیجه فرق دارد، ورودی و شرایط اجرا را همراه خروجی نگه دار تا مقایسه قابل بازسازی باشد. جدول زیر خلاصهٔ مشخصات همین سناریو است و برای ثبت نتیجهٔ بررسی به کار میآید.
| بخش بررسی | آنچه باید ثبت شود |
|---|---|
| موقعیت آزمایشی | یکی از دو بازیکن کارت آخرش را از دست میدهد و بازیکن دیگر با یک کارت باقی میماند. |
| ریسک اصلی | قفل کردن انتخاب روی نوبت قبلی ممکن است تصمیم پایان بازی را به بازیکن اشتباه بدهد. |
| روش بررسی | حالت دست خالی، کارت تک و تشخیص پایان را طبق قانون همین نسخه آزمایش کن. |
| مرز نتیجهگیری | رفتار انتهایی را نباید از گردش معمول چهار نفره به صورت ضمنی نتیجه گرفت. |
پرسشهای کاربردی دربارهٔ دو بازیکن آخر جوکر
از کجا شروع کنم؟
از همان موقعیت محدود این مطلب شروع کن: یکی از دو بازیکن کارت آخرش را از دست میدهد و بازیکن دیگر با یک کارت باقی میماند. ابتدا نتیجهٔ مورد انتظار را مشخص کن و بعد سراغ پیادهسازی یا ابزار برو. وقتی مسیر پایه قابل توضیح و بررسی شد، میتوان حالتهای بیشتری اضافه کرد. ساخت همهٔ حالتها از ابتدا، فهم علت خطا را سختتر میکند.
چه زمانی میتوانم بگویم این بخش درست کار میکند؟
زمانی که رفتار در موقعیت تعریفشده با قرارداد سازگار باشد و محدودیتهای آن روشن بمانند. حالت دست خالی، کارت تک و تشخیص پایان را طبق قانون همین نسخه آزمایش کن. موفقیت در این آزمون دربارهٔ همان سناریو شاهد میدهد؛ از آن نمیتوان بدون بررسی دربارهٔ همهٔ دستگاهها، همهٔ قوانین محلی یا همهٔ حجمهای داده نتیجه گرفت. رفتار انتهایی را نباید از گردش معمول چهار نفره به صورت ضمنی نتیجه گرفت.
برای ادامهٔ همین موضوع، هستهٔ مشترک دلو؛ یک میز برای چند بازی و بازی دلو را ببین. زمینهٔ ساخت این پروژهها و معرفی سازنده در صفحهٔ کیان پاک نعمت آمده است.




