ربات بازی مافیا

بازی اصلی

مقدمه

مافیا (که گرگینه یا آدمکش نیز نامیده می شود) یک بازی گروهی است که نبرد بین یک اقلیت آگاه و یک اکثریت ناآگاه را شبیه سازی می کند. بازیکنان به طور مخفیانه تعیین نقش می شوند: یا "مافیا"، که همدیگر را می شناسند؛ یا "شهروند"، که تنها از تعداد افراد مافیا آگاه هستند. در فاز "شب" بازی، افراد مافیا به صورت مخفیانه یک شهروند را 'می کشند'. در طول فاز روز، تمام بازیکنان بازمانده در مورد هویت‌های مافیایی بحث می کنند و برای حذف یک مظنون رای می دهند. بازی ادامه می یابد تا زمانی که همه مافیاها حذف شوند (برد شهروندان) و یا تا زمانی که تعداد مافیاها و شهروندان برابر شود (برد مافیا). یک بازی معمولی با ۷ شهروند و ۲ مافیا شروع می‌شود.

شخصیتها

در این بازی دو گروه عمده وجود دارد. نقشهای فرعی دیگری هم در بازی وجود دارند. مثلا :

طریقه انجام بازی

شب

اوستا به بازیکنان می‌گوید که «همه بخوابند» که به معنای این است که همه بازیکنان چشمان خود را ببندند و سر خود را پایین بیندازند. سپس، با دستور اوستا با عنوان «مافیا بیدار شود»، اعضای مافیا چشمان خود را باز می کنند و همدیگر را شناسایی می کنند. اعضای مافیا در هر شب، با اتفاق نظر باید یکی از شهروندان را به نوبتی که در شب اول تصمیم گرفته اند، به قتل برسانند. این کار باید بدون جلب توجه سایر بازیکنان (که چشمانشان بسته است) با چشمان بسته و به طور هماهنگ و همزمان انجام شود و با اشاره انگشت به اطلاع اوستا رسانده شود. اگر هماهنگی و نوبت رعایت نشود اعضای مافیا در کشتن شهروندان موفق نخواهند بود. طبیعی است که اعضای مافیا معمولاً کسی را می کشند که در پیدا کردن هویت افراد مافیا و قانع کردن بقیه در این زمینه موفق تر از سایرین باشد. پس از اتمام کارِ مافیا، اوستا به آنها می‌گوید چشمان خود را ببندند (این کار معادل این جمله‌ است: «مافیاها بخوابند»). در صورتی که بازی، دکتر، پلیس یا کاراگاه نیز داشته باشد، این افراد نیز به ترتیب به دستور اوستا چشمان خود را باز می‌ کنند و پس از انجام وظیفه خود مجدداً چشمانشان را می بندند.

روز

در این مرحله، اوستا به بازیکنان اعلام می‌کند که چشمان خود را باز کنند و اتفاقات شب گذشته را به اطلاع آنها می رساند. اگر کسی توسط مافیا به قتل رسیده باشد، از این امر آگاه می‌شود و با گفتن وصیت از بازی خارج می شود. سپس، بازیکنان میتوانند با گرفتن نوبت از اوستا شروع به صحبت کنند و استدلال خود را درباره ی هویت اعضای باقیمانده - بر اساس شواهد و رفتار گذشته آنان - بیان کنند. پس از اتمام صحبت ها، اوستا برای از میان بردن یکی از اعضای مظنون به عضویت در مافیا، از همه ی بازیکنان به طور آشکار رای گیری می کند. برای تک تک افراد جداگانه رای گیری می‌شود و به چند نفر از کسانی که بیشترین رای را دارند اجازه صحبت مجدد برای دفاع از خود داده می شود. سپس یک بار دیگر بین این افراد رای گیری می‌شود و در نهایت کسی که بیشترین رای را دارد (تعداد بیشتری از بازیکنان مشکوک به عضویت او در مافیا هستند) از بازی خارج می شود. در ابتدای بازی تصمیم گرفته می‌شود افرادی که در فاز روز از بازی خارج می‌شوند هویت خود را اعلام کنند یا ناشناس بمانند

بازی در IRC

