欢迎光临
我们一直在努力

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; public class Main 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; 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 Main() { 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(); } Main frame = new Main(); 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 Main adaptee; Frame1_jButton2_actionAdapter(Main adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton2_actionPerformed(e); } } class Frame1_jButton1_actionAdapter implements ActionListener { private Main adaptee; Frame1_jButton1_actionAdapter(Main 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; } } 

效果图
<ignore_js_op>Java版打字练习游戏源码

详细说明:http://java.662p.com/thread-3797-1-1.html

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《Java版打字练习游戏源码》
文章链接:https://www.456zj.com/40997.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址