java扫雷的简单实现

时间:2023-02-06 21:05:08

诚实说还是闲得很啊

总是写这种小程序消磨时间其实并不能对自己的水平提升有帮助

大家还是不要学我...

扫雷游戏规则简介

扫雷游戏就是在一个X*Y的矩形中存在共X*Y个格子

其中存在R个地雷(R<X*Y)

点击格子若当前格子没有地雷则显示以当前格子为中心的九宫格中的地雷数

若点击地雷则当前游戏结束

注意:若点击当前项不是地雷,且周围地雷数为0,则显示周围同样周围地雷数为0和最近有地雷数的格子

如图

java扫雷的简单实现

游戏设计思路

首先想到的就是利用二维数组来进行对地图的展示

而地图的实现采用JButton,所以同样需要一个二维数组存储对所有JButton的引用

问题分析

需要实现的主要算法包括

1:地雷的随机生成

2:点击周围地雷数的计算

3:当点击地雷数为0时,如上图的显示

4:当点击地雷时,显示所有地雷的位置

5:实现标记地雷以及对剩余地雷数的计算

解决思路

1:针对X、Y轴分别随机生成,利用set存储保证不重复

2:初始化地图后进行遍历,非地雷区计算周围雷的数量

3:点击地雷数为0的格子触发,进行遍历相邻的为零的格子,再遍历周围不为零的格子,进行显示

4:点击地雷后,遍历显示set集合中的地雷

5:设定static变量,标记后进行遍历比对,然后更新剩余地雷数

这样的话,地雷的Bean的设计就要考虑很多的地方

类设计

地雷类

package edu.game.minesweeping.model;

/**
 * 
 * @author MrWang
 * @Date 2015年11月23日
 * @Description 单个地雷的模型类
 * 				 重写hashcode()和equals方法 判断坐标位置相同即为同一个实例
 * 
 */
public class Mine {
	//X轴坐标(实际数组中为Y轴)
	private int x;
	//Y轴坐标(实际用数组表示为X轴)
	private int y;
	//当前模块是否为地雷
	private boolean isMine;
	//周围地雷数
	private int surMine=0;

	public Mine() {

	}

	public Mine(int x, int y, boolean isMine) {
		// TODO Auto-generated constructor stub
		this.setX(x);
		this.setY(y);
		this.setMine(isMine);
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	public boolean isMine() {
		return isMine;
	}

	public void setMine(boolean isMine) {
		this.isMine = isMine;
	}
	
	public int getSurMine() {
		return surMine;
	}
	
	public void setSurMine(int surMine) {
		this.surMine = surMine;
	}

	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		if (!obj.getClass().equals(Mine.class)) {
			return false;
		}
		Mine m;
		try {
			m = (Mine) obj;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			return false;
		}
		if (this.getX() == m.getX() && this.getY() == m.getY()) {
			return true;
		}
		return false;
	}

	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return Integer.parseInt(String.valueOf(this.getX()+10000)+String.valueOf(this.getY()+10000));
	}

}


地图类

package edu.game.minesweeping.model;

import java.util.*;
/**
 * 
 * @author MrWang
 * @Date 2015年11月23日
 * @Description 地图模型类
 * @ClassName MineMap
 * 
 */
public class MineMap {
	//地图长
	private int x;
	//宽
	private int y;
	//地雷数
	private int count;
	//存储地雷信息
	private Mine[][] map;
	//用于计算地雷周围地雷数
	private static int surMine=0;
	//爆炸地雷
	private Set<Mine> set;
	//是否完成游戏
	private int isSuccess=0;
	/**
	 * 
	 * @param x 地图Y轴
	 * @param y 地图X轴
	 * @param count 地雷数
	 * @return 存储地雷地图
	 * 
	 */
	public Mine[][] generMap(int x,int y,int count){
		isSuccess=0;
		Random r=new Random();
		map=new Mine[x][y];
		Mine m;
		set = new HashSet<Mine>();
		for (int i = 0; i < count; i++) {
			while(true){
				int newX = r.nextInt(x);
				int newY=r.nextInt(y);
				m=new Mine(newX, newY, true);
				if (!set.contains(m)) {
					set.add(m);
					break;
				}
			}
		}
		for (int i = 0; i < x; i++) {
			for (int j = 0; j < y; j++) {
				m=new Mine(i, j, false);
				if (set.contains(m)) {
					map[i][j]=new Mine(i, j, true);
				}else {
					map[i][j]=new Mine(i, j, false);
				}
			}
		}
		for (int i = 0; i < x; i++) {
			for (int j = 0; j < y; j++) {
				map[i][j].setSurMine(countSurMine(i, j,x,y));
			}
		}
		return map;
	}
	
