Es imitiert das Spiel 2048 perfekt und basiert auf einem 2048 eines Internetnutzers.
Block.java
import javax.swing.*;import java.awt.*;public class Block erweitert JLabel { private int value; public Block() { value = 0;//Der Anfangswert ist 0 setFont(new Font("font", Font . PLAIN, 40));//Setze die Schriftart setBackground(Color.gray);//Setze die Anfangsfarbe auf Grau} public int getValue()//Erhalte den Wert { return value } public void setValue(int value) { this.value = value; String text = String.valueOf(value); if (value != 0) setText(text);//Wenn der Wert 0 ist, ist es wird nicht angezeigt setColor(); } public void setColor() // Verschiedene Hintergrundfarben und Beschriftungsschriftarten entsprechend unterschiedlicher Werte festlegen { switch (value) { case 0: setBackground(Color.gray); setBackground(new Color(238, 228, 218)); break; case 4: setBackground(new Color(238, 224, 198)); break; ; Fall 16: setBackground(new Color(243, 177, 116)); setBackground(new Color(248, 149, 90)); break; case 64: setBackground(new Color(249, 94, 50)); break; ; case 256: setBackground(new Color(239, 207, 99)); 512: setBackground(new Color(239, 203, 82)); break; case 1024: setBackground(new Color(239, 199, 57)); ; break; case 4096: setBackground(new Color(255, 60, 57)); Pause;My2048.java
import java.awt.*;import javax.swing.*;public class My2048 erweitert JFrame { public My2048()//Constructor { setTitle("2048");//Setze den Titel setSize(400, 400);//Set Fenstergröße festlegen setLocation(500, 200);//Legen Sie die Startposition des Fensters fest setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(4, 4, 5, 5));//Setzen Sie den Layoutmodus auf den Typ GridLayout new Operation( this); this.setVisible(true);//Sichtbar setzen} public static void main(String args[]) //Programmeinstiegspunkt { try { UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); //Setzen Sie die Benutzeroberfläche ein. //Akzeptieren Sie die ausgelöste Ausnahme. Catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e .printStackTrace( } JFrame.setDefaultLookAndFeelDecorated(true);//Setzen Sie das Standard-Erscheinungsbild von Frame new My2048();Operation.java
import java.awt.event.*;import javax.swing.*;public class Operation implementiert KeyListener{ Block[] block;//Wird zum Speichern von 16 Daten verwendet JPanel-Panel; public boolean up,down,left,right; int moveFlag ; //Wird verwendet, um die Anzahl der Bewegungen zu akkumulieren boolean numFlag;//Wird verwendet, um zu bestimmen, ob neue Zahlen hinzugefügt werden können public Operation(JFrame frame) { this.panel = (JPanel)frame.getContentPane();//Panelblock erstellen = new Block[16];//Ein Array mit einer Länge von 16 erstellen numFlag = true;//Initialize moveFlag = 0; up=true;down=true; left=true;right=true; addBlock(); for (int i = 0; i < 2; i++) ErscheinungBlock(this } private void); addBlock() { for (int i = 0; i < 16; i++) // Block zum Panel hinzufügen { block[i] = new Block(); block[i].setHorizontalAlignment(JLabel.CENTER); // Undurchsichtige Beschriftung block[i].setOpaque(true); panel.add(block[i]); //Wenn ein neuer Zufallswert hinzugefügt werden kann { int index = (int) (Math.random() * 16); // Nehmen Sie eine zufällige Ganzzahl von 0 bis 15 und diese Zahl wird zufällig als 2 zur Festplatte hinzugefügt Oder die Position von 4, wenn (block[index].getValue() == 0)//Wenn der Wert im Blockarray, in dem sich diese Zahl befindet, 0 ist, das heißt, wenn es leer ist, fügen Sie eine Zahl von 2 oder hinzu 4 { if (Math .random() < 0.5) { block[index].setValue(2); } else { block[index].setValue(4); } break;//Jump out while } } } public void JudgeAppear() //Zählen, ob das Blockarray enthält Werte ist ein Element von 0, wenn nicht, wird numFlag zu false { 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; for(j=i+4;j<16;j+= 4) { valueJ=0; valueI=0; if(block[index].getValue()==0) { t=Find(index,4,0,16) { block[index].setValue(block[t].getValue(0); } else { break } } valueI=block[index].getValue(); ].getValue()==0) { t=Find(j,4,0,16); if(t!=-1) { block[j].setValue(block[t].getValue(0); } else { break[j].getValue(); valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(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; for(i=12;i< 16;i++) { index=i; for(j=i-4;j>=0;j-=4) { valueJ=0; valueI=0; if(block[index].getValue()==0) { t=Find(index,-4,0,16); if(t!=-1) { block[index].setValue(block[t].getValue(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(0); getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ(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; if(block[index].getValue()==0) { t=Find(index,-1,i-3,index+1); if(t!=-1) { block[index].setValue(block [t].getValue()); block[t].setValue(0); } else { break[index].getValue(); if(block[j].getValue()==0 ) { t=Find(j,-1,i-3,j+1); if(t!=-1) { block[j].setValue(block[t].getValue()); (0); } else { break; } valueJ=block[j].getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); block[j].setValue(0); numFlag = true } index=j; } } public void leftBlock() { int i=0,j=0;int 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; if(block[index].getValue()==0) { t=Find(index,1,index, i+4); if(t!=-1) { block[index].setValue(block[t].getValue(0) } valueI=block[index].getValue(); if(block[j].getValue()==0) { t=Find(j,1,j,i+4); if(t!=-1) { block[j].setValue(block[t].getValue()); block[t].setValue(0); } else { break[j].getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { block[index].setValue(valueI+valueJ); numFlag = true; over() { if (numFlag ==false&& up==false&&down==false&&left==false&&right==false) //Wenn keine Elemente hinzugefügt werden können und die Anzahl der unbeweglichen Schritte 36 überschreitet, wird GAMEOVER in der Mitte der Festplatte angezeigt { block[4].setText("G"); setText("A"); block[6].setText("M"); block[7].setText("E"); „V“) ; block[10].setText("E"); block[11].setText("R"); block[11].addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e){reStart();}} ); } } public void win() //Gleiche wie OVER { block[0].setText("Y"); block[2].setText("U"); block[13].setText("W"); block[14].setText("I"); 15].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { reStart(); } }} public void reStart()//Starte das Spiel neu, ähnlich wie beim Konstruktor, keine Beschreibung mehr { numFlag=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++) ErscheinungBlock( } public void keyPressed(KeyEvent e) //Beurteilen Sie die gedrückten Aufwärts-, Abwärts-, Links- und Rechtstasten und rufen Sie die Bewegungsfunktion, die Beurteilungsfunktion, die Additionsfunktion und die Funktion auf, um zu beurteilen, ob nacheinander verloren gehen soll { switch (e.getKeyCode()) { case KeyEvent.VK_UP: if(up){ upBlock() ;} JudgeAppear(); if(numFlag==false) { up=true;down=true;left=true;right =true; } break; KeyEvent.VK_DOWN: if(down){ downBlock();} discover(); if(numFlag==false) { up=true;down=true;left =true;right=true; if(numFlag==false) { left=false; } else { up=true;down=true;left=true;right=true; } break; (); ErscheinungBlock(); over(); if(numFlag==false) { up=true;down=true;left=true;right=true; } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }Das Obige ist der gesamte Code, den dieser Artikel mit Ihnen über die perfekte Implementierung des 2048-Minispiels in Java teilt. Ich hoffe, dass er für alle beim Erlernen von Java hilfreich sein wird.