إنها تحاكي لعبة 2048 تمامًا وتم تعديلها بناءً على 2048 من أحد مستخدمي الإنترنت.
Block.java
import javax.swing.*;import java.awt.*;public class Block Extends JLabel { public Block() { value = 0;// القيمة الأولية هي 0 setFont(new Font("font"، Font PLAIN, 40));// اضبط الخط setBackground(Color.gray);// اضبط اللون الأولي على اللون الرمادي} public int getValue()//احصل على القيمة { return value } public void setValue(int value) { this.value = value; String text = String.valueOf(value); if (value != 0) setText(text); else setText("");// إذا كانت القيمة 0 لن يتم عرض setColor(); } public void setColor() // قم بتعيين ألوان خلفية مختلفة وخطوط التسمية وفقًا لقيم مختلفة { Switch (value) { case 0: setBackground(Color.gray case 2; setBackground(new Color(238, 228, 218));break; case 4: setBackground(new Color(238,224,198));break; ; case 16: setBackground(new Color(243, 177, 116)); setBackground(new Color(248, 149, 90)); case 64: setBackground(new Color(249, 94, 50)); ; case 256: setBackground(new Color(239, 207, 99)); 512: setBackground(new Color(239, 203, 82));break; استراحة؛ الحالة 4096: setBackground(new Color(255, 60, 57)); استراحة } }}My2048.java
import java.awt.*;import javax.swing.*;public class My2048 Extends JFrame { public My2048()//Constructor { setTitle("2048");// تعيين العنوان setSize(400, 400);//Set تعيين حجم النافذة setLocation(500, 200);// اضبط موضع البداية للنافذة setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(4, 4, 5, 5));// اضبط وضع التخطيط على نوع GridLayout new Operation(); this ); this.setVisible(true);// تعيين مرئي} public static void main(String args[]) // نقطة إدخال البرنامج { حاول { UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); // تعيين واجهة المستخدم } // قبول صيد الاستثناء الذي تم طرحه (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e .printStackTrace(); } JFrame.setDefaultLookAndFeelDecorated(true);// قم بتعيين المظهر الافتراضي للإطار new My2048(); } }عملية.جافا
import java.awt.event.*;import javax.swing.*;public class Operationlets KeyListener{ Block[] block;// يستخدم لتخزين 16 لوحة JPanel؛ // يستخدم لتجميع عدد الحركات boolean numFlag;// يستخدم لتحديد ما إذا كان من الممكن إضافة أرقام جديدة public Operation(JFrameframe) { this.panel = (JPanel)frame.getContentPane();// إنشاء كتلة اللوحة = new Block[16];// إنشاء مصفوفة بطول 16 numFlag = true;// تهيئة moveFlag = 0; left=true;right=true(); for (int i = 0; i < 2; i++) riseBlock(); addBlock() { for (int i = 0; i < 16; i++) // أضف كتلة إلى اللوحة { block[i] = new Block[i].setHorizontalAlignment(JLabel.CENTER); block[i].setOpaque(true.add(block[i]); // عندما يمكن إضافة قيمة عشوائية جديدة { int Index = (int) (Math.random() * 16); // خذ عددًا صحيحًا عشوائيًا من 0 إلى 15، وستتم إضافة هذا الرقم إلى القرص بشكل عشوائي مثل 2 أو موضع 4 if (block[index].getValue() == 0)// إذا كانت القيمة في مصفوفة الكتلة حيث يوجد هذا الرقم هي 0، أي عندما تكون فارغة، أضف رقمًا 2 أو 4 { إذا (الرياضيات .random() < 0.5) { block[index].setValue(2); } else { block[index].setValue(4 }break;// القفز خارج الوقت } } } public void القاضيAppear() // احسب ما إذا كانت مصفوفة الكتلة يحتوي على قيم وهو عنصر من 0، إذا لم يكن كذلك، يصبح numFlag خطأ { int sum = 0 for (int i = 0; i < 16; i++) { if (block[i].getValue(); != 0) { sum++; } } if (sum == 16) numFlag = false } public int Find(int i,int j,int a,int b) { while(i<b&&i>=a) { if( block[i].getValue()!=0) { return i } i=i+j } return -1 } public void upBlock() { int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int Index=0; for(i=0;i<4;i++) { Index=i; 4) { valueJ=0; valueI=0; block[index].setValue(block[t].getValue()); block[t].setValue(0); .getValue()==0) { t=Find(j,4,0,16); block[j].setValue(block[t].getValue()); block[t].setValue(0); valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); block[j].setValue(0); Index=j; } } } public void downBlock() { int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int Index=0; 16;i++) { Index=i; for(j=i-4;j>=0;j-=4) { valueJ=0 if(block[index].getValue()==0) { t=Find(index,-4,0,16); if(t!=-1) { block[index].setValue(block[t].getValue()); block[t].setValue(0); } else {break; } } valueI=block[index].getValue(); if(block[j].getValue()==0) { t=Find(j,-4,0,16); if(t!=-1) { block[j].setValue(block[t].getValue()); block[t].setValue(0); getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); block[j].setValue(0); numFlag = true; } Index=j; } } } public void rightBlock() { int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int Index=0; =3;i<16;i+=4) { Index=i; for(j=i-1;j>i-4;j--) { valueJ=0 valueI=0; if(block[index].getValue()==0) { t=Find(index,-1,i-3,index+1); [t].getValue()); block[t].setValue(0); ) { t=Find(j,-1,i-3,j+1); if(t!=-1) { block[j].setValue(block[t].getValue()); (0)؛ } else { استراحة } } valueJ=block[j].getValue(); block[index].setValue(valueI+valueJ); block[j].setValue(0); t=0;int valueJ=0;int valueI=0;int Index=0; for(i=0;i<16;i+=4) { Index=i; for(j=i+1;j<i+4;j++) { valueJ=0 valueI=0; i+4); if(t!=-1) { block[index].setValue(block[t].getValue()); block[t].setValue(0); valueI=block[index].getValue(); if(block[j].getValue()==0) { t=Find(j,1,j,i+4); block[j].setValue(block[t].getValue()); block[t].setValue(0); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); block[j].setValue(0); } Index=j; over() { if (numFlag ==false&& up==false&&down==false&&left==false&&right==false) // عندما لا يمكن إضافة العناصر ويتجاوز عدد الخطوات غير المنقولة 36، ستخسر. عندما تخسر، يتم عرض GAMEOVER في وسط القرص { block[4].setText("G"); block[6].setText("M"); block[7].setText("E"); block[8].setText("O"); "الخامس") ؛ block[10].setText("E"); block[11].setText("R"); block[11].addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e){reStart();}} } } public void win() // مثل OVER { block[0].setText("Y"); block[2].setText("U"); block[13].setText("W"); block[14].setText("I"); block[15].setText("N"); 15].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { reStart(); } }); reStart()// أعد تشغيل اللعبة، على غرار المُنشئ، لا مزيد من الوصف { numFlag=true=0; up=true;down=true;left=true;right=true; < 16;i++) block[i].setValue(0); for (int i = 0; i < 2; i++) الظهورBlock() } public void keyPressed(KeyEvent e) // احكم على المفاتيح لأعلى ولأسفل ولليسار ولليمين المضغوطة، واستدعاء وظيفة النقل، ووظيفة الحكم، وإضافة وظيفة، والوظيفة للحكم على ما إذا كنت تريد الخسارة في التسلسل { Switch (e.getKeyCode()) { case KeyEvent.VK_UP: if(up){ upBlock() ;} القاضيAppear(); over(); if(numFlag==false) { up=false } else { up=true;down=true;left=true;right =صحيح } استراحة؛ KeyEvent.VK_DOWN: if(down){ downBlock();} القاضيAppear(); over(); if(numFlag==false) { down=false } else { up=true;down=true;left =true;right=true; if(numFlag==false) { left=false } else { up=true;down=true;left=true;right=true }break; (); over(); if(numFlag==false) { right=false } else { up=true;down=true; } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }ما ورد أعلاه هو كل التعليمات البرمجية التي تشاركها هذه المقالة معك حول التنفيذ المثالي للعبة 2048 المصغرة في Java. وآمل أن تكون مفيدة للجميع في تعلم Java.