国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

手把手帶你用Java打造一款對對碰游戲(下篇)

開發 后端
本文主要介紹了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar、Timer等組件的基本使用,以及相應的事件處理。

上篇文章介紹了對對碰游戲的理論部分和介紹了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar等組件的基本使用,介紹了進度條(JProgressBar)常用的方法。今天小編繼續帶來進行具體的對對碰游戲功能實現。

項目實施

在實現對對碰功能之前,回顧一下上一節我們主要完成了開始游戲按鈕、分數、時間進度條、退出游戲按鈕,8X8的動物矩陣的界面設計;

效果圖如下所示:


接下來,小編繼續帶大家完成游戲功能,實現游戲功能需要了解什么是交換、消去、連鎖,在游戲項目設定那里有,在這就不重復寫了。

(一)添加DuiDuiPeng類的成員變量:定義一些變量

代碼如下所示:

  1. private MyListener my = new MyListener(); 
  2.  
  3.  private Timer timer; 
  4.  
  5.  private int score=0;//總分 
  6.  
  7.  private int jindu=0; 
  8.  
  9.  
  10.  private int x1,y1;//第一次點擊按鈕的坐標位置 
  11.  
  12.  private int x2,y2;//第二次點擊按鈕的坐標位置 
  13.  
  14.  private final int EMPTY=-1;//為空的標記 
  15.  
  16.  private boolean isDoubleClicked=false;//是否點擊兩次 

(二)在DuiDuiPeng構造函數里給指定組件添加監聽

  1. btn_start.addActionListener(my);//開始游戲 
  2. btn_exit.addActionListener(my);//退出 

(三)實現事件處理的函數體

當點擊開始按鈕時候,計時器啟動,設置進度條,8X8動物矩陣可以互換位置,當點擊退出按鈕,計時器停止,8X8動物矩陣不可以互換位置。