برای این بازی احتیاج به یک کلاینت IRC دارید. تقریبا برای هر سیستم عاملی کلاینتهای متنوعی وجود دارد مثل برای استفاده از سرور اصلی بازی، به سرور irc.freenode.net متصل شوید. بعد از آن به کانال ##PersianMafiaGame وارد شوید . معمولا با دستور: /join ##PersianMafiaGame میتوانید این کار را انجام بدهید. اکثر این کلاینتها، راههای دیگری را برای پیوستن به یک کانال ارایه میکنند. گام بعدی ثبت نام در بازی در حال اجراست. برای اینکار دستور register در نظر گرفته شده است.
برای زدن دستور، باید به صورت خصوصی یا در یک کانال که ربات در آن حضور دارد دستور با یک علامت تعجب (!) در ابتدا زده شود. نام ربات fzBot است و میتوانید دستور را در یک کانال که ربات حضور دارد بزنید یا اینکه به این صورت : /msg fzBot !register کلا در کلاینتهای IRC msg (با علامت اسلش در ابتدا) برای ارسال پیام خصوصی استفاده میشود که البته معمولا با کلیک راست بر روی نام شخص در اکثر کلاینتها امکان فرستادن پیغام مستقیم وجود دارد.
اگر بازی در جریان نباشد ربات اعلام خواهد کرد که شما ثبت نام شدید. بعد از register باید منتظر یک مدیر شد تا دستور آغاز را بزند. در این مدت، میتوانید با دستور list لیست تمام بازیکنهای ثبت نام کرده را ببینید. دستور start سه پارامتر دارد - فعلا - و به این صورت است : !start MAFIA_COUNT HAVE_DR_OR_NOT HAVE_DETECTIVE_OR_NOT آرگومان اول میگوید که تعداد مافیا چند نفر باشد و آرگومان دوم در صورتی که صفر باشد دکتر در بازی نخواهد بود و هر چیز دیگری، به معنی وجود یک دکتر در بازیست. آرگومان سوم هم نمایانگر بودن کارآگاه در بازی است. صفر یعنی بدون کارآگاه و هر چیز دیگری یعنی همراه کارآگاه
فعلا امکان بودن چند دکتر و یا چند کارآگاه به ربات اضافه نشده است.
مثلا : !start 2 1 1 یعنی بازی با دو مافیا و با وجود دکتر و کارآگاه انجام شود.

تقسیم بندی

بعد از start، ربات دسته بندی را انجام خواهد داد و با پیغام خصوص به شما اعلام میکند که بازی آغاز شده است و شما در چه دسته ای قرار گرفتید. این کار برای اینکه از سوی سرور ربات را به خاطر fold کردن بیرون نکند، کمی طول میکشد (در حد چند ثانیه) ربات نقش شما را در پیغام خصوصی به شما اعلام میکند. شهروندان عادی به کانال ##PMG دعوت میشوند - به همراه رمز آن کانال- و مافیا به دو کانال ##PMG و ##PMGMafias در حقیقت مافیا دو کلمه رمز -یکی به ازای هر کانال- دریافت میکند. دکتر و کارآگاه تنها رمز ##PMG را دریافت میکند و به آنها اعلام میشود که دکتر یا کارآگاه هم هستند.
نام کانالها به حروف کوچک و بزرگ حساس نیست و رمز همیشه یک عدد است. برای داخل شدن به کانالهای رمز دار به این صورت عمل کنید : /join #ChannelName Password

فاز شب!

در این فاز کانال ##PMG ساکت میشود و شما نمیتوانید هیچ پیغامی به این کانال بفرستید . شب نوبت بازی مافیا، کارآگاه و دکتر است. مافیا در کانال خودشان میتوانند با دستور kill یک نفر را بکشند. همه مافیا ها باید این دستور را به اینصورت به کانال بفرستند : !kill someone این دستور به نوعی رای گیری محسوب میشود، و در صورتی که دو یا چند نفر بیشترین تعداد رای را آورده باشند مافیا باید رای خود را عوض کنند تا بالاخره یک نفر رای بیشتر را بیاورد. هر مافیا هر چند بار که بخواهد میتواند در فاز شب رای بدهد،فقط رای آخر او محاسبه خواهد شد بنابراین برای تغییر رای کافیست دوباره رای دهید.
مافیا میتواند کسی را نکشد. برای اینکار به جای نام شخص علامت * را ارسال کند : !kill * البته در نهایت اگر * رای بیشتری بیاورد، کسی کشته نخواهد شد. اینکار میتواند برای به اشتباه انداختن دکتر استفاده شود.
مافیا میتوانند به خودشان هم رای بدهند و خودشان را هم بکشند!
دستور vote به مافیا وضعیت فعلی رای گیری را نشان میدهد. در صورتی که متوجه شدید که شما در کانال ##PMGMafias تنها هستید و ممکن است کسی به هر دلیلی نفمیده باشد، یا نتوانسته باشد وارد کانال مافیا شود، میتوانید با کمک لیست vote او را بشناسید و به او کمک کنید.
در همین فاز دکتر نیز باید یک نفر را محافظت کند. برای اینکار دکتر باید از دستور heal به صورت استفاده کند. این دستور باید برای ربات به صورت خصوصی ارسال شود. !heal someone دکتر میتواند خودش را هم محافظت کند که بسته به وضعیت بازی باید تصمیم بگیرد
در همین زمان کارآگاه میتواند در مورد هویت یک نفر اطلاع کسب کند. برای اینکار از دستور whois استفاده میشود. !whois someone
به جای someone کارآگاه میتواند از * به معنی هیچ کس و فقط پس زدن این امکان استفاده کند. این دستور قابل برگشت نیست و باید به صورت خصوصی برای ربات ارسال شود.
مافیا، دکتر و کارآگاه تنها سه دقیقه زمان دارند . باقی افراد در صورت طول کشیدن بیش از اندازه، از دستور timeout استفاده کنند. با این دستور، البته اگر بعد از سه دقیقه استفاده شود رای ها بسته میشود و شب با همان صورت تمام میشود. کسانی که رای نداده اند رایشان * خواهد شد و در صورتی که دو نفر به یک تعداد رای آورده باشند به صورت اتفاقی یکی از آن دو انتخاب میشود..

