java扫雷

极其low的java版扫雷...

内容包括基础的点击,周围雷数,翻到0时将相连的0全部翻开,以及标记按钮

github地址:https://github.com/jnxxhzz/java-winmine   单独下载saolei.rar解压import即可

以下正文

_______________________________________________________________________________________________________

这里使用swing.frame ,swing.jbutton等 及mouselistener进行鼠标动作监听

1.首先生成基础界面

     1)加载重新开始按钮

     2)加载记录剩余雷数的计数器

     3)加载游戏区域的所有按钮

2.添加游戏内容

     1)随机选择游戏区域内的某些块变成“雷”,同时让周围的所有非雷块计数器+1

     2)添加openButton方法,在翻开计数为0的块时递归翻开所有相连的0块

     3)使用mouselistener监听鼠标,加载mouseclicked的方法判断当前鼠标左键及右键的所有触发情况

3.添加游戏胜利,游戏失败等内容

     1)添加游戏胜利的显示内容,并且翻开所有方块

     2)添加游戏失败的显示内容,并且翻开所有方块

     3)添加重新开始按钮的操作,重载所有游戏内容


_______________________________________________________________________________________________________

全局变量

JFrame frame = new JFrame("扫雷");
	JButton reset = new JButton("Again");
	Container container = new Container();
	JPanel Header=new JPanel();
	
	
	final int dirx[]= {-1, 0, 1,0, 1,-1,-1,1};
	final int diry[]= { 0,-1, 0,1,-1,-1, 1,1};
	final int dirn = 8;
	
	Config config = new Config();
	final int Mine = -1;
	
	JButton border[][] = new JButton[config.row][config.col]; //按钮
	int score[][] = new int[config.row][config.col];  //数字
	int sign[][] = new int[config.row][config.col];  //标记
	int nowsigns = config.Minenumber;

	JButton scoreborder = new JButton();

以及重构类config

public class Config {
	final int row = 20;
	final int col = 20;
	final int Minenumber = 50;
	Color Minecolor = Color.RED;
	Color Signcolor = Color.BLACK;
	Color Opencolor = Color.GREEN;
	Color Nocolor   = Color.YELLOW;
	final int signed = 1;
	final int notsigned = 0;
}


首先需要生成一个基础界面

public Saolei() {
		//设置界面大小
		frame.setSize(600,700);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLayout(new BorderLayout());
		
		//加载reset
		addOtherButton();
		
		//加载主界面按钮
		addborder();
		
		//加载雷
		addMine();

		
		frame.setVisible(true);
	}

接下来加载重新开始与标记雷数的两个按钮 reset 和 scoreborder

void addOtherButton() {
		//加载重新开始按钮
		reset.setBackground(config.Nocolor);
		reset.setOpaque(false); //透明度
		reset.addMouseListener(this);
		
		//加载分数面板
		scoreborder.setEnabled(false);
		scoreborder.setOpaque(true); //透明度

		Header.add(reset);
		Header.add(scoreborder);
		

		frame.add(Header,BorderLayout.NORTH);
		
	}	

然后加载属于游戏区域的按钮

void addborder() {
		frame.add(container,BorderLayout.CENTER);
		container.setLayout(new GridLayout(config.row,config.col));
		for (int i = 0; i < config.row ; i++)
			for (int j = 0; j < config.col ; j++) {
				JButton x = new JButton();
				
				x.setMargin(new Insets(0,0,0,0));
				x.setBackground(config.Nocolor);
				x.setOpaque(false);
				x.addMouseListener(this);
				border[i][j] = x;
				container.add(x);
			}
	}

将游戏区域内的按钮部分修改为雷,并在雷的周围九宫格的计数器+1

void addMine() {
		scoreborder.setText("雷数:" + nowsigns);
		Random rand = new Random();
		nowsigns = config.Minenumber;
		for (int i = 0 ; i < config.Minenumber; i++) {
			int x = rand.nextInt(config.row);
			int y = rand.nextInt(config.col);
			if (score[x][y] == Mine) i--;
			else {
				score[x][y] = Mine;
				for (int k=0;k=0 && gx=0 && gy

添加openButton翻开块的动作方法,若翻开的是0块则递归继续翻开所有相连的0块

void openButton(int x,int y) {
		border[x][y].setText( "" + score[x][y]);
		border[x][y].setBackground(config.Opencolor);
		border[x][y].setEnabled(false);
		border[x][y].setOpaque(true);
		if (score[x][y] !=0 ) return;
		for (int i=0;i=0 && gy>=0 && gx

使用mouselistener监听鼠标操作

首先获取被点击的button

    若点击的是reset按钮则重新开始游戏

否则点击的就是游戏区域内的按钮

    此时需要判断是右键点击还是左键点击

        若是左键点击

            则判断当前块是否被标记

                若被标记过则无响应

                若没有被标记,则使用openButton方法翻开当前块

         若是右键点击

                判断是当前快否被翻开

                    若没有翻开则判断当前块是否被标记

                        若被标记则取消标记

                        若没有标记则标记当前块

                    若被翻开则无响应

public void mouseClicked(MouseEvent xx) {

		//获取点击button
		JButton button = (JButton)xx.getSource();
		int tx = 0,ty = 0;
		for (int i=0;i

加载wingame,losegame,againgame,showall四个方法

void checkWin() {
		for (int i=0;i

_______________________________________________________________________________________________________

你可能感兴趣的:(java)