package 临时;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class 扫雷  extends JFrame{
	JButton B[][];
	JLabel L[][];
	JFrame f;
	GridBagLayout layout;
	GridBagConstraints c=new GridBagConstraints();
	JTextArea area1=new JTextArea(5,2);
	JTextArea area2=new JTextArea(5,2);
	JButton start=new JButton("开始");
	JPanel panel=new JPanel();
	int sizex,sizey;
	int nx,ny;
	Action action;
	Icon boomb=new ImageIcon("炸弹.png");
	Boolean judge[][];
	int num[][];
	Font font=new Font("华云彩文",Font.BOLD,25);
	Color color=Color.red;
	int boombnum;
    Text t=new Text();;
	Boolean tB=false,b=false;
	final JFrame f1=new JFrame("设置面板");
	public 扫雷() {
		
		initcountrol();
		
	
	}
	public static void main(String[] arg) {
		扫雷 a=new 扫雷();
		
	}
	public int initcountrol() {
		
		JLabel Label=new JLabel("输入雷的数量");
		final JTextField F=new JTextField(5);
		
		JLabel Label1=new JLabel("输入水平网格数");
		JLabel Label2=new JLabel("输入垂直网格数");
		final JTextField F1=new JTextField(5);
		final JTextField F2=new JTextField(5);
		F.setText("10");
		F1.setText("9");
		F2.setText("9");
		F2.setEditable(false);
		JButton button=new JButton("保存设置");
		f1.setLayout(new FlowLayout());
		f1.add(Label);
		f1.add(F);
		f1.add(Label1);
		f1.add(F1);
		f1.add(Label2);
		f1.add(F2);
		f1.add(button);
		button.addActionListener(new ActionListener() {
			
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(F.getText().equals("")) {
					JOptionPane.showMessageDialog(null, "请输入正确的雷数");
					return;//阻断其他赋值操作避免重复提示
				}
				else {
					boombnum=Integer.valueOf(F.getText());
				
				}
				if(F1.equals("")) {
					JOptionPane.showMessageDialog(null, "请输入水平网格数");
					
					return;//阻断其他赋值操作避免重复提示
				}else {
					nx=Integer.valueOf(F1.getText());
					F2.setText(F1.getText());
				}
				if(F2.equals("")) {
					JOptionPane.showMessageDialog(null, "垂直网格数与水平的保持相同");
					return;//阻断其他赋值操作避免重复提示
				}else {
					ny=Integer.valueOf(F2.getText());
				}
				if(boombnum>=nx*ny) {
					JOptionPane.showMessageDialog(null, "输入的雷数过大");
					return;
				}
				
				// TODO 自动生成的方法存根
				nx=ny;
				sizex=nx*60;
				sizey=ny*60+300;
				B=new JButton[nx+2][ny+2];
				L=new JLabel[nx+2][ny+2];
				action=new Action(nx,ny);
				judge=new Boolean[nx+2][ny+2];
				num=new int[nx+2][ny+2];
				initpanel(nx,ny,sizex,sizey);
				area2.setText(""+boombnum);
				f.setVisible(true);
				f1.setVisible(false);
				t.start();
				tB=false;
				 t.time=0;
				
				
			
			}
		});
		f1.setVisible(true);
		f1.setLocation(800,200);
		f1.setSize(200,300);
		
		//f.pack();
		return boombnum;
	}
	public void initpanel(int nx,int ny,int sizex,int sizey) {
		f=new JFrame("扫雷");
		layout=new GridBagLayout();//防止二次打开界面时程序界面异常if初始化在外面初始化界面将会出错
		f.setLayout(layout);
		c.fill=GridBagConstraints.BOTH;
		
		
		c.weightx=0.3;
		c.weighty=0.15;
		c.gridx=2;
		c.gridy=0;
		c.gridwidth=(int) (nx*0.4);
		c.gridheight=6;
		
		
		layout.setConstraints(area1, c);
		f.add(area1);
		c.gridheight=2;
		c.gridwidth=(int) (nx*0.2);
		c.gridx=(int) (nx*0.5+3);
		c.gridy=0;
		
	
		start.setPreferredSize(new Dimension((int)(800/nx-3),(int)(800/ny)));
		layout.setConstraints(start, c);
		c.gridx=(int) (nx*0.8+2);
		c.gridy=0;
		c.gridwidth=(int) (nx*0.4);
		c.gridheight=3;
		c.weighty=0.0;
		area2.setFont(new Font("微软雅黑",Font.BOLD,45));
		area2.setBackground(Color.yellow);
		layout.setConstraints(area2, c);
		f.add(area2);
		
		f.add(start);
		c.ipadx=0;
		c.ipady=0;
		c.gridheight=1;
		c.gridwidth=1;
		c.weighty=0.3;
		for(int n=1;n<nx+1;n++) {
			for(int m=1;m<ny+1;m++) {
				L[m][n]=new JLabel(""+m+",");
				L[m][n].setPreferredSize(new Dimension((int)(sizex/nx-3),(int)(sizey/ny)));
				c.gridx=m+2;
				c.gridy=n+5;
				layout.setConstraints(L[m][n], c);
				f.add(L[m][n]);
				L[m][n].setVisible(false);
				num[m][n]=0;
				judge[m][n]=false;
			}
		}
		for(int n=0;n<nx+1;n++) {//边缘补偿防止越界便于setnum方法的实现
			L[n][0]=new JLabel("");
			L[0][n]=new JLabel("");
			L[n][nx+1]=new JLabel("");
			L[nx+1][n]=new JLabel("");
			judge[0][n]=false;
			judge[n][0]=false;
			judge[nx+1][n]=false;
			judge[n][nx+1]=false;
			B[n][0]=new JButton("");
			B[0][n]=new JButton("");
			B[n][nx+1]=new JButton("");
			B[nx+1][n]=new JButton("");
		
		}
		setboomb(boombnum, nx, ny);
		setnum(nx,ny);
		for(int n=1;n<nx+1;n++) {
			for(int m=1;m<ny+1;m++) {
				B[m][n]=new JButton();
				B[m][n].setPreferredSize(new Dimension((int)(sizex/nx-3),(int)(sizey/ny)));
				c.gridx=m+2;
				c.gridy=n+5;
				layout.setConstraints(B[m][n], c);
				B[m][n].addActionListener(action);
				B[m][n].setOpaque(false);
				f.add(B[m][n]);
				
			}
		}
		
		start.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
			f1.setVisible(true);
			f.setVisible(false);
			t.time=0;
				// TODO 自动生成的方法存根
			tB=false;	
			}
		});
		f.addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent e) {
				JOptionPane.showMessageDialog(null, "本程序来自码源天空   用户名: gaojinlei");
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
				
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				JOptionPane.showMessageDialog(null, "程序退出");
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowActivated(WindowEvent e) {
				// TODO 自动生成的方法存根
				
			}
		});
		f.setSize(sizex,sizey);
		f.setVisible(false);
		
	}
	

	private void setnum(int nx,int ny) {
		for(int n=0;n<nx+1;n++) {
			for(int m=0;m<ny+1;m++) {
				num[n][m]=0;
			}}
		for(int n=1;n<nx+1;n++) {
			for(int m=1;m<ny+1;m++) {
				if(judge[n][m]) {
					num[n-1][m-1]++;
					num[n-1][m]++;
					num[n-1][m+1]++;
					num[n][m-1]++;
					num[n][m+1]++;
					num[n+1][m-1]++;
					num[n+1][m]++;
					num[n+1][m+1]++;
					
				}
			}
			
		}
		for(int n=1;n<nx+1;n++) {
				for(int m=1;m<ny+1;m++) {
					L[n][m].setText(num[n][m]==0?"":""+num[n][m]);
					L[n][m].setFont(new Font("华云彩文",Font.BOLD,25));
					if(L[n][m].getText().equals("2")){
						L[n][m].setForeground(Color.blue);
						
					}
					if(L[n][m].getText().equals("3")){
						L[n][m].setForeground(Color.orange);
						
					}
					if(L[n][m].getText().equals("4")){
						L[n][m].setForeground(Color.pink);
						
					}
				}
			}
		pack();
		// TODO 自动生成的方法存根
		
	}
	
	public void setboomb(int num,int nx,int ny) {
		
		int m=num;
		while(m>0) {
			int x=(int) (Math.random()*nx+1);
			int y=(int) (Math.random()*nx+1);
			if(judge[x][y]) {
				
			}else {
		    judge[x][y]=true;
		    L[x][y].setIcon(boomb);
		    
			m--;	
			}
			
		}
	}
	class Action implements ActionListener{
		int nx=0,ny=0;
		public Action(int x,int y) {
			nx=x;
			ny=y;
			
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			
			for(int n=1;n<nx+1;n++) {
				for(int m=1;m<ny+1;m++) {
					if(e.getSource().equals(B[n][m])) {
						//System.out.println(e.getSource());
						B[n][m].setVisible(false);
						L[n][m].setVisible(true);
						//System.out.println(11);
						linkopen(n,m,nx,ny);
						
						if(judge[n][m]) {
							tB=true;
							JOptionPane.showMessageDialog(null, "失败");
							openAll();
							return;
							
						}
						judgewin();
					
					}
				}
			}
		}

		private void openAll() {
			for(int n=1;n<nx+1;n++) {
				for(int m=1;m<ny+1;m++) {
					B[n][m].setVisible(false);
					L[n][m].setVisible(true);
					
					}
				}
			}
			// TODO 自动生成的方法存根
		public void judgewin() {
			int num=0;
			for(int n=1;n<nx;n++) {
				for(int m=1;m<ny;m++) {
					if(B[n][m].isVisible())
						num++;
					System.out.println(num);
					}
					
					}
				
		if(num==boombnum) {
			tB=true;
						JOptionPane.showMessageDialog(null, "恭喜你完成了游戏用时"+area1.getText());
						
			}
			}
		}
			
		
	
		
	
