av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:5日期:2022-09-02 14:40:34

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

首先,我們要設(shè)計(jì)出掃雷的窗口界面,說白了,也就是在窗口上繪制出指定行數(shù)和列數(shù)的小方格.要在窗體上繪制方格,我們需要一個(gè)JPanel面板,所以我們定義類GamePanel讓它繼承自JPanel,然后我們在就可以這個(gè)類上繪制我們所要的信息了.然后,在類中,我們定義一些基本的變量,如行數(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; // 每個(gè)方格寬度 private final int BLOCKWIDTH = 20; // 每個(gè)方格長度 private final int BLOCKHEIGHT = 20; // 存儲(chǔ)界面中每一個(gè)方格的繪制信息 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); }

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

// 界面初始化,繪制掃雷的邊框 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è)置每個(gè)小方格的邊界 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)用這個(gè)初始化方法

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

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

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

最后創(chuàng)建一個(gè)Game類,在這個(gè)類中寫程序的主入口main,進(jìn)行仿真調(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對象,初始化一個(gè)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); }}

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

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

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

// 產(chǎn)生bombCount個(gè)炸彈,并在labels中用'*'標(biāo)注出來 private void randomBomb() { for (int i = 0; i < this.bombCount; i++) { // 生成一個(gè)隨機(jī)數(shù)表示行坐標(biāo) int rRow = (int) (Math.random() * this.rows); // 生成一個(gè)隨機(jī)數(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()這個(gè)方法,運(yùn)行程序,顯示如下:

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

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

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

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产精品毛片一区二区在线看 | 国产色爽 | 欧美日韩国产在线观看 | 欧美三区视频 | 香蕉大人久久国产成人av | 最新中文字幕在线 | 日韩视频在线免费观看 | 一区二区三区四区电影视频在线观看 | 最新中文字幕第一页视频 | 久久综合九色综合欧美狠狠 | 久久综合伊人 | 亚洲成人一区 | 蜜桃视频麻豆 | 久久9热| 午夜精品一区二区三区三上悠亚 | 国产精品美女一区二区三区 | 国产欧美一区二区三区免费 | 在线免费观看毛片 | 特黄毛片视频 | 成人三区 | 久久久女女女女999久久 | 久久久精品一区 | 黄色电影在线免费观看 | 日本精品一区二区三区在线观看 | 成人国产精品视频 | 久久精品一级 | 成年视频在线观看 | 天天射天天操天天干 | 一区二区三区久久久 | 91精品国产高清一区二区三区 | 97国产精品视频 | 青青久草 | a看片| 亚洲成人黄色 | 九色www| 久久久久国产一区二区三区四区 | 成人福利电影 | 精品欧美乱码久久久久久 | 成人在线视频一区二区三区 | 国产精品永久免费观看 | 1204国产成人精品视频 |