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

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

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

Java類庫中提供了用于GUI的swing開發(fā)工具包,我們可以利用swing設(shè)計出一些簡單的經(jīng)典小游戲,如掃雷,推箱子,俄羅斯方塊等.接下來我就簡單分享一下用Java設(shè)計掃雷游戲的思路與過程.

首先,我們要設(shè)計出掃雷的窗口界面,說白了,也就是在窗口上繪制出指定行數(shù)和列數(shù)的小方格.要在窗體上繪制方格,我們需要一個JPanel面板,所以我們定義類GamePanel讓它繼承自JPanel,然后我們在就可以這個類上繪制我們所要的信息了.然后,在類中,我們定義一些基本的變量,如行數(shù),列數(shù),雷的數(shù)量等等,方便后面使用

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class GamePanel extends JPanel {
 private static final long serialVersionUID = 1L;
 // 界面行數(shù)
 private int rows;
 // 界面列數(shù)
 private int cols;
 // 炸彈數(shù)
 private int bombCount;
 // 每個方格寬度
 private final int BLOCKWIDTH = 20;
 // 每個方格長度
 private final int BLOCKHEIGHT = 20;
 // 存儲界面中每一個方格的繪制信息
 private JLabel[][] labels;
}

(JLabel標(biāo)簽用于短文本字符串或圖像或二者的顯示區(qū),我們用它來顯示方格邊界,數(shù)字,或者雷等信息)

接下來我們在構(gòu)造方法中初始化這些類變量

// 構(gòu)造方法,初始化參數(shù)
 public GamePanel(int rows, int cols) {
 this.rows = rows;
 this.cols = cols;
 this.bombCount = rows * cols / 10;
 this.labels = new JLabel[rows][cols];
 this.setLayout(null);
 }

然后,我們就可以在這個JPanel面板上繪制小方格了.我們先創(chuàng)建一個名為initLabels()的方法,在這個方法中根據(jù)行數(shù)和列數(shù)循環(huán)產(chǎn)生JLabel標(biāo)簽,并將每個標(biāo)簽的邊界繪制出來,填充背景并將它們存儲到類二維數(shù)組變量 labels中,這樣,我們就得到了一個充滿小方格的掃雷窗體

// 界面初始化,繪制掃雷的邊框
 private void initLabels(){
 for (int i = 0; i < this.rows; i++) {
 for (int j = 0; j < this.cols; j++) {
 JLabel l = new JLabel("", JLabel.CENTER);
 // 設(shè)置每個小方格的邊界
 l.setBounds(j * BLOCKWIDTH, i * BLOCKHEIGHT, BLOCKWIDTH, BLOCKHEIGHT);
 // 繪制方格邊框
 l.setBorder(BorderFactory.createLineBorder(Color.GRAY));
 // 設(shè)置方格為透明,便于我們填充顏色
 l.setOpaque(true);
 // 背景填充為黃色
 l.setBackground(Color.YELLOW);
 // 將方格加入到容器中(即面板JPanel)
 this.add(l);
 // 將方格存到類變量中,方便公用
 labels[i][j] = l;
 }
 }
 
 }

然后在構(gòu)造方法中調(diào)用這個初始化方法

this.initLabels();// 寫在構(gòu)造方法中

當(dāng)我們將這個JPanel面板繪制完后,我們還要將它放在一個JFrame容器中它才能顯示出來,這樣我們就需要將JPanel的大小作為參數(shù)傳出去,方便設(shè)置容器的大小,所以我們再定義一個public的方法,計算寬和高,并以數(shù)組的形式傳遞出去

//計算寬和高,并傳給容器
public int[] returnSize() {
 // 因為窗體的菜單欄,邊框也要占用像素,所以加上20和40修正大小
 int[] a = {this.cols * BLOCKWIDTH + 20, this.rows * BLOCKHEIGHT + 40};
 return a;
}

最后創(chuàng)建一個Game類,在這個類中寫程序的主入口main,進行仿真調(diào)試

import java.awt.Container; 
import javax.swing.JFrame;
 
public class Game {
 public static void main(String[] args) {
 // 創(chuàng)建JFrame對象作為容器
 JFrame w = new JFrame();
 // 創(chuàng)建mainPanel對象,初始化一個20*30的方格窗體
 GamePanel mainPanel = new GamePanel(20, 30);
 // 獲取JFrame應(yīng)給設(shè)置的寬度和高度
 int[] a = mainPanel.returnSize();
 // 設(shè)置JFame寬和高
 w.setSize(a[0], a[1]);
 Container c = w.getContentPane();
 c.add(mainPanel);
 
 w.setVisible(true);
 }
}

運行程序,結(jié)果如下

這樣,我們第一階段的工作就完成了.接下來,我們要在上面這個圖中產(chǎn)生bombCount個炸彈,也就是在我們生成的labels中隨機挑選出bombCount個炸彈,并用"*"顯示出來

