• 大小: 11KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: Java
  • 标签: java  扫雷  注释  游戏  

资源简介

写java一年了,无聊写个小扫雷游戏,写了注释,提供给新手参考

资源截图

代码片段和文件信息

package king.activity;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.Jframe;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Mineframe extends Jframe {

private JPanel panel_title;// 存重新开始button和剩余雷数label
private JPanel panel;// 存雷区
private JLabel label;// 显示剩余雷数
private final static int N = 25;// 雷数
private final static int E = 50;// 一个雷的Button边长
private final static int L = 12;// 雷区长宽长度
private final static int M = 9;// 9表示雷在矩阵中的数
private int notLei = 0;// 非雷区域数量
private int isFlag = 0;// 标志旗的数量
private int[][] matrix = new int[L][L];// 雷区矩阵 存储周围雷的数量,雷用9表示
private Node[][] nodes;// 雷区
private ButtonListener buttonListener;// 左键单击响应

public static void main(String[] args) {
new Mineframe().runGame();
}

public Mineframe() {
this.settitle(“£扫雷“);
this.setBounds(220 100 720 750);
panel = new JPanel();
panel.setLayout(null);
panel_title = new JPanel();
panel_title.setLayout(null);
panel.setBounds(0 50 700 700);
panel_title.setBounds(0 0 700 50);
this.add(panel);
this.add(panel_title);
JButton begin = new JButton(“重新开始“);
begin.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
runGame();
}
});
begin.setBounds(270 15 160 40);
panel_title.add(begin);
label = new JLabel();
label.setBounds(600 30 100 20);
label.setText(“剩余雷数: “ + (N - isFlag));
panel_title.add(label);

this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);

}

public void runGame() {
panel.removeAll();// 移除panel所有组件
repaint();// 重画
nodes = new Node[L][L];
for (int i = 0; i < L; i++) {// 画雷区
for (int j = 0; j < L; j++) {
Node node = new Node();
nodes[i][j] = node;
node.i = i;
node.j = j;
node.setBounds((j + 1) * E (i + 1) * E E E);
buttonListener = new ButtonListener(node);
node.addActionListener(buttonListener);
node.addMouseListener(new FlagListener(node));
panel.add(node);
}
}
int m = 0;
int n = 0;
int temp = 0;
Random r = new Random();
for (int i = 0; i < L * L; i++) {// 产生随机雷
m = r.nextInt(L);
n = r.nextInt(L);
if (!nodes[m][n].isMine) {
nodes[m][n].isMine = true;
temp++;
nodes[m][n].setText(““);
}
if (temp == N) {
break;
}
}
for (int i = 0; i < L; i++) {// 给matrix赋值
for (int j = 0; j < L; j++) {
if (nodes[i][j].isMine) {
matrix[i][j] = M;
} else {
matrix[i][j] = getAround(nodes[i][j]);
}
}

}
isFlag = 0;
label.setText(“剩余雷数: “ + (N - isFlag));
this.setVisible(true);
}

private int getAround(Node node) {// 得到结点周围雷的数量 按照 a[0]a[1]a[2] 01235678顺序
// a[3] a[5]
int i = 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-10-15 18:48  SaoLei\
     文件         232  2011-10-15 18:48  SaoLei\.classpath
     文件         382  2011-10-15 18:48  SaoLei\.project
     目录           0  2011-10-15 18:49  SaoLei\bin\
     目录           0  2011-10-15 18:50  SaoLei\bin\king\
     目录           0  2011-10-18 20:19  SaoLei\bin\king\activity\
     文件         689  2011-10-18 20:27  SaoLei\bin\king\activity\Mineframe$1.class
     文件        2179  2011-10-18 20:27  SaoLei\bin\king\activity\Mineframe$ButtonListener.class
     文件        1997  2011-10-18 20:27  SaoLei\bin\king\activity\Mineframe$FlagListener.class
     文件        6131  2011-10-18 20:27  SaoLei\bin\king\activity\Mineframe.class
     文件         374  2011-10-16 13:52  SaoLei\bin\king\activity\Node.class
     目录           0  2011-10-15 18:49  SaoLei\src\
     目录           0  2011-10-15 18:50  SaoLei\src\king\
     目录           0  2011-10-18 20:19  SaoLei\src\king\activity\
     文件        8274  2011-10-18 20:27  SaoLei\src\king\activity\Mineframe.java
     文件         168  2011-10-16 13:52  SaoLei\src\king\activity\Node.java

评论

共有 条评论