فاز روز

بعد از پایان شب نوبت به روز میرسد. در روز، همه باید از خودشان دفاع کنند و در نهایت یک نفر را برای تنبیه انتخاب کنند. فردی که شب قبل کشته شده -اگر کشته شده باشد- بعد از گفتن وصیت باید تا پایان بازی ساکت بماند. در این حالت، همه افراد زنده میتوانند برای تنبیه رای دهند : !punish someone و رای در هر زمان با رای دوباره قابل تغییر است. در طول روز دستور vote وضعیت رای فعلی را نمایش خواهد داد.
دستور vote در شب تنها برای مافیا نتیجه را نمایش میدهد و در روز برای همه. دستور list چه در شب و چه در روز وضعیت بازیکنان را نشان خواهد داد.
در صورت برابر بودن رای های بالا، بایستی رای افراد تغییر کند تا وضعیت قفل شدن پیش نیاید.
در صورت رای دادن بلافاصله فاز روز تمام میشود. مواضب باشید، چرا که در صورت تغییر رای یک نفر در هنگامی که رای های بالا برابر شده اند، بلافاصله رای گیری بسته میشود، و دیگران نمیتوانند رای خود را عوض کنند.
تنبیه در روز، نیز بازیکن را حذف میکند و بازیکن به جمع مردگان بازی اضافه میشود.
با پایان رای گیری، دوباره شب برقرار خواهد شد....

شرایط برنده شدن

زمانی که تعداد افراد مافیا با افراد دیگر برابر شود، بازی به نفع مافیا تمام میشود. و در صورت کشته شدن همه مافیاها بازی به نفع شهروندان تمام خواهد شد.

تنظیمات ربات

برای این ربات تنظیماتی در دسترس است که با کمک دستور opt مدیر میتواند آنها را تغییر دهد. در حال حاظر این تنظیمات در دسترس هستند :

!opt SHOW-MAFIA 0/1  : Show mafia count each day at the start of day?
!opt MAFIA-STATE 0/1 : Mafia won only if all other citizen are dead?
!opt DEAD-TALK 0/1   : Dead people can talk?

لیست تمام دستورات بازی

لیست تمام دستورات بازی
دستور پارامترها معنی اجرا کننده زمان اجرا
register ندارد ثبت نام در بازی همه افرادی که عضو نیستند قبل از آغاز بازی
leave ندارد خروج از بازی همه افرادی که عضو هستند در تمام مدت بازی
drop اسم بازیکن بررسی بازیکن و بیرون انداختن او در صورتی که کاملا از سرور خارج باشد همه در تمام مدت بازی
validate اسم بازیکن بیرون انداختن بازیکن از بازی مدیر در تمام مدت بازی
start MAFIA_CNT HAVE_DR آغاز بازی مدیر قبل از آغاز بازی
restart ندارد پایان بازی کنونی و آغاز ثبت نام مجدد مدیر هر زمان
list ندارد لیست بازیکنان قبل از شروع بازی، وضعیت بازیکنان در زمان بازی همه در تمام طول بازی
count ندارد نمایش تعداد بازیکنان همه در تمام طول بازی
vote ندارد نمایش وضع رای کنونی. شب تنها به مافیا پاسخ میدهد و روز به همه همه در تمام طول بازی
kill اسم بازیکن رای برای کشتن یک نفر در شب توسط مافیا مافیا شب
heal اسم بازیکن محافظت بازیکن برای همان شب در صورتی که مافیا او را بکشد کشته نخواهد شد دکتر شب
whois اسم بازیکن به کارآگاه گفته میشود که بازیکن مافیاست یا نه کارآگاه شب
timeout ندارد بعد از سه دقیقه از شب اگر استفاده شود شب پایان میابد همه سه دقیقه بعد از شب!
punish اسم بازیکن رای برای کشتن(تنبیه) یک نفر در روز توسط همه همه روز
wish هر چیزی آخرین وصیت شخص کشته شده، فقط یک بار، در روزی که دقیقا شب قب آن کشته شده آخرین قربانی روز

درباره این ربات

این ربات فقط به قصد تفریح و توسط فرود نوشته شده است.
با تشکر از تمام کسانی که در این چند روز در تست این ربات کمک کرده اند -اسم نمیبرم چون اسم همه خاطرم نیست و ممکن است کسی جا بماند - ربات با PHP نوشته شده است و میتوانید در اینجا : https://github.com/fzerorubigd/pmg کد را ببینید و در صورت تمایل همکاری کنید.

منابع برای این راهنما