Ini dengan sempurna meniru game 2048 dan dimodifikasi berdasarkan 2048 dari seorang netizen.
Blokir.java
import javax.swing.*;import java.awt.*;public class Block extends JLabel { private int value; public Block() { value = 0;//Nilai awal adalah 0 setFont(new Font("font", Font . POLOS, 40));//Atur font setBackground(Color.gray);//Atur warna awal menjadi abu-abu} public int getValue()//Dapatkan nilai { return value } public void setValue(int value) { this.value = value; String text = String.valueOf(value); if (value != 0) setText(text); else setText("");//Jika nilainya 0, maka tidak akan ditampilkan setColor(); } public void setColor() //Setel warna latar belakang dan font label yang berbeda sesuai dengan nilai yang berbeda { switch (nilai) { case 0: setBackground(Color.gray break; setBackground(Warna baru(238, 228, 218)); istirahat; kasus 4: setBackground(Warna baru(238, 224, 198)); istirahat; ; kasus 16: setBackground(Warna baru(243, 177, 116)); setBackground(Warna baru(248, 149, 90)); istirahat; kasus 64: setBackground(Warna baru(249, 94, 50)); istirahat; ; kasus 256: setBackground(Warna baru(239, 207, 99)); 512: setBackground(Warna baru(239, 203, 82)); kasus 2048: setBackground(Warna baru(239, 195, 41)); ; istirahat; kasus 4096: setBackground(Warna baru(255, 60, 57)); istirahat;My2048.java
import java.awt.*;import javax.swing.*;public class My2048 extends JFrame { public My2048()//Constructor { setTitle("2048");//Tetapkan judul setSize(400, 400);//Set Setel ukuran jendela setLocation(500, 200);//Atur posisi awal jendela setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(4, 4, 5, 5));//Atur mode tata letak ke jenis GridLayout Operasi baru( ini ); ini.setVisible(true);//Set terlihat} public static void main(String args[]) //Titik masuk program { coba { UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); //Setel UI } //Terima tangkapan pengecualian yang dilempar (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e .printStackTrace(); JFrame.setDefaultLookAndFeelDecorated(true);//Setel tampilan default Frame new My2048();Operasi.java
import java.awt.event.*;import javax.swing.*;public class Operasi mengimplementasikan blok KeyListener{ Block[];//Digunakan untuk menyimpan 16 data panel JPanel; boolean publik atas, bawah, kiri, kanan; //Digunakan untuk mengakumulasikan jumlah pergerakan boolean numFlag; // Digunakan untuk menentukan apakah nomor baru dapat ditambahkan public Operation(JFrame frame) { this.panel = (JPanel)frame.getContentPane();//Membangun blok panel = Blok baru[16];//Membangun array dengan panjang 16 numFlag = true;//Inisialisasi moveFlag = 0; kiri=benar;kanan=benar; addBlock(); untuk (int i = 0; i < 2; i++) munculBlock(); frame.addKeyListener(ini); addBlock() { for (int i = 0; i < 16; i++) //Tambahkan blok ke panel { block[i] = new Block(); blok[i].setOpaque(benar); panel.add(blok[i]); //Ketika nilai acak baru dapat ditambahkan { int indeks = (int) (Math.random() * 16); // Ambil bilangan bulat acak dari 0 hingga 15, dan angka ini akan ditambahkan ke disk secara acak sebagai 2 Atau posisi 4 if (block[index].getValue() == 0)//Jika nilai dalam array blok tempat angka ini berada adalah 0, yaitu jika kosong, tambahkan angka 2 atau 4 { jika (Matematika .random() < 0.5) { block[index].setValue(2); else { block[index].setValue(4);//Lompat keluar dari while } } } public void judgeAppear() //Hitung apakah array blok berisi nilai adalah elemen 0, jika tidak, numFlag menjadi false { int sum = 0; for (int i = 0; i < 16; i++) { if (block[i].getValue() != 0) { jumlah++; } } jika (jumlah == 16) numFlag = salah; } publik int Temukan(int i,int j,int a,int b) { while(i<b&&i>=a) { jika( blok[i].getValue()!=0) { kembalikan i; } i=i+j; } kembalikan -1; } public void upBlock() { int i=0,j=0;int t=0;int nilaiJ=0;int nilaiI=0;int indeks=0; untuk(i=0;i<4;i++) { indeks=i; untuk(j=i+4;j<16;j+= 4) { nilaiJ=0; nilaiI=0; jika(blok[indeks].getValue()==0) { t=Temukan(indeks,4,0,16); blok[indeks].setValue(blok[t].getValue()); blok[t].setValue(0); else { break; } } valueI=blok[index].getValue(); ].getValue()==0) { t=Temukan(j,4,0,16); jika(t!=-1) { blok[j].setValue(blok[t].getValue()); blok[t].setValue(0); else { break; } } valueJ=block[j].getValue(); nilaiJ&&nilaiI!=0&&nilaiJ!=0) { blok[indeks].setValue(nilaiI+nilaiJ); blok[j].setValue(0); indeks=j; } } } public void downBlock() { int i=0,j=0;int t=0;int nilaiJ=0;int nilaiI=0;int indeks=0; 16;i++) { indeks=i; untuk(j=i-4;j>=0;j-=4) { nilaiJ=0; { t=Temukan(indeks,-4,0,16); jika(t!=-1) { blok[index].setValue(block[t].getValue()); } else { istirahat; } } nilaiI=blok[indeks].getValue(); jika(blok[j].getValue()==0) { t=Temukan(j,-4,0,16); if(t!=-1) { blok[j].setValue(blok[t].getValue()); blok[t].setValue(0 } else { istirahat; getValue(); jika(nilaiI==nilaiJ&&nilaiI!=0&&nilaiJ!=0) { blok[indeks].setValue(nilaiI+nilaiJ blok[j].setValue(0); numFlag = benar; } indeks=j; } } } public void rightBlock() { int i=0,j=0;int t=0;int nilaiJ=0;int nilaiI=0;int indeks=0; =3;i<16;i+=4) { indeks=i; untuk(j=i-1;j>i-4;j--) { nilaiJ=0; nilaiI=0; if(block[index].getValue()==0) { t=Temukan(index,-1,i-3,index+1); if(t!=-1) { block[index].setValue(block [t].getValue()); blok[t].setValue(0); lain { istirahat; } } nilaiI=blok[indeks].getValue(); ) { t=Temukan(j,-1,i-3,j+1); jika(t!=-1) { blok[j].setValue(blok[t].getValue()); (0); } lain { istirahat; } } nilaiJ=blok[j].getValue(); jika(nilaiI==nilaiJ&&nilaiI!=0&&nilaiJ!=0) { blok[indeks].setValue(nilaiI+nilaiJ); blok[j].setValue(0); numFlag = benar; } indeks=j; } } } public void leftBlock() { int i=0,j=0;int t=0;int nilaiJ=0;int nilaiI=0;int indeks=0; untuk(i=0;i<16;i+=4) { indeks=i; untuk(j=i+1;j<i+4;j++) { nilaiJ=0; nilaiI=0; jika(blok[indeks].getValue()==0) { t=Temukan(indeks,1,indeks, i+4); jika(t!=-1) { blok[indeks].setValue(blok[t].getValue()); blok[t].setValue(0); nilaiI=blok[indeks].getValue(); jika(blok[j].getValue()==0) { t=Temukan(j,1,j,i+4); blok[j].setValue(blok[t].getValue()); blok[t].setValue(0); lain { istirahat; } } nilaiJ=blok[j].getValue(); if(nilaiI==nilaiJ&&nilaiI!=0&&nilaiJ!=0) { blok[indeks].setValue(nilaiI+nilaiJ); blok[j].setValue(0); numFlag = benar; over() { if (numFlag ==false&& atas==salah&&bawah==salah&&kiri==salah&&kanan==salah) //Ketika elemen tidak dapat ditambahkan dan jumlah langkah tidak bergerak melebihi 36, Anda kalah. Jika kalah, GAMEOVER ditampilkan di tengah disk { block[4].setText("G"); setTeks("A "); blok[6].setTeks("M"); blok[7].setTeks("E"); blok[8].setTeks("O"); "V" ); blok[10].setText("E"); blok[11].setText("R"); blok[11].addMouseListener(MouseAdapter baru() {public void mousePressed(MouseEvent e){reStart();}} ); } } public void win() //Sama seperti OVER { blok[0].setText("Y"); blok[2].setTeks("U"); blok[13].setTeks("W"); blok[14].setTeks("Saya"); blok[15].setTeks("N"); 15].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { reStart(); } }); reStart()//Restart permainan, mirip dengan konstruktor, tidak ada lagi deskripsi { numFlag=true; moveFlag=0; up=true;down=true;left=true;right=true; < 16;i++) blok[i].setValue(0); untuk (int i = 0; i < 2; i++) munculBlock(); } public void keyPressed(KeyEvent e) //Menilai tombol atas, bawah, kiri dan kanan yang ditekan, dan memanggil fungsi pindah, fungsi penilaian, fungsi tambah, dan fungsi untuk menilai apakah akan kalah secara berurutan { switch (e.getKeyCode()) { case KeyEvent.VK_UP: jika(atas){ upBlock() ;} judgeAppear(); munculBlock(); atas(); jika(numFlag==false) { atas=salah; } else { atas=benar;bawah=benar;kiri=benar;kanan =benar; } rusak; KeyEvent.VK_DOWN: if(bawah){ downBlock();} judgeAppear(); munculBlock(); over(); if(numFlag==false) { bawah=false; =benar;kanan=benar; } istirahat; kasus KeyEvent.VK_LEFT: if(kiri){ leftBlock();} judgeAppear(); if(numFlag==false) { kiri=salah; } else { atas=benar;bawah=benar;kiri=benar;kanan=benar } kasus KeyEvent.VK_RIGHT: if(kanan){ rightBlock();} judgeAppear (); munculBlock(); atas(); jika(numFlag==salah) { kanan=salah; } lain { atas=benar;bawah=benar;kiri=benar;kanan=benar; } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }Di atas adalah semua kode yang dibagikan artikel ini kepada Anda tentang implementasi sempurna mini game 2048 di Java. Saya harap ini dapat membantu semua orang dalam mempelajari Java.