代碼如下所示:

  1. private  class MyListener implements ActionListener{ 
  2.     @Override 
  3.     public void actionPerformed(ActionEvent e) { 
  4.         // TODO Auto-generated method stub 
  5.         if(e.getSource()==btn_start){//開始游戲 
  6.             btn_start.setEnabled(false); 
  7.             timer.start(); 
  8.             jindu=0; 
  9.             progress.setValue(jindu); 
  10.             score=0; 
  11.             text_score.setText(""+score); 
  12.             for(int i=0;i<8;i++){ 
  13.                 for(int j=0;j<8;j++){ 
  14.                     button[i][j].setEnabled(true); 
  15.                 } 
  16.             } 
  17.             do{initAllAnimals();//初始化動物矩陣 
  18.             }while(searchAllAnimals(1));//searchAllAnimals  1為查詢連接  2為去除連接 
  19.     } 
  20.         if(e.getSource()==btn_exit){//退出按鈕 
  21.             timer.stop(); 
  22.             for(int i=0;i<8;i++){ 
  23.                 for(int j=0;j<8;j++){ 
  24.                     button[i][j].setEnabled(false); 
  25.                 } 
  26.             } 
  27.             dispose(); 
  28.         } 
  29.         for(int i=0;i<8;i++){ 
  30.             for(int j=0;j<8;j++){ 
  31.                 if(e.getSource()==button[i][j]){//動物按鈕 
  32.                     System.out.println((i+1)+"行"+(j+1)+"列"); 
  33.                     swapAnimal(i,j);//實現交換圖片 
  34.  
  35.                 } 
  36.             } 
  37.         } 
  38.     } 

(四)添加計時器

1.在DuiDuiPeng構造函數里添加計時器;

代碼如下所示:

  1. timer=new Timer(1000,new TimerListener()); 

2.進度條的值從0開始每秒加一,直到進度條的值達到100,計時器停止,不能位置交換動物頭像,進度條開始加的時候,開始按鈕是不能點擊的,當進度條達到100的時候,我們設置開始按鈕可以點擊狀態。

代碼如下所示:

  1. private class TimerListener implements ActionListener{ 
  2.     @Override 
  3.     public void actionPerformed(ActionEvent e) { 
  4.         // TODO Auto-generated method stub 
  5.         jindu++; 
  6.         progress.setValue(jindu); 
  7.         if(jindu==100){ 
  8.             timer.stop(); 
  9.             for(int i=0;i<8;i++){ 
  10.                 for(int j=0;j<8;j++){ 
  11.                     button[i][j].setEnabled(false); 
  12.                 } 
  13.             } 
  14.             btn_start.setEnabled(true); 
  15.         } 

(五)初始化動物矩陣

代碼如下所示:

  1. public void initAllAnimals(){//初始化動物矩陣 
  2.     for(int i=0;i<8;i++){ 
  3.         for(int j=0;j<8;j++){ 
  4.             int temp=(int)(Math.random()*7);//0-6 
  5.             button[i][j].setIcon(icon[temp]); 
  6.             animal[i][j]=temp
  7.         } 

(六)查詢是否有三個或以上相同連接的圖形,是返回true,不是返回false,判斷水平方向上是否有三個或以上相同連接的圖形,判斷垂直方向上是否有三個或以上相同連接的圖形

代碼較多,在此就不一一呈現了,文末有獲取代碼的方式。

(七)把三個或以上相同連接圖形設為EMPTY,判斷水平方向上是否有三個或以上相同連接的圖形,把水平方向上有三個或以上相同連接的圖形設為EMPTY。判斷垂直方向上是否有三個或以上相同連接的圖形,把垂直方向上有三個或以上相同連接的圖形設為EMPTY。

代碼較多,在此就不一一呈現了,文末有獲取代碼的方式。

(八)查詢所有動物頭像(1為查詢連接 2為去除連接)

代碼如下所示:

  1. public boolean searchAllAnimals(int flag){ 
  2.  
  3. //1為查詢連接 2為去除連接 
  4.     for(int i=0;i<8;i++){ 
  5.           for(int j=0;j<8;j++){ 
  6.              if(flag==1){ 
  7.                  if(isThreeLinked(i,j)){//查詢是否有三個或以上連接 
  8.                      return true
  9.                 } 
  10.               }else if(flag==2){ 
  11.                    removeThreeLined(i,j); 
  12.               } 
  13.           } 
  14.       } 
  15.      return false

(九)動物往下移動

代碼如下所示:

  1. public void downAnimal(){//動物往下移動 
  2.     int temp
  3.     for(int y=7;y>=0;y--){ 
  4.         for(int x=0;x<8;x++){ 
  5.             if(animal[y][x]==EMPTY){ 
  6.                 //找到一個空的位置 
  7.                 for(int k=y-1;k>=0;k--){ 
  8.                     if(animal[k][x]!=EMPTY){//找到上面一個非空的 
  9.                         temp=animal[k][x]; 
  10.                         animal[k][x]=animal[y][x]; 
  11.                         animal[y][x]=temp
  12.                         break; 
  13.                     } 
  14.                 } 
  15.             } 
  16.         } 

(十)重新顯示所有圖形

代碼如下所示:

  1. public void showAllAnimals(){//重新顯示所有圖形 
  2.     for(int i=0;i<8;i++){ 
  3.           for(int j=0;j<8;j++){ 
  4.               button[i][j].setIcon(icon[animal[i][j]]); 
  5.           } 
  6.       } 
  7.   } 

(十一)為空的重新生成隨機圖形

代碼如下所示:

  1. public void updateAnimal(){//為空的重新生成隨機圖形 
  2.     for(int i=0;i<8;i++){ 
  3.         for(int j=0;j<8;j++){ 
  4.             if(animal[i][j]==EMPTY){ 
  5.                 animal[i][j]=(int)(Math.random()*7); 
  6.             } 
  7.         } 

(十二)交換位置

代碼如下所示

  1. public void swapAnimal(int y,int x){//y為行,x為列 
  2.     if((x>=0 && x<8)&&(y>=0 && y<8)){ 
  3.         if(!isDoubleClicked){ 
  4.             //第一次單擊 
  5.             x1=x; 
  6.             y1=y; 
  7.             isDoubleClicked=true
  8.             System.out.println("第一次單擊的坐標=("+(y1+1)+","+(x1+1)+")"); 
  9.         }else
  10.             x2=x; 
  11.             y2=y; 
  12.             isDoubleClicked=false
  13.             System.out.println("第一次單擊的坐標=("+(y2+1)+","+(x2+1)+")"); 
  14.  
  15.             if((Math.abs(x2-x1)==1 &&(y1==y2)) 
  16.                     ||(x1==x2)&&(Math.abs(y2-y1)==1)){//相鄰兩個按鈕 
  17.                 int temp
  18.                 temp=animal[y2][x2];//交換 
  19.                 animal[y2][x2]=animal[y1][x1]; 
  20.                 animal[y1][x1]=temp
  21.  
  22.                 if(isThreeLinked(y1,x1)|| isThreeLinked(y2,x2)){//有三個或以上連接 
  23.                     if(isThreeLinked(y1,x1)){ 
  24.                         removeThreeLined(y1,x1); 
  25.                     } 
  26.                     if(isThreeLinked(y2,x2)){ 
  27.                         removeThreeLined(y2,x2); 
  28.                     } 
  29.                     downAnimal();//動物往下移動 
  30.                     updateAnimal();//為空的重新生成隨機圖形 
  31.                     showAllAnimals();//重新顯示所有圖形 
  32.                     while(searchAllAnimals(1)){ 
  33.                         searchAllAnimals(2);//去除連接 
  34.                         downAnimal(); 
  35.                         updateAnimal(); 
  36.                         showAllAnimals(); 
  37.                     } 
  38.                 }else{//沒有三個相鄰的 
  39.                     temp=animal[y2][x2];//交換 
  40.                     animal[y2][x2]=animal[y1][x1]; 
  41.                     animal[y1][x1]=temp
  42.                 } 
  43.             } 
  44.         } 

完成事件處理效果圖如下圖所示:


五、總結

1.本文主要介紹了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar、Timer等組件的基本使用,以及相應的事件處理。

2.講解事件處理函數的添加,難點是運用理解構造函數、內部類的創建。完成事件處理開始游戲按鈕,退出功能、實現進度條計時、初始化動物矩陣、在水平方向或垂直方向是否有三個或三個以上的相同連接圖形在、動物往下移、重新顯示所有圖形、為空的重新生成隨機圖形,最后交換位置。

3.這些代碼看起來比較復雜,但其實不是很難,寫的事件處理比較多,希望通過這個對對碰的一個小游戲對你有所幫助!

 

責任編輯:姜華 來源: Java進階學習交流
相關推薦

2021-01-12 05:05:15

Java對碰游戲

2022-02-17 10:26:17

JavaScript掃雷游戲前端

2021-11-01 10:26:07

CanvasAPI畫布技術HTML5

2023-05-22 10:04:24

2021-02-01 08:41:06

Java考試系統

2021-01-04 09:55:26

Java移動互聯網

2021-02-04 15:52:46

Java考試系統

2021-01-05 09:04:20

Javatxt文件

2021-12-30 08:56:57

Python摸魚倒計界面Python基礎

2017-09-14 09:09:04

php應用LibreOfficeWord轉HTML

2021-08-13 09:01:31

Python小游戲Python基礎

2012-10-09 13:52:30

2022-01-24 11:02:27

PySimpleGUPython計算器

2021-01-10 08:14:01

Go語言TCP掃描器

2021-01-21 06:04:55

Go語言TCP目錄生成器

2024-01-07 20:00:27

2022-01-02 07:00:48

Python

2018-09-09 15:38:55

SD-WAN網絡WAN

2023-03-29 10:02:36

2023-01-30 09:27:57

開發自動化配置
點贊
收藏

51CTO技術棧公眾號

av一区二区在线播放| 男男电影完整版在线观看| 精品精品国产三级a∨在线| 欧美视频在线播放| 欧美 日韩精品| 最新亚洲一区| 国产精品99久久久久久www| 欧美激情20| 一本久久综合亚洲鲁鲁五月天 | 日本不卡一区二区三区 | 久久99久久精品欧美| 国产综合视频在线观看| 精品九九久久| 亚洲国产欧美一区二区三区久久| 欧美18一12sex性处hd| 成人精品一区二区三区四区| 久久国产精品精品国产色婷婷| 国产精选一区| 性视频1819p久久| 成人午夜在线| 国产视频欧美视频| 免费电影视频在线看| 欧美在线制服丝袜| 日本精品专区| 亚洲国产精品视频| 99热免费在线观看| 国产亚洲人成网站| 国产 福利 在线| 国产精品综合一区二区| 日韩欧美在线一区二区| 夜夜嗨av一区二区三区网站四季av| 国产美女久久精品| 欧美激情777| 91精品国产自产在线| 欧美男gay| 国产精品96久久久久久又黄又硬| 先锋影音国产精品| 97视频在线观看成人| 国产精品chinese在线观看| 美女国内精品自产拍在线播放| 成人精品视频在线观看| 毛片精品免费在线观看| 亚洲国产视频二区| 国产成人a亚洲精品| 国产99久久| 国产精品免费一区二区三区都可以| 九一国产精品| 91性高湖久久久久久久久_久久99| 日韩欧美国产精品综合嫩v| 国产在线999| 欧美三区视频| 鲁片一区二区三区| 久色婷婷小香蕉久久| 色哺乳xxxxhd奶水米仓惠香| 国产成人av影院| 99精品免费在线观看| 中文字幕制服丝袜成人av| 91九色porny在线| 欧美日韩一区二区三区在线| 国产乱码在线| 久久伊人色综合| 久草在线成人| 国产精品国产亚洲精品看不卡15 | 一区二区三区我不卡| 韩日av一区二区| 波多野结衣家庭教师视频| 中文字幕综合网| 黑人巨大精品欧美一区二区一视频| 偷拍自拍在线视频| 精品日韩av一区二区| 无遮挡动作视频在线观看免费入口| 亚洲精品亚洲人成人网在线播放| 国产精品午夜一区二区欲梦| segui88久久综合9999| 四虎免费在线观看视频| 国产综合久久久久久久久久久久| 中国一级黄色录像| 久久精品视频在线免费观看| 国产精品三级a三级三级午夜| 在线免费精品视频| 在线成人视屏| 欧美在线欧美在线| 亚洲乱码视频| 黄色特一级视频| 一区二区三区日本| 国产福利视频在线| 欧美国产日本在线| 亚洲黄色成人| 男人操女人免费软件| 色婷婷精品久久二区二区蜜臂av| 中国av在线播放| 久久久久一本一区二区青青蜜月| 亚洲国产日韩欧美在线| 久久人妻无码一区二区| 一区二区三区高清在线| 美女在线视频免费| 国产精品一二三在线| 国产精品原创巨作av| 在线国产网址| 中文字幕亚洲无线码a| 99久久九九| 欧美午夜性视频| 色噜噜狠狠色综合欧洲selulu| 成人午夜sm精品久久久久久久| 成人国产精品久久久| 国产毛片精品一区| 蜜桃视频在线观看网站| 日韩有码在线电影| 香蕉久久久久久久av网站| 久久99999| 亚洲欧美国产精品专区久久| 9999国产精品| 国产九九在线视频| 日韩久久久久久| 日韩精品四区| 北条麻妃69av| 精品国产伦理网| 欧美在线影院| 成人au免费视频影院| 亚洲精品电影网在线观看| 中文字幕免费一区二区| 中文字幕在线导航| 国产一区二区三区在线看| 国产视频一区三区| 蜜桃臀av在线| 2019中文字幕在线观看| 成人毛片在线观看| 亚洲综合影视| 99精品国产高清一区二区| 亚洲免费高清视频在线| 精品一区二区三区免费看| 一级特黄录像免费播放全99| 91福利视频网站| 精品国产乱码久久久久久1区2匹| 成人观看免费完整观看| 亚洲欧美中文在线视频| 日本在线观看不卡视频| 日本视频不卡| 国产精品自拍首页| 午夜精品影院在线观看| 美女网站一区| 国产黄视频网站| 久久免费视频这里只有精品| 91丝袜国产在线播放| 国产精品高潮久久| 日韩视频在线视频| 国产亚洲一区二区在线| 国产精品99久久久久久久vr| 2021中文字幕在线| 天堂av一区二区| 日韩美一区二区三区| 亚洲欧美网站| 性欧美1819sex性高清大胸| 精品久久久久久亚洲| 欧洲视频一区二区| 亚洲欧美中文字幕在线一区| 亚洲国产精品成人综合色在线婷婷| 日韩中文字幕无砖| 国语对白在线视频| 国产一区二区三区三区在线观看| 伊人久久大香线蕉精品组织观看| 精品亚洲一区二区三区在线播放| 亚洲日本国产| 欧美jizz18hd性欧美| 国产精品久久久久av福利动漫| 色乱码一区二区三区88| 亚洲国产清纯| 欧美78videosex性欧美| 日韩欧美在线电影| 国产视频丨精品|在线观看| 精东粉嫩av免费一区二区三区| 不卡av播放| 91精品91久久久中77777老牛| 欧美成人精品激情在线观看| 日本一区二区三区在线不卡| 久久91麻豆精品一区| 在线免费福利| 久久综合给合久久狠狠色| 亚洲精品99久久久久| 成人av在线播放网站| 国产日韩三级| 青青草免费在线视频| 麻豆亚洲一区| 亚洲欧美日韩第一区| 国产日产欧美一区二区视频| 精品不卡一区| 大片免费在线观看| www.国产在线视频| 高清欧美性猛交xxxx黑人猛交| 亚洲一区二区三区中文字幕| 欧美午夜一区| 亚洲黄色中文字幕| 九九热免费精品视频| 国产欧美一区二区三区久久| 欧美人狂配大交3d怪物一区| 国产精品资源网| 牛牛精品成人免费视频| 一本一道波多野毛片中文在线 | 中文字幕21页在线看| 黄色三级视频片|