国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java完美實現2048小游戲

2019-11-26 15:14:27
字體:
來源:轉載
供稿:網友

完美地模仿了2048游戲,是根據網友的一個2048改的。

Block.java

import javax.swing.*;import java.awt.*;public class Block extends 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);    else      setText("");//如果值為0則不顯示    setColor();  }   public void setColor() //根據值的不同設定不同的背景顏色、label字體  {    switch (value)       {    case 0:      setBackground(Color.gray);      break;    case 2:      setBackground(new Color(238, 228, 218));      break;    case 4:      setBackground(new Color(238, 224, 198));      break;    case 8:      setBackground(new Color(243, 177, 116));      break;    case 16:      setBackground(new Color(243, 177, 116));      break;    case 32:      setBackground(new Color(248, 149, 90));      break;    case 64:      setBackground(new Color(249, 94, 50));      break;    case 128:      setBackground(new Color(239, 207, 108));      break;    case 256:      setBackground(new Color(239, 207, 99));      break;    case 512:      setBackground(new Color(239, 203, 82));      break;    case 1024:      setBackground(new Color(239, 199, 57));      break;    case 2048:      setBackground(new Color(239, 195, 41));      break;    case 4096:      setBackground(new Color(255, 60, 57));      break;      }  }}

My2048.java

import java.awt.*;import javax.swing.*;public class My2048 extends JFrame {   public My2048()//構造函數   {    setTitle("2048");//設置標題    setSize(400, 400);//設定窗口大小    setLocation(500, 200);//設定窗口起始位置    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    getContentPane().setLayout(new GridLayout(4, 4, 5, 5));//設定布局方式為GridLayout型    new Operation(this);    this.setVisible(true);//設為可視  }   public static void main(String args[]) //程序入口點  {    try    {      UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel");//設定UI    } //接受拋出的異常    catch (ClassNotFoundException | InstantiationException| IllegalAccessException | UnsupportedLookAndFeelException e)    {      e.printStackTrace();    }    JFrame.setDefaultLookAndFeelDecorated(true);//設定Frame的缺省外觀    new My2048();  } }

Operation.java

import java.awt.event.*;import javax.swing.*;public class Operation implements KeyListener{  Block[] block;//用于儲存16個數據  JPanel panel;  public boolean up,down,left,right;  int moveFlag;//用于累計移動的次數  boolean numFlag;//用于判斷是否還能加入新的數字  public Operation(JFrame frame)   {    this.panel = (JPanel)frame.getContentPane();//構造出panel    block = new Block[16];//構造出長度為16的數組    numFlag = true;//初始化    moveFlag = 0;    up=true;down=true;left=true;right=true;    addBlock();    for (int i = 0; i < 2; i++)      appearBlock();    frame.addKeyListener(this);  }   private void addBlock()   {    for (int i = 0; i < 16; i++) //往panel里加入block    {      block[i] = new Block();      block[i].setHorizontalAlignment(JLabel.CENTER);// 不透明的標簽      block[i].setOpaque(true);      panel.add(block[i]);      }  }   public void appearBlock()   {    while (numFlag) //當還能加入隨機的一個新的值得時候    {      int index = (int) (Math.random() * 16);//取一個0到15的隨機整數,這個數作為隨機加入盤中的2或4的位置      if (block[index].getValue() == 0)//如果這個數所在的block數組中值為0,即在為空的時候,加入一個2或4的數字      {        if (Math.random() < 0.5)        {          block[index].setValue(2);        }        else        {          block[index].setValue(4);        }        break;//跳出while      }    }  }   public void judgeAppear() //統計block數組中是否含有值為0的元素,若沒有,則numFlag變為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);          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,4,0,16);          if(t!=-1)          {            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;      }           }  }  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());            block[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());            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;      }           }  }  public void rightBlock()   {    int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;    for(i=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());            block[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());            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;      }           }  }  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());            block[t].setValue(0);          }          else          {            break;          }        }        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;          }        }        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 over()   {    if (numFlag ==false&& up==false&&down==false&&left==false&&right==false) //當不能添加元素,并且不可移動的步數超過36就輸了,輸了的時候在盤中央顯示GAMEOVER    {      block[4].setText("G");      block[5].setText("A");      block[6].setText("M");      block[7].setText("E");      block[8].setText("O");      block[9].setText("V");      block[10].setText("E");      block[11].setText("R");       block[11].addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e){reStart();}});    }  }     public void win() //同OVER  {     block[0].setText("Y");    block[1].setText("O");    block[2].setText("U");    block[13].setText("W");    block[14].setText("I");    block[15].setText("N");    block[15].addMouseListener(new MouseAdapter() {      public void mousePressed(MouseEvent e) {        reStart();      }    });  }  public void reStart()//重啟游戲,和構造函數類似,不在累述  {    numFlag=true;    moveFlag=0;    up=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++)      appearBlock();  }  public void keyPressed(KeyEvent e) //判斷按的上下左右鍵,并依次調用移動函數、判斷函數、添加函數、判斷是否輸掉的函數  {    switch (e.getKeyCode()) {    case KeyEvent.VK_UP:      if(up){      upBlock();}      judgeAppear();      appearBlock();      over();             if(numFlag==false)      {        up=false;      }      else      {        up=true;down=true;left=true;right=true;      }      break;    case KeyEvent.VK_DOWN:      if(down){      downBlock();}      judgeAppear();      appearBlock();      over();      if(numFlag==false)      {        down=false;      }      else      {        up=true;down=true;left=true;right=true;      }      break;    case KeyEvent.VK_LEFT:      if(left){      leftBlock();}      judgeAppear();      appearBlock();      over();             if(numFlag==false)      {        left=false;      }      else      {        up=true;down=true;left=true;right=true;      }      break;    case KeyEvent.VK_RIGHT:      if(right){      rightBlock();}      judgeAppear();      appearBlock();      over();             if(numFlag==false)      {        right=false;      }      else      {        up=true;down=true;left=true;right=true;      }      break;    }   }  public void keyTyped(KeyEvent e) {   }  public void keyReleased(KeyEvent e) {   } }

以上所述就是本文給大家分享的關于java完美實現2048小游戲的全部代碼了,希望對大家學習java能夠有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹江口市| 武夷山市| 郧西县| 江达县| 林口县| 上虞市| 改则县| 全椒县| 呼图壁县| 湘乡市| 深泽县| 昌乐县| 泸西县| 绥芬河市| 吉隆县| 桐城市| 漳平市| 温州市| 嵊州市| 岳阳市| 阳谷县| 全州县| 玛沁县| 庄浪县| 三明市| 元氏县| 泗水县| 双江| 章丘市| 新乐市| 濮阳市| 黎城县| 济南市| 铅山县| 英山县| 沙湾县| 肥西县| 彝良县| 乡宁县| 神农架林区| 黄平县|