日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java awt 初始化_Java awt项目开发

發(fā)布時(shí)間:2025/3/19 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java awt 初始化_Java awt项目开发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

通過Java awt 界面上的知識(shí)編寫的掃雷游戲

代碼中有詳細(xì)的注解

package com.langsin.saolei;

import java.awt.Color;

import java.awt.Font;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.Image;

import java.awt.Insets;

import java.awt.Label;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.MenuShortcut;

import java.awt.TextArea;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.image.BufferedImage;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class Saolei extends Frame implements ActionListener {

// 先定義橫向的按鈕的個(gè)數(shù)和縱向的按鈕的個(gè)

private static int WITH = 10;

private static int LENG = 10;

// 定義地雷的個(gè)數(shù)

private static int Mines_Count = 10;

// 定義旗幟的個(gè)數(shù)

private static int Red_Count = 10;

// 定義一個(gè)random類

private static Random random = new Random();

// 定義一個(gè)二維數(shù)組

private static Bomb[][] jb = new Bomb[WITH][LENG];

// 判斷是否結(jié)束

private boolean flag = false;

// 判斷是否成功 默認(rèn)是沒有成功

private boolean sucess = false;

// 用集合暫存sucess.txt中的內(nèi)容

private List list = new ArrayList();

// 用集合暫存游戲時(shí)間

private List listtime = new ArrayList();

StringBuffer buffer = new StringBuffer();

// 定義一個(gè)面板成員變量

private JPanel jp;

// 記錄時(shí)間的線程

private Runnable runnable;

// 已用時(shí)間

private int usedTime = 0;

// 定義兩個(gè)標(biāo)簽 時(shí)間和旗幟

private Label time, redFlag;

/*

* 檢測某點(diǎn)周圍是否有雷,周圍點(diǎn)的坐標(biāo)可由該數(shù)組計(jì)算得到

*/

private int[][] mv = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 }, { 1, 1 },

{ -1, -1 }, { 1, -1 }, { -1, 1 } };

// 通過構(gòu)造器初始化

public Saolei() throws Exception {

super("掃雷");

// 絕對(duì)布局管理器

this.setLayout(null);

// 設(shè)置圖標(biāo)

this.setIconImage(ImageIO.read(new File("./image/圖標(biāo).jpg")));

// 設(shè)置大小

this.setBounds(100, 100, 500, 500);

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

setMenu();

intMine();

intBottom();

this.setResizable(false);

this.setVisible(true);

}

// 設(shè)置初始化菜單

public void setMenu() {

// 菜單條

MenuBar menbar = new MenuBar();

// 菜單項(xiàng) 游戲

Menu game = new Menu("游戲(G)");

// 菜單項(xiàng)游戲的組件 新游戲

MenuItem newgame = new MenuItem("新游戲");

// 游戲從新開始

newgame.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// 調(diào)用重新開始游戲的方法

resetGame();

}

});

game.add(newgame);

// 菜單項(xiàng)游戲的組件 更改外觀

MenuItem change = new MenuItem("更改外觀");

change.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

for (int i = 0; i < WITH; i++) {

for (int j = 0; j < LENG; j++) {

if (!jb[i][j].isIsclicked() && jb[i][j].isEnabled()) {

jb[i][j].setBackground(Color.BLUE);

} else {

jb[i][j].setBackground(Color.WHITE);

}

}

}

}

});

game.add(change);

// 加一條橫線

// game.addSeparator();

game.add(new MenuItem("-"));

// 菜單項(xiàng)游戲的組件 退出

MenuItem exit = new MenuItem("退出",

new MenuShortcut(KeyEvent.VK_A, true));

exit.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.exit(0);

}

});

game.add(exit);

menbar.add(game);

// 菜單項(xiàng) 幫助

Menu Tj = new Menu("統(tǒng)計(jì)(T)");

// 菜單項(xiàng)游戲的組件 統(tǒng)計(jì)信息

MenuItem record = new MenuItem("查看統(tǒng)計(jì)信息");

// 將游戲的成敗和時(shí)間記錄兩個(gè)txt文本中

record.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

try {

Tongji();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

});

Tj.add(record);

menbar.add(Tj);

// 添加菜單條

this.setMenuBar(menbar);

}

// 初始化底部

