java掃雷遊戲代碼

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.Timer;

 

public class ScanLei1 extends JFrame  implementsActionListener{

   

    private static final long serialVersionUID = 1L;

    private Container contentPane;

    private JButton btn;

    private JButton[] btns;

    private JLabel b1;

    private JLabel b2;

    private JLabel b3;

    private Timer timer;

    private int row=9;

    private int col=9;

    private int bon=10;

    private int[][] a;

    private int b;

    private int[] a1;

    private JPanel p,p1,p2,p3;

   

    public ScanLei1(String title){

       super(title);

       contentPane=getContentPane();

       setSize(297,377);

       this.setBounds(400, 100, 400, 500);

       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       timer =new Timer(1000,(ActionListener) this);

       a = new int[row+2][col+2];

       initGUI();

    }

   

    public void initGUI(){

         p3=new JPanel();

       b=bon;

       JMenuBar menuBar=new JMenuBar();

       JMenu menu1=new JMenu("遊戲");

       JMenu menu2=new JMenu("幫助");

       JMenuItem mi1=new JMenuItem("初級");

       JMenuItem mi2 = new JMenuItem("中級");

       JMenuItem mi3 =new JMenuItem("高級");

       mi1.addActionListener(this);

       menu1.add(mi1);

       mi2.addActionListener(this);

       menu1.add(mi2);

       mi3.addActionListener(this);

       menu1.add(mi3);

       menuBar.add(menu1);

       menuBar.add(menu2);

       p3.add(menuBar);

       b1=new JLabel(bon+"");

       a1=new int[bon];

       btn =new JButton("開始");

       btn.addActionListener(this);

       b2=new JLabel("0");

       b3=new JLabel("");

       btns=new JButton[row*col];

        p=new JPanel();

       p.setLayout(new BorderLayout());

       contentPane.add(p);

       p.add(p3,BorderLayout.NORTH);

       //combo=newJComboBox(new Object[]{"初級","中級","高級"} );

       //加監聽

       /*combo.addItemListener(newItemListener(){            

           }});*/

        p1=new JPanel();

       //在那個位置

       //((FlowLayout)p1.getLayout()).setAlignment( FlowLayout.RIGHT);

       p1.add(b1);

       p1.add(btn);

       p1.add(b2);

       p1.add(b3);

       p.add(p3,BorderLayout.NORTH);

       p.add(p1,BorderLayout.CENTER);

        p2=new JPanel();

       p2.setLayout(new GridLayout(row,col,0,0));

       for(int i=0;i<row*col;i++){

           btns[i]=new JButton("");

           btns[i].setMargin(new Insets(0,0,0,0));

           btns[i].setFont(new Font(null,Font.BOLD,25));

           btns[i].addActionListener(this);

           btns[i].addMouseListener(new NormoreMouseEvent());

           p2.add(btns[i]);

       }

       contentPane.add(p,BorderLayout.NORTH);

       contentPane.add(p2,BorderLayout.CENTER);     

    }

    public void go(){   

       setVisible(true);

    }

    public static void main(String[] args){

       new ScanLei1("掃雷").go();  

    }

    public void out(int[][] a,JButton[] btns,ActionEvent e,int i,int x,int y){

           int p=1;

          if(a[x][y]==0){

                a[x][y]=10;

             btns[i].setEnabled(false); //33

            for(int l=y-1;l<=y+1;l++){

                  int m=x-1-1;

                   int n=l-1;

                   p=1;

                   System.out.println(a[1][2]);

                   if(n>-1&&n<col&&m>-1&&m<row)

                   {

                        for(int q=0;q<row&&p==1;q++){//col-->row;

                            if(((n+col*q)>=(m*col))&&((n+col*q)<(m+1)*col)){

                                if(a[x-1][l]!=0&&a[x-1][l]!=10){

                                     btns[n+col*q].setText(a[x-1][l]+"");

                                     a[x-1][l]=10;

                                     btns[n+col*q].setEnabled(false);

                                }

                                else if(a[x-1][l]==0){

                                  //a[x-1][l]=10;

                                    btns[n+col*q].setEnabled(false);

                                    out(a,btns,e,n+col*q,x-1,l); ////55////

                                    a[x-1][l]=10;

                                    btns[n+col*q].setEnabled(false);

                                }

                                p=0;

                           

                           }

                       }

                   }

                   p=1;

                   m=x;

                   if(n>-1&&n<col&&m>-1&&m<col)

                   {

                  for(int q=0;q<row&&p==1;q++){

                      if(((n+col*q)>=(m*col))&&((n+col*q)<(m+1)*col)){

                          if(a[x+1][l]!=0&&a[x+1][l]!=10){

                              btns[n+col*q].setText(a[x+1][l]+"");

                               a[x+1][l]=10;

                              btns[n+col*q].setEnabled(false);

                          }

                          else if(a[x+1][l]==0){

 

                             out(a,btns,e,n+col*q,x+1,l);///55////                 

                            a[x+1][l]=10;

                            btns[n+col*q].setEnabled(false);

                          }

                          p=0;

                      }

                   }

                   

                 }

             }

                int m=x-1;

               int n=y-1-1;

               p=1;

            if(n>-1&&n<col&&m>-1&&m<col)

              {

               for(int q=0;q<row&&p==1;q++){

                      if(((n+col*q)>=(m*col))&&((n+col*q)<(m+1)*col)){

                          if(a[x][y-1]!=0&&a[x][y-1]!=10){

                              btns[n+col*q].setText(a[x][y-1]+"");

                              a[x][y-1]=10;

                              btns[n+col*q].setEnabled(false);

                          }

                          else if(a[x][y-1]==0){

 

                    

                              out(a,btns,e,n+col*q,x,y-1);

                             

                          a[x][y-1]=10;

                            btns[n+col*q].setEnabled(false);

                          }

                          p=0;

                      }

                 }

              }

               p=1;

               m=x-1;

               n=y+1-1;

            if(n>-1&&n<col&&m>-1&&m<col)

              {

               for(int q=0;q<row&&p==1;q++){

                      if(((n+col*q)>=(m*col))&&((n+col*q)<(m+1)*col)){

                          if(a[x][y+1]!=0&&a[x][y+1]!=10){

                              btns[n+col*q].setText(a[x][y+1]+"");

                              a[x][y+1]=10;

                               btns[n+col*q].setEnabled(false);

                          }

                          else if(a[x][y+1]==0){

                             out(a,btns,e,n+col*q,x,y+1);                                            

                              a[x][y+1]=10;

                             btns[n+col*q].setEnabled(false);

                          }

                          p=0;

                      }

                }

            }

       }

    }

    public void actionPerformed(ActionEvent e) {

   

       if(e.getActionCommand()=="初級"){

           row=9;

           col=9;

           bon=10;

           a1=new int[bon];

           b=bon;

           //setSize(297,377);

           a = new int[row+2][col+2];

           this.remove(p2);

           timer.stop();

           b1.setText("10");

           b2.setText("0");

           b3.setText("");

           btns=new JButton[row*col];

            p2=new JPanel();

           p2.setLayout(new GridLayout(row,col,0,0));

           for(int i=0;i<row*col;i++){

              btns[i]=new JButton("     ");

              btns[i].setMargin(new Insets(0,0,0,0));

              btns[i].setFont(new Font(null,Font.BOLD,25));

              btns[i].addActionListener(this);

              btns[i].addMouseListener(new NormoreMouseEvent());

              p2.add(btns[i]);

           }

           contentPane.add(p2,BorderLayout.CENTER);

           //setSize(297,377);

           this.pack();

           for(int i=0;i<row*col;i++){

              btns[i].setText("");

              btns[i].setEnabled(true);

           }

           for(int i=0;i<row+2;i++){

              for(int j=0;j<col+2;j++){

                  a[i][j]=0;

              }

           }

          

       }else if(e.getActionCommand()=="中級"){

           row=16;

           col=16;

           bon=40;

           //setSize(33*col,33*row+80);

           a1=new int[bon];

           a = new int[row+2][col+2];

            b=bon;

           this.remove(p2);

           timer.stop();

           b1.setText("40");

           b2.setText("0");

           b3.setText("");

           btns=new JButton[row*col];

          

            p2=new JPanel();

           p2.setLayout(new GridLayout(row,col,0,0));

           for(int i=0;i<row*col;i++){

              btns[i]=new JButton("    ");

              btns[i].setMargin(new Insets(0,0,0,0));

              btns[i].setFont(new Font(null,Font.BOLD,25));

              btns[i].addActionListener(this);

              btns[i].addMouseListener(new NormoreMouseEvent());

              p2.add(btns[i]);

           }

           contentPane.add(p2,BorderLayout.CENTER);

           this.pack();

           //setSize(33*col,33*row+80);

           for(int i=0;i<row*col;i++){

              btns[i].setText("");

              btns[i].setEnabled(true);

           }

           for(int i=0;i<row+2;i++){

              for(int j=0;j<col+2;j++){

                  a[i][j]=0;

              }

           }

       }else if(e.getActionCommand()=="高級"){

           row=16;

           col=32;

           bon=99;

           setSize(33*col,33*row+80);

           a1=new int[bon];

           a = new int[row+2][col+2];

           b=bon;

           this.remove(p2);

           timer.stop();

           b1.setText("99");

           b2.setText("0");

           b3.setText("");

           btns=new JButton[row*col];

            p2=new JPanel();

           p2.setLayout(new GridLayout(row,col,0,0));

           for(int i=0;i<row*col;i++){

              btns[i]=new JButton("    ");

              btns[i].setMargin(new Insets(0,0,0,0));

              btns[i].setFont(new Font(null,Font.BOLD,25));

              btns[i].addActionListener(this);

              btns[i].addMouseListener(new NormoreMouseEvent());

              p2.add(btns[i]);

           }

           contentPane.add(p2,BorderLayout.CENTER);

           //setSize(33*col,33*row+80);

           this.pack();

           for(int i=0;i<row*col;i++){

              btns[i].setText("");

              btns[i].setEnabled(true);

           }

           for(int i=0;i<row+2;i++){

              for(int j=0;j<col+2;j++){

                  a[i][j]=0;

              }

           }

          

       }

       if(e.getSource()==btn){

           timer.start();

           b=bon;

           b3.setText("");

           //System.out.println(bon);

           //清空

           for(int i=0;i<row*col;i++){

              btns[i].setText("");

              btns[i].setEnabled(true);

           }

           for(int i=0;i<row+2;i++){

              for(int j=0;j<col+2;j++){

                  a[i][j]=0;

              }

           }

           //產生隨機數

           for(int i=0;i<bon;i++)

           {   int p=1;

              int m=(int)(Math.random()*row*col);

              while(p==1){

                  int l=1;

                  int j;

                  for( j=0;j<i&&l==1;j++){

                 

                       if(a1[j]==m){

                        m=(int)(Math.random()*row*col);

                        l=0;

                        }

                  }

                  if(j==i){

                     a1[i]=m;

                     p=0;

                  }

              }            

           }

           b1.setText(bon+"");

           b2.setText("0");    

       //佈雷

           for(int i=0;i<bon;i++){ 

               int x=(a1[i]/col+1);

               int y=(a1[i]%col+1);

              a[x][y]=100;

          }

          for(int i=0;i<row+2;i++){

              for(int j=0;j<col+2;j++){

                 if(i==0||j==0||i==row+1||j==col+1){

                    a[i][j]=0;  

                 }

              }

          }

          for(int i=1;i<=row;i++){

              for(int j=1;j<=col;j++){

                 if(a[i][j]!=100){

                     for(intl=j-1;l<=j+1;l++){

                           if(a[i-1][l]==100){

                               a[i][j]++;

                             }

                           if(a[i+1][l]==100){

                               a[i][j]++;

                           }

                        }

                     if(a[i][j-1]==100){

                        a[i][j]++;

                     }

                     if(a[i][j+1]==100){

                        a[i][j]++;

                     }   

                    }

                 }

             }    

         }

       if(e.getSource()==timer)

       {

            String time=b2.getText().trim();

          

           int t=Integer.parseInt(time);

           //System.out.println(t);

           if(t>=600){

              timer.stop();

           }else{

             

              t++;

              b2.setText(t+"");

           }

       }

       for(int i=0;i<col*row;i++){

            if(btns[i].getText()!="")

            {

              int x=i/col+1;

              int y=i%col+1;

              if(e.getSource()==btns[i]&&a[x][y]==100){

                 btns[i].setText("");

                 btns[i].setEnabled(false);

                 a[x][y]=10;

                 for(int k=0;k<col*row;k++){

                 int m1=k/col+1;

                         int n1=k%col+1;

                 if(a[m1][n1]!=10&&btns[k].getText()==""){

                    btns[k].setText("*o*");

                 }

                }

                 for(int j=0;j<col*row;j++){

                     int m=j/col+1;

                     int n=j%col+1;

                  if(a[m][n]==100){

                    btns[j].setText("");

                    btns[j].setEnabled(false);                

                    b3.setText("你輸了!!");

                }

                btns[j].setEnabled(false);

                a[m][n]=10;

                 }

                 timer.stop();              

             }

          else if(e.getSource()==btns[i]){

                  if(a[x][y]==0){

                   out(a,btns,e,i,x,y);

                   a[x][y]=10;

                   btns[i].setEnabled(false);

                  }

                   if(a[x][y]!=0&&a[x][y]!=10){

                        btns[i].setText(a[x][y]+"");

                        btns[i].setEnabled(false);

                        a[x][y]=10;

                   }

           }

        }else if(btns[i].getText()==""){

        }

      }

    }

