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

📄 main.java

📁 一个用JAVA编写的挖地雷小程序,只有6K大小!
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.math.*;
import javax.swing.*;
import java.util.Random;

public class Main extends JFrame implements ActionListener
{
    public class QI extends MouseAdapter implements ActionListener
    {
        public JPanel v = new JPanel();
        public JButton but[] = new JButton[4];
        public CardLayout card = new CardLayout();
        public void QI()        {}
        public int x=0;
        public int y=0;
        public void ginit(int x,int y)
        {
            this.x=x;    this.y=y;        
            but[0] = new JButton("");
            but[1] = new JButton("雷");
            but[2] = new JButton("旗");
            but[3] = new JButton(Integer.toString(map[x][y]));
            card = new CardLayout();
            v = new JPanel();
            v.setLayout(card);
            for(int k=0;k<4;k++)
                v.add(but[k],Integer.toString(k));
            but[0].addActionListener(this);
            but[2].addActionListener(this);
            but[0].addMouseListener(this);
            but[2].addMouseListener(this);
            card.show(v,"0");    
        }
        public void mouseClicked(MouseEvent evt) 
        {
            if(evt.isMetaDown())
            {
                if(evt.getComponent()==but[0])
                {
                    card.show(v,"2");  //插红旗
                    u[x][y]=true;
                    sum++;
                }
                else if(evt.getComponent()==but[2])
                {
                    card.show(v,"0");
                    u[x][y]=false;
                    sum--;  
                    return;
                }
            }
        }
        public void actionPerformed(ActionEvent e)
        {
            
            if(e.getSource()==but[0])
            {
                if(bflag) 
                {
                    card.show(v,"2");  //插红旗
                    u[x][y]=true;
                    sum++;
                }
                else if(u[x][y]) return;
                else if(lei[x][y])
                {
                    for(int i=0;i<M;i++)
                        for(int j=0;j<M;j++)
                        {
                            if(lei[i][j]) qi[i][j].card.show(qi[i][j].v,"1");
                            else qi[i][j].card.show(qi[i][j].v,"0");
                            u[i][j]=true;
                        }
                        showfield.setText("YOU LOST");
                        return;
                }
                else 
                {
                    if(map[x][y]!=0 ) 
                    {
                        card.show(v,"3");
                        u[x][y]=true;
                        sum++;
                    }
                    else bfs();
                }
            }
            else if(e.getSource()==but[2] && bflag) //拔旗
            {
                card.show(v,"0");
                u[x][y]=false;
                sum--;  
                return;
            }
            if(sum==M*M) showfield.setText("YOU WIN");
        }
        public void bfs()
        {
            int head=0,tail=0;
            que[tail][0]=x;
            que[tail++][1]=y;
            qi[x][y].card.show(v,"3");
            u[x][y]=true;
            sum++;
            while(head<tail)
            {
                int qx=que[head][0];
                int qy=que[head++][1];    
                for(int k=0;k<4;k++)
                {
                    int xx=qx+dxy[k][0];
                    int yy=qy+dxy[k][1];
                    System.out.println(xx+"  *   "+yy+":");
                    if(xx>=0 && xx<M && yy>=0 && yy<M 
                        && !u[xx][yy] && !lei[xx][yy] )
                    {
                        if(map[xx][yy]==0) 
                        {
                            que[tail][0]=xx;
                            que[tail++][1]=yy;
                        }
                        System.out.println(xx+"  **  "+yy+":");
                        System.out.println(map[xx][yy]);
                        qi[xx][yy].card.show(qi[xx][yy].v,"3");
                        u[xx][yy]=true;
                        sum++;
                    }
                        
                }
            }
        }
    }
    
    final int dxy[][]= {{-1,0},{0,1},{1,0},{0,-1},{-1,1},{1,1},{1,-1},{-1,-1}}; 
    final int M = 8;
    final int LeiNum = 10;
    
    QI qi[][] = new QI[M][M];
    JButton flag = new JButton("FLAG");
    JTextField showfield=new JTextField(10);
    boolean bflag = false;
    
    boolean u[][]=new boolean[M][M];
    int que[][]=new int[M*M][2];
    int map[][]=new int[M][M];
    boolean lei[][]=new boolean[M][M];
    public int sum=0;
    
    private void initcompute()
    {
        for(int i=0;i<M;i++)
            for(int j=0;j<M;j++)
            {
                u[i][j] = false;
                lei[i][j] = false;
                map[i][j] = 0;
            }
            
        for(int i=0;i<LeiNum;i++)
        {
            
            do
            {
                int xx=(int)(Math.random()*M);
                int yy=(int)(Math.random()*M);
        //        System.out.println(xx+","+yy+" ");
                if(lei[xx][yy]) continue;
                lei[xx][yy]=true;
                break;
            }while(true);
        }    
        for(int i=0;i<M;i++)
            for(int j=0;j<M;j++)
            {
                for(int k=0;k<8;k++)
                {
                    int xx,yy;
                    xx=i+dxy[k][0];
                    yy=j+dxy[k][1];
                    if(xx>=0 && xx<M && yy>=0 && yy<M && lei[xx][yy])
                    {
                        map[i][j]++;
                    }
                }
            }    
                
    }
    
    public JButton reset = new JButton("RESET");
    public void setmenu()
    {
        MenuBar bar = new MenuBar();
        Menu file = new Menu("File");
        setMenuBar(bar);
        MenuItem help = new MenuItem("Help");
        file.add(help);
        bar.add(file);
    }
    public Main()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        initcompute();
        setmenu();
        Container c = this.getContentPane();
        JPanel cen = new JPanel();
        cen.setLayout(new GridLayout(M,M));
        for(int i=0;i<M;i++)
            for(int j=0;j<M;j++)
            {
                qi[i][j] = new QI();
                qi[i][j].ginit(i,j);
                cen.add(qi[i][j].v);
            }
        
        c.add(cen,BorderLayout.CENTER);
        flag.addActionListener(this);
        JPanel sou=new JPanel();
        sou.setLayout(new FlowLayout());
        reset.addActionListener(this);
        sou.add(reset);
//        sou.add(flag);
        showfield.setText("挖地雷");
        sou.add(showfield);    
        c.add(sou,BorderLayout.SOUTH);
        
    }
    public static void main(String args[])
    {
        Main mainFrame = new Main();
        mainFrame.setSize(500,530);
        mainFrame.setTitle("挖地雷");
        mainFrame.setVisible(true);    
        mainFrame.setResizable(false);
    }
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==flag)
        {
            bflag=!bflag;
            if(!bflag) showfield.setText("挖地雷");
            else showfield.setText("插红旗");
        }
        else 
        {
            initcompute();
            for(int i=0;i<M;i++)
                for(int j=0;j<M;j++)
                {
                    qi[i][j].but[3].setText(Integer.toString(map[i][j]));
                    qi[i][j].card.show(qi[i][j].v,"0");
                }
        }
    }
}

⌨️ 快捷键说明

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