	/**
	 * 
	 * @param x 当前地雷Y轴
	 * @param y 当前地雷X轴
	 * @param sX 地图Y轴
	 * @param sY 地图X轴
	 * @return 周围地雷数
	 *
	 */
	public int countSurMine(int x,int y,int sX,int sY){
		surMine=0;
		if (x==0&&y==0) {//左上角
			if (right(x, y)) {
				surMine++;
			}
			if (rightBottom(x, y)) {
				surMine++;
			}
			if (bottom(x, y)) {
				surMine++;
			}
		}else if(x==sX-1&&y==sY-1){//右下角
			if (leftTop(x, y)) {
				surMine++;
			}if (top(x, y)) {
				surMine++;
			}if (left(x, y)) {
				surMine++;
			}
		}else if(x==0&&y==sY-1){//右上角
			if (left(x, y)) {
				surMine++;
			}if (leftBottom(x, y)) {
				surMine++;
			}if (bottom(x, y)) {
				surMine++;
			}
		}else if(x==sX-1&&y==0){//左下角
			if (right(x, y)) {
				surMine++;
			}if (top(x, y)) {
				surMine++;
			}if (rightTop(x, y)) {
				surMine++;
			}
		}else if(x==0&&y<sY-1){//上边
			if (left(x, y)) {
				surMine++;
			}if (right(x, y)) {
				surMine++;
			}if (leftBottom(x, y)) {
				surMine++;
			}if (bottom(x, y)) {
				surMine++;
			}if (rightBottom(x, y)) {
				surMine++;
			}
		}else if(x==sX-1&&y<sY-1){//下边
			if (left(x, y)) {
				surMine++;
			}if (right(x, y)) {
				surMine++;
			}if (leftTop(x, y)) {
				surMine++;
			}if (top(x, y)) {
				surMine++;
			}if (rightTop(x, y)) {
				surMine++;
			}
		}else if(x<sX-1&&y==0){//左边
			if (top(x, y)) {
				surMine++;
			}if (right(x, y)) {
				surMine++;
			}if (rightTop(x, y)) {
				surMine++;
			}if (bottom(x, y)) {
				surMine++;
			}if (rightBottom(x, y)) {
				surMine++;
			}
		}else if(x<sX-1&&y==sY-1){//右边
			if (top(x, y)) {
				surMine++;
			}if (left(x, y)) {
				surMine++;
			}if (leftTop(x, y)) {
				surMine++;
			}if (bottom(x, y)) {
				surMine++;
			}if (leftBottom(x, y)) {
				surMine++;
			}
		}else{
			if (top(x, y)) {
				surMine++;
			}if (left(x, y)) {
				surMine++;
			}if (leftTop(x, y)) {
				surMine++;
			}if (bottom(x, y)) {
				surMine++;
			}if (leftBottom(x, y)) {
				surMine++;
			}if (rightTop(x, y)){
				surMine++;
			}if (rightBottom(x, y)){
				surMine++;
			}if (right(x, y)){
				surMine++;
			}
		}
		return surMine;
	}
	public boolean leftTop(int x,int y){
		return map[x-1][y-1].isMine();
	}
	public boolean top(int x,int y){
		return map[x-1][y].isMine();
	}
	public boolean rightTop(int x,int y){
		return map[x-1][y+1].isMine();
	}
	public boolean left(int x,int y){
		return map[x][y-1].isMine();
	}
	public boolean right(int x,int y){
		return map[x][y+1].isMine();
	}
	public boolean leftBottom(int x,int y){
		return map[x+1][y-1].isMine();
	}
	public boolean bottom(int x,int y){
		return map[x+1][y].isMine();
	}
	public boolean rightBottom(int x,int y){
		return map[x+1][y+1].isMine();
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public Set<Mine> getSet() {
		return set;
	}
	public int getIsSuccess() {
		return isSuccess;
	}
	public void setIsSuccess(int isSuccess) {
		this.isSuccess = isSuccess;
	}
}


主面板类

package edu.game.minesweeping.show;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import edu.game.minesweeping.model.*;
/**
 * 
 * @author MrWang
 * @Date 2015年11月23日
 * @Description 用于生成面板以及控制操作逻辑 	可以对此类进行进一步拆分
 * @ClassName MainPanel
 *
 */
public class MainPanel {
	private Mine[][] minesMaps;
	private JButton[][] mines;
	private static MainPanel m;

