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版打字练习软件
*
*/
private static final long serialVersionUID = -2831332650077025158L;
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' }; // 随机出现的数字
// 可以自由添加
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());
"sounds//chenggong.wav").toURL());
// ---------------------------------------
jbInit();
exception.printStackTrace();
}
}
/**
* 初始化
*
* @throws Exception
*/
contentPane
= (JPanel) getContentPane
();
contentPane.setLayout(null);
setTitle("Frame Title");
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());
rapidity = 100 - jSlider1.getValue();
}
});
}
/**
* 主线程
*/
public void run() {
number.clear();
zhengque = 0;
cuowu = 0;
paiduan = "true";
while (count <= rush[rush_count]) {
try {
t.start();
count += 1;
Thread.
sleep(50 + (int) (Math.
random() * 500)); // 生产下组停顿时间
// 最快0.05秒.最慢0.5秒
e.printStackTrace();
}
}
while (true) { // 等待最后一个字符消失
if (number.size() == 0) {
break;
}
}
if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..
zhengque = 1;
}
if (paiduan.equals("true")) { // 判断是否是自然结束
if (cuowu <= 2) { // 错误不超过2个的过关
rush_count += 1; // 自动加1关
if (rush_count < rush.length) {
if (rapidity > 10) { // 当速度大于10的时候在-5提加速度.怕速度太快
rapidity -= 5; // 速度自动减10毫秒
jSlider1.setValue(rapidity); // 选择位置
}
t.start();
} else {
rush_count = 0;
count = 0;
}
} else {
rush_count = 0;
count = 0;
}
} else {
rush_count = 0;
count = 0;
}
}
t.start();
}
count = rush[rush_count] + 1;
paiduan = "flase";
}
/**
* 字符下移线程
*/
public void run() {
boolean fo = true;
int Y = 0, X = 0;
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 {
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;
}
}
}
}
}
}
/**
* 键盘监听器
*
*/
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 {
exception.printStackTrace();
}
RapidTyping frame = new RapidTyping();
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);
}
}
private RapidTyping adaptee;
Frame1_jButton2_actionAdapter(RapidTyping adaptee) {
this.adaptee = adaptee;
}
adaptee.jButton2_actionPerformed(e);
}
}
private RapidTyping adaptee;
Frame1_jButton1_actionAdapter(RapidTyping adaptee) {
this.adaptee = adaptee;
}
adaptee.jButton1_actionPerformed(e);
}
}
/**
* 下落的字符类
*
*/
class Bean {
return show;
}
public void setShow
(JLabel show
) {
this.show = show;
}
public String getParameter
() {
return parameter;
}
public void setParameter
(String parameter
) {
this.parameter = parameter;
}
}