Il imite parfaitement le jeu 2048 et est modifié sur la base d'un 2048 d'un internaute.
Bloc.java
import javax.swing.*;import java.awt.*;public class Block extends JLabel { private int value; public Block() { value = 0;//La valeur initiale est 0 setFont(new Font("font", Font . PLAIN, 40));//Définissez la police setBackground(Color.gray);//Définissez la couleur initiale sur gris} public int getValue()//Obtenez la valeur { valeur de retour } public void; setValue(int value) { this.value = value; String text = String.valueOf(value); if (value != 0) setText(text else setText("");//Si la valeur est 0, il ne sera pas affiché setColor(); } public void setColor() //Définir différentes couleurs d'arrière-plan et polices d'étiquettes en fonction de différentes valeurs { switch (value) { case 0: setBackground(Color.gray case 2 ); setBackground(new Color(238, 228, 218)); cas 4 : setBackground(new Color(238, 224, 198)); cas 8 : setBackground(new Color(243, 177, 116)); ; cas 16 : setBackground(new Color(243, 177, 116)); cas 32 : setBackground(nouvelle couleur(248, 149, 90)); cas 64 : setBackground(nouvelle couleur(249, 94, 50)); cas 128 : setBackground(nouvelle couleur(239, 207, 108)); ; cas 256 : setBackground(new Color(239, 207, 99)); 512 : setBackground(new Color(239, 203, 82)); cas 1024 : setBackground(new Color(239, 199, 57)); cas 2048 : setBackground(new Color(239, 195, 41)) ; pause ; cas 4096 : setBackground(nouvelle couleur(255, 60, 57)); pause ;Mon2048.java
import java.awt.*;import javax.swing.*;public class My2048 extends JFrame { public My2048()//Constructor { setTitle("2048");//Définir le titre setSize(400, 400);//Set Définir la taille de la fenêtre setLocation(500, 200);//Définir la position de départ de la fenêtre setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(4, 4, 5, 5));//Définir le mode de mise en page sur le type GridLayout new Operation( this ); this.setVisible(true);//Définir visible} public static void main(String args[]) //Point d'entrée du programme { try { UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); //Définir l'interface utilisateur } //Accepter l'exception levée (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e .printStackTrace(); JFrame.setDefaultLookAndFeelDecorated(true);//Définir l'apparence par défaut du Frame new My2048();Opération.java
import java.awt.event.*;import javax.swing.*;public class L'opération implémente le bloc KeyListener{ Block[];//Utilisé pour stocker 16 données JPanel panel; public boolean up,down,left,right; //Utilisé pour accumuler le nombre de mouvements boolean numFlag;//Utilisé pour déterminer si de nouveaux numéros peuvent être ajoutés public Operation(JFrame frame) { this.panel = (JPanel)frame.getContentPane();//Construire un bloc de panneau = new Block[16];//Construire un tableau d'une longueur de 16 numFlag = true;//Initialiser moveFlag = 0; up=true;down=true; left=true;right=true; addBlock(); for (int i = 0; i < 2; i++) applyBlock(); addBlock() { for (int i = 0; i < 16; i++) //Ajouter un bloc au panneau { block[i] = new Block(); block[i].setOpaque(true); panel.add(block[i]); } } public void applyBlock() { while (numFlag) //Quand une nouvelle valeur aléatoire peut être ajoutée { int index = (int) (Math.random() * 16); // Prenez un entier aléatoire de 0 à 15, et ce nombre sera ajouté au disque de manière aléatoire sous la forme 2 Ou la position de 4 si (block[index].getValue() == 0)//Si la valeur dans le tableau de blocs où se trouve ce numéro est 0, c'est-à-dire lorsqu'il est vide, ajoutez le nombre 2 ou 4 { si (Math .random() < 0.5) { block[index].setValue(2); } else { block[index].setValue(4);//Sauter hors de while } } } public void JudgeAppear() //Compte si le tableau de blocs contient des valeurs est un élément de 0, sinon, numFlag devient false { int sum = 0; for (int i = 0; i < 16; i++) { if (block[i].getValue() != 0) { somme++; } } if (somme == 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 valeurJ=0;int valeurI=0;int index=0; pour(i=0;i<4;i++) { index=i; 4) { valeurJ=0; valeurI=0; if(block[index].getValue()==0) { t=Find(index,4,0,16); block[index].setValue(block[t].getValue()); block[t].setValue(0); else { break; } } valueI=block[index].getValue(); ].getValue()==0) { t=Find(j,4,0,16); if(t!=-1) { block[j].setValue(block[t].getValue()); block[t].setValue(0); else { break; } } valueJ=block[j].getValue(); valeurJ&&valeurI!=0&&valeurJ!=0) { bloc[index].setValue(valeurI+valeurJ); bloc[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; valueI=0; { t=Trouver(index,-4,0,16); if(t!=-1) { block[index].setValue(block[t].getValue()); } 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 } else { break; 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 valeurJ=0;int valeurI=0;int index=0; =3;i<16;i+=4) { index=i; pour(j=i-1;j>i-4;j--) { valeurJ=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; } } valueI=block[index].getValue(); ) { t=Trouver(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 valeurJ=0;int valeurI=0;int index=0; pour(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()); block[t].setValue(0 } else { break; 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); 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; over() { if (numFlag ==false&& up==false&&down==false&&left==false&&right==false) //Lorsque les éléments ne peuvent pas être ajoutés et que le nombre d'étapes inamovibles dépasse 36, vous perdez. Lorsque vous perdez, GAMEOVER s'affiche au centre du disque { block[4].setText("G"); setText("A "); bloc[6].setText("M"); bloc[7].setText("E"); bloc[8].setText("O"); "V") ; block[10].setText("E"); block[11].setText("R"); block[11].addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e){reStart();}} ); } } public void win() //Identique à OVER { block[0].setText("Y"); bloc[2].setText("U"); bloc[13].setText("W"); bloc[14].setText("I"); bloc[15].setText("N"); 15].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { reStart(); } } } public void reStart()//Redémarrer le jeu, similaire au constructeur, plus de description { numFlag=true; moveFlag=0; up=true;down=true;left=true;right=true; < 16;i++) block[i].setValue(0); for (int i = 0; i < 2; i++) applyBlock(); } public void keyPressed(KeyEvent e) // Jugez les touches haut, bas, gauche et droite enfoncées et appelez la fonction de déplacement, la fonction de jugement, la fonction d'ajout et la fonction pour juger s'il faut perdre dans la séquence { switch (e.getKeyCode()) { case KeyEvent.VK_UP : if(up){ upBlock() ;} jugeAppear(); apparaîtBlock(); if(numFlag==false) { up=false; else { up=true;down=true;left=true;right =vrai ; } cas de rupture ; KeyEvent.VK_DOWN : if(down){ downBlock();} jugeAppear(); apparaîtBlock(); if(numFlag==false) { down=false;} else { up=true;down=true;left =true;right=true; } break; case KeyEvent.VK_LEFT : if(left){ leftBlock();} jugeAppear(); if(numFlag==false) { left=false; } else { up=true;down=true;left=true;right=true } break; (); apparaîtBlock(); over(); if(numFlag==false) { right=false } else { up=true;down=true;left=true;right=true; } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }Ce qui précède est tout le code que cet article partage avec vous sur la mise en œuvre parfaite du mini-jeu 2048 en Java. J'espère qu'il sera utile à tout le monde dans l'apprentissage de Java.