Она идеально имитирует игру 2048 и модифицирована на основе игры 2048 от пользователя сети.
Блок.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);//Если значение равно 0, оно не будет отображаться setColor(); } public void setColor() //Устанавливаем разные цвета фона и шрифты меток в соответствии с разными значениями { switch (value) { case 0: setBackground(Color.gray); setBackground(new Color(238, 228, 218)); случай 4: setBackground(new Color(238, 224, 198)); случай 8: setBackground(new Color(243, 177, 116)); ; случай 16: setBackground(new Color(243, 177, 116)); случай 32: setBackground(new Color(248, 149, 90)); случай 64: setBackground(new Color(249, 94, 50)); случай 128: setBackground(new Color(239, 207, 108)); ; случай 256: setBackground(new Color(239, 207, 99)); 512: setBackground(new Color(239, 203, 82)); перерыв; случай 1024: setBackground(new Color(239, 199, 57)); перерыв; случай 2048: setBackground(new Color(239, 195, 41)) ; перерыв; случай 4096: setBackground(new Color(255, 60, 57)); перерыв } }}My2048.java
import java.awt.*;import javax.swing.*;public class My2048 расширяет 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 type new Operation( this ); this.setVisible(true);//Установить видимость} public static void main(String args[]) //Точка входа в программу { try { UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); //Установка пользовательского интерфейса } //Принимаем выброшенное исключение catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e .printStackTrace() }; JFrame.setDefaultLookAndFeelDecorated(true);//Установить внешний вид Frame по умолчанию new My2048();Операция.java
import java.awt.event.*;import javax.swing.*;public class Operation реализует блок KeyListener{ Block[];//Используется для хранения 16 данных. Панель JPanel; public boolean up, down, left, right; int moveFlag ; //Используется для накопления количества ходов boolean numFlag;//Используется для определения возможности добавления новых чисел public Operation(JFrameframe) { 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++) applyBlock();frame.addKeyListener(this); 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]); public void появитьсяBlock() { while (numFlag) //Когда можно добавить новое случайное значение { int index = (int) (Math.random() * 16 // Берем случайное целое число от 0 до 15, и это число будет добавлено на диск случайным образом как 2); Или позиция 4 if (block[index].getValue() == 0)//Если значение в массиве блоков, где находится это число, равно 0, то есть когда он пуст, добавьте число 2 или 4 { if (Math.random() < 0.5) {block[index].setValue(2); } else {block[index].setValue(4); //Выходим из while } } } public voidudgeAppear() //Считаем, есть ли массив блоков содержит значения, является элементом 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; for(j=i+4;j<16;j+= 4) { valueJ=0; valueI=0; if(block[index].getValue()==0) { t=Find(index,4,0,16); if(t!=-1); блок[индекс].setValue(блок[t].getValue()); блок[t].setValue(0); } else {break; } } valueI=block[index].getValue(); ].getValue()==0) { t=Find(j,4,0,16); if(t!=-1) { блок[j].setValue(block[t].getValue()); блок[t].setValue(0); else {break; } } valueJ=block[j].getValue(); if(valueI== valueJ&&valueI!=0&&valueJ!=0) { блок[index].setValue(valueI+valueJ); блок[j].setValue(0); numFlag = true } 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) { блок[index].setValue(block[t].getValue()); блок[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()); блок[t].setValue(0); else {break; } } valueJ=block[j]. getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) { блок[index].setValue(valueI+valueJ); блок[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); if(t!=-1) { block[index].setValue(block) [t].getValue()); блок[t].setValue(0); } else {break; } } valueI=block[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) { блок[index].setValue(valueI+valueJ); блок[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) { блок[index].setValue(block[t].getValue()); блок[t].setValue(0 } else {break; valueI=block[index].getValue(); if(block[j].getValue()==0) { t=Find(j,1,j,i+4); if(t!=-1) { блок[j].setValue(block[t].getValue()); блок[t].setValue(0 } else {break; } } valueJ=block[j].getValue(); if(valueI==valueJ&&valueI!=0&&valueJ!=0) {block[index].setValue(valueI+valueJ); блок[j].setValue(0); numFlag = true; over() { if (numFlag ==false&& up==false&&down==false&&left==false&&right==false) //Когда элементы не могут быть добавлены и количество неподвижных шагов превышает 36, вы проигрываете. При проигрыше в центре диска отображается GAMEOVER { block[4].setText("G"); setText("A "); блок[6].setText("M"); блок[7].setText("E"); блок[8].setText("O"); блок[9].setText( «В»); блок[10].setText("E"); блок[11].setText("R"); блок[11].addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e){reStart();}} } } public void win() //То же, что и OVER {block[0].setText("Y"); block[1].setText("O"); блок[2].setText("U"); блок[13].setText("W"); блок[14].setText("I"); блок[15].setText("N"); 15].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) {reStart(); } }); reStart()//Перезапускаем игру, аналогично конструктору, больше нет описания { numFlag=true; moveFlag=0; up=true;down=true;left=true;right=true for(int i=0;i < 16;i++) блок[i].setValue(0); for (int i = 0; i <2; i++) появляютсяBlock(); } public void keyPressed(KeyEvent e) // Оцениваем нажатые клавиши вверх, вниз, влево и вправо и вызываем функцию перемещения, функцию оценки, функцию добавления и функцию, чтобы определить, следует ли проиграть в последовательности { switch (e.getKeyCode()) { case KeyEvent.VK_UP: если (вверх) { upBlock() ;} JudgeAppear(); over(); if (numFlag==false) { up=false; } else { up=true;down=true;left=true;right = истина } перерыв; KeyEvent.VK_DOWN: if(down){ downBlock();} JudgeAppear(); over(); if(numFlag==false) {down=false; else { up=true;down=true;left =true;right=true; } перерыв; случай KeyEvent.VK_LEFT: if(left){ leftBlock();}udgeAppear(); over(); if(numFlag==false) { left=false; } else { up=true;down=true;left=true;right=true } перерыв; случай KeyEvent.VK_RIGHT: if(right){ rightBlock();} JudgeAppear {); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }Выше приведен весь код, который рассказывает вам об идеальной реализации мини-игры 2048 на Java. Надеюсь, он будет полезен всем при изучении Java.