فهرست مندرجات

دومین مسابقه‌ی چالشی ای‌سی‌ام

زمان برگزاری ۲۷ آذر ۱۳۹۳
محل برگزاری دانشگاه صنعتی شریف
مهلت ارسال کد ۲۲ آذر ۱۳۹۳، ساعت ۲۳:۵۹

شکارچیان طلا

در این بازی دو تیم با یک‌دیگر بر سر پیدا کردن طلا رقابت می‌کنند.

کلیات بازی

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

تعاریف اولیه

سناریوی بازی

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

اطلاعات ورودی

اطلاعاتی که در ابتدای بازی در اختیار دو تیم قرار می‌گیرد عبارت است از:

علاوه بر این در هر مرحله اطلاعات زیر در مورد هر یک از بازیکنان در اختیار تیم مربوطه قرار می‌گیرد:

حرکت بازیکنان

در هر مرحله از بازی، هریک از دو تیم مدت زمان یک ثانیه‌ای در اختیار دارند تا حرکات بازیکنان تیم خودی را مشخص کنند. هر بازیکن می‌تواند یکی از حرکات زیر را در یک مرحله انجام دهد:

شرایط حرکت بازیکن و تیر‌ از قرار زیر است:

پایان و نتیجه‌ی بازی

بازی در شرایط زیر به پایان می‌رسد:

بعد از پایان بازی، برنده به شرح زیر مشخص می‌شود:

واسط برنامه‌نویسی

برای اجرای بازی، یک فایل jar با نام Gold Hunter در اختیار شما قرار گرفته است که شامل کدهای اجرایی بخش سرور و شبکه می‌باشد. برای اجرای بخش سرور بازی کافیست این فایل را اجرا نمایید. با اجرای این فایل، صفحه اصلی بازی نمایان خواهد شد و برای شروع بازی در انتظار اتصال کلاینت‌ها (دو تیم بازی) خواهد بود. دقت کنید که نقشه بازی می‌بایست درکنار این فایل اجرایی قرار داشته باشد.

یک فایل jar دیگر با نام Client در اختیار شما قرار گرفته است که شامل کدهای اجرایی کلاینت می‌باشد. پس از اجرای Gold Hunter میتوانید این فایل را اجرا نمایید. با اجرای این فایل یک تیم به سرور اجرایی متصل می‌شود. بنابراین با دوبار اجرای این فایل میتوانید بازی را شروع کنید. (دقت کنید که فولدر Client_lib باید درکنار فایل اجرایی باشد علاوه‌براین یک فولدر با نام lib درکنار GoldHunter.jar قرار دهید. محتویات این فولدر همان محتویات فولدر Client_lib است، یعنی فایل gson-2.3.jar)

برای پیاده‌سازی کدهای بخش client یک package با نام client نیز در اختیار شما قرار می‌گیرد که میتوانید با تغییر آن به شرح زیر، تیم خود و الگوریتم اجرایی خود را پیاده‌سازی کنید. برای تست الگوریتم خود میتوانید پس از اجرای کد سرور (Gold Hunter)، تیم رقیب را با اجرای client و تیم خودی را با اجرای کدهای خود آماده بازی کنید.

جاوا

یک پروژه جاوا با نام ChallengeProject در اختیار شما قرار گرفته است. پیاده‌سازی بخش کلاینت می‌بایست در کلاس TeamClientAi موجود در packageی به نام client.java.teamClient انجام گیرد. این کلاس دو تابع دارد. یکی getTeamName که نام تیم خود را در آن برمی‌گردانید و دیگری تابع مهمی به نام step که این تابع می‌بایست شامل همه کدهای اجرایی شما شود. درهرمرحله از بازی این تابع برای تیم شما اجرا خواهد شد. کلاس TeamClientAi از کلاس ClientGame ارث‌بری می‌کند. این کلاس توابع ضروری برای اطلاع از بازی را در اختیار شما قرار می‌دهد. برای اجرای دستورات هر بازیکن نیز می‌بایست از این کلاس استفاده کنید. سه تابع rotate, move, fire برای انجام حرکات اصلی هر بازیکن در این کلاس وجود دارد.

شما فقط مجاز به تغییر و افزودن در پکیج client.java.teamClient هستید و تغییر در کلاس‌های دیگر پروژه قابل قبول نخواهد بود. برای اجرای کدهای خود کافیست پس از اجرای سرور، کلاس TeamClientAi را اجرا نمایید. برای کسب اطلاعات بیشتر در مورد کلاس‌ها و توابع موجود میتوانید این مستند را مطالعه کنید.

سی

کد کلاینت سی در فایل C_client دراختیار شما قرار گرفته است. کد اصلی خود را می‌بایست در تابعی به نام think متعلق به کلاس PlayerDecision بنویسید. درصورت لزوم اضافه کردن توابع خاص‌منظوره میتوانید آنها را فایل‌های PlayerDecision.h و PlayerDecision.cpp اضافه کنید. مجوزی برای تغییر دیگر فایل‌ها ندارید.

برای اجرای کد خود ابتدا لازم است کتابخانه boost را از اینجا نصب کنید. کدهای خود را با g++ 4.9.2 کامپایل کنید. بعد از make کردن با استفاده از دستور زیر کد کلاینت خود را اجرا نمایید. (کد سرور را می‌بایست قبل از این اجرا کرده باشید)

./client host port

قوانین کلی

دریافت کد

ارسال برنامه

برای ارسال برنامه، درصورتی که برنامه‌ی خود را به زبان جاوا نوشته‌اید، پکیج client.java.teamClient را به صورت zip فشرده نموده، و درصورتی که برنامه به زبان سی است، یک فایل zip شامل فایل‌های PlayerDecision.h و PlayerDecision.cpp بسازید. سپس برای ارسال کدهای خود لازم است مراحل زیر را دنبال کنید:

  1. در سایت شریف‌جاج یک حساب با نام کاربری دل‌خواه خود بسازید.
  2. پس از ورود به سایت، با کلیک روی عکس کاربر (بالا سمت راست) و ورود به بخش پروفایل، در فیلد Name نام کامل تیم خود را وارد نمایید.
  3. از منوی Assignments گزینه‌ی AcmChallenge را انتخاب کنید.
  4. در بخش Submit کد خود (فایل zip مذکور) را ارسال کنید.

دقت نمایید که ثبت نام تیم خود را فراموش نکنید. می‌توانید هر تعداد دل‌خواه ارسال انجام دهید و در نهایت برنامه‌ای که در سیستم به عنوان Final علامت زده باشید کد نهایی شما محسوب می‌شود.