java扫雷小游戏,JAVA扫雷游戏代码详解

  java扫雷小游戏,JAVA扫雷游戏代码详解

  用爪哇岛做出简单一个扫雷游戏,供大家参考,具体内容如下

  1.创造窗口

  //创建扫雷窗口界面public Saolei(){ frame。setsize(600,700);框架。setresizable(false);//设置窗口尺寸不能变化框架。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);框架。set layout(new BorderLayout());//分块set header();//设置界面初始化addlei();//添加雷设置按钮();//添加按钮计时器。start();//启动时钟;框架。设置可见(真);}2.定义数据结构以及初始化

  //数据结构start int ROW=20int COL=20int[][]data=new int[ROW][COL];JButton[][]btns=new JButton[ROW][COL];int LEICOUNT=30//雷个数int LEICODE=-1;int unopened=ROW * COLint opened=0;int时间秒=0;//三个组件状态栏已开未开,用时JLabel标签1=新JLabel(待开:未开封);JLabel标签2=新JLabel(已开: 开通);JLabel标签3=新JLabel(用时: 时间秒);定时器计时器=新定时器(1000,这个);//定义时间为一秒3.窗体按钮

  私有void set buttons(){ Container con=new Container();//容器容器con . set布局(new GridLayout(ROW,COL));//创建方格for(int I=0;iROWI){ for(int j=0;jCOLj){ JButton BTN=new JButton();BTN。濑户paque(真);btn.setBackground(新颜色(200,183,113));//设置扫雷背景颜色BTN。addactionlistener(this);//Btn添加按钮监听事件btn.setMargin(new Insets(0,0,0,0));//按钮数字显示不出来,加上该语句即可显示补充说明(BTN);btns} } frame.add(con,BorderLayout .中心);//中间位置}4.埋雷

  private void addlei(){ Random rand=new Random();for(int I=0;iLEICOUNT){ int r=rand。nextint(ROW);int c=兰特。nextint(COL);if(data[r][c]!=LEICODE){ data[r][c]=LEICODE;我;//系统。出去。println(r c data[r][c]);} }5.计算周围雷的数量

  //计算周边雷的数量for(int I=0;iROWi ) { 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);        }            }

9.最终游戏界面

 

  

 

  

 

  总结

  游戏界面颜色设置的有点丑,代码是跟着某站上老师做的,感谢老师!

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: