📄 saolei2.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 + -