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

📄 saolei2.java

📁 扫雷游戏
💻 JAVA
字号:
import javax.swing.*;
import javax.swing.event.*;
import java.applet.*;
import java.lang.Math;
import java.awt.*;
import java.awt.event.*;


public class SaoLei2 extends JApplet implements ActionListener,MouseListener{
	public JPanel p1=new JPanel();
	public JPanel p2=new JPanel();
	public JPanel p11=new JPanel();
	public JButton b1=new JButton("Replay");
	public JButton b2=new JButton("Win");
	public JButton b3=new JButton("Lost");
	public JLabel la=new JLabel();
	public JPanel p[][]=new JPanel[9][9];
	JButton b[][]=new JButton[9][9];
	JLabel label[][]=new JLabel[9][9];
	CardLayout layout=new CardLayout();
	public int bb[][]=new int[9][9];
	public int qi;
//	public JLabel label1=new JLabel("H");
	
	public void init(){
		int i,j,k,n;
		qi=10;
		this.setLayout(new BorderLayout());
		
		this.add("North",p1);
		this.add(p2);
		la.setText("剩余雷数:"+String.valueOf(qi));
		p1.add(la);
		p1.add(p11);
		p11.setLayout(layout);
		p11.add(b1,"Reset");
		b1.addMouseListener(this);
		b1.addActionListener(this);
		p11.add(b2,"win");
		b2.addMouseListener(this);
		b2.addActionListener(this);
		p11.add(b3,"lost");
		b3.addActionListener(this);
		
		
		p2.setLayout(new GridLayout(9,9,2,2));
		
		//int bb[][]=new int[9][9];				//产生随即的雷
		int ii,jj;
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
				bb[i][j]=0;
		for(i=0;i<10;i++)
		{
			do
			{
				n=(int)(Math.random()*80);
				ii=n/9;
				jj=n%9;
			}while(bb[ii][jj]==1);
			bb[ii][jj]=1;
		}

						
		
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
			{
				int s,t;
				p[i][j]=new JPanel();
				
				p2.add(p[i][j]);
				p[i][j].setLayout(layout);
				
				n=0;

				p[i][j].add(b[i][j]=new JButton(),"button");
				b[i][j].addMouseListener(this);
				b[i][j].addActionListener(this);
				if(bb[i][j]==1)
					p[i][j].add(label[i][j]=new JLabel("雷"),"label");
				else
				{
					//for(s=0;s<8;s++)
					{
						n=0;
						if(i>0)   
						{
							if(bb[i-1][j]==1)
								n++;
							if(j>0)
								if(bb[i-1][j-1]==1)
									n++;
						}
						if(j>0)  
						{ 
							if(bb[i][j-1]==1)
								n++;
							if(i<8)
								if(bb[i+1][j-1]==1)
									n++;
							
						}
						if(i<8)
						{
							if(bb[i+1][j]==1)
								n++;
							if(j<8)
								if(bb[i+1][j+1]==1)
									n++; 
						}
						if(j<8)
						{
							if(bb[i][j+1]==1)
								n++;
							if(i>0)
								if(bb[i-1][j+1]==1)
									n++;
						}    
						
					}
				p[i][j].add(label[i][j]=new JLabel(String.valueOf(n)),"label");
				if(n==0)
					bb[i][j]=-1;
				}
				
			}
		
	}
	
	public void mouseClicked(MouseEvent e){			//mouseClicked
	int i,j;
		int flag;
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
			{	
				if(e.getSource()==b[i][j]&&e.getButton() == e.BUTTON1)
				{
					if(bb[i][j]==1)
						youLost();
					else if(bb[i][j]==-1)
						openField(i,j);
					else
						layout.last(p[i][j]);
				}
				else if(e.getSource()==b[i][j]&&e.getButton() == e.BUTTON3)
				{
					b[i][j].setLabel("旗");
					bb[i][j]=0;
					qi--;
					la.setText("剩余雷数:"+String.valueOf(qi));
				}
			}
			
		flag=0;
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
				if(bb[i][j]==0)
					flag++;
		if(flag==81)
			youWin();	
	}
	public void mouseEntered(MouseEvent e){
	}
	public void mouseExited(MouseEvent e){
	}
	public void mousePressed(MouseEvent e){
	}
	public void mouseReleased(MouseEvent e){
	}
	
	
	public void actionPerformed(ActionEvent e){						//actionPerformed
		if(e.getSource()==b2||e.getSource()==b3)
		{
			layout.first(p11);
			resetPij();
		}
		if(e.getSource()==b1)
			resetPij();
	
	}
	
	
	public void youWin(){								//win
		layout.show(p11,"win");
	}
	