//	public void linkopen(int n,int m,int nx,int ny) {
//		for(int nn=-1;nn<=1;nn++) {
//			for(int mm=-1;mm<=1;mm++) {
//			if(!judge[n-nn][m-mm]&&mm!=nn&&mm!=-nn) {
//				B[n-nn][m-mm].setVisible(false);
//				if(n-nn>1&&m-mm>1&&n-nn<nx-1&&m-mm<ny-1) {
//					if(B[n-nn][m-mm].isVisible())
//				         linkopen(n-nn,m-mm,nx,ny);}
//			}
//			}
//		}
//		
//	}
	public void linkopen(int n,int m,int nx,int ny) {
		linkopentop(n,m,nx,ny);
		linkopenbottom(n,m,nx,ny);
		linkopenleft(n,m,nx,ny);
		linkopenright(n,m,nx,ny);
	}
	private void linkopenright(int n, int m, int nx, int ny) {
		for(int mm=1;m+mm<ny+1;mm++) {
			if(!judge[n][m+mm]&&B[n][m+mm].isVisible()) {
				B[n][m+mm].setVisible(false);
				L[n][m+mm].setVisible(true);
				linkopentop(n,m+mm,nx,ny);
				linkopenbottom(n,m+mm,nx,ny);
				if(!(L[n][m+mm].getText().equals("")))
						return;
			}else {
				break;
			}
		}
		
	}
	private void linkopenleft(int n, int m, int nx, int ny) {
		for(int mm=-1;m+mm>0;mm--) {
			if(!judge[n][m+mm]&&B[n][m+mm].isVisible()) {
				B[n][m+mm].setVisible(false);
				L[n][m+mm].setVisible(true);
				linkopentop(n,m+mm,nx,ny);
				linkopenbottom(n,m+mm,nx,ny);
				if(!(L[n][m+mm].getText().equals("")))
						return;
			}else {
				break;
			}
		}
		
		
	}
	private void linkopenbottom(int n, int m, int nx, int ny) {
		
		for(int nn=1;n+nn<nx+1;nn++) {
			if(!judge[n+nn][m]&&B[n+nn][m].isVisible()) {
				B[n+nn][m].setVisible(false);
				L[n+nn][m].setVisible(true);
				linkopenleft(n+nn,m,nx,ny);
				linkopenright(n+nn,m,nx,ny);
				if(!(L[n+nn][m].getText().equals("")))
						return;
			}else {
				break;
			}
		}
	}
	public void linkopentop(int n,int m,int nx,int ny) {
		
		for(int nn=-1;n+nn>0;nn--) {
			if(!judge[n+nn][m]&&B[n+nn][m].isVisible()) {
				B[n+nn][m].setVisible(false);
				L[n+nn][m].setVisible(true);
				System.out.println(n+nn);
				linkopenleft(n+nn,m,nx,ny);
				linkopenright(n+nn,m,nx,ny);
				if(!(L[n+nn][m].getText().equals("")))
						return;
			}else {
				break;
			}
		}
	}
	class Text extends Thread{

		int time=0;
		public void run() {
			time=0;
			while(true){
				try {
			      
				Thread.sleep(1000); 
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
				if(!tB) {
			area1.setText(time+"");
			area1.setFont(new Font("微软雅黑",Font.BOLD,25));
			time++;
			area1.setBackground(new Color(125,(int)(255*Math.random()),(int)(255*Math.random())));
				}
		}
			// TODO 自动生成的方法存根
		}	
		
		
	}

}
最近下载更多
张德志  LV6 2023年12月27日
zhihong fan  LV2 2023年12月26日
jiemomo  LV12 2023年10月19日
liangge2115  LV27 2023年7月23日
喃喵xxxx  LV6 2023年3月30日
总有人间一两风  LV8 2022年12月12日
xixiwoaini  LV3 2022年11月30日
微信网友_5999549969633280  LV1 2022年6月12日
选了了  LV7 2021年12月14日
15347107450  LV1 2021年12月5日
最近浏览更多
张德志  LV6 2023年12月27日
zhihong fan  LV2 2023年12月26日
lshlsh 2023年12月25日
暂无贡献等级
jiemomo  LV12 2023年10月19日
liangge2115  LV27 2023年7月20日
yangxb2  LV10 2023年7月11日
sdhfkh  LV4 2023年6月12日
不会敲代码 2023年6月10日
暂无贡献等级
小杨爱吃鸡86  LV1 2023年5月19日
18973881965  LV1 2023年2月24日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友