فهرست مطالب:

2048 بازی خود را با برنامه Java/Java برنامه ریزی کنید: 8 مرحله
2048 بازی خود را با برنامه Java/Java برنامه ریزی کنید: 8 مرحله

تصویری: 2048 بازی خود را با برنامه Java/Java برنامه ریزی کنید: 8 مرحله

تصویری: 2048 بازی خود را با برنامه Java/Java برنامه ریزی کنید: 8 مرحله
تصویری: برنامه نویسی جاوا با موبایل! 2024, جولای
Anonim

توسط PranP1My (ناقص) SiteFollow بیشتر توسط نویسنده:

دستگاه CNC آردوینو از قطعات PC Salvaged
دستگاه CNC آردوینو از قطعات PC Salvaged
دستگاه CNC آردوینو از قطعات PC Salvaged
دستگاه CNC آردوینو از قطعات PC Salvaged
نیمکت های چوبی مدرن DIY
نیمکت های چوبی مدرن DIY
نیمکت های چوبی مدرن DIY
نیمکت های چوبی مدرن DIY
درب بازکن بدون تماس (vSTEM)
درب بازکن بدون تماس (vSTEM)
درب بازکن بدون تماس (vSTEM)
درب بازکن بدون تماس (vSTEM)

من بازی 2048 را دوست دارم. بنابراین تصمیم گرفتم نسخه خودم را برنامه ریزی کنم.

این بسیار شبیه به بازی واقعی است ، اما برنامه نویسی آن به من این آزادی را می دهد که هر زمان که می خواهم هر چیزی را که می خواهم تغییر دهم. اگر من به جای 4x4 معمولی یک بازی 5x5 می خواهم ، یک تغییر ساده با استفاده از سازنده "Board" به من این امکان را می دهد. بگویید من می خواهم بازی را دشوارتر کنم ، مهره هایی را در موقعیت هایی اضافه می کنم که بیشتر از آنکه به طور تصادفی بازی را پیچیده کند. با استفاده از یک الگوریتم ساده ، می توانم همین کار را انجام دهم. در حالی که من تمام این تغییرات را در این دستورالعمل پوشش نمی دهم ، اما قصد دارم هرچه بیشتر اضافه کنم.

اما فعلاً بازی معمولی شما با 2048 را برنامه ریزی می کنیم.

بیایید شروع کنیم!

(یک نکته جانبی: این دستورالعمل نیاز به دانش متوسط برنامه نویسی - به ویژه با جاوا) دارد

مرحله 1: مواد

مواد
مواد

برای این پروژه به چیزهای زیادی احتیاج نخواهید داشت زیرا این فقط یک برنامه نویسی است.

مواد:

  • لپ تاپ
  • Eclipse (یا هر IDE دلخواه شما)

آره. خودشه.

مرحله 2: برنامه را بشناسید - هیئت مدیره

من تمام کد خود را در GitHub بارگذاری کردم - آن را اینجا ببینید:

من بازی را به 3 کلاس تقسیم کردم: تخته ، کاشی و بازی.

تخته:

توضیحات: کلاس Board با گیم بورد ، تنظیم آرایه ای از عناصر "Tile" ، بدست آوردن نمره فعلی و بالاترین کاشی و قرار دادن آرایه در یک رشته (بعداً در "Game" استفاده می شود) سر و کار دارد. بیشتر منطق نیز در اینجا وجود دارد ، این کلاس روش هایی را برای تخم ریزی 2 و 4 در مکان های تصادفی ، حرکت به بالا ، پایین ، چپ و راست ارائه می دهد و به بازیکنان اطلاع می دهد که بازی به پایان رسیده است.

سازندگان:

/ * سازنده پیش فرض برای برد - یک ماتریس 4x4 تنظیم می کند */

هیئت مدیره عمومی () {…}

/ * سازنده برای هیئت مدیره - ماتریسی با اندازه شبکه مشخص * تنظیم می کند/

تابلوی عمومی (شبکه های داخلی) {…}

مواد و روش ها:

/ * متد Getter که برد را برمی گرداند */

کاشی عمومی getBoard () {…}

/ * متد Getter که نمره را برمی گرداند */

public int getScore () {…}

/ * بالاترین کاشی روی تخته را پیدا می کند و آن را برمی گرداند */

public int getHighTile () {…}

/ * برد را روی کنسول چاپ می کند - برای اهداف آزمایش */

public void print () {…}

/ * برد را به صورت String برمی گرداند - در GUI استفاده می شود */

عمومی String toString () {…}

/ * در زمان خالی یک حرکت 2 (یا 4) در یک فضای خالی انجام می شود */

public void spawn () {…}

/ * بررسی می کند که آیا تخته کاملاً سیاه شده است یا خیر ، آیا بازیکنان را مجبور به راه اندازی مجدد می کند */

public boolean blackOut () {…}

/ * بررسی می کند که آیا بازی به پایان رسیده است - وقتی تخته سیاه شده و هیچ یک از کاشی ها نمی توانند ترکیب شوند */

public boolean gameOver () {…}

/ * هنگامی که "w" یا پیکان بالا فشار داده می شود - برای هر کاشی روی صفحه با پارامتر "up" * ، "verticalMove" فراخوانی می شود.

public void up () {…}

/ * هنگامی که پیکان s یا پایین فشار داده می شود - برای هر کاشی روی صفحه با پارامتر 'down' */public void down () 'verticalMove' فراخوانی می شود.

/ * هنگامی که دکمه "d" یا راست فشار داده می شود - برای هر کاشی روی صفحه با پارامتر "راست" */public void right () "horizontalMove" فراخوانی می شود.