	public static void main(String[] args) {
		m = new MainPanel();
		m.init(24, 24, 90);
	}
	//初始化面板
	public void init(int x, int y, int count) {
		mines = new JButton[x][y];
		JButton b;
		final MineMap map = new MineMap();
		minesMaps = map.generMap(x, y, count);
		JFrame f = new JFrame("扫雷");
		f.setBounds(600, 100, 800, 900);
		f.setBackground(Color.lightGray);
		BorderLayout l = new BorderLayout();
		f.setLayout(l);
		JPanel scoreP = new JPanel();
		scoreP.setSize(800, 100);
		JTextField scoreT = new JTextField();
		scoreT.setEditable(false);
		scoreT.setText(String.valueOf(count));
		scoreP.add(scoreT);
		JPanel playP = new JPanel();
		playP.setSize(900, 1000);
		Font font=new Font("Consolas", Font.BOLD, 12);
		playP.setLayout(new GridLayout(x, y));
		for (int i = 0; i < x; i++) {
			for (int j = 0; j < y; j++) {
				b = new JButton();
				b.setSize(800 / x, 800 / y);
				b.setBackground(Color.GRAY);
				b.setFont(font);
				mines[i][j] = b;
				b.addActionListener(new ActionListener() {
					Mine mine;

					@Override
					public void actionPerformed(ActionEvent e) {
						JButton current = (JButton) e.getSource();
						//如果不成功且不失败就进行相应
						if (map.getIsSuccess() == 0) {
							//如果不是按住ctrl键
							if (e.getModifiers() == 18
									&& Integer.parseInt(scoreT.getText()) > 0
									&& Integer.parseInt(scoreT.getText()) <= count) {
								if (current.getText().equals("")) {
									current.setText("!");
									scoreT.setText(String.valueOf(Integer
											.parseInt(scoreT.getText()) - 1));
								} else if (current.getText().equals("!")) {
									current.setText("");
									scoreT.setText(String.valueOf(Integer
											.parseInt(scoreT.getText()) + 1));
								}
							} else {
								if (!current.getText().equals("!"))
									synchronized (mines) {
										int curX = 0;
										int curY = 0;
										loop: for (int i1 = 0; i1 < x; i1++) {
											for (int j1 = 0; j1 < y; j1++) {
												if (e.getSource() == mines[i1][j1]) {
													curX = i1;
													curY = j1;
													break loop;
												}
											}
										}
										mine = minesMaps[curX][curY];
										//当前操作项是地雷,则游戏结束并显示全部地雷
										//不然就显示周围九宫格内的地雷数
										//如果周围地雷数为0 显示与其相连的地雷数为0的格子
										if (mine.isMine()) {
											for (Mine s : map.getSet()) {
												mines[s.getX()][s.getY()]
														.setText("※");
												mines[s.getX()][s.getY()]
														.setBackground(Color.RED);
											}
											for (int a = 0; a < mines.length; a++) {
												for (int b = 0; b < mines[a].length; b++) {
													mines[a][b]
															.setEnabled(false);
												}
											}
											map.setIsSuccess(-1);
											scoreT.setText("很遗憾");
										}
										else {
											mines[curX][curY].setText(String
													.valueOf(mine.getSurMine()));
											if (mine.getSurMine() == 0) {
												m.surZeroSearch(curX, curY, x,
														y);
												mines[curX][curY].setText(" ");
											}
											mines[curX][curY]
													.setBackground(Color.WHITE);
											mines[curX][curY].setEnabled(false);
											mines[curX][curY].setBorder(null);
											for (int i1 = 0; i1 < x; i1++) {
												for (int j1 = 0; j1 < y; j1++) {
													if (mines[i1][j1].getText()
															.equals(" ")) {
														m.showAround(i1, j1, x,
																y);
													}
												}
											}
										}
									}
							}
							//操作完成后判断是否完成游戏
							if (Integer.parseInt(scoreT.getText()) >= 0) {
								int last = 0;
								loop: for (int i1 = 0; i1 < x; i1++) {
									for (int j1 = 0; j1 < y; j1++) {
										if (!minesMaps[i1][j1].isMine()
												&& mines[i1][j1]
														.getBackground() == Color.WHITE) {
											last++;
										}
										if (!minesMaps[i1][j1].isMine()
												&& mines[i1][j1]
														.getBackground() != Color.WHITE) {
											map.setIsSuccess(0);
											break loop;
										}
										if ((i1 == x - 1 && j1 == y - 1)
												|| last >= (x * y - count)) {
											map.setIsSuccess(1);
											scoreT.setText("恭喜获胜");
										}
									}
								}
							}
						}
					}
				});
				playP.add(b);
			}
		}
		f.add("North", scoreP);
		f.add("Center", playP);
		f.setResizable(false);
		f.setVisible(true);
	}

