zoukankan      html  css  js  c++  java
  • 【转载】java版打字练习软件

      网上找到一个java版的打字的游戏

    import java.applet.Applet;
    import java.applet.AudioClip;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Toolkit;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.Rectangle;
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JOptionPane;
    import javax.swing.JSlider;
    import javax.swing.JLabel;
    import javax.swing.UIManager;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.io.File;
    import java.util.Vector;
    
    /**
     * Java版打字练习软件
     * 
     */
    public class RapidTyping extends JFrame implements Runnable {
        private static final long serialVersionUID = -2831332650077025158L;
    
        JPanel contentPane;
        JPanel jPanel1 = new JPanel();
        JButton jButton1 = new JButton();
        JSlider jSlider1 = new JSlider();
        JLabel jLabel1 = new JLabel();
        JButton jButton2 = new JButton();
        JLabel jLabel2 = new JLabel();
        int count = 1, rapidity = 5; // count 当前进行的个数, rapidity 游标的位置
        int zhengque = 0, cuowu = 0;
        int rush[] = { 10, 20, 30 }; // 游戏每关的个数 可以自由添加
        int rush_count = 0; // 记录关数
        char list[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
                'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
                'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; // 随机出现的数字
                                                                    // 可以自由添加
        Vector number = new Vector();
        String paiduan = "true";
        AudioClip Musci_anjian, Music_shibai, Music_chenggong;
    
        public RapidTyping() {
            try {
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                // -----------------声音文件---------------------
                Musci_anjian = Applet.newAudioClip(new File("sounds//anjian.wav")
                        .toURL());
                Music_shibai = Applet.newAudioClip(new File("sounds//shibai.wav")
                        .toURL());
                Music_chenggong = Applet.newAudioClip(new File(
                        "sounds//chenggong.wav").toURL());
                // ---------------------------------------
                jbInit();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    
        /**
         * 初始化
         * 
         * @throws Exception
         */
        private void jbInit() throws Exception {
            contentPane = (JPanel) getContentPane();
            contentPane.setLayout(null);
            setSize(new Dimension(588, 530));
            setTitle("Frame Title");
            jPanel1.setBorder(BorderFactory.createEtchedBorder());
            jPanel1.setBounds(new Rectangle(4, 4, 573, 419));
            jPanel1.setLayout(null);
            jButton1.setBounds(new Rectangle(277, 442, 89, 31));
            jButton1.setText("开始");
            jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
            jSlider1.setBounds(new Rectangle(83, 448, 164, 21));
            jSlider1.setMaximum(100);
            jSlider1.setMinimum(0);
            jSlider1.setValue(95);
            jLabel1.setText("速度");
            jLabel1.setBounds(new Rectangle(35, 451, 39, 18));
            jButton2.setBounds(new Rectangle(408, 442, 89, 31));
            jButton2.setText("结束");
            jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
            jLabel2.setText("第一关:10个");
            jLabel2.setBounds(new Rectangle(414, 473, 171, 21));
            contentPane.add(jPanel1);
            contentPane.add(jButton2);
            contentPane.add(jButton1);
            contentPane.add(jSlider1);
            contentPane.add(jLabel1);
            contentPane.add(jLabel2);
            this.addKeyListener(new MyListener());
            jButton1.addKeyListener(new MyListener());
            jSlider1.addKeyListener(new MyListener());
            jSlider1.addChangeListener(new ChangeListener() {
                public void stateChanged(ChangeEvent e) {
                    rapidity = 100 - jSlider1.getValue();
                }
            });
        }
    
        /**
         * 主线程
         */
        public void run() {
            number.clear();
            zhengque = 0;
            cuowu = 0;
            paiduan = "true";
            while (count <= rush[rush_count]) {
                try {
                    Thread t = new Thread(new Tthread());
                    t.start();
                    count += 1;
                    Thread.sleep(50 + (int) (Math.random() * 500)); // 生产下组停顿时间
                    // 最快0.05秒.最慢0.5秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            while (true) { // 等待最后一个字符消失
                if (number.size() == 0) {
                    break;
                }
            }
            if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..
                zhengque = 1;
            }
    
            if (paiduan.equals("true")) { // 判断是否是自然结束
                if (cuowu <= 2) { // 错误不超过2个的过关
                    JOptionPane.showMessageDialog(null, "恭喜你过关了");
                    rush_count += 1; // 自动加1关
                    if (rush_count < rush.length) {
                        if (rapidity > 10) { // 当速度大于10的时候在-5提加速度.怕速度太快
                            rapidity -= 5; // 速度自动减10毫秒
                            jSlider1.setValue(rapidity); // 选择位置
                        }
                        Thread t = new Thread(this);
                        t.start();
                    } else {
                        JOptionPane.showMessageDialog(null, "牛B...你通关了..");
                        rush_count = 0;
                        count = 0;
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "请再接再励");
                    rush_count = 0;
                    count = 0;
                }
            } else {
                rush_count = 0;
                count = 0;
            }
        }
    
        public void jButton1_actionPerformed(ActionEvent e) {
            Thread t = new Thread(this);
            t.start();
        }
    
        public void jButton2_actionPerformed(ActionEvent e) {
            count = rush[rush_count] + 1;
            paiduan = "flase";
        }
    
        /**
         * 字符下移线程
         */
        class Tthread implements Runnable {
            public void run() {
                boolean fo = true;
                int Y = 0, X = 0;
                JLabel show = new JLabel();
                show.setFont(new java.awt.Font("宋体", Font.PLAIN, 33));
                jPanel1.add(show);
                X = 10 + (int) (Math.random() * 400);
                String parameter = list[(int) (Math.random() * list.length)] + "";
                Bean bean = new Bean();
                bean.setParameter(parameter);
                bean.setShow(show);
                number.add(bean);
                show.setText(parameter);
                while (fo) {
                    // ---------------------字符下移--------------------
                    show.setBounds(new Rectangle(X, Y += 2, 33, 33));
                    try {
                        Thread.sleep(rapidity);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (Y >= 419) {
                        fo = false;
                        for (int i = number.size() - 1; i >= 0; i--) {
                            Bean bn = ((Bean) number.get(i));
                            if (parameter.equalsIgnoreCase(bn.getParameter())) {
                                cuowu += 1;
                                jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu
                                        + "");
                                number.removeElementAt(i);
                                Music_shibai.play();
                                break;
                            }
                        }
                    }
                }
            }
        }
    
        /**
         * 键盘监听器
         * 
         */
        class MyListener extends KeyAdapter {
            public void keyPressed(KeyEvent e) {
                String uu = e.getKeyChar() + "";
                for (int i = 0; i < number.size(); i++) {
                    Bean bean = ((Bean) number.get(i));
                    if (uu.equalsIgnoreCase(bean.getParameter())) {
                        zhengque += 1;
                        number.removeElementAt(i);
                        bean.getShow().setVisible(false);
                        jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu + "");
                        Music_chenggong.play();
                        break;
                    }
                }
                Musci_anjian.play();
            }
        }
    
        public static void main(String[] args) {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            RapidTyping frame = new RapidTyping();
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = frame.getSize();
            if (frameSize.height > screenSize.height) {
                frameSize.height = screenSize.height;
            }
            if (frameSize.width > screenSize.width) {
                frameSize.width = screenSize.width;
            }
            frame.setTitle("java版打字练习软件");
            frame.setLocation((screenSize.width - frameSize.width) / 2,
                    (screenSize.height - frameSize.height) / 2);
            frame.setVisible(true);
        }
    }
    
    class Frame1_jButton2_actionAdapter implements ActionListener {
        private RapidTyping adaptee;
    
        Frame1_jButton2_actionAdapter(RapidTyping adaptee) {
            this.adaptee = adaptee;
        }
    
        public void actionPerformed(ActionEvent e) {
            adaptee.jButton2_actionPerformed(e);
        }
    }
    
    class Frame1_jButton1_actionAdapter implements ActionListener {
        private RapidTyping adaptee;
    
        Frame1_jButton1_actionAdapter(RapidTyping adaptee) {
            this.adaptee = adaptee;
        }
    
        public void actionPerformed(ActionEvent e) {
            adaptee.jButton1_actionPerformed(e);
        }
    }
    
    /**
     * 下落的字符类
     * 
     */
    class Bean {
        String parameter = null;
        JLabel show = null;
    
        public JLabel getShow() {
            return show;
        }
    
        public void setShow(JLabel show) {
            this.show = show;
        }
    
        public String getParameter() {
            return parameter;
        }
    
        public void setParameter(String parameter) {
            this.parameter = parameter;
        }
    }
    View Code

       

      转载自 http://yuncode.net/code/c_5041924f2c0bb1

  • 相关阅读:
    Angularjs中文教程
    IE兼容性 css处理常见
    手写画板实现并转化成图片
    canvas 最基本简单的示例
    凡科 网站地址
    IOS学习之路二十二(UIAlertView获得文本框内容及添加北京图片)
    IOS学习之路十四(用TableView做的新闻客户端展示页面)
    IOS开发之路二十一(UIWebView加载本地html)
    iOS学习之路十三(动态调整UITableViewCell的高度)
    IOS学习之路十二(UITableView下拉刷新页面)
  • 原文地址:https://www.cnblogs.com/diligenceday/p/5241709.html
Copyright © 2011-2022 走看看