[Java] Java 2048游戏源码 →→→→→进入此内容的聊天室

来自 , 2019-06-24, 写在 Java, 查看 112 次.
URL http://www.code666.cn/view/2f29b6e3
  1. package my2048;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5.  
  6. @SuppressWarnings("serial")
  7. public class Block extends JLabel {
  8.     private int value;
  9.  
  10.     public Block() {
  11.         value = 0;
  12.         setFont(new Font("font", Font.PLAIN, 40));
  13.         setBackground(Color.gray);
  14.  
  15.     }
  16.  
  17.     public int getValue() {
  18.         return value;
  19.     }
  20.  
  21.     public void setValue(int value) {
  22.         this.value = value;
  23.         String text = String.valueOf(value);
  24.         if (value != 0)
  25.             setText(text);
  26.         else
  27.             setText("");
  28.         setColor();
  29.     }
  30.  
  31.     public void setColor() {
  32.             switch (value) {
  33.         case 0:
  34.             setBackground(Color.gray);
  35.             break;
  36.         case 2:
  37.             setBackground(new Color(238, 228, 218));
  38.             break;
  39.         case 4:
  40.             setBackground(new Color(238, 224, 198));
  41.             break;
  42.         case 8:
  43.             setBackground(new Color(243, 177, 116));
  44.             break;
  45.         case 16:
  46.             setBackground(new Color(243, 177, 116));
  47.             break;
  48.         case 32:
  49.             setBackground(new Color(248, 149, 90));
  50.             break;
  51.         case 64:
  52.             setBackground(new Color(249, 94, 50));
  53.             break;
  54.         case 128:
  55.             setBackground(new Color(239, 207, 108));
  56.             break;
  57.         case 256:
  58.             setBackground(new Color(239, 207, 99));
  59.             break;
  60.         case 512:
  61.             setBackground(new Color(239, 203, 82));
  62.             break;
  63.         case 1024:
  64.             setBackground(new Color(239, 199, 57));
  65.             break;
  66.         case 2048:
  67.             setBackground(new Color(239, 195, 41));
  68.             break;
  69.         case 4096:
  70.             setBackground(new Color(255, 60, 57));
  71.             break;
  72.     }
  73. }
  74.  
  75.  
  76. package my2048;
  77. import java.awt.event.*;
  78. import javax.swing.*;
  79.  
  80. public class Operation implements KeyListener{
  81.     Block[] block;
  82.     JPanel panel;
  83.     int moveFlag;
  84.     boolean numFlag;
  85.  
  86.     public Operation(JFrame frame) {
  87.         this.panel = (JPanel)frame.getContentPane();
  88.         block = new Block[16];
  89.         numFlag = true;
  90.         moveFlag = 0;
  91.         addBlock();
  92.         for (int i = 0; i < 2; i++)
  93.             appearBlock();
  94.         frame.addKeyListener(this);
  95.  
  96.     }
  97.  
  98.     private void addBlock() {
  99.         for (int i = 0; i < 16; i++) {
  100.             block[i] = new Block();
  101.             block[i].setHorizontalAlignment(JLabel.CENTER);
  102.             // 不透明
  103.             block[i].setOpaque(true);
  104.             panel.add(block[i]);
  105.              
  106.         }
  107.     }
  108.  
  109.     public void appearBlock() {
  110.         while (numFlag) {
  111.             int index = (int) (Math.random() * 16);
  112.             if (block[index].getValue() == 0) {
  113.                 if (Math.random() < 0.5)
  114.                     block[index].setValue(2);
  115.                 else
  116.                     block[index].setValue(4);
  117.                 break;
  118.             }
  119.         }
  120.     }
  121.  
  122.     public void judgeAppear() {
  123.         int sum = 0;
  124.         for (int i = 0; i < 16; i++) {
  125.             if (block[i].getValue() != 0)
  126.                 sum++;
  127.         }
  128.         if (sum == 16)
  129.             numFlag = false;
  130.  
  131.     }
  132.  
  133.     public void upBlock() {
  134.  
  135.         for (int i = 12; i < 16; i++) {
  136.             int index = i;
  137.             for (int j = i - 4; j >= i - 12; j -= 4) {
  138.                 int valueI = block[index].getValue(), valueJ = block[j]
  139.                         .getValue();
  140.                 if (valueJ == 0) {
  141.                     block[index].setValue(0);
  142.                     block[j].setValue(valueI);
  143.                 } else {
  144.                     if (valueI == valueJ) {
  145.                         block[index].setValue(0);
  146.                         block[j].setValue(valueI + valueJ);
  147.                         if (valueI + valueJ == 4096)
  148.                             win();
  149.                         numFlag = true;
  150.                         moveFlag = 0;
  151.                          
  152.                          
  153.                         if(j>i-12)
  154.                             if(block[j-4].getValue()==(valueI+valueJ))
  155.                         break;
  156.  
  157.                     } else if (numFlag == false)
  158.                         moveFlag += 1;
  159.                 }
  160.                 index = j;
  161.             }
  162.         }
  163.  
  164.     }
  165.  
  166.     public void downBlock() {
  167.  
  168.         for (int i = 0; i < 4; i++) {
  169.             int index = i;
  170.             for (int j = i + 4; j <= i + 12; j += 4) {
  171.                 int valueI = block[index].getValue(), valueJ = block[j]
  172.                         .getValue();
  173.                 if (valueJ == 0) {
  174.                     block[index].setValue(0);
  175.                     block[j].setValue(valueI);
  176.                 } else {
  177.                     if (valueI == valueJ) {
  178.                         block[index].setValue(0);
  179.                         block[j].setValue(valueI + valueJ);
  180.                         if (valueI + valueJ == 4096)
  181.                             win();
  182.                         numFlag = true;
  183.                         moveFlag = 0;
  184.                          
  185.                         if(j<i+12)
  186.                             if(block[j+4].getValue()==(valueI+valueJ))
  187.                         break;
  188.                          
  189.                     } else if (numFlag == false)
  190.                         moveFlag += 1;
  191.                 }
  192.                 index = j;
  193.             }
  194.         }
  195.  
  196.     }
  197.     public void rightBlock() {
  198.  
  199.         for (int i = 0; i <= 12; i += 4) {
  200.             int index = i;
  201.             for (int j = i + 1; j <= i + 3; j++) {
  202.                 int valueI = block[index].getValue(), valueJ = block[j]
  203.                         .getValue();
  204.                 if (valueJ == 0) {
  205.                     block[index].setValue(0);
  206.                     block[j].setValue(valueI);
  207.                 } else {
  208.                     if (valueI == valueJ) {
  209.                         block[index].setValue(0);
  210.                         block[j].setValue(valueI + valueJ);
  211.                         if (valueI + valueJ == 4096)
  212.                             win();
  213.                         numFlag = true;
  214.                         moveFlag = 0;
  215.  
  216.                         if(j<i+3)
  217.                             if(block[j+1].getValue()==(valueI+valueJ))
  218.                         break;
  219.                     } else if (numFlag == false)
  220.                         moveFlag += 1;
  221.                 }
  222.                 index = j;
  223.             }
  224.         }
  225.  
  226.     }
  227.     public void leftBlock() {
  228.  
  229.         for (int i = 3; i <= 15; i += 4) {
  230.             int index = i;
  231.             for (int j = i - 1; j >= i - 3; j--) {
  232.                 int valueI = block[index].getValue(), valueJ = block[j]
  233.                         .getValue();
  234.                 if (valueJ == 0) {
  235.                     block[index].setValue(0);
  236.                     block[j].setValue(valueI);
  237.                 } else {
  238.                     if (valueI == valueJ) {
  239.                         block[index].setValue(0);
  240.                         block[j].setValue(valueI + valueJ);
  241.                         if (valueI + valueJ == 4096)
  242.                             win();
  243.                         numFlag = true;
  244.                         moveFlag = 0;
  245.                          
  246.                         if(j<i-3)
  247.                             if(block[j-1].getValue()==(valueI+valueJ))
  248.                         break;
  249.                     } else if (numFlag == false)
  250.                         moveFlag += 1;
  251.                 }
  252.                 index = j;
  253.             }
  254.         }
  255.  
  256.     }
  257.     public void over() {
  258.         if (!numFlag && moveFlag >= 36) {
  259.             block[4].setText("G");
  260.             block[5].setText("A");
  261.             block[6].setText("M");
  262.             block[7].setText("E");
  263.             block[8].setText("O");
  264.             block[9].setText("V");
  265.             block[10].setText("E");
  266.             block[11].setText("R");
  267.              
  268.             block[11].addMouseListener(new MouseAdapter() {
  269.                 @Override
  270.                 public void mousePressed(MouseEvent e) {
  271.                     reStart();
  272.                 }
  273.             });
  274.         }
  275.     }
  276.      
  277.     public void win() {
  278.          
  279.         block[0].setText("Y");
  280.         block[1].setText("O");
  281.         block[2].setText("U");
  282.         block[13].setText("W");
  283.         block[14].setText("I");
  284.         block[15].setText("N");
  285.          
  286.         block[15].addMouseListener(new MouseAdapter() {
  287.             @Override
  288.             public void mousePressed(MouseEvent e) {
  289.                 reStart();
  290.             }
  291.         });
  292.  
  293.     }
  294.     public void reStart(){
  295.         numFlag=true;
  296.         moveFlag=0;
  297.         for(int i=0;i<16;i++)
  298.             block[i].setValue(0);
  299.         for (int i = 0; i < 2; i++)
  300.             appearBlock();
  301.     }
  302.     @Override
  303.     public void keyPressed(KeyEvent e) {
  304.         switch (e.getKeyCode()) {
  305.         case KeyEvent.VK_UP:
  306.             upBlock();
  307.             judgeAppear();
  308.             appearBlock();
  309.             over();
  310.             break;
  311.         case KeyEvent.VK_DOWN:
  312.             downBlock();
  313.             judgeAppear();
  314.             appearBlock();
  315.             over();
  316.             break;
  317.         case KeyEvent.VK_LEFT:
  318.             leftBlock();
  319.             judgeAppear();
  320.             appearBlock();
  321.             over();
  322.             break;
  323.         case KeyEvent.VK_RIGHT:
  324.             rightBlock();
  325.             judgeAppear();
  326.             appearBlock();
  327.             over();
  328.             break;
  329.         }
  330.  
  331.     }
  332.  
  333.      
  334.     @Override
  335.     public void keyTyped(KeyEvent e) {
  336.  
  337.     }
  338.  
  339.     @Override
  340.     public void keyReleased(KeyEvent e) {
  341.  
  342.     }
  343.  
  344. }
  345.  
  346. package my2048;
  347.  
  348. import java.awt.*;
  349. import javax.swing.*;
  350. @SuppressWarnings("serial")
  351. public class My2048 extends JFrame {
  352.  
  353.     public My2048() {
  354.         setTitle("2048");
  355.         setSize(400, 400);
  356.         setLocation(500, 200);
  357.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  358.         getContentPane().setLayout(new GridLayout(4, 4, 5, 5));
  359.         new Operation(this);
  360.         this.setVisible(true);
  361.     }
  362.  
  363.     public static void main(String args[]) {
  364.         try {
  365.             UIManager
  366.                     .setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel");
  367.  
  368.             e.printStackTrace();
  369.         }
  370.         JFrame.setDefaultLookAndFeelDecorated(true);
  371.         new My2048();
  372.     }
  373.  
  374. }

回复 "Java 2048游戏源码"

这儿你可以回复上面这条便签

captcha