欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java实现打字练习的代码,java实现打字练习,import java.

来源: javaer 分享于  点击 13635 次 点评:133

Java实现打字练习的代码,java实现打字练习,import 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;    }}
相关栏目:

用户点评