// 產(chǎn)生bombCount個炸彈,并在labels中用"*"標(biāo)注出來
 private void randomBomb() {
 for (int i = 0; i < this.bombCount; i++) {
 // 生成一個隨機數(shù)表示行坐標(biāo)
 int rRow = (int) (Math.random() * this.rows);
 // 生成一個隨機數(shù)表示列坐標(biāo)
 int rCol = (int) (Math.random() * this.cols);
 // 根據(jù)坐標(biāo)確定JLabel的位置,并顯示*
 this.labels[rRow][rCol].setText("*");
 // 設(shè)置背景顏色
 this.labels[rRow][rCol].setBackground(Color.DARK_GRAY);
 // 設(shè)置*的顏色
 this.labels[rRow][rCol].setForeground(Color.RED);
 }
 }

然后我們在initLabels()方法中調(diào)用randomBomb()這個方法,運行程序,顯示如下:

至此,我們已經(jīng)完成了掃雷游戲的一半程序,只剩下填充按鈕和點擊按鈕后發(fā)生的邏輯判斷了,這些將在下一篇文章中繼續(xù)分享

完整詳細(xì)代碼(已注釋好)已經(jīng)附在下一篇博客中,供交流和學(xué)習(xí),歡迎查閱 Java語言實現(xiàn)的掃雷游戲(二)

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

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

相關(guān)文章

  • 詳解Spring中Spel表達式和el表達式的區(qū)別

    詳解Spring中Spel表達式和el表達式的區(qū)別

    在?Java?開發(fā)中,表達式語言是一種強大的工具,而SpEL?表達式與EL?表達式是我們常常遇到兩種表達式語言,下面我們就來看看它們的具體使用與區(qū)別吧
    2023-07-07
  • 詳解Spring Aop實例之AspectJ注解配置

    詳解Spring Aop實例之AspectJ注解配置

    本篇文章主要介紹了詳解Spring Aop實例之AspectJ注解配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 最通俗的白話講解JDK源碼中的ThreadLocal

    最通俗的白話講解JDK源碼中的ThreadLocal

    ThreadLocal是JDK包提供的,它提供線程本地變量,如果創(chuàng)建一樂ThreadLocal變量,那么訪問這個變量的每個線程都會有這個變量的一個副本,在實際多線程操作的時候,操作的是自己本地內(nèi)存中的變量,從而規(guī)避了線程安全問題,感興趣的朋友快來看看吧
    2022-01-01
  • Java獲取e.printStackTrace()打印的信息方式

    Java獲取e.printStackTrace()打印的信息方式

    這篇文章主要介紹了Java獲取e.printStackTrace()打印的信息方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 深入剖析springBoot中的@Scheduled執(zhí)行原理

    深入剖析springBoot中的@Scheduled執(zhí)行原理

    這篇文章主要介紹了springBoot中的@Scheduled執(zhí)行原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • idea如何配置springboot熱部署

    idea如何配置springboot熱部署

    這篇文章主要介紹了idea如何配置springboot熱部署問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表

    九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表

    數(shù)據(jù)結(jié)構(gòu)和算法是密不可分的,兩者往往是相輔相成的存在,所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)過程中,不免會遇到各種算法,數(shù)據(jù)結(jié)構(gòu)常用操作一般為:增刪改查?;旧纤械臄?shù)據(jù)結(jié)構(gòu)都是圍繞這幾個操作進行展開,本文用九張動圖來闡述先進后出的數(shù)據(jù)結(jié)構(gòu)
    2021-08-08
  • Java中關(guān)于http請求獲取FlexManager某設(shè)備分組監(jiān)控點

    Java中關(guān)于http請求獲取FlexManager某設(shè)備分組監(jiān)控點

    這篇文章主要介紹了Java中關(guān)于http請求獲取FlexManager某設(shè)備分組監(jiān)控點,本文僅僅介紹了使用http請求獲取FlexManager平臺某個FBox盒子即某設(shè)備的監(jiān)控點分組的分組下的所有監(jiān)控點信息,需要的朋友可以參考下
    2022-10-10
  • 使用Spring Data JPA的坑點記錄總結(jié)

    使用Spring Data JPA的坑點記錄總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于使用Spring Data JPA的一些坑點,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • mybatis實現(xiàn)獲取入?yún)⑹荓ist和Map的取值

    mybatis實現(xiàn)獲取入?yún)⑹荓ist和Map的取值

    這篇文章主要介紹了mybatis實現(xiàn)獲取入?yún)⑹荓ist和Map的取值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

哈巴河县| 翁源县| 涪陵区| 富裕县| 神木县| 鹤岗市| 丰县| 瑞昌市| 晴隆县| 天祝| 乳源| 白银市| 霍州市| 城步| 牟定县| 平原县| 中阳县| 定结县| 社旗县| 化德县| 吉隆县| 泰顺县| 静乐县| 增城市| 黑河市| 花莲市| 双流县| 和田市| 胶南市| 鄯善县| 湘乡市| 宣武区| 富裕县| 吉水县| 中超| 阳江市| 科技| 淮安市| 惠水县| 柯坪县| 陵川县|