最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java語言實現(xiàn)掃雷游戲(2)

 更新時間:2020年04月23日 17:13:47   作者:kakaluoteyy  
這篇文章主要為大家詳細介紹了Java語言實現(xiàn)掃雷游戲第二部分代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java語言實現(xiàn)的掃雷游戲的第2部分代碼,供大家參考,具體內(nèi)容如下

上一篇文章中,我們已經(jīng)將掃雷的繪制了方格陣列并隨機分配了炸彈的位置,接下來我們要將陣列全部覆蓋上按鈕.因為我們要通過按鈕來獲知當前方格的坐標,所以簡單的Button按鈕還無法滿足我們的要求,所以,我們就自定義一個按鈕的類,讓它繼承自Button類,但要給他加上行號和列號,這樣我們就能直接通過按鈕讀取它的位置了

import javax.swing.JButton;
 
public class MyButton extends JButton {
 private static final long serialVersionUID = 1L;
 protected int row;
 protected int col;
}

然后我們就可以在GamePanel類中添加按鈕了

// 初始化按鈕,將JLabel覆蓋住
 private void initButtons() {
 // 循環(huán)生成按鈕
 for (int i = 0; i < rows; i++) {
 for (int j = 0; j < cols; j++) {
 MyButton btn = new MyButton();
 // 根據(jù)JLabel大小設(shè)置按鈕的大小邊界
 btn.setBounds(j * BLOCKWIDTH, i * BLOCKHEIGHT, BLOCKWIDTH, BLOCKHEIGHT);
 this.add(btn);
 // 將按鈕存在類變量中(當然,實際上存的是對象的引用地址)
 buttons[i][j] = btn;
 btn.row = i;
 btn.col = j;
 // 給按鈕添加監(jiān)聽器,注冊點擊事件
 // (單機按鈕時,將執(zhí)行內(nèi)部類ActionListener()中的actionPerformed(ActionEvent e)方法)
 btn.addActionListener(new ActionListener() {
 
 @Override
 public void actionPerformed(ActionEvent e) {
 // TODO Auto-generated method stub
 
 }});
 }
 }
 }

按鈕全部覆蓋以后,顯示如下:

最后,我們就差單擊按鈕后判斷按鈕底下是炸彈,空白,還是數(shù)字,如果下面是數(shù)字的話,我們就打開按鈕(也就是將按鈕設(shè)置為不可見,就可以看見JLabel了); 如果單擊的按鈕下面是空白的話先要將它打開,并且判斷它周圍的八個方塊是否為空的,進入遞歸調(diào)用.

首先,要判斷每個小方塊周圍的八個方塊,就要先判斷它是否越界,我們設(shè)為一個類變量作為坐標偏移量

private final int[][] offset = {{-1, -1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}};

判斷是否越界:

// 判斷位置是否越界
 private boolean verify(int row, int col) {
 return row >= 0 && row < this.rows && col >= 0 && col < this.cols;
 }

然后我們寫單擊按鈕時的邏輯方法

// 單擊按鈕時打開或成片打開
 private void open(MyButton btn) {
 // 先將當期按鈕設(shè)置為不可見,即打開了按鈕
 btn.setVisible(false);
 // 判斷按鈕中 是否為數(shù)字還是空
 switch (labels[btn.row][btn.col].getText()) {
 // 如果是炸彈則將全部按鈕都打開,游戲結(jié)束
 case "*" :
 for (int i = 0; i < rows; i++) {
 for (int j = 0; j < cols; j++) {
 buttons[i][j].setVisible(false);
 }
 }
 break;
 // 如果是空的則將他周圍空的按鈕都打開,進入遞歸
 case "" :
 for (int[] off: offset) {
 int newRow = btn.row + off[0];
 int newCol = btn.col + off[1];
 if (verify(newRow, newCol)) {
 MyButton sButton = buttons[newRow][newCol];
 if (sButton.isVisible()) {
 open(sButton);
 }
 }
 }
 default:
 }
 }

最后,我們在initButtons方法的單擊事件中引用這個方法

btn.addActionListener(new ActionListener() {
 
 @Override
 public void actionPerformed(ActionEvent e) {
 // TODO Auto-generated method stub
 open((MyButton) e.getSource());
 }});

