亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > 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能夠有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品久久久| 欧美国产激情18| 羞羞色国产精品| 久久在线视频在线| 日韩的一区二区| 亚洲少妇激情视频| 亚洲国产成人精品久久久国产成人一区| 国产一区二区在线播放| 一区二区三区四区精品| 九九热精品在线| 久久久久久久久久国产| 精品在线观看国产| 欧美在线一区二区视频| 精品亚洲一区二区三区在线观看| 亚洲国产精品人人爽夜夜爽| 亚洲电影免费观看高清完整版在线观看| 欧美国产日韩一区二区三区| 成人激情视频网| 琪琪第一精品导航| 国产精品毛片a∨一区二区三区|国| 欧美www视频在线观看| 色婷婷亚洲mv天堂mv在影片| 日韩最新中文字幕电影免费看| 97精品在线视频| 久久成人这里只有精品| 中文字幕av一区| 91精品国产91久久| 91在线观看免费高清| 91久久在线视频| 国产玖玖精品视频| 91sao在线观看国产| 欧美日韩亚洲系列| 国产精品美女www爽爽爽视频| 国产视频精品xxxx| 欧美日本高清一区| 97在线视频国产| 日韩黄在线观看| 欧美成人免费网| 国产精品久久一区主播| 午夜精品久久久久久久男人的天堂| 成人福利在线观看| 日韩在线视频网| 亚洲精品一区二区在线| 亚洲人免费视频| 国产区精品在线观看| 日韩欧美亚洲成人| 欧美激情在线狂野欧美精品| 777777777亚洲妇女| 最近日韩中文字幕中文| 久久亚洲精品国产亚洲老地址| 国产精品电影网站| 欧美xxxx综合视频| 日韩欧美aⅴ综合网站发布| 少妇精69xxtheporn| 国产日韩精品综合网站| 国产精品日韩欧美大师| 国产精品久久久久秋霞鲁丝| 97香蕉超级碰碰久久免费软件| 97国产一区二区精品久久呦| 91精品国产一区| 亚洲男人av在线| 亚洲已满18点击进入在线看片| 欧美在线一级视频| 国产福利精品视频| 亚洲黄色在线看| 九九热最新视频//这里只有精品| 国产精品免费福利| 亚洲永久免费观看| 亚洲男人av电影| 亚洲福利在线观看| 九九热这里只有在线精品视| 91久久夜色精品国产网站| 日韩欧美福利视频| 久久综合免费视频| 国产精品日韩电影| 亚洲美女久久久| 亚洲视频999| 亚洲第一天堂无码专区| 亚洲人午夜精品免费| 38少妇精品导航| 综合av色偷偷网| 亚洲精品自拍视频| 亚洲情综合五月天| 久久久久久国产精品久久| 亚洲裸体xxxx| 久久久久免费视频| 久操成人在线视频| 欧美黄色www| 在线播放国产一区中文字幕剧情欧美| 久久久久成人网| 精品久久久91| 欧美日韩国产一区在线| 美女福利视频一区| 国产亚洲精品久久久| 国产日韩在线观看av| 色哟哟亚洲精品一区二区| 一本色道久久综合亚洲精品小说| 久久久久久成人| 成人黄在线观看| 欧美性极品xxxx做受| 亚洲人成网站777色婷婷| 国产成人av网| 欧美激情欧美激情在线五月| 2021国产精品视频| 亚洲性线免费观看视频成熟| 亚洲天堂男人天堂女人天堂| 中文字幕一区二区三区电影| 亚洲人永久免费| 亚洲成人1234| 国产极品精品在线观看| 亚洲精品久久久久久久久久久| 久久亚洲电影天堂| 日韩经典一区二区三区| 精品国产网站地址| 91九色综合久久| 日韩在线播放一区| 欧美精品一区二区三区国产精品| 疯狂欧美牲乱大交777| 日韩电影免费观看在线| 国产福利精品av综合导导航| 在线播放国产一区二区三区| 亚洲国产精品字幕| 亚洲天堂精品在线| 日韩免费高清在线观看| 欧美精品日韩www.p站| 欧美成人精品不卡视频在线观看| 在线精品国产欧美| 欧美大片大片在线播放| 日本久久久久久久久| 欧美日韩aaaa| 北条麻妃一区二区三区中文字幕| 亚洲欧洲午夜一线一品| 国产欧美va欧美va香蕉在线| 91成人国产在线观看| 欧美另类极品videosbestfree| 国产精品扒开腿做爽爽爽男男| 日韩大片免费观看视频播放| 欧美黑人国产人伦爽爽爽| 国产精品一区二区三| 欧美一级电影免费在线观看| 欧美亚洲国产精品| 午夜精品久久久久久久99黑人| 欧美国产日韩一区二区在线观看| 日本精品久久久| 亚洲精品成人免费| 国产一区二区丝袜高跟鞋图片| 91久久精品日日躁夜夜躁国产| 欧美亚洲一区在线| 国产精品亚洲аv天堂网| 97在线免费视频| 欧美一区二粉嫩精品国产一线天| 国产一区二区三区在线观看视频| 国产精品99久久久久久久久| 日韩在线观看免费av| 精品色蜜蜜精品视频在线观看| 亚洲精品乱码久久久久久按摩观| 亚洲男人天堂九九视频| 亚洲淫片在线视频| 国产精品久久久久久久久久久不卡| 国产精品久久久久久久久影视| 性欧美亚洲xxxx乳在线观看| 亚洲日本欧美日韩高观看| 国产一区二区三区18| 欧美午夜精品久久久久久久|