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

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

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

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

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

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);
 // 將按鈕存在類變量中(當(dāng)然,實(shí)際上存的是對象的引用地址)
 buttons[i][j] = btn;
 btn.row = i;
 btn.col = j;
 // 給按鈕添加監(jiān)聽器,注冊點(diǎn)擊事件
 // (單機(jī)按鈕時(shí),將執(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了); 如果單擊的按鈕下面是空白的話先要將它打開,并且判斷它周圍的八個(gè)方塊是否為空的,進(jìn)入遞歸調(diào)用.

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

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;
 }

然后我們寫單擊按鈕時(shí)的邏輯方法

// 單擊按鈕時(shí)打開或成片打開
 private void open(MyButton btn) {
 // 先將當(dāng)期按鈕設(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;
 // 如果是空的則將他周圍空的按鈕都打開,進(jìn)入遞歸
 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方法的單擊事件中引用這個(gè)方法

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

西安市| 青田县| 安塞县| 凤凰县| 桃园市| 商河县| 黑水县| 宜春市| 嘉祥县| 永和县| 石狮市| 清河县| 武鸣县| 嘉祥县| 拉孜县| 青阳县| 新野县| 四子王旗| 册亨县| 大英县| 登封市| 闸北区| 噶尔县| 桃园市| 武山县| 福州市| 汾阳市| 山阴县| 上林县| 沭阳县| 平舆县| 佛学| 赤峰市| 合肥市| 德令哈市| 顺昌县| 台北县| 平武县| 子长县| 金湖县| 涪陵区|