大功告成,我們的簡易掃雷游戲正式完成了!

更多精彩游戲,請參考專題《java經(jīng)典小游戲》

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 通俗易懂學習java并發(fā)工具類-Semaphore,Exchanger

    通俗易懂學習java并發(fā)工具類-Semaphore,Exchanger

    這篇文章主要介紹了java并發(fā)工具類-Semaphore,Exchanger,java并發(fā)工具類有很多,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面小編帶大家來一起學習一下吧
    2019-06-06
  • Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息

    Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息

    這篇文章主要介紹了Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 從0到1構(gòu)建springboot web應用鏡像并使用容器部署的過程

    從0到1構(gòu)建springboot web應用鏡像并使用容器部署的過程

    這篇文章主要介紹了從0到1構(gòu)建springboot web應用鏡像并使用容器部署,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java多線程并發(fā)編程和鎖原理解析

    Java多線程并發(fā)編程和鎖原理解析

    這篇文章主要介紹了Java多線程并發(fā)編程和鎖原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • SpringCloud Bus消息總線的實現(xiàn)

    SpringCloud Bus消息總線的實現(xiàn)

    消息總線是一種通信工具,可以在機器之間互相傳輸消息、文件等,這篇文章主要介紹了SpringCloud Bus消息總線的實現(xiàn),Spring cloud bus 通過輕量消息代理連接各個分布的節(jié)點,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • java Date裝成英文String后,無法再轉(zhuǎn)回Date的解決方案

    java Date裝成英文String后,無法再轉(zhuǎn)回Date的解決方案

    本文介紹了java Date裝成英文String后,無法再轉(zhuǎn)回Date的解決方案。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Java中RSA加密解密的實現(xiàn)方法分析

    Java中RSA加密解密的實現(xiàn)方法分析

    這篇文章主要介紹了Java中RSA加密解密的實現(xiàn)方法,結(jié)合具體實例形式分析了java實現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長度/密文長度/明文長度的參考說明,需要的朋友可以參考下
    2017-07-07
  • 使用Properties讀取配置文件的示例詳解

    使用Properties讀取配置文件的示例詳解

    開發(fā)SpringBoot項目時,使用配置文件配置項目相關(guān)屬性是必不可少的,所以下文為大家準備了使用Properties讀取配置文件的示例代碼,希望對大家有所幫助
    2023-06-06
  • Spring數(shù)據(jù)庫連接池實現(xiàn)原理深入刨析

    Spring數(shù)據(jù)庫連接池實現(xiàn)原理深入刨析

    開發(fā)web項目,我們肯定會和數(shù)據(jù)庫打交道,因此就會涉及到數(shù)據(jù)庫鏈接的問題。在以前我們開發(fā)傳統(tǒng)的SSM結(jié)構(gòu)的項目時進行數(shù)據(jù)庫鏈接都是通過JDBC進行數(shù)據(jù)鏈接,我們每和數(shù)據(jù)庫打一次交道都需要先獲取一次鏈接,操作完后再關(guān)閉鏈接,這樣子效率很低,因此就出現(xiàn)了連接池
    2022-11-11
  • Spring Cloud Feign 自定義配置(重試、攔截與錯誤碼處理) 代碼實踐

    Spring Cloud Feign 自定義配置(重試、攔截與錯誤碼處理) 代碼實踐

    這篇文章主要介紹了Spring Cloud Feign 自定義配置(重試、攔截與錯誤碼處理) 實踐,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

杭锦后旗| 龙岩市| 荔波县| 长宁县| 诸城市| 宁陵县| 海门市| 新野县| 平舆县| 祁阳县| 文水县| 阳谷县| 贺兰县| 上饶县| 稷山县| 黎平县| 龙游县| 广丰县| 湖北省| 岱山县| 邵阳市| 库伦旗| 保靖县| 靖西县| 旅游| 黔江区| 衡山县| 措勤县| 凌源市| 诏安县| 鞍山市| 浦江县| 梁河县| 昭通市| 临城县| 宜章县| 玉树县| 京山县| 进贤县| 湖南省| 天柱县|