中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用java實現掃雷游戲

發布時間:2022-06-06 13:47:25 來源:億速云 閱讀:127 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么用java實現掃雷游戲”,在日常操作中,相信很多人在怎么用java實現掃雷游戲問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用java實現掃雷游戲”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!


1.創造窗口
   //創建掃雷窗口界面  
    public Saolei() {
        
            frame.setSize(600,700);
            frame.setResizable(false);//設置窗口尺寸不能變化
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());//分塊
            setHeader();//設置界面初始化
            addlei();   //添加雷
            setButtons();//添加按鈕
            timer.start();   //啟動時鐘;
            frame.setVisible(true);
        }

2.定義數據結構以及初始化
//數據結構start
    int ROW = 20;
    int COL = 20;
    int [][] data = new int[ROW][COL];
    JButton[][] btns = new JButton[ROW][COL];
    int LEICOUNT = 30;   //雷個數
    int LEICODE = -1;
    int unopened = ROW*COL;
    int opened = 0;
    int timeSecond =0;
    //三個 jlabel 狀態欄 已開未開,用時
    JLabel label1= new JLabel("待開:"+unopened);
    JLabel label2= new JLabel("已開:"+opened);
    JLabel label3= new JLabel("用時:"+timeSecond+"s");
    Timer timer = new Timer(1000, this); //定義時間為一秒  

3.窗體按鈕
private void setButtons() {
      Container con = new Container();//container容器
      con.setLayout(new GridLayout(ROW,COL));//創建方格
      
      for(int i=0;i<ROW;i++) {
          for(int j=0;j<COL;j++) {
              JButton btn = new JButton();
              btn.setOpaque(true);
              btn.setBackground(new Color(200,183,113));  //設置掃雷背景顏色
              btn.addActionListener(this);  //Btn添加按鈕監聽事件
              btn.setMargin(new Insets(0,0,0,0));  //button數字顯示不出來,加上該語句即可顯示
              con.add(btn);
              btns[i][j] = btn;
          }
      }
      frame.add(con,BorderLayout.CENTER);//中間位置
      
    }

4.埋雷
private void addlei() {
        Random rand = new Random();
        for(int i=0;i<LEICOUNT;) {
            int r = rand.nextInt(ROW);
            int c= rand.nextInt(COL);
            if(data[r][c]!=LEICODE) {
                data[r][c] = LEICODE;
                i++;
//                System.out.println(r+"  "+c+" "+data[r][c]);
            }
        }
        

5.計算周圍雷的數量
//計算周邊雷的數量
          for(int i=0;i<ROW;i++) {
              for(int j=0;j<COL;j++) {
                  if(data[i][j]!=LEICODE) {
                       int  c=0;
                       if(i>0&&j>0&&data[i-1][j-1]==LEICODE) c++;
                       if(i>0&&data[i-1][j]==LEICODE) c++;
                       if(i>0&&j<19&&data[i-1][j+1]==LEICODE) c++;
                       if(j>0&&data[i][j-1]==LEICODE) c++;
                       if(j<19&&data[i][j+1]==LEICODE) c++;
                       if(i<19&&j>0&&data[i+1][j-1]==LEICODE) c++;
                       if(i<19&&data[i+1][j]==LEICODE) c++;
                       if(i<19&&j<19&&data[i+1][j+1]==LEICODE) c++;
                       data[i][j]=c;
                  }     
              }
          }

6.Banner設置
//設置開頭顯示
    private void setHeader() {
        //設置畫布 Jpanel
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints c1 = new GridBagConstraints(0,0,3,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(bannerBtn,c1);
        
        bannerBtn.addActionListener(this);
        label1.setOpaque(true);    //設置不透明,背景色,
        label1.setBackground(Color.white);   
        label1.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        
        label2.setOpaque(true);
        label2.setBackground(Color.white);
        label2.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        
        label3.setOpaque(true);
        label3.setBackground(Color.white);
        label3.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        
        bannerBtn.setOpaque(true);
        bannerBtn.setBackground(Color.white);
        bannerBtn.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        
        GridBagConstraints c2 = new GridBagConstraints(0,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(label1,c2);
        GridBagConstraints c3 = new GridBagConstraints(1,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(label2,c3);
        GridBagConstraints c4 = new GridBagConstraints(2,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(label3,c4);
        
        frame.add(panel,BorderLayout.NORTH);
        
    }

7.游戲勝利還是失敗
    //判斷勝利!!!
    
    private void checkWin() {
        
         int count=0;
            for(int i=0;i<ROW;i++) {
                for(int j=0;j<COL;j++) {
                    if(btns[i][j].isEnabled()) {
                        count++;
                        
                    }
                }
            }
            unopened = count;
            opened =  ROW*COL-count;
            
            label1.setText("待開:"+ unopened);
            label2.setText("已開:"+ opened);
            if(count==LEICOUNT) {
                timer.stop(); 
                bannerBtn.setText("游戲勝利!!!");
                for(int i=0;i<ROW;i++) {
                    for(int j=0;j<COL;j++) {
                        if(btns[i][j].isEnabled()) {
                              btns[i][j].setBackground(new Color(100,183,0));
                   
                        }
                    }
                }
                bannerBtn.setText("Banner:restart!");
                JOptionPane.showMessageDialog(frame, "恭喜你!游戲勝利啦!\n 可以點擊上面的Banner重新開始!","游戲結束!",JOptionPane.PLAIN_MESSAGE);
            }
            
        
    }

    //踩雷成功,游戲結束!
    private void lose() {
        timer.stop();
         bannerBtn.setText("很遺憾,踩雷成功,游戲結束!!!");
        for(int i=0;i<ROW;i++) {
            for(int j=0;j<COL;j++) {
                if(btns[i][j].isEnabled()) {
                    JButton btn = btns[i][j];
                    if(data[i][j]==LEICODE) {
//                    btns[i][j].setEnabled(false);    btns[i][j].setIcon(bombIcon); btns[i][j].setDisabledIcon(bombIcon);
                   
                        btn.setBackground(Color.red);     //置為紅色
                        btn.setText(data[i][j]+"");
                    }
                    else {
                        btn.setIcon(null);
                        btn.setEnabled(false);   //btn已經打開不可點擊
                        btn.setOpaque(true);
        
                    }
                }
            }
        }
        bannerBtn.setText("Banner:restart!");
        JOptionPane.showMessageDialog(frame, "很遺憾,暴雷成功,游戲結束!!!\n 可以點擊上面的Banner重新開始!","游戲結束!",JOptionPane.PLAIN_MESSAGE);
        
    }

8.空白級聯打開(實現點擊一個即可打開多個)

private void openCell(int i,int j,int Blankcount ){
        JButton btn=btns[i][j];
        if(!btn.isEnabled()) return ;
        if(Blankcount==10)   //部分打開,設置數字限制
            return;
        btn.setIcon(null);
        btn.setEnabled(false);
        btn.setOpaque(true);
        Blankcount++;
        btn.setBackground(Color.GREEN);
        btn.setText(data[i][j]+"");
        if(data[i][j]==0) {
             if(i>0&&j>0&&data[i-1][j-1]==0) openCell(i-1,j-1,Blankcount);
               if(i>0&&data[i-1][j]==0) openCell(i-1,j,Blankcount);
               if(i>0&&j<19&&data[i-1][j+1]==0) openCell(i-1,j+1,Blankcount);
               if(j>0&&data[i][j-1]==0) openCell(i,j-1,Blankcount);
               if(j<19&&data[i][j+1]==0) openCell(i,j+1,Blankcount);
               if(i<19&&j>0&&data[i+1][j-1]==0) openCell(i+1,j-1,Blankcount);
               if(i<19&&data[i+1][j]==0) openCell(i+1,j,Blankcount);
               if(i<19&&j<19&&data[i+1][j+1]==0) openCell(i+1,j+1,Blankcount);
        }
        
    }

到此,關于“怎么用java實現掃雷游戲”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼玛县| 江陵县| 长白| 阜城县| 高安市| 黄石市| 克拉玛依市| 巫山县| 呼伦贝尔市| 庆云县| 梨树县| 云林县| 兰坪| 独山县| 通城县| 五大连池市| 仙居县| 华蓥市| 湖北省| 天祝| 秦皇岛市| 哈巴河县| 昭平县| 临夏市| 马鞍山市| 山丹县| 榆树市| 监利县| 衡东县| 浦北县| 星子县| 镇康县| 井研县| 广汉市| 五莲县| 泸定县| 襄城县| 芜湖县| 凉山| 巴中市| 南宫市|