当前位置:文档之家› java课程设计报告--打字游戏

java课程设计报告--打字游戏

java课程设计报告--打字游戏Java开发技术课程设计(打字游戏)学院:计算机与信息工程学院学号:******姓名: **时间:2011年12月14日一、程序描述1.1程序设计的目的通过java开发技术课程的学习,我初步了解了如何运用java语言编写程序。

课程结束后,按老师的要求,在查找资料后,我完成了打字练习这个程序。

在这个过程中,主要达到了两个目的,一是检验和巩固专业知识,二是提高综合课堂上掌握的理论知识与处理数据的素质和能力。

通过该程序的编写,可以将我业务相结合,以检验我掌握知识的宽度、深度及对知识的综合运用能力。

1.2程序设计的要求(1)程序的界面会随机的出现字母和数字,玩家在键盘上摁相应的键后,界面上的对应的字符就会消失(2)字符下落的速度可以选择,完成一定量的字符后,显示进入下一关,下一关的速度加快(3)能统计正确与错误的字符数分别是多少(4)程序的主界面是能够给玩家第一感官的部分,主要包括程序图形区域界面、程序的显示更新界面。

1.3程序设计的环境Windows xp操作系统、Myeclipse编辑工具、jdk1.6二、分析与设计2.1 游戏处理流程本次游戏设计的处理流程如下图所示进入游戏画面单击“开始”按钮,游戏开始,字符开始随机。

根据出现的字符按相应的键,对应一个消失一个(字符)按对一定字符后将提示进入下一关,下一关的速度有所增加。

速度也可单独调节。

没有摁倒相应游戏中途欲中的键,错误的断,稍后继续数字将加一游戏单击“退出” 单击“暂停”退出游戏游戏暂停再次单击开始游戏,游戏恢复游戏处理流程图 2.2需求分析2.2.1 用户的特点打字练习具有很强的实用性,对键盘不熟悉的人均可用之练习。

这种需求同时也要求该程序具有可调节性,用户可以根据自己的水平调节速度,以提高打字水平。

2.2.2 功能需求在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能好,连接速度快,以确保系统可使用性好。

另外,还要求系统的可扩展性、可维护性、可移植性良好。

2.3.3 主界面模块该方法实现了速度的调节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(1000 + (int) (Math.random() * 2000)); // 生产下组停顿时间.最慢2秒 // 最快1快} catch (InterruptedException e) {e.printStackTrace();}}}该方法实现了对错个数的统计classMyListener extends KeyAdapter { public void keyPressed(KeyEvent e) {String uu = e.getKeyChar() + ""; for (inti = 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 = 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());//---------------------------------------三、程序运行初始界面开始游戏,字符降落过关提示闯关失败,再接再厉四、心得体会1)通过本学期的java的学习,我掌握了java语言的基本知识,通过java我又学习了很多其他的有用的东西,比如算法,数据结构。

在了解了java 之后我对java产生了浓厚的爱意。

2)通过这几周的实验,让我把这学期学的知识应用于实践之上,理论付之于实践真的很难,掌握的基础知识开始根本不知道怎么组织。

但我对java 的爱是不可能就这样被扼杀的。

通过我的上网查,书上看,动动手,终於功夫不负有心人。

我顺利的完成了实验。

3)这次实验让我对java的Swing编程的了解详细了不少,填补了我很多的空缺。

在实现功能的时候我懂得了算法对程序的重要性,一个好的算法可以让你的程序更健壮,编写的代码量更少。

处理异常一直是java里的常事,通过实验,我对一般的异常的处理更加有把握了。

更加游刃有余。

4)学习的秘诀就是毅力加恒心。

学习java也是一样的道理,我相信只要我坚持一直走下去,java一定会成为我大展身手的舞台。

附:代码importjava.applet.Applet; importjava.applet.AudioClip;importjava.awt.Dimension; importjava.awt.Font;importjava.awt.Toolkit;importjavax.sound.sampled.AudioFileFormat;importjavax.sound.sampled.AudioSystem; importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.Rectangle;importjavax.swing.BorderFactory; importjavax.swing.JButton;importjavax.swing.JOptionPane;importjavax.swing.JSlider;importjavax.swing.JLabel;importjavax.swing.SwingUtilities; importjavax.swing.UIManager;importjavax.swing.event.ChangeEvent;importjavax.swing.event.ChangeListener; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.KeyAdapter; importjava.awt.event.KeyEvent;importjava.io.File;importjava.util.Vector;public class Frame extends JFrame implements Runnable {JPanelcontentPane;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 = 80; intzhengque = 0, cuowu = 0;int rush[] = { 10 ,20 ,30 }; 列 { 10 ,20 ,30 ,40,50}intrush_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";AudioClipMusci_anjian, Music_shibai, Music_chenggong;public Frame() {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();}}/*** Component initialization.** @throws ng.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(newFrame1_jButton1_actionAdapter(this));jSlider1.setBounds(new Rectangle(83, 448, 164, 21));jSlider1.setMaximum(100);jSlider1.setMinimum(1);jSlider1.setValue(50);jLabel1.setText("速度");jLabel1.setBounds(new Rectangle(35, 451, 39, 18));jButton2.setBounds(new Rectangle(408, 442, 89, 31));jButton2.setText("结束");jButton2.addActionListener(newFrame1_jButton2_actionAdapter(this));jLabel2.setText("第一关:100个");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 = 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(1000 + (int) (Math.random() * 2000)); // 生产下组停顿时间// 最快1快.最慢2秒} catch (InterruptedException e) {e.printStackTrace();}}while (true) { // 等待最后一个字符消失if (number.size() == 0) { break;}}if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..zhengque = 1;}if (cuowu == 0) {cuowu = 1;}if (paiduan.equals("true")) { // 判断是否是自然结束 if (zhengque / cuowu>= 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";}classTthread implements Runnable { public void run() {booleanfo = 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 (inti = 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;}}}}}}classMyListener extends KeyAdapter { public void keyPressed(KeyEvent e) {String uu = e.getKeyChar() + ""; for (inti = 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.getSystemLookAndFeelCla ssName());} catch (Exception exception) { exception.printStackTrace();}Frame frame = new Frame();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.setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height - frameSize.height) / 2); frame.setVisible(true);}}class Frame1_jButton2_actionAdapter implements ActionListener{private Frame adaptee;Frame1_jButton2_actionAdapter(Frame adaptee) { this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.jButton2_actionPerformed(e); }}class Frame1_jButton1_actionAdapter implements ActionListener{private Frame adaptee;Frame1_jButton1_actionAdapter(Frame adaptee) { this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.jButton1_actionPerformed(e); }}class Bean {String parameter = null;JLabel show = null;publicJLabelgetShow() {return show;}public void setShow(JLabel show) { this.show = show; }public String getParameter() { return parameter;}public void setParameter(String parameter) {this.parameter = parameter; }}。

相关主题