	public void surZeroSearch(int x, int y, int sX, int sY) {
		if (x == 0 && y == 0) {// 左上角
			right(x, y, sX, sY);
			rightBottom(x, y, sX, sY);
			bottom(x, y, sX, sY);
		} else if (x == sX - 1 && y == sY - 1) {// 右下角
			leftTop(x, y, sX, sY);
			top(x, y, sX, sY);
			left(x, y, sX, sY);
		} else if (x == 0 && y == sY - 1) {// 右上角
			left(x, y, sX, sY);
			leftBottom(x, y, sX, sY);
			bottom(x, y, sX, sY);
		} else if (x == sX - 1 && y == 0) {// 左下角
			right(x, y, sX, sY);
			top(x, y, sX, sY);
			rightTop(x, y, sX, sY);
		} else if (x == 0 && y < sY - 1) {// 上边
			left(x, y, sX, sY);
			right(x, y, sX, sY);
			leftBottom(x, y, sX, sY);
			bottom(x, y, sX, sY);
			rightBottom(x, y, sX, sY);
		} else if (x == sX - 1 && y < sY - 1) {// 下边
			left(x, y, sX, sY);
			right(x, y, sX, sY);
			leftTop(x, y, sX, sY);
			top(x, y, sX, sY);
			rightTop(x, y, sX, sY);
		} else if (x < sX - 1 && y == 0) {// 左边
			top(x, y, sX, sY);
			right(x, y, sX, sY);
			rightTop(x, y, sX, sY);
			bottom(x, y, sX, sY);
			rightBottom(x, y, sX, sY);
		} else if (x < sX - 1 && y == sY - 1) {// 右边
			top(x, y, sX, sY);
			left(x, y, sX, sY);
			leftTop(x, y, sX, sY);
			bottom(x, y, sX, sY);
			leftBottom(x, y, sX, sY);
		} else {
			top(x, y, sX, sY);
			left(x, y, sX, sY);
			leftTop(x, y, sX, sY);
			bottom(x, y, sX, sY);
			leftBottom(x, y, sX, sY);
			rightTop(x, y, sX, sY);
			rightBottom(x, y, sX, sY);
			right(x, y, sX, sY);
		}
	}

	public void leftTop(int x, int y, int sX, int sY) {
		if (minesMaps[x - 1][y - 1].getSurMine() == 0
				&& !mines[x - 1][y - 1].getText().equals(" ")) {
			/*
			 * mines[x - 1][y - 1].setText(String.valueOf(minesMaps[x - 1][y -
			 * 1] .getSurMine()));
			 */
			mines[x - 1][y - 1].setText(" ");
			mines[x - 1][y - 1].setBackground(Color.WHITE);
			mines[x - 1][y - 1].setBorder(null);
			mines[x - 1][y - 1].setEnabled(false);
			m.surZeroSearch(x - 1, y - 1, sX, sY);
		}
		/*
		 * if (mines[x - 1][y - 1].getText().equals(" ")) { m.showAround(x - 1,
		 * y - 1, sX, sY); }
		 */
	}

