بازی X-O

نام و تاریخ مسابقه: مسابقه جاوا_جیکل 5 – 13 بهمن 1396
مباحث: حلقه و شرط، شیگرایی، متد
در این سوال، باید به نحوی که توضیح داده شده است بخشی از بازی پرطرفدار X-O را پیادهسازی کنید.
ابتدا بستهی ir.javacup.tictactoe را دانلود کرده و محتوای آن را ببینید. شما کافی است کلاس Player را پیادهسازی کنید. این کلاس دارای دو ویژگی زیر است:
- صفحهی بازی (board): در ابتدا مقدار کلیهی خانههای بازی برابر با – (dash) است.
- علامت بازیکن فعلی (mark): از نوع PlayerMark است و یکی از دو مقدار X یا O را میپذیرد.
در کلاس Player دو متد وجود دارد که شما باید پیادهسازی کنید:
1- public boolean isWinner()
در این متد با توجه به وضعیت فعلی صفحهی بازی، باید تشخیص دهد که بازیکن برنده است یا خیر.
2- public BoardCell move()
با فراخوانی این متد، برنامه باید با اندکی هوش یک خانه از صفحهی بازی را برای حرکت بعدی انتخاب کند و در قالب یک BoardCell برگرداند. BoardCell نمایشدهندهی یک خانه از صفحهی بازی است که دارای دو ویژگی شماره سطر و شماره ستون است.
نحوهی انتخاب خانه برای حرکت
اگر صفحهی بازی پر شده بود، متد move باید null برگرداند. در غیر این صورت، در انتخاب خانه برای حرکت بعدی، باید 3 شرط با اولویتهایی که در ادامه آمده است رعایت شود.
- شرط اول: اگر بازیکن فعلی، با یک حرکت امکان برندهشدن در بازی را دارد، باید حتما همان حرکت را انجام دهد.
مثال: اگر وضعیت صفحهی بازی به شکل زیر بوده و بازیکن فعلی X باشد:
-|-|- x|-|x -|o|o
یک BoardCell به شکل ;(BoardCell(1, 1 باید برگردانده شود.
- شرط دوم: اگر شرط اول برقرار نیست، اما بازیکن حریف تنها با یک حرکت دیگر امکان برندهشدن دارد، باید حرکتی انجام شود که از برندهشدن حریف جلوگیری کند.
مثال: اگر وضعیت صفحهی بازی به شکل زیر بوده و بازیکن فعلی X باشد:
-|x|- -|-|o x|-|o
یک BoardCell به شکل ;(BoardCell(0, 2 باید برگردانده شود.
- شرط سوم: اگر شرط اول و دوم برقرار نیست، بدون هیچ هوشی، اولین خانهی خالی (به صورت سطری-ستونی) از صفحهی بازی را برای حرکت انتخاب کند.
مثال: اگر وضعیت صفحهی بازی به شکل زیر بوده و بازیکن فعلی X باشد:
x|o|- -|x|- -|-|o
یک BoardCell به شکل ;(BoardCell(0, 2 (اولین خانهی خالی) باید برگردانده شود.
نکته:
- در تستها هیچ گاه حالتی ایجاد نمیشود که امکان انتخاب بیش از یک خانه برای حرکت وجود داشته باشد.
- با فراخوانی متد move یک BoardCell برگردانده میشود و دارای دو مقدار است که مشخصکنندهی سطر و ستون خانهی مورد نظر است.
آنچه باید آپلود کنید:
یک فایل زیپ شامل بستهی ir.javacup.tictactoe است. به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخهی ir را ببینیم که درون آن شاخهی javacup و درون آن نیز شاخهی tictactoe قرار دارد. در داخل شاخهی tictactoe فقط و فقط فایل Player.java وجود داشته باشد.
برای داوری تمرین، میتوانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.
برای آشنایی با نحوهی ارسال پاسخ در Quera، این مطلب را مطالعه کنید.
با ما همراه باشید:
آدرس کانال تلگرام: IranianJavaDevelopers@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers
با سلام و عرض خسته نباشید. لینک فایل بسته پروژه خراب شده است. لطفاً پیگیری کنید.
سلام
اصلاح شد. ممنون اطلاع دادید.