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

📄 allbuttonpanel.java

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

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JPanel;

import tmine.CleanMine;
import tmine.MineButton;

public class AllButtonPanel extends JPanel implements ActionListener{
	private int row;
	private int col;
	private int minecount;
	private JButton[][] buttons;
	private int[][] buttonsMark;
	public static int index = 0;
	public AllButtonPanel(int row,int col, int minecount){
		this.row= row;
		this.col = col;
		this.minecount= minecount;
		buttons = new JButton[row][col];
		buttonsMark = new int[row][col];
		
		creatmine();
//		creatButtons();
		createButtons();
		
		init();
	}
//	public void stop(){
//		for(int i =0;i<buttons.length;i++){
//			for(int j = 0;j<buttons[i].length;j++){
//				if()
//			}
//		}
//	}
//	
	
	public void init(){
	  this.setLayout(new GridLayout(row,col));	
	  for(int i = 0;i<buttons.length;i++){
		  for(int j= 0;j<buttons[i].length;j++){
			  this.add(buttons[i][j]);
		  }
	  }
	}
	public void creatmine(){
		int n  = 0;
		while(n<=minecount){
			int i =(int)(Math.random()*row);
			int j = (int)(Math.random()*col);
			if(buttonsMark[i][j]!=-1){
				buttonsMark[i][j]=-1;
				n++;
			}
		}
		for(int i = 0;i<buttons.length;i++){
			for(int j = 0;j<buttons[i].length;j++){
				if(buttonsMark[i][j]!=-1){
					buttonsMark[i][j] = getSurroundMineCount(buttonsMark,i,j);
				}
			}
		}
		
	}
	public 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;	
		
	}
//	
//	public void creatButtons(){
//		for(int i = 0;i<buttons.length;i++){
//			for(int j= 0;j<buttons[i].length;j++){
//				buttons[i][j]= new MineButton(i, j);
//				buttons[i][j].setSize(6, 6);
//				buttons[i][j].addActionListener(this);
//				buttons[i][j].addMouseListener(new MouseAdapter(){
//
//					public void mouseClicked(MouseEvent e) {
//						if(e.getButton()== MouseEvent.BUTTON3){
////							int remain = Integer.parseInt(CleanMine.remainMine.getText());
//							int remain=Integer.parseInt(CleanMine.remainMine.getText());
//							JButton jb =(JButton) e.getSource();
//							if(jb.getText().equals("")){
//								remain--;
//								CleanMine.remainMine.setText(remain+"");
//								jb.setText("@");
//							}else if(jb.getText().equals("@")){
//								remain++;
//								CleanMine.remainMine.setText(remain+"");
//								jb.setText("");
//							}
//						}
//					}
//
//					
//					
//				});
//		}
//	}
//	}
//	

	private void createButtons(){
		for(int i=0;i<buttons.length;i++){
			for(int j=0;j<buttons[i].length;j++){
				buttons[i][j]=new MineButton(i,j);
				buttons[i][j].setSize(6,6);
				buttons[i][j].addActionListener(this);
				buttons[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(buttonsMark[r][c]==-1){//如果是地雷
			for(int i=0;i<buttons.length;i++){
				for(int j=0;j<buttons[i].length;j++){
					if(buttonsMark[i][j]==-1){
						buttons[i][j].setText("$");
					}else if(buttonsMark[i][j]==0){
						buttons[i][j].setText("");
						buttons[i][j].setBackground(Color.CYAN);
					}else{
						buttons[i][j].setText(buttonsMark[i][j]+"");
						buttons[i][j].setBackground(Color.CYAN);
					}
				}
			}
		}else{//如果不是雷
			
			showEmpty(buttonsMark,r,c);
		}
	}
	
	private void showEmpty(int[][] data,int i,int j){
		MineButton b=(MineButton)buttons[i][j];
		if(b.isCleared()){
			return;
		}
		if(buttonsMark[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(buttonsMark[i][j]>0){
			b.setText(buttonsMark[i][j]+"");
			b.setBackground(Color.CYAN);
			b.setCleared(true);
			index++;
		}	
	}
}

⌨️ 快捷键说明

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