	public void top(int x, int y, int sX, int sY) {
		if (minesMaps[x - 1][y].getSurMine() == 0
				&& !mines[x - 1][y].getText().equals(" ")) {
			/*
			 * mines[x - 1][y].setText(String.valueOf(minesMaps[x - 1][y]
			 * .getSurMine()));
			 */
			mines[x - 1][y].setText(" ");
			mines[x - 1][y].setBackground(Color.WHITE);
			mines[x - 1][y].setBorder(null);
			mines[x - 1][y].setEnabled(false);
			m.surZeroSearch(x - 1, y, sX, sY);
		}
		/*
		 * if (mines[x - 1][y].getText().equals(" ")) { m.showAround(x - 1, y,
		 * sX, sY); }
		 */
	}

	public void rightTop(int x, int y, int sX, int sY) {
		if (minesMaps[x - 1][y + 1].getSurMine() == 0
				&& !mines[x - 1][y + 1].getText().equals(" ")) {
			/*
			 * mines[x - 1][y + 1].setText(String.valueOf(minesMaps[x - 1][y +
			 * 1] .getSurMine()));
			 */
			mines[x - 1][y + 1].setText(" ");
			mines[x - 1][y + 1].setBackground(Color.WHITE);
			mines[x - 1][y + 1].setBorder(null);
			mines[x - 1][y + 1].setEnabled(false);
			m.surZeroSearch(x - 1, y + 1, sX, sY);
		}
		/*
		 * if (mines[x - 1][y + 1].getText().equals(" ")) { m.showAround(x - 1,
		 * y + 1, sX, sY); }
		 */
	}

	public void left(int x, int y, int sX, int sY) {
		if (minesMaps[x][y - 1].getSurMine() == 0
				&& !mines[x][y - 1].getText().equals(" ")) {
			/*
			 * mines[x][y - 1].setText(String.valueOf(minesMaps[x][y - 1]
			 * .getSurMine()));
			 */
			mines[x][y - 1].setText(" ");
			mines[x][y - 1].setBackground(Color.WHITE);
			mines[x][y - 1].setBorder(null);
			mines[x][y - 1].setEnabled(false);
			m.surZeroSearch(x, y - 1, sX, sY);
		}
		/*
		 * if (mines[x][y - 1].getText().equals(" ")) { m.showAround(x, y - 1,
		 * sX, sY); }
		 */
	}

	public void right(int x, int y, int sX, int sY) {
		if (minesMaps[x][y + 1].getSurMine() == 0
				&& !mines[x][y + 1].getText().equals(" ")) {
			/*
			 * mines[x][y + 1].setText(String.valueOf(minesMaps[x][y + 1]
			 * .getSurMine()));
			 */
			mines[x][y + 1].setText(" ");
			mines[x][y + 1].setBackground(Color.WHITE);
			mines[x][y + 1].setBorder(null);
			mines[x][y + 1].setEnabled(false);
			m.surZeroSearch(x, y + 1, sX, sY);
		}
		/*
		 * if (mines[x][y + 1].getText().equals(" ")) { m.showAround(x, y + 1,
		 * sX, sY); }
		 */
	}

	public void leftBottom(int x, int y, int sX, int sY) {
		if (minesMaps[x + 1][y - 1].getSurMine() == 0
				&& !mines[x + 1][y - 1].getText().equals(" ")) {
			/*
			 * mines[x + 1][y - 1].setText(String.valueOf(minesMaps[x + 1][y -
			 * 1] .getSurMine()));
			 */
			mines[x + 1][y - 1].setText(" ");
			mines[x + 1][y - 1].setBackground(Color.WHITE);
			mines[x + 1][y - 1].setBorder(null);
			mines[x + 1][y - 1].setEnabled(false);
			m.surZeroSearch(x + 1, y - 1, sX, sY);
		}
		/*
		 * if (mines[x + 1][y - 1].getText().equals(" ")) { m.showAround(x + 1,
		 * y - 1, sX, sY); }
		 */
	}