	public void youLost(){								//lost
		int i,j;
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
				layout.last(p[i][j]);
		layout.last(p11);
	}
	
	public void resetPij(){								//reset
		int i,j,n;
		qi=10;
		la.setText("剩余雷数:"+String.valueOf(qi));									//产生随即的雷
		int ii,jj;
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
				bb[i][j]=0;
		for(i=0;i<10;i++)
		{
			do
			{
				n=(int)(Math.random()*80);
				ii=n/9;
				jj=n%9;
			}while(bb[ii][jj]==1);
			bb[ii][jj]=1;
		}
		
		
		for(i=0;i<9;i++)
			for(j=0;j<9;j++)
			{
				b[i][j].setLabel("");
				layout.first(p[i][j]);
				
				if(bb[i][j]==1)
					label[i][j].setText("雷");
				else
				{
					//for(s=0;s<8;s++)
					{
						n=0;
						if(i>0)   
						{
							if(bb[i-1][j]==1)
								n++;
							if(j>0)
								if(bb[i-1][j-1]==1)
									n++;
						}
						if(j>0)  
						{ 
							if(bb[i][j-1]==1)
								n++;
							if(i<8)
								if(bb[i+1][j-1]==1)
									n++;
							
						}
						if(i<8)
						{
							if(bb[i+1][j]==1)
								n++;
							if(j<8)
								if(bb[i+1][j+1]==1)
									n++; 
						}
						if(j<8)
						{
							if(bb[i][j+1]==1)
								n++;
							if(i>0)
								if(bb[i-1][j+1]==1)
									n++;
						}    
						
					}
				label[i][j].setText(String.valueOf(n));
				if(n==0)
					bb[i][j]=-1;
				}
			}
	}
	
	public void openField(int i,int j){
		layout.last(p[i][j]);
		bb[i][j]=0;
		if(i>0)   
		{
			if(bb[i-1][j]==-1)
				openField(i-1,j);
			else if(bb[i-1][j]==0)
				layout.last(p[i-1][j]);
			if(j>0)
				if(bb[i-1][j-1]==-1)
					openField(i-1,j-1);
				else if(bb[i-1][j-1]==0)
					layout.last(p[i-1][j-1]);
		}
		if(j>0)  
		{ 
			if(bb[i][j-1]==-1)
				openField(i,j-1);
			else if(bb[i][j-1]==0)
				layout.last(p[i][j-1]);
			if(i<8)
				if(bb[i+1][j-1]==-1)
					openField(i+1,j-1);
				else if(bb[i+1][j-1]==0)
					layout.last(p[i+1][j-1]);
		}
		if(i<8)
		{
			if(bb[i+1][j]==-1)
				openField(i+1,j);
			else if(bb[i+1][j]==0)
				layout.last(p[i+1][j]);
			if(j<8)
				if(bb[i+1][j+1]==-1)
					openField(i+1,j+1); 
				else if(bb[i+1][j+1]==0)
					layout.last(p[i+1][j+1]);
		}
		if(j<8)
		{
			if(bb[i][j+1]==-1)
				openField(i,j+1);
			else if(bb[i][j+1]==0)
				layout.last(p[i][j+1]);
			if(i>0)
				if(bb[i-1][j+1]==-1)
					openField(i-1,j+1);
				else if(bb[i-1][j+1]==0)
					layout.last(p[i-1][j+1]);
		}    
			
	}
}

⌨️ 快捷键说明

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