注册 登录
重磅消息:开通VIP会员,获取平台所有项目,永久使用,详细请咨询QQ:3376762016
远程服务部署安装,售后服务,请加QQ1:3376762016,QQ2:3597230140(即将满员),QQ3:1399491757(已满)
查看: 545|回复: 0
打印 上一主题 下一主题

Java Swing扫雷游戏开发

[复制链接]

该用户从未签到

3518

主题

3532

帖子

66万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
668970
QQ
跳转到指定楼层
楼主
发表于 2016-5-30 10:26:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

SaoLei .java 类

package SaoLeiChengXu;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class SaoLei  extends MouseAdapter   implements ActionListener  {

        JFrame        kuangJia;         //程序的主界面
        LeiDian       leiQu[];          //雷区
        JLabel        biaoQian1;        //设置地雷数量的标签
        JTextField    leiShuQu;         //设置地雷数量的文本框
        JButton       kaiShi;           //开始按钮
        JLabel        biaoQian2;        //显示当前地雷状态的标签
       
        JPanel        zhongMianBan;
        JPanel        nanMianBan;
        int           x;
       
        public SaoLei(){
                /*---------------框架的初始化----开始--------*/
                kuangJia=new JFrame("扫雷");    //生成框架,并给标题栏设置“计算器”
                kuangJia.setSize(606, 700);            //设置框架尺寸
                kuangJia.setLocation(660, 190);        //设置位置坐标
                kuangJia.setLayout(new BorderLayout());              //设置框架为border布局
          //kuangJia.setResizable(false);          //关闭框架尺寸可调
                kuangJia.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //设置关闭按钮退出即关闭
               
            /*---------------框架的初始化----结束--------*/
                zhongMianBan=new JPanel();                          //整体框架布局(border布局)               
                kuangJia.add(zhongMianBan,BorderLayout.CENTER);
               
                zhongMianBan.setBackground(Color.gray);                 
                zhongMianBan.setLayout(new GridLayout(12,12,1,1));   //中面板布局(grid布局)
                int i;
                leiQu=new LeiDian[144];
                for(i=0;i<=143;i++){
                        leiQu=new LeiDian();
                        leiQu.shiFouDiLei=false;
                        leiQu.addMouseListener(this);
                        leiQu.addActionListener(this);
                        zhongMianBan.add(leiQu);
                }
                nanMianBan=new JPanel();                           //南面板布局(grid布局)
                kuangJia.add(nanMianBan,BorderLayout.SOUTH);
                nanMianBan.setLayout(new GridLayout(1,4,5,5));
                nanMianBan.setBackground(Color.white);
                biaoQian1=new JLabel("设置地雷数");
                leiShuQu =new JTextField("10");
                kaiShi   =new JButton("开始");
                kaiShi.addActionListener(this);
                biaoQian2=new JLabel("当前地雷数:10");
                nanMianBan.add(biaoQian1   );
                nanMianBan.add(leiShuQu    );
                nanMianBan.add(kaiShi      );
                nanMianBan.add(biaoQian2   );
        kuangJia.setVisible(true);
        }


        public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                int i;
               
                if(e.getSource().equals(kaiShi)){
                        ;              //初始化,新开一局游戏。
                        buLei();
                        jiSuanLeiShu();
                       
                }
               
                for(i=0;i<=143;i++){
                        if(e.getSource().equals(leiQu)){          //如果i号按钮被左键点击
                               
                               
                                if(leiQu.shiFouDiLei==true){         
                                       
                                        leiQu.setText("X");
                                        leiQu.setForeground(Color.red);
                                        JOptionPane.showMessageDialog(null, "你踩到地雷了,按确定继续", "踩到地雷", 2);
                                }
                                else{
                               
                                       
                                        if(leiQu.zhouBianDiLeiShu!=0){     //如果雷点周边地雷数不等于0
                                                leiQu.setText(String.valueOf(leiQu.zhouBianDiLeiShu));     //显示出当前雷点的周边地雷数
                                        }
                                        leiQu.setBackground(Color.white);
                                        leiQu.setForeground(Color.red);
                                        leiQu.setEnabled(false);
                                }
                       
                        }
                }
               
        }
       
       
       
       
       
        public void buLei(){               //布雷
                int i=1;
                while(i<=10){
                        x=(int)(Math.random()*144);                  //生成一个0-143之间的随机数
                        if(leiQu[x].shiFouDiLei!=true){              //随机数所在雷点是否不是地雷
                                leiQu[x].setText("X");
                                leiQu[x].setForeground(Color.red);
                                leiQu[x].shiFouDiLei=true;               //设置当前雷点为地雷
                                i++;                                     //地雷计数器增加1个
                        }
                }
        }
    public void jiSuanLeiShu(){        //计算雷区中每个雷点周边八个格子的地雷数量
                int c=0;
                int n=0;
                int i;
                int s[]=new int[8];
                for(n=0;n<=143;n++){
               
                        s[0]=n-13;s[1]=n-12;s[2]=n-11;s[3]=n-1;s[4]=n+1;s[5]=n+11;s[6]=n+12;s[7]=n+13;   //计算八个方格的位置坐标
                       
                        for(i=0;i<=7;i++){                           //统计当前方格的周围地雷数
                                if(s>=0 && s<=143){
                                        if(leiQu[s].shiFouDiLei==true){      
                                                c++;
                                        }
                                }
                        }
                //        if(leiQu[n].shiFouDiLei==false && c!=0){     //显示当前方格周围的地雷数
                //                leiQu[n].setText(String.valueOf(c));
                //        }
                        leiQu[n].zhouBianDiLeiShu=c;
                        c=0;                                         //统计变量归零
                }
        }


        @Override
        public void mouseClicked(MouseEvent me) {
                // TODO Auto-generated method stub
       
                if(        me.getButton()==(MouseEvent.BUTTON3)){
                        ((LeiDian)me.getSource()).setText("F");
                        ((LeiDian)me.getSource()).setForeground(Color.red);
                }
        }


               
       
       
       
}



LeiDian.java类

package SaoLeiChengXu;
import javax.swing.*;
public class LeiDian extends JButton {

        public  boolean  shiFouDiLei;      //是否地雷属性,如果是true,表示是地雷,如果是false表示不是地雷
        public  int      zhouBianDiLeiShu;    //存放雷点周围八个格子里的地雷数量
       
       
}




Run.java类 运行类:

package SaoLeiChengXu;

public class Run {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                SaoLei sl=new SaoLei();
        }

}



运行效果图:


游客,如果您要查看本帖隐藏内容请回复



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
java无忧网(http://www.javawyw.com),专业提供Java大作业,小作业,课程设计,毕业设计源码,答辩辅导,作业排错,bug修复,专业解答,远程部署运行项目等服务
本网站所有源码,保证能运行!
QQ:1399491757
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部