⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 allbuttonpanel2.java

📁 eclipse上的扫雷游戏的源码
💻 JAVA
字号:
package cleanmine;

//package teachermine;



import javax.swing.*;


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


public class AllButtonPanel2 extends JPanel implements ActionListener{
	private int row;//行数
	private int col;//列数
	private int mineCount;//地雷数
	private JButton[][] allButtons;//所有按钮
	private int[][] allButtonsMark;//所有按钮的标记
	
	public AllButtonPanel2(int row,int col,int mineCount){
		this.row=row;
		this.col=col;
		this.mineCount=mineCount;
		allButtons=new JButton[row][col];
		allButtonsMark=new int[row][col];
		createMine();
		createButtons();
		init();
	}
	
	private void init(){
		this.setLayout(new GridLayout(row,col));
		for(int i=0;i<allButtons.length;i++){
			for(int j=0;j<allButtons[i].length;j++){
				this.add(allButtons[i][j]);
			}
		}
	}
	
	private void createMine(){
		int n=0;
		while(n<mineCount){//随机生成mineCount个地雷
			int i=(int)(Math.random()*row);
			int j=(int)(Math.random()*col);
			if(allButtonsMark[i][j]!=-1){
				allButtonsMark[i][j]=-1;
				n++;
			}
		}
		
		for(int i=0;i<allButtonsMark.length;i++){//计算每个位置的周围地雷数
			for(int j=0;j<allButtonsMark[i].length;j++){
				if(allButtonsMark[i][j]!=-1){
					allButtonsMark[i][j]=getSurroundMineCount(allButtonsMark,i,j);
				}
			}
		}
	}
	
	private int getSurroundMineCount(int[][] data,int i,int j){
		int num=0;//统计周围的雷数
		if(i-1>=0&&j-1>=0){
			num+=(data[i-1][j-1]==-1?1:0);
		}
		if(i-1>=0){
			num+=(data[i-1][j]==-1?1:0);
		}
		if(i-1>=0&&j+1<data[0].length){
			num+=(data[i-1][j+1]==-1?1:0);
		}
		if(j-1>=0){
			num+=(data[i][j-1]==-1?1:0);
		}
		if(j+1<data[0].length){
			num+=(data[i][j+1]==-1?1:0);
		}
		if(i+1<data.length&&j-1>=0){
			num+=(data[i+1][j-1]==-1?1:0);
		}
		if(i+1<data.length){
			num+=(data[i+1][j]==-1?1:0);
		}
		if(i+1<data.length&&j+1<data[0].length){
			num+=(data[i+1][j+1]==-1?1:0);
		}
		return num;	
	}
	
	private void createButtons(){
		for(int i=0;i<allButtons.length;i++){
			for(int j=0;j<allButtons[i].length;j++){
				allButtons[i][j]=new MineButton(i,j);
				allButtons[i][j].setSize(6,6);
				allButtons[i][j].addActionListener(this);
				allButtons[i][j].addMouseListener(new MouseAdapter(){
					public void mouseClicked(MouseEvent e) {
						if(e.getButton()==MouseEvent.BUTTON3){//?????
							int remain=Integer.parseInt(CleanMine.remainMine.getText());
							JButton b=(JButton)e.getSource();
							if(b.getText().equals("")){
								remain--;
								CleanMine.remainMine.setText(remain+"");
								b.setText("&");
							}else if(b.getText().equals("&")){
								remain++;
								CleanMine.remainMine.setText(remain+"");
								b.setText("");
							}
						}
					}
				});
			}
		}
	}

	public void actionPerformed(ActionEvent e) {
		MineButton b=(MineButton)e.getSource();
		int r=b.getRow();
		int c=b.getCol();
		if(allButtonsMark[r][c]==-1){//如果是地雷
			for(int i=0;i<allButtons.length;i++){
				for(int j=0;j<allButtons[i].length;j++){
					if(allButtonsMark[i][j]==-1){
						allButtons[i][j].setText("$");
					}else if(allButtonsMark[i][j]==0){
						allButtons[i][j].setText("");
						allButtons[i][j].setBackground(Color.CYAN);
					}else{
						allButtons[i][j].setText(allButtonsMark[i][j]+"");
						allButtons[i][j].setBackground(Color.CYAN);
					}
				}
			}
		}else{//如果不是雷
			
			showEmpty(allButtonsMark,r,c);
		}
	}
	
	private void showEmpty(int[][] data,int i,int j){
		MineButton b=(MineButton)allButtons[i][j];
		if(b.isCleared()){
			return;
		}
		if(allButtonsMark[i][j]==0){
			b.setBackground(Color.CYAN);
			b.setCleared(true);
			if(i-1>=0&&j-1>=0){
				showEmpty(data,i-1,j-1);
			}
			if(i-1>=0){
				showEmpty(data,i-1,j);
			}
			if(i-1>=0&&j+1<data[0].length){
				showEmpty(data,i-1,j+1);
			}
			if(j-1>=0){
				showEmpty(data,i,j-1);
			}
			if(j+1<data[0].length){
				showEmpty(data,i,j+1);
			}
			if(i+1<data.length&&j-1>=0){
				showEmpty(data,i+1,j-1);
			}
			if(i+1<data.length){
				showEmpty(data,i+1,j);
			}
			if(i+1<data.length&&j+1<data[0].length){
				showEmpty(data,i+1,j+1);
			}
		}else if(allButtonsMark[i][j]>0){
			b.setText(allButtonsMark[i][j]+"");
			b.setBackground(Color.CYAN);
			b.setCleared(true);
		}	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -