微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java实现打字练习的代码

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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,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;
	}
}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