	public void bottom(int x, int y, int sX, int sY) {
		if (minesMaps[x + 1][y].getSurMine() == 0
				&& !mines[x + 1][y].getText().equals(" ")) {
			/*
			 * mines[x + 1][y].setText(String.valueOf(minesMaps[x + 1][y]
			 * .getSurMine()));
			 */
			mines[x + 1][y].setText(" ");
			mines[x + 1][y].setBackground(Color.WHITE);
			mines[x + 1][y].setBorder(null);
			mines[x + 1][y].setEnabled(false);
			m.surZeroSearch(x + 1, y, sX, sY);
		}
		/*
		 * if (mines[x + 1][y].getText().equals(" ")) { m.showAround(x + 1, y,
		 * sX, sY); }
		 */
	}

	public void rightBottom(int x, int y, int sX, int sY) {
		if (minesMaps[x + 1][y + 1].getSurMine() == 0
				&& !mines[x + 1][y + 1].getText().equals(" ")) {
			/*
			 * mines[x + 1][y + 1].setText(String.valueOf(minesMaps[x + 1][y +
			 * 1] .getSurMine()));
			 */
			mines[x + 1][y + 1].setText(" ");
			mines[x + 1][y + 1].setBackground(Color.WHITE);
			mines[x + 1][y + 1].setBorder(null);
			mines[x + 1][y + 1].setEnabled(false);
			m.surZeroSearch(x + 1, y + 1, sX, sY);
		}
		/*
		 * if (mines[x + 1][y + 1].getText().equals(" ")) { m.showAround(x + 1,
		 * y + 1, sX, sY); }
		 */
	}

	public void showAround(int x, int y, int sX, int sY) {
		if (x == 0 && y == 0) {// 左上角
			showRight(x, y, sX, sY);
			showRightBottom(x, y, sX, sY);
			showBottom(x, y, sX, sY);
		} else if (x == sX - 1 && y == sY - 1) {// 右下角
			showLeftTop(x, y, sX, sY);
			showTop(x, y, sX, sY);
			showLeft(x, y, sX, sY);
		} else if (x == 0 && y == sY - 1) {// 右上角
			showLeft(x, y, sX, sY);
			showLeftBottom(x, y, sX, sY);
			showBottom(x, y, sX, sY);
		} else if (x == sX - 1 && y == 0) {// 左下角
			showRight(x, y, sX, sY);
			showTop(x, y, sX, sY);
			showRightTop(x, y, sX, sY);
		} else if (x == 0 && y < sY - 1) {// 上边
			showLeft(x, y, sX, sY);
			showRight(x, y, sX, sY);
			showLeftBottom(x, y, sX, sY);
			showBottom(x, y, sX, sY);
			showRightBottom(x, y, sX, sY);
		} else if (x == sX - 1 && y < sY - 1) {// 下边
			showLeft(x, y, sX, sY);
			showRight(x, y, sX, sY);
			showLeftTop(x, y, sX, sY);
			showTop(x, y, sX, sY);
			showRightTop(x, y, sX, sY);
		} else if (x < sX - 1 && y == 0) {// 左边
			showTop(x, y, sX, sY);
			showRight(x, y, sX, sY);
			showRightTop(x, y, sX, sY);
			showBottom(x, y, sX, sY);
			showRightBottom(x, y, sX, sY);
		} else if (x < sX - 1 && y == sY - 1) {// 右边
			showTop(x, y, sX, sY);
			showLeft(x, y, sX, sY);
			showLeftTop(x, y, sX, sY);
			showBottom(x, y, sX, sY);
			showLeftBottom(x, y, sX, sY);
		} else if (x > 0 && x < sX - 1 && y > 0 && y < sY) {
			showTop(x, y, sX, sY);
			showLeft(x, y, sX, sY);
			showLeftTop(x, y, sX, sY);
			showBottom(x, y, sX, sY);
			showLeftBottom(x, y, sX, sY);
			showRightTop(x, y, sX, sY);
			showRightBottom(x, y, sX, sY);
			showRight(x, y, sX, sY);
		}
	}