/ * هنگامی که "a" یا پیکان چپ فشار داده می شود - برای هر کاشی روی صفحه با پارامتر "left" * ، "horizontalMove" فراخوانی می شود */

خلاء عمومی سمت چپ () {…}

/* مقادیر دو کاشی را با هم مقایسه می کند و اگر یکسان باشند یا اگر یکی برابر 0 باشد (کاشی ساده) - مقادیر آنها اضافه می شود (به شرطی که کاشی هایی که ما مقایسه می کنیم دو کاشی متفاوت باشند و به سمت جهت مناسب حرکت می کنند) - به صورت بازگشتی در ردیف حرکت می کند */

public void horizontalMove (int row، int col، String direction) {…}

/* مقادیر دو کاشی را با هم مقایسه می کند و اگر یکسان باشند یا اگر یکی برابر 0 باشد (کاشی ساده) - مقادیر آنها اضافه می شود (به شرطی که کاشی هایی که ما مقایسه می کنیم دو کاشی متفاوت باشند و به سمت جهت مناسب حرکت می کنند) - به صورت بازگشتی از طریق ستون حرکت می کند */

public void verticalMove (int row، int col، String direction) {…}

بله ، این روش های زیادی است - اما نگران نباشید ، فهمیدن اکثر آنها بسیار آسان است. علاوه بر این ، کلاس "Board" پیچیده ترین است ، بنابراین همه چیز بعد از این نسبتاً ساده خواهد بود.

مرحله 3: برنامه را بشناسید - کاشی

کاشی:

توضیحات: کلاس کاشی با کاشی های جداگانه سروکار دارد و از همه کلاس ها کوچکترین است. هر کاشی دارای یک عدد صحیح و یک رنگ است. دارای دو سازنده است که کاشی هایی با مقدار 0 (پیش فرض) یا مقدار #ایجاد می کند. روشها عمدتاً خود توضیحی هستند ، و روشهای getter و setter بخش عمده ای از کل را تشکیل می دهند.

سازندگان:

/ * یک کاشی اساسی با مقدار 0 * ایجاد می کند/

کاشی عمومی () {…}

/ * کاشی با مقدار عدد */می سازد

کاشی عمومی (شماره int) {…}

مواد و روش ها:

/ * مقدار کاشی را بدست می آورد */

public int getValue () {…}

/ * مقدار کاشی را تعیین می کند - هنگام افزودن دو کاشی به هم استفاده می شود */

public void setValue (مقدار int) {…}

/ * نشان دهنده کاشی به عنوان یک رشته - مورد استفاده در GUI */

عمومی String toString () {…}

/ * رنگ کاشی را بر اساس مقدار آن تنظیم می کند */

public void setColor () {…}

/ * رنگ کاشی را بدست می آورد */

public void getColor () {…}

مرحله 4: برنامه را بشناسید - بازی

بازی

توضیحات: کلاس بازی متد اصلی ، بیشتر متدهای GUI و تعاملات کلیدی را در خود جای داده است. هر دو کلاس Tile و Board را می گذراند و آنها را قادر می سازد تا با هم کار کنند.

سازندگان:

هیچ یک

مواد و روش ها:

/ * GUI را با اندازه های مناسب تنظیم کرده و یک Key Listener اضافه می کند */

public static void setUpGUI () {…}

/ * بررسی می کند که آیا کلیدهای wasd یا فلش فشار داده شده اند یا اقدامات مناسب را انجام می دهد - با هر حرکت JFrame را به روز می کند */

public void keyPressed (KeyEvent e) {…}

/ * رابط کاربری گرافیکی را با یک سری رشته ، تخته ، کاشی ها رنگ آمیزی می کند و اطمینان حاصل می کند که پس از اتمام بازی دوباره رنگ آمیزی می شوند */

رنگ خالی عمومی (گرافیک g) {…}

/ * یک کاشی جداگانه می کشد - از روش رنگ نامیده می شود */

public void drawTiles (گرافیک g ، کاشی کاشی ، int x ، int y) {…}

/ * روش اصلی - تنظیم رابط کاربری گرافیکی و شروع بازی */

public static void main (String args) {…}

مرحله 5: روشهای مهم - حرکت

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

خصوصی خالی verticalMove (int row، int col، String direction)

{کاشی اولیه = تخته [حاشیه] [col] ؛ مقایسه کاشی = تخته [ردیف] [col] ؛ if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (row> border || (direction.equals ("down") && (row <border))) {int addScore = initial.getValue () + compare.getValue ()؛ if (initial.getValue ()! = 0) {score += addScore ؛ } initial.setValue (addScore) ؛ compare.setValue (0) ؛ }} else {if (direction.equals ("down")) {border--؛ } else {border ++؛ } verticalMove (ردیف ، کول ، جهت) ؛ }}

روش فوق ، verticalMove ، با روش های "بالا" و "پایین" فراخوانی می شود. بیایید نگاهی به روش "بالا" بیندازیم.

خلاء عمومی ()

{for (int i = 0؛ i <grids؛ i ++) {border = 0؛ برای (int j = 0؛ j <grids؛ j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j، i، "up") ؛ }}}}}

این روش از طریق کل صفحه عبور می کند و verticalMove را برای هر کاشی با پارامتر "up" فرا می خواند. verticalMove سپس کاشی را در موقعیت "j" و "i" با کاشی در موقعیت "border" و "i" مقایسه می کند. اگر این دو برابر باشند ، ترکیب می شوند. اگر آنها نباشند ، کاشی حاشیه 1 افزایش می یابد (زیرا پارامتر موجود "بالا" است) و verticalMove دوباره فراخوانی می شود.

توصیه شده: