zoukankan      html  css  js  c++  java
  • JAVA 扫雷 程序

    文件列表

    2.主程序入口

    3.1部分源代码

    package MineSweeper;
    
    import java.awt.BorderLayout;
    import java.awt.Font;
    import java.util.Enumeration;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.Timer;
    import javax.swing.UIManager;
    
    public class SartFrame extends JFrame{
    
        private static final long serialVersionUID = -1585043387266273492L;
        private MineState mineState; // 记雷数
        private MineField mineField; // 布置labble和雷数
        private MineMenu mineMenu;
        private Timer timer;
        private Timers timers;
        /**
         * 游戏是否开始
         */
        private boolean isStart;
        JLabel jLabel_start = new JLabel(); // 开始图片
    
        public SartFrame() {
            // 改变系统默认字体
            Font font = new Font("Dialog", Font.PLAIN, 12);
            Enumeration<Object> keys = UIManager.getDefaults().keys();
            while (keys.hasMoreElements()) {
                Object key = keys.nextElement();
                Object value = UIManager.get(key);
                if (value instanceof javax.swing.plaf.FontUIResource) {
                    UIManager.put(key, font);
                }
            }
            this.setTitle("扫雷");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLocationRelativeTo(null);
            setIconImage(Tools.iicon); // 利用tools来做的作法
    
            this.setResizable(false); // 这样让窗口不会可放大
    
            // ..................状态栏.....................
            mineState = new MineState(this);
            this.add(mineState, BorderLayout.NORTH);
    
            // ...................雷区......................
            mineField = new MineField(this);
            this.add(mineField, BorderLayout.CENTER);
    
            jLabel_start.setIcon(Tools.start);
            this.add(jLabel_start, BorderLayout.CENTER);
    
            // ....................菜单栏................
            mineMenu = new MineMenu(this);
            this.setJMenuBar(mineMenu);
    
            // .....................时间................
            Tools.time = 0;
            timers = new Timers(mineState);
            timer = new Timer(1000, timers);
    
            // ...................声音...................
            // AudioClip s1=loadSound("alarm1.wav"); //AudioClip类的对象s1通过方法 loadSound()装载声音
            // public AudioClip loadSound(String filename){ //返回一个AudioClip对象
            // URL url=null; //因为newAudioClip()的参数为URL型
            // try{
            // url=new URL("file:"+filename); //指定文件,“file:"不能少
            // }
            // catch(MalformedURLException e){ }
            // return Applet.newAudioClip(url); //通过newAudioClip(
            // )方法装载声音,此方法为JDK后添加的方法,太老的JDK里可能没有
            // }
            //
            //
            //
            //
            pack();
            this.setVisible(true);
        }
    
        // 重新布局
        public void restart() {
    
            this.remove(mineState);
    
            this.remove(mineField);
    
            this.remove(jLabel_start);
    
            // ..................状态栏.....................
            mineState = new MineState(this);
            this.add(mineState, BorderLayout.NORTH);
    
            // ...................雷区......................
            mineField = new MineField(this);
            this.add(mineField, BorderLayout.CENTER);
    
            // .....................时间................
            Tools.time = 0;
            Timers timers = new Timers(mineState);
            timer = new Timer(1000, timers);
    
            pack();
            validate();// 刷新窗体
        }
    
        public static long getSerialversionuid() {
            return serialVersionUID;
        }
    
        public MineState getMineState() {
            return mineState;
        }
    
        public MineField getMineField() {
            return mineField;
        }
    
        public MineMenu getMineMenu() {
            return mineMenu;
        }
    
        public Timer getTimer() {
            return timer;
        }
    
        public Timers getTimers() {
            return timers;
        }
    
        public boolean isStart() {
            return isStart;
        }
    
        public void setStart(boolean isStart) {
            this.isStart = isStart;
        }
    
        public static void main(String[] args) {
            new SartFrame();
        }
    }
    SartFrame.java

    About.java

    package MineSweeper;
    
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    public class About extends JDialog {
        private static final long serialVersionUID = 1L;
        private JTextField jTextField1,jTextField2,jTextField3;
        private JButton butyes,butno;
        SartFrame sartFrame;
        public About(SartFrame sartFrame) {
            this.sartFrame = sartFrame;
            this.setTitle("");
            this.setLocationRelativeTo(null);
            this.setModal(true);
            this.setSize(new Dimension(200,200));
            this.init();
            this.setVisible(true);
        }
    
        private void init() {
            JPanel jPanel = new JPanel();
             new JLabel("");
             jTextField1=new JTextField(12);
             jTextField2=new JTextField(12);
             jTextField3=new JTextField(12);
             
             JLabel jLabelTotalx=new JLabel("行数:");
             JLabel jLabelTotaly=new JLabel("列数:");
             JLabel jLabelTotalMine=new JLabel("雷数:");
    
            jPanel.add(jLabelTotalx);
            jPanel.add(jTextField1);
            
            jPanel.add(jLabelTotaly);
            jPanel.add(jTextField2);
            
            jPanel.add(jLabelTotalMine);
            jPanel.add(jTextField3);
    
            
            butyes = new JButton("确定");
            butno = new JButton("取消");
            jPanel.add(butyes);
            jPanel.add(butno);
            
            butyes.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent arg0) {
                
                    try {
                        Tools.totalx=Integer.parseInt(jTextField1.getText());
                        Tools.totaly=Integer.parseInt(jTextField2.getText());
                        Tools.totalMine=Integer.parseInt(jTextField3.getText());
                        if(Tools.totalx>9&&Tools.totalx<30){
                            if(Tools.totaly>9&&Tools.totaly<30){
                                if(Tools.totalMine>=10&&Tools.totalMine<Tools.totalx*Tools.totaly*4/5){
                                    sartFrame.restart();
                                    About.this.dispose();
                                }else{
                                    JOptionPane.showMessageDialog(null, "布雷有误请重试!!!
    布雷数应少于总格子数!!!", "提示消息", JOptionPane.NO_OPTION);    
                                }
                            }else {
                                JOptionPane.showMessageDialog(null, "您输入的列数有误
    请重试!!!", "提示消息", JOptionPane.NO_OPTION);        
                            }                
                        }else {
                            JOptionPane.showMessageDialog(null, "您输入的行数有误
    请重试!!!", "提示消息", JOptionPane.NO_OPTION);    
    
                        }        
                    } catch (Exception e2) {
                        JOptionPane.showMessageDialog(null, "必须是数字类型", "提示消息", JOptionPane.NO_OPTION);
                        return;
                    }
                    
                }
            });
            
            butno.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    About.this.dispose();
                }
            });
            this.add(jPanel);
        }
    }
    About.java

     源代码下载  https://pan.baidu.com/s/1c1UlluC

  • 相关阅读:
    程序员如何跨过自我推销的难关?
    常用接口分类与模块设计的方法
    如何设计分层架构和交互接口 API ?
    如何建立架构师的立体化思维?
    从程序员到架构师的技能图谱
    selenium鼠标、键盘操作常用API
    selenium元素定位之-css定位
    python每日一练之集合set
    selenium2简单的定位方法和Xpath定位
    python之元组
  • 原文地址:https://www.cnblogs.com/sunbingqiang/p/7615474.html
Copyright © 2011-2022 走看看