	public void showLeftTop(int x, int y, int sX, int sY) {
		if (!mines[x - 1][y - 1].getText().equals(" ")) {
			mines[x - 1][y - 1].setText(String.valueOf(minesMaps[x - 1][y - 1]
					.getSurMine()));
			mines[x - 1][y - 1].setBackground(Color.WHITE);
			mines[x - 1][y - 1].setEnabled(false);
			mines[x - 1][y - 1].setBorder(null);
		}
	}

	public void showTop(int x, int y, int sX, int sY) {
		if (!mines[x - 1][y].getText().equals(" ")) {
			mines[x - 1][y].setText(String.valueOf(minesMaps[x - 1][y]
					.getSurMine()));
			mines[x - 1][y].setBackground(Color.WHITE);
			mines[x - 1][y].setEnabled(false);
			mines[x - 1][y].setBorder(null);
		}
	}

	public void showRightTop(int x, int y, int sX, int sY) {
		if (!mines[x - 1][y + 1].getText().equals(" ")) {
			mines[x - 1][y + 1].setText(String.valueOf(minesMaps[x - 1][y + 1]
					.getSurMine()));
			mines[x - 1][y + 1].setBackground(Color.WHITE);
			mines[x - 1][y + 1].setEnabled(false);
			mines[x - 1][y + 1].setBorder(null);
		}
	}

	public void showLeft(int x, int y, int sX, int sY) {
		if (!mines[x][y - 1].getText().equals(" ")) {
			mines[x][y - 1].setText(String.valueOf(minesMaps[x][y - 1]
					.getSurMine()));
			mines[x][y - 1].setBackground(Color.WHITE);
			mines[x][y - 1].setEnabled(false);
			mines[x][y - 1].setBorder(null);
		}
	}

	public void showRight(int x, int y, int sX, int sY) {
		if (!mines[x][y + 1].getText().equals(" ")) {
			mines[x][y + 1].setText(String.valueOf(minesMaps[x][y + 1]
					.getSurMine()));
			mines[x][y + 1].setBackground(Color.WHITE);
			mines[x][y + 1].setEnabled(false);
			mines[x][y + 1].setBorder(null);
		}
	}

	public void showLeftBottom(int x, int y, int sX, int sY) {
		if (!mines[x + 1][y - 1].getText().equals(" ")) {
			mines[x + 1][y - 1].setText(String.valueOf(minesMaps[x + 1][y - 1]
					.getSurMine()));
			mines[x + 1][y - 1].setBackground(Color.WHITE);
			mines[x + 1][y - 1].setEnabled(false);
			mines[x + 1][y - 1].setBorder(null);
		}
	}

	public void showBottom(int x, int y, int sX, int sY) {
		if (!mines[x + 1][y].getText().equals(" ")) {
			mines[x + 1][y].setText(String.valueOf(minesMaps[x + 1][y]
					.getSurMine()));
			mines[x + 1][y].setBackground(Color.WHITE);
			mines[x + 1][y].setEnabled(false);
			mines[x + 1][y].setBorder(null);
		}
	}

	public void showRightBottom(int x, int y, int sX, int sY) {
		if (!mines[x + 1][y + 1].getText().equals(" ")) {
			mines[x + 1][y + 1].setText(String.valueOf(minesMaps[x + 1][y + 1]
					.getSurMine()));
			mines[x + 1][y + 1].setBackground(Color.WHITE);
			mines[x + 1][y + 1].setEnabled(false);
			mines[x + 1][y + 1].setBorder(null);
		}
	}

}

反思与总结

嗯,你们也一定注意到了

这个主类写得又臭又长.....

嗯,这就是我一贯的风格了......

主要是判断过程全部写在了主类中,正确的写法是应当抽离出来写成工具类或者应当包含在地图类当中

好的,说白了我就是懒

问题

还有仨遗留问题....

1::点地雷就死了~没法重新开始...

2:没法自定义难度~但是我留了参数,只是在主类里面写死了而已......

3:第一次点击是有可能点到地雷直接挂掉的,这个其实很简单解决~

出现这些问题的原因就是……还是因为我懒...其实早就考虑到了~懒得解决~

原谅我~

有兴趣的童鞋可以自己尝试解决~