import javax.swing.ImageIcon; //程序入口
public class Block {
String name; //名字,比如"雷"或数字
int aroundMineNumber; //周围雷的数目
ImageIcon mineIcon; //雷的图标
boolean isMine=false; //是否是雷
boolean isMark=false; //是否被标记
boolean isOpen=false; //是否被挖开
public void setName(String name) {
this.name=name;
}
//设置周围的雷数
public void setAroundMineNumber(int n) {
aroundMineNumber=n;
//获得周围的雷数
public int getAroundMineNumber() {
return aroundMineNumber;
public String getName() {
return name;
//判断是否是雷
public boolean isMine() {
return isMine;
//设置是否为雷
public void setIsMine(boolean b) {
isMine=b;
//设置雷的图标
public void setMineIcon(ImageIcon icon){
mineIcon=icon;
//获得雷的图标
public ImageIcon getMineicon(){
return mineIcon;
//确定雷是否被挖开
public boolean getIsOpen() {
return isOpen;
//设置为已经被挖开
public void setIsOpen(boolean p) {
isOpen=p;
//返回此处是否已经被标记
public boolean getIsMark() {
return isMark;
//设置此处是否已经被标记
public void setIsMark(boolean m) {
isMark=m;
import javax.swing.*;
import java.awt.*;
public class BlockView extends JPanel{
JLabel blockNameOrIcon; //用来显示Block对象的name、number和mineIcon属性
JButton blockCover; //用来遮挡blockNameOrIcon.
CardLayout card; //卡片式布局
BlockView(){
card=new CardLayout();
setLayout(card);
blockNameOrIcon=new JLabel("",JLabel.CENTER);
blockNameOrIcon.setHorizontalTextPosition(AbstractButton.CENTER);
blockNameOrIcon.setVerticalTextPosition(AbstractButton.CENTER);
blockCover=new JButton();
add("cover",blockCover);
add("view",blockNameOrIcon);
//给出视觉效果变化
public void giveView(Block block){
// 如果是雷,将对应的图标和文字更改
if(block.isMine){
blockNameOrIcon.setText(block.getName());
blockNameOrIcon.setIcon(block.getMineicon());
else {
int n=block.getAroundMineNumber();
if(n=1)
blockNameOrIcon.setText(""◆n);
else
blockNameOrIcon.setText(" ");
public void seeBlockNameOrIcon(){
card.show(this,"view");
validate();
public void seeBlockCover(){
card.show(this,"cover");
public JButton getBlockCover(){
return blockCover;
int BombNum, BlockNum; // 当前雷数,当前方块数
int rightBomb, restBomb, restBlock; // 找到的地雷数,剩余雷数,剩余方块数
JButton start = new JButton(" 开始 ");
JPanel MenuPamel = new JPanel(); //新建一个区域,看名字是放菜单.但是打错字了.
JPanel bombPanel = new JPanel();//新建一个区域,雷区,由于雷是按钮,这里面应该都是按钮(JButton).
class Bomb extends JButton {
int num_x, num_y; // 第几号方块
int BombRoundCount; // 周围雷数
boolean isBomb; // 是否为雷
int BombFlag; // 探雷标记
public Bomb(int x, int y) {
num_x = x; //雷的位置 x,不解释
BombFlag = 0; //是不是被插旗了
isBomb = false; //是雷
isClicked = false; //被点
isRight = false; //是真的.( 以上都很好理解,直译^_^)
/* 计算方块周围雷数 */
public void CountRoundBomb() {
for (int i = 0; i (int) Math.sqrt(BlockNum); i◆◆) { //开方 障碍数
for (int j = 0; j (int) Math.sqrt(BlockNum); j◆◆) { //同上,我判断,设计的雷区是正方形,
//这里是找完所有的坐标.
int count = 0;
// 当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数
if (bombButton[i][j].isBomb != true) { //如果不是雷
//邻近的上中下.(这里会多找一个自己)
if ( (x = 0) (y = 0)
(x ( (int) Math.sqrt(BlockNum)))
(y ( (int) Math.sqrt(BlockNum)))) { //因边前面 x=i-1,所以排除超出边界
//的情况
if (bombButton[x][y].isBomb == true) { //如果是雷;
count◆◆; //加一个
bombButton[i][j].BombRoundCount = count; //设置该Bomb环绕数的值
都说到这里了大家应该明白就是,建个一个Bomb类. 别外有一个方法统计那些不是雷的地方,的周围有几颗雷,到时候点开,显示出来.