Skip to content

Latest commit

 

History

History
84 lines (62 loc) · 12.5 KB

2-Game-Doc.md

File metadata and controls

84 lines (62 loc) · 12.5 KB

پیش زمینه

در گاتهام که مدتیست نرخ جنایت بالارفته نیروهای پلیس به دنبال یک راه حل برای مقابله با جنایتکاران هستند. بتمن که مدتیست بازنشسته شده دیگر مانند سابق نمی‌تواند جنایتکاران را به سزای عملشان برساند. پلیس‌های گاتهام که هیچ الگوریتم مشخصی برای پیدا کردن دزدها ندارند و بدون کمک بتمن گیج و سردرگم در تعقیب جنایتکاران گاتهام هستند از بتمن کمک خواسته‌اند. بتمن سراغ دوست قدیمی خود (مثلا شما) آمده و میخواهد به او کمک کنید تا سیستم الگوریتم تعقیب جنایتکاران و دزدها رو بهبود دهید به امید آنکه بدون نیاز به بتمن آرامش به گاتهام بازگردد.

خلاصه بازی

بازی توسط دو بازیکن انجام می‌شود که هر بازیکن تعدادی دزد و تعدادی پلیس دارد و هدف هر بازیکن در این بازی این است که با استفاده از پلیس‌های خود دزدهای حریف را بگیرد و تا پایان بازی هر بازیکنی که سریعتر دزد‌های حریف خود را بگیرد برنده بازی خواهد شد. هر بازیکن باید بتواند طوری پلیس‌های خود را داخل نقشه‌ی شهر جابه‌جا کند که روی دزد‌های حریف بیفتند و آن‌ها را بگیرند. در اینجا شما باید کدی بزنید که پلیس‌ها و دزد‌هایتان را کنترل کند.

توضیح بازی

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

یونیت‌ها

دو نوع یونیت وجود دارد که یکی دزد و یکی پلیس است. در هر بازی هر بازیکن تعدادی دزد و تعدادی پلیس دارد که در هر نوبت باید آن‌ها را کنترل کند. کنترل هر یونیت در نوبتش به این صورت است که از راس فعلی‌اش به یکی از راس‌هایی که به آن یال دارد می‌رود و یا در جای خود می‌ماند. هر کدام از یونیت‌ها در ابتدای بازی مقداری پول دارند و در هر نوبت هم مقداری پول دریافت می‌کنند.

دزد

هر بازیکن تعدادی دزد دارد که باید از دست پلیس‌های حریف فراریشان دهد و اگر یکی از پلیس‌های بازیکن حریف در هر لحظه‌ای بر روی یک دزد خودی قرار بگیرد آن دزد دستگیر خواهد شد. در طول بازی دزدها فقط در تعداد خاصی از نوبت ها برای پلیس‌های حریف نمایان هستند. هر دزد در ابتدا مقداری پول دارد که به ازای همه دزدها یکسان است و در هر نوبت مقدار پول دریافت می‌کند که به طور مشابه برای همه‌ی دزدها یکسان است.

robber

پلیس

هر بازیکن تعدادی پلیس دارد که باید با استفاده از آن‌ها دزدهای بازیکن حریف را بگیرد و اگر یکی از پلیس‌های خودی در هر لحظه‌ای بر روی یکی از دزدهای حریف قرار بگیرد آن دزد دستگیر خواهد شد. هر پلیس در ابتدا مقداری پول دارد که به ازای همه پلیس‌ها یکسان است و در هر نوبت مقداری پول دریافت می‌کند که به طور مشابه برای همه‌ی پلیس‌ها یکسان است.

police

مپ

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

map

چت‌باکس و ارتباط یونیت‌ها

