มันเลียนแบบเกมปี 2048 ได้อย่างสมบูรณ์แบบและได้รับการแก้ไขโดยอิงจากปี 2048 จากชาวเน็ต
Block.java
import javax.swing.*;import java.awt.*;public class Block ขยาย JLabel { private int value; 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(); } โมฆะสาธารณะ setColor() // ตั้งค่าสีพื้นหลังและแบบอักษรป้ายกำกับที่แตกต่างกันตามค่าที่ต่างกัน { สวิตช์ (ค่า) { กรณีที่ 0: setBackground(Color.gray แบ่ง; setBackground (สีใหม่ (238, 228, 218)); กรณีที่ 4: setBackground (สีใหม่ (238, 224, 198)); กรณีที่ 8: setBackground (สีใหม่ (243, 177, 116)); ; กรณีที่ 16: setBackground (สีใหม่ (243, 177, 116)); กรณีที่ 32: setBackground (สีใหม่ (248, 149, 90)); กรณีที่ 64: setBackground (สีใหม่ (249, 94, 50)); กรณีที่ 128: setBackground (สีใหม่ (239, 207, 108)); ; กรณีที่ 256: setBackground (สีใหม่ (239, 207, 99)); 512: setBackground (สีใหม่ (239, 203, 82)); ตัวแบ่ง; กรณี 1024: setBackground (สีใหม่ (239, 199, 57)); ตัวแบ่ง; ; ตัวพิมพ์ 4096: setBackground (สีใหม่ (255, 60, 57)); แตก;My2048.java
import java.awt.*;import javax.swing.*;public class My2048 extension 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.setVisible (จริง); // ตั้งค่าที่มองเห็นได้} โมฆะคงที่สาธารณะ main (String args []) // จุดเข้าโปรแกรม { ลอง { UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); // ตั้งค่า UI } // ยอมรับการจับข้อยกเว้นที่ส่งออกมา (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e .printStackTrace(); } JFrame.setDefaultLookAndFeelDecorated(true);//ตั้งค่าลักษณะเริ่มต้นของ Frame ใหม่ My2048();Operation.java
import java.awt.event.*;import javax.swing.*;public class Operation ใช้ KeyListener{ Block[] block;//ใช้เพื่อเก็บข้อมูล 16 ข้อมูล JPanel บูลีนสาธารณะ ขึ้น, ลง, ซ้าย, ขวา; //ใช้เพื่อสะสมจำนวนการเคลื่อนไหวบูลีน numFlag;//ใช้เพื่อตรวจสอบว่าสามารถเพิ่มหมายเลขใหม่ได้หรือไม่ การดำเนินการสาธารณะ (เฟรม JFrame) { this.panel = (JPanel)frame.getContentPane();//สร้างแผงบล็อก = บล็อกใหม่[16];//สร้างอาร์เรย์ที่มีความยาว 16 numFlag = true;//เริ่มต้น moveFlag = 0; up=true;down=true; left=true;right=true; addBlock(); for (int i = 0; i < 2; i++) ปรากฏBlock(); frame.addKeyListener(สิ่งนี้); addBlock() { for (int i = 0; i < 16; i++) //เพิ่มบล็อกไปที่แผง { block[i] = new Block(); block[i].setHorizontalAlignment(JLabel.CENTER); block[i].setOpaque(true); panel.add(block[i]); } } โมฆะสาธารณะปรากฏBlock() { ในขณะที่ (numFlag) // เมื่อสามารถเพิ่มค่าสุ่มใหม่ได้ { 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;//กระโดดออกจาก while } } } public void allowanceAppear() //นับว่าอาร์เรย์บล็อก มีค่าเป็นองค์ประกอบ 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 ค้นหา(int i,int j,int a,int b) { while(i<b&&i>=a) { if( block[i].getValue()!=0) { return i; } i=i+j; } สาธารณะเป็นโมฆะ upBlock() { int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int ดัชนี=0; for(i=0;i<4;i++) { index=i; for(j=i+4;j<16;j+= 4) { valueJ=0; valueI=0; if(บล็อก[ดัชนี].getValue()==0) { t=Find(ดัชนี,4,0,16); บล็อก [ดัชนี] .setValue (บล็อก [t] .getValue ()); บล็อก [t] .setValue (0); } อื่น ๆ { แบ่ง; } } valueI = บล็อก [ดัชนี] .getValue (); ].getValue()==0) { t=ค้นหา(j,4,0,16); ถ้า(t!=-1) { บล็อก [j] .setValue (บล็อก [t] .getValue ()); บล็อก [t] .setValue (0); } อื่น ๆ { แบ่ง; } } valueJ = บล็อก [j] .getValue (); valueJ&&valueI!=0&&valueJ!=0) { block[ดัชนี].setValue(valueI+valueJ); block[j].setValue(0); index=j; } } } downBlock สาธารณะ () { int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0; for(i=12;i< 16;i++) { index=i; for(j=i-4;j>=0;j-=4) { valueJ=0; valueI=0; if(บล็อก[ดัชนี].getValue()==0) { t=ค้นหา(ดัชนี,-4,0,16); if(t!=-1) { บล็อก[ดัชนี].setValue(บล็อก[t].getValue()); บล็อก[t].setValue(0); } else { แบ่ง; } } 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); บล็อก[j].setValue(0); numFlag = true; } ดัชนี = j; } } } โมฆะสาธารณะ rightBlock () { int i = 0, j = 0; int t = 0; int valueJ = 0; int valueI = 0; int index = 0; =3;i<16;i+=4) { ดัชนี=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); if(t!=-1) { บล็อก[ดัชนี].setValue(block [t].getValue()); block[t].setValue(0); } else { แบ่ง; } } valueI=block[index].getValue(); if(block[j].getValue()==0 ) { t=Find(j,-1,i-3,j+1); if(t!=-1) { บล็อก[j].setValue(บล็อก[t].getValue()); บล็อก[t].setValue (0); } else { แบ่ง; } } valueJ=block[j].getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); block[j].setValue(0); numFlag = true; } ดัชนี=j; } } สาธารณะเป็นโมฆะ leftBlock() { int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int ดัชนี=0; for(i=0;i<16;i+=4) { ดัชนี=i; for(j=i+1;j<i+4;j++) { valueJ=0; valueI=0; if(block[index].getValue()==0) { t=ค้นหา(ดัชนี,1,ดัชนี, i+4); if(t!=-1) { block[index].setValue(block[t].getValue()); บล็อก[t].setValue(0); valueI=บล็อก[ดัชนี].getValue(); if(บล็อก[j].getValue()==0) { t=Find(j,1,j,i+4); if(t!=-1) { บล็อก [j] .setValue (บล็อก [t] .getValue ()); บล็อก [t] .setValue (0); } อื่น ๆ { แบ่ง; } } valueJ = บล็อก [j] .getValue (); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); block[j].setValue(0); numFlag = true; } } } } สาธารณะ เกิน() { ถ้า (numFlag ==false&& up==false&&down==false&&left==false&&right==false) //เมื่อไม่สามารถเพิ่มองค์ประกอบและจำนวนขั้นตอนที่ไม่สามารถเคลื่อนย้ายเกิน 36 คุณจะสูญเสีย เมื่อคุณสูญเสีย GAMEOVER จะแสดงที่กึ่งกลางของดิสก์ { block[4].setText("G"); setText("A "); block[6].setText("M"); block[7].setText("E"); block[8].setText("O"); "วี" ; บล็อก [10] .setText ("E"); บล็อก [11] .setText ("R"); บล็อก [11] .addMouseListener (MouseAdapter ใหม่ () { โมฆะสาธารณะ mousePressed (MouseEvent e) {reStart ();}} } } โมฆะสาธารณะชนะ () // เช่นเดียวกับ OVER { block[0].setText("Y"); block[1].setText("O"); บล็อก[2].setText("U"); บล็อก[13].setText("W"); บล็อก[14].setText("I"); บล็อก[15].setText("N"); 15].addMouseListener(ใหม่ MouseAdapter() { โมฆะสาธารณะ mousePressed(MouseEvent e) { เริ่มต้นใหม่(); } }); } โมฆะสาธารณะ reStart()//รีสตาร์ทเกม คล้ายกับ Constructor ไม่มีคำอธิบายอีกต่อไป { numFlag=true; moveFlag=0; up=true;down=true;left=true;right=true; for(int i=0;i < 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() ;} ผู้พิพากษาปรากฏ(); over(); if(numFlag==false) { up=false; } else { up=true;down=true;left=true;right =true; } กรณี; KeyEvent.VK_DOWN: if(down){ downBlock();} ผู้พิพากษาปรากฏ(); over(); if(numFlag==false) { down=false; } else { up=true;down=true;left =true;right=true; } case KeyEvent.VK_LEFT: if(left){ leftBlock();} ผู้พิพากษาปรากฏ(); if(numFlag==false) { left=false; } else { up=true;down=true;left=true;right=true; } ตัวแบ่ง; case KeyEvent.VK_RIGHT: if(right){ rightBlock();} (); ปรากฏBlock(); if(numFlag==false) { right=false; } else { up=true;down=true;left=true;right=true; } } โมฆะสาธารณะ keyTyped (KeyEvent e) { } โมฆะสาธารณะ keyReleased (KeyEvent e) { } }ข้างต้นคือโค้ดทั้งหมดที่บทความนี้แชร์กับคุณเกี่ยวกับการใช้งานมินิเกม 2048 ใน Java อย่างสมบูรณ์แบบ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคนในการเรียนรู้ Java