    class NormoreMouseEvent extends MouseAdapter{

       public void mouseClicked(MouseEvent e) {

           System.out.println(b);

           for(int i=0;i<col*row;i++){

                 int x1=i/col+1;

                  int y1=i%col+1;

              if(e.getSource()==btns[i]&&btns[i].getText()!=""&&a[x1][y1]!=10)

              {

                  if(e.getButton()==MouseEvent.BUTTON3){

                    btns[i].setText("");

                    b--;

                    if(b==0){

                    int flag=0;

                    for(int j=0;j<col*row;j++){

                         int x=j/col+1;

                            int y=j%col+1;

                        if(a[x][y]==100&&btns[j].getText()==""){

                            flag++;

                        }

                    }

                    if(flag==bon){

                        timer.stop();

                        b3.setText("你贏了!");

                    }

                    }

                    b1.setText(b+"");

                  }

              }else if(e.getSource()==btns[i]&&btns[i].getText()==""&&a[x1][y1]!=-1){

                  if(e.getButton()==MouseEvent.BUTTON3){

                     btns[i].setText("");

                     b++;

                     if(b>bon){

                       b1.setText(bon+"");

                     }

                     else{

                        b1.setText(b+"");

                     }                

                  btns[i].setEnabled(true);

                  }

              }

           }

       }

    }

}

 

發佈了20 篇原創文章 · 獲贊 27 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章