فهرست مطالب:
- مرحله 1: مواد
- مرحله 2: برنامه را بشناسید - هیئت مدیره
- مرحله 3: برنامه را بشناسید - کاشی
- مرحله 4: برنامه را بشناسید - بازی
- مرحله 5: روشهای مهم - حرکت
تصویری: 2048 بازی خود را با برنامه Java/Java برنامه ریزی کنید: 8 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:51
توسط PranP1My (ناقص) SiteFollow بیشتر توسط نویسنده:
من بازی 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 دوباره فراخوانی می شود.
توصیه شده:
UPS خود را Steam Punk کنید تا ساعتهای به روز برای روتر Wi-Fi خود دریافت کنید: 4 مرحله (همراه با تصاویر)
UPS شما Steam Punk می کند تا ساعتهای به روز برای روتر Wi-fi شما دریافت کند: در مورد اینکه UPS شما قدرت باتری 12 ولت DC خود را به برق AC 220 ولت تبدیل کند ، چیزی اساساً مخالف است تا ترانسفورماتورهای روتر و فیبر ONT شما بتوانند آن را دوباره به 12 ولت DC! شما همچنین با [معمولاً
از ایده های خود محافظت کنید ، از کار خود محافظت کنید: 8 مرحله
از ایده های خود محافظت کنید ، از کار خود محافظت کنید: من چند روز پیش اطلاعات را در اثر خرابی رایانه از دست دادم. کار یک روز از بین رفت.:/ من داده های خود را در ابر ذخیره می کنم تا از نقص دیسک سخت جلوگیری شود. من از یک نرم افزار نسخه سازی استفاده می کنم تا بتوانم نسخه های قدیمی کار خود را بازیابی کنم. من هر روز یک نسخه پشتیبان تهیه می کنم. اما این بار من
بازی های Steam خود را بر روی بازی Retro Arcade Kit با Raspberry Pi اجرا کنید: 7 مرحله
بازی های Steam خود را روی Retro Arcade Kit با Raspberry Pi اجرا کنید: آیا دارای حساب Steam با جدیدترین بازی ها هستید؟ کابینت بازی چطور؟ اگر چنین است ، چرا هر دو را به یک دستگاه بازی شگفت انگیز Steam Streaming ترکیب نکنید. با تشکر از افراد Steam ، اکنون می توانید جدیدترین بازی ها را از رایانه شخصی یا Ma
آردوینو خود را با دستگاه Android از طریق بلوتوث برنامه ریزی کنید: 6 مرحله (همراه با تصاویر)
Arduino خود را با دستگاه Android از طریق بلوتوث برنامه ریزی کنید: سلام جهان ، در این دستورالعمل می خواهم به شما نشان دهم که چگونه Arduino Uno خود را با دستگاه Android خود از طریق بلوتوث برنامه ریزی کنید. بسیار ساده و بسیار ارزان است. همچنین به ما این امکان را می دهد که Arduino خود را در هر جایی که می خواهیم از طریق بلوتوث بی سیم برنامه ریزی کنیم … بنابراین
با تعیین زمان مورد نظر برای انجام این کار ، کامپیوتر خود را برنامه ریزی کنید تا به صورت خودکار خاموش شود: 4 مرحله
برنامه خود را برای خاموش شدن خودکار کامپیوتر با تعیین زمان مورد نظر برای انجام این کار تنظیم کنید: سلام ، این دستورالعمل دیگری است که از زندگی روزمره من گرفته شده است … آخرین باری که مجبور شدم نرم افزارهای زیادی را بر روی رایانه خود بارگیری کنم و مجبور شدم آن را بارگیری کند یک شبه ، من نمی خواستم کامپیوترم را تمام شب بعد از اتمام بارگیری و در ساعت