کدی که شما برای این بازی می‌زنید فقط یک یونیت را کنترل می‌کند و برای ارتباط یونیت‌ها با هم باید از چت‌باکس استفاده کنید. استفاده از چت‌باکس به این صورت است که هر یونیت در نوبت خود بسته به طول پیامی که می‌دهد هزینه‌ای می‌پردازد و از چت‌باکس استفاده می‌کند و یونیت‌های هم‌تیمی‌اش می‌توانند این پیام را مشاهده کنند. همچنین کاراکترهای مجاز در هر پیام 0 , 1 هستند و فقط مجاز به استفاده از این کاراکترها هستید.

نوبت

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

شرط برد

بازیکنی که زودتر تمام دزدهای حریف را بگیرد برنده است. اگر حداکثر تعداد نوبت‌های بازی تمام شود، کسی که تعداد بیشتری دزد گرفته باشد برنده است. اگر هر دو به یک اندازه دزد گرفته باشند یا در یک نوبت تمام دزدهای حریفشان را بگیرند، کسی که سریع‌تر آخرین دزد را گرفته باشد. در صورت تساوی آن، کسی که یکی‌مانده به آخرین دزد را سریع‌تر گرفته باشد. در صورت تساوی آن، دزد قبلی و … . در صورت مساوی بودن همه‌ی آن‌ها برنده بازی به صورت تصادفی مشخص می‌شود.

متغیرها

در قسمت کلاینت که شما کد آن را می‌زنید به صورت زیر می‌توانید به متغیرهای بازی دسترسی پیدا کنید.

تغییرات حضوری

تغییرات فینال :

۱.در راند های مشخصی که دزد ها نمایان می شوند ، هر پلیس تنها دزد هایی را می بیند که فاصله پیاده(نه مترو و نه تاکسی) کمتر از X داشته باشند.

۲. یکی از دزد ها جوکر می شود . ویژگی های آن به شرح زیر است: حداقل دو پلیس برای دستگیری آن نیاز است (همزمان دو پلیس در خانه جوکر قرار بگیرند) در صورت دستگیری تمام دزد ها شکست میخورند و پلیس ها میبرند شرط ۱ که در بالا ذکر شد برای جوکر با Y برقرار است که Y<X است.

نکته : در صورتی همه دزد دستگیر شوند جوکر دستگیر نشود بازی تمام است ، پس برای اتمام بازی دستگیر جوکر ضرورتی ندارد

۳. یکی از پلیس ها بتمن می شود. ویژگی های آن به شرح زیر است: به تنهایی برای دستگیری جوکر کافی است. از دید همه دزد ها مخفی است مگر این که فاصله پیاده(نه مترو و نه تاکسی) کمتر از Z باشد و Z<X برقرار است.

نکته: متغیرهای X,Y,Z در مپ داده می‌شود

Variable Description
GameView.id آی‌دی یونیت کنونی
GameView.turn.turnNumber نوبت کنونی
GameView.balance موجودی پول کنونی
GameView.node_id راس که یونیت روی آن قرار دارد
GameView.turnSettings.maxTurn ماکزیمم نوبت بازی
GameView.turnSettings.visibleTurns نوبت‌هایی که دزدها برای پلیس‌ها نمایان هستند
GameView.incomeSetting.policeIncomeEachTurn میزان افزایش پول پلیس در هر نوبت
GameView.incomeSetting.thievesIncomeEachTurn میزان افزایش پول دزد در هر نوبت
GameView.config.graph مشخصات مپ بازی(گراف)
GameView.config.graph.paths مشخصات یال‌ها به صورت لیستی از آبجکت های Path
1 شماره راس ایستگاه شروع پلیس‌ها
GameView.viewer مشخصات یونیت
GameView.viewer.nodeId راس کنونی یونیت
GameView.viewer.team تیم یونیت
GameView.config.graph.nodesCount تعداد راس‌های گراف
GameView.config.graph.nodes مشخصات راس‌ها
GameView.visibleAgents تمام یونیت‌هایی که دیده می‌شوند
GameView.chatSettings.chatCostPerCharacter هزینه چت
GameView.chatSettings.chatBoxMaxSize حداکثر طول پیام در چت
محدودیت زمان هر نوبت برای ایجنت‌ها 1 ثانیه