private void intBottom() {

// 創(chuàng)建兩個(gè)label 一個(gè)是時(shí)間 一個(gè)是計(jì)時(shí)

Label lab1 = new Label("時(shí)間");

lab1.setFont(new Font("宋體", Font.BOLD, 15));

lab1.setForeground(Color.BLUE);

lab1.setBounds(80, 430, 35, 35);

this.add(lab1);

time = new Label("0");

time.setFont(new Font("宋體", Font.PLAIN, 15));

time.setBounds(140, 435, 50, 25);

this.add(time);

// 一個(gè)是標(biāo)記 小紅旗的個(gè)數(shù)

Label lab2 = new Label("旗幟");

lab2.setFont(new Font("宋體", Font.BOLD, 15));

lab2.setForeground(Color.BLUE);

lab2.setBounds(300, 430, 35, 35);

this.add(lab2);

redFlag = new Label(" 10");

redFlag.setFont(new Font("宋體", Font.PLAIN, 15));

redFlag.setBounds(350, 435, 50, 25);

this.add(redFlag);

// 通過接口來實(shí)現(xiàn)

runnable = new Runnable() {

public void run() {

while (true) {

// 是否結(jié)束

if (flag) {

break;

}

try {

// 睡眠1s

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 已用時(shí)間+1

usedTime++;

time.setText(String.valueOf(usedTime));

}

}

};

// 開始線程

new Thread(runnable).start();

}

// 初始化雷區(qū)(用按鈕來充當(dāng)?shù)乩?用面板在面板上添加按鈕)

private void intMine() {

// 將按鈕放在面板上

jp = new JPanel();

// 面板的布局管理器為網(wǎng)格布局管理器

jp.setLayout(new GridLayout(WITH, LENG, 0, 0));

// 設(shè)置面板的位置

jp.setBounds(75, 70, 350, 350);

makeMines(true);

this.add(jp);

}

// 隨機(jī)布置雷區(qū) 重置雷區(qū)

private void makeMines(boolean newFlag) {

// 在面板上面放按鈕 并設(shè)置初始按鈕屬性

for (int i = 0; i < LENG; i++) {

for (int j = 0; j < WITH; j++) {

if (newFlag) {

// 記錄下位置

jb[i][j] = new Bomb(i, j);

jp.add(jb[i][j]);

// 設(shè)置按鈕和標(biāo)簽之間的空白 數(shù)字所在按鈕的位置

jb[i][j].setMargin(new Insets(0, 0, 0, 0));

jb[i][j].addActionListener(this);

// 鼠標(biāo)點(diǎn)擊事件 鼠標(biāo)右擊

jb[i][j].addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

Object obj = e.getSource();

// e.isMetaDown() 檢測鼠標(biāo)右鍵單擊

if (e.isMetaDown() && obj instanceof Bomb) {

// 強(qiáng)制類型轉(zhuǎn)換

Bomb bomb = (Bomb) obj;

// 旗幟的個(gè)數(shù)大于等于0

if (bomb.isEnabled() && Red_Count >= 0) {

// 定義一個(gè)數(shù)字 來判定狀態(tài)

// 右擊點(diǎn)一下 變?yōu)? 紅旗狀態(tài) 兩下變?yōu)? ?號(hào)狀態(tài)

int num = (bomb.getBombflag() + 1) % 3;

switch (num) {

case 0:

// 初始狀態(tài)

bomb.setIcon(null);

break;

case 1:

Red_Count--;

// 緩沖圖片對(duì)象

BufferedImage bf1 = new BufferedImage(

35, 35,

BufferedImage.TYPE_INT_RGB);

// 通過緩存圖片對(duì)象,來得到畫筆工具對(duì)象Graphics,對(duì)緩存圖片進(jìn)行修改

Graphics grap = bf1.getGraphics();

// 先讀到這幅圖片

Image image;

try {

image = ImageIO.read(new File(

"./image/紅旗.jpg"));

// 然后通過畫筆對(duì)象來改變它,將這幅圖片進(jìn)行縮放

grap.drawImage(image, 0, 0, 35, 35,

null);

bomb.setIcon(new ImageIcon(bf1));

} catch (IOException e2) {

// TODO Auto-generated catch block

e2.printStackTrace();

}

break;

case 2:

Red_Count++;

// 緩沖圖片對(duì)象

BufferedImage bf2 = new BufferedImage(

35, 35,

BufferedImage.TYPE_INT_RGB);

// 通過緩存圖片對(duì)象,來得到畫筆工具對(duì)象Graphics,對(duì)緩存圖片進(jìn)行修改

Graphics grap2 = bf2.getGraphics();

// 先讀到這幅圖片

Image image2;

try {

// 然后通過畫筆對(duì)象來改變它,將這幅圖片進(jìn)行縮放

image2 = ImageIO.read(new File(

"./image/問號(hào).jpg"));

grap2.drawImage(image2, 0, 0, 35,

35, null);

bomb.setIcon(new ImageIcon(bf2));

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

break;

default:

break;

}

redFlag.setText(String.valueOf(Red_Count));

// 改變狀態(tài)

bomb.setBombflag(num);

try {

checkSuccess();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

}

});

} else {

jb[i][j].setIcon(null);

jb[i][j].setEnabled(true);

// 默認(rèn)為都沒有點(diǎn)擊

jb[i][j].setIsclicked(false);

jb[i][j].setText("");

// 默認(rèn)是無雷

jb[i][j].setBomb(false);

// 默認(rèn)初始狀態(tài)值為0

jb[i][j].setBombflag(0);

}

}

}

// 布雷的個(gè)數(shù)

int i = 0;

// 定義坐標(biāo)

int x, y;

while (i < 10) {

x = random.nextInt(WITH);

y = random.nextInt(LENG);

// 判斷這個(gè)地方是否有雷 默認(rèn)沒有

if (!jb[x][y].isBomb()) {

// 設(shè)置為有雷

jb[x][y].setBomb(true);

// 查看是否有重復(fù)的

// 查看坐標(biāo)位置 其中y對(duì)應(yīng)的是列 x對(duì)應(yīng)的是行 從0-9

System.out.println(x + " " + y);

i++;

}

}

}

// 通過點(diǎn)擊事件來判斷游戲的進(jìn)展

// 點(diǎn)擊事件

@Override

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj instanceof Bomb) {

Bomb bs = (Bomb) obj;

// 如果得到的狀態(tài)是1 即紅旗 結(jié)束點(diǎn)擊事件

if (bs.getBombflag() == 1) {

return;

}

// 如果得到的狀態(tài)是2 即“?”

else if (bs.getBombflag() == 2) {

// 點(diǎn)擊一下將問號(hào)去除

bs.setIsclicked(true);

bs.setIcon(null);

}

// 如果點(diǎn)到的是雷

if (bs.isBomb()) {

// 緩沖圖片對(duì)象

BufferedImage bf1 = new BufferedImage(35, 35,

BufferedImage.TYPE_INT_RGB);

// 通過緩存圖片對(duì)象,來得到畫筆工具對(duì)象Graphics,對(duì)緩存圖片進(jìn)行修改

Graphics grap = bf1.getGraphics();

// 先讀到這幅圖片

Image image;

try {

image = ImageIO.read(new File("./image/地雷.png"));

// 然后通過畫筆對(duì)象來改變它,將這幅圖片進(jìn)行縮放

grap.drawImage(image, 0, 0, 35, 35, null);

// 將圖片設(shè)置為雷

bs.setIcon(new ImageIcon(bf1));

} catch (IOException e2) {

// TODO Auto-generated catch block

e2.printStackTrace();

}

// 游戲結(jié)束

flag = true;

// 顯示所有的雷

try {

showMine();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

// 彈出一個(gè)窗口對(duì)話框顯示游戲結(jié)束 結(jié)束點(diǎn)擊事件

JOptionPane.showMessageDialog(this, "掃雷失敗!");

return;

}

// 沒有點(diǎn)到雷時(shí)

// 通過算法判斷是否有雷 來判斷周圍雷的情況

judge(bs.getNum_x(), bs.getNum_y());

}

}

// 重新開始游戲

private void resetGame() {

flag = true;

Red_Count = 10;

time.setText("0");

usedTime = 0;

redFlag.setText("10");

makeMines(false);

// 將游戲外觀設(shè)為初始

for (int i = 0; i < WITH; i++) {

for (int j = 0; j < LENG; j++) {

jb[i][j].setBackground(null);

}

}

try {

Thread.sleep(1000);

} catch (InterruptedException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

new Thread(runnable).start();

flag = false;

}

// 如果點(diǎn)到雷,游戲結(jié)束顯示所有雷

// 顯示所有雷的方法

private void showMine() throws Exception {

for (int i = 0; i < WITH; i++) {

for (int j = 0; j < LENG; j++) {

if (jb[i][j].isBomb()) {

// 緩沖圖片對(duì)象

BufferedImage bf1 = new BufferedImage(35, 35,

BufferedImage.TYPE_INT_RGB);

// 通過緩存圖片對(duì)象,來得到畫筆工具對(duì)象Graphics,對(duì)緩存圖片進(jìn)行修改

Graphics grap = bf1.getGraphics();

// 先讀到這幅圖片

Image image = ImageIO.read(new File("./image/地雷.png"));

// 然后通過畫筆對(duì)象來改變它,將這幅圖片進(jìn)行縮放

grap.drawImage(image, 0, 0, 35, 35, null);

jb[i][j].setIcon(new ImageIcon(bf1));

}

}

}

}

// 判斷是否成功

private void checkSuccess() throws Exception {

int count = 0;

for (int i = 0; i < LENG; i++) {

for (int j = 0; j < WITH; j++) {

// 如果是雷 并且這個(gè)地方有紅旗

if (jb[i][j].isBomb() && jb[i][j].getBombflag() == 1) {

// 進(jìn)行累加

count++;

}

}

}

if (count == Mines_Count) {

flag = true;

JOptionPane.showMessageDialog(this, "恭喜你,勝利了!");

sucess = true;

String tm = time.getText();

listtime.add(tm);

writesucess(sucess);

}

}

// 判斷周圍是否有雷

private void judge(int x, int y) {

// 設(shè)置(x,y)這個(gè)位置已經(jīng)點(diǎn)擊 得到這個(gè)位置

jb[x][y].setIsclicked(true);

// 點(diǎn)擊了以后將背景設(shè)置為白色

jb[x][y].setBackground(Color.WHITE);

// 點(diǎn)過的設(shè)置為不可點(diǎn)擊 點(diǎn)擊過設(shè)置為不可用

jb[x][y].setEnabled(false);

// 設(shè)定點(diǎn)擊的這個(gè)點(diǎn)的相對(duì)初始位置是(0,0) 設(shè)定初始周圍雷的個(gè)數(shù)是0

int sx = 0;

int sy = 0;

int mineNumber = 0;

for (int i = 0; i < mv.length; i++) {

sx = x + mv[i][0];

sy = y + mv[i][1];

// 保證所有的坐標(biāo)點(diǎn)都在面板上 判斷那些沒有被點(diǎn)擊過的按鈕

if (sx >= 0 && sx < WITH && sy >= 0 && sy < LENG) {

if (jb[sx][sy].isBomb()) {

// 如果是雷的話

// 顯示的數(shù)字累加 得到(x,y)這個(gè)位置周圍雷的個(gè)數(shù)

mineNumber++;

}

}

}

// 通過遞歸來實(shí)現(xiàn)

if (mineNumber == 0) {

for (int i = 0; i < mv.length; i++) {

sx = x + mv[i][0];

sy = y + mv[i][1];

// 保證所有的坐標(biāo)都對(duì)應(yīng)一個(gè)按鈕

if (sx >= 0 && sx < LENG && sy >= 0 && sy < LENG

&& !jb[sx][sy].isIsclicked()) {

judge(sx, sy);

}

}

} else {

jb[x][y].setFont(new Font("宋體", Font.BOLD, 12));

jb[x][y].setText(String.valueOf(mineNumber));

}

}

// 只有成功了才寫

// 寫一個(gè)方法將成功記錄寫到sucess.txt 文件中

private void writesucess(boolean sucess) throws Exception {

int snum = 0;

// 如果list中沒有元素

readsucess();

if (list.isEmpty()) {

PrintWriter pw = new PrintWriter(new File("./sucess.txt"));

pw.println("游戲結(jié)果\t游戲時(shí)間");

buffer.append("游戲成功" + "\t" + listtime.get(snum));

pw.println(buffer.toString());

pw.close();

snum++;

} else {

PrintWriter pw = new PrintWriter(new File("./sucess.txt"));

for (int i = 0; i < list.size(); i++) {

pw.println(list.get(i));

}

buffer.append("游戲成功" + "\t" + listtime.get(snum));

pw.println(buffer.toString());

pw.close();

snum++;

}

}

private void readsucess() throws Exception {

BufferedReader br = new BufferedReader(new FileReader("./sucess.txt"));

String line = null;

while ((line = br.readLine()) != null) {

list.add(line);

}

br.close();

}

// 建立一個(gè)新的窗口

private void Tongji() throws Exception {

final Frame frame = new Frame("統(tǒng)計(jì)信息");

frame.setBounds(100, 100, 300, 300);

TextArea ta = new TextArea();

ta.setFont(new Font("宋體", Font.BOLD, 15));

ta.setForeground(Color.BLUE);

BufferedReader bf = new BufferedReader(new FileReader(new File(

"./sucess.txt")));

String line = null;

StringBuffer buf = new StringBuffer();

while ((line = bf.readLine()) != null) {

buf.append(line + "\n");

}

ta.setText(buf.toString());

bf.close();

frame.add(ta);

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

frame.dispose();

}

});

frame.setResizable(false);

frame.setVisible(true);

}

// 程序執(zhí)行

public static void main(String[] args) throws Exception {

new Saolei();

}

}

總結(jié)

以上是生活随笔為你收集整理的java awt 初始化_Java awt项目开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。