java课程设计报告-记忆测试系统.doc_第1页
java课程设计报告-记忆测试系统.doc_第2页
java课程设计报告-记忆测试系统.doc_第3页
java课程设计报告-记忆测试系统.doc_第4页
java课程设计报告-记忆测试系统.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书 NO.1记忆测试系统1. 课程设计的目的掌握了Java基本知识后,使自己掌握Java面向对象的设计思想,进行一系列的课程设计来提高Java编程技术,使自己掌握Java面向对象的设计思想,为后续的毕业设计和项目开发累计经验,从而使自己能在将来具体的工作中利用Java语言开发项目。2. 设计方案论证2.1 概要设计2.1.1 系统功能描述本游戏是通过由用户点击图片显示出图片后,如果是相同的,便保持图形,如果用户点开的是不同的图片则先前点击的图片被清空。当用户同时点击出规定数目的图片后,弹出保存成绩框。2.1.2 系统开发环境 (1)硬件环境一台装有Windows 7操作系统,P7450 CPU,内存2G (2)软件环境 JCreator 3.0e2.2 详细设计2.2.1 程序流程图在测试系统中,可以编写7个JAVA源程序:Memory.java、MemoryTestPane.java、Block.java、ShowRecord.java、Record.java、People.java、RandomSetIcon.java。记忆测试系统除了上述7个Java源文件产生的类外,还需要Java系统提供的一些重要的类。记忆测试系统所用到的一些重要的类以及之间的组合关系如图1所示 沈 阳 大 学课程设计说明书 NO.2开始结束排行榜查看选择图案显示相应级别排行榜动物图案YYN选择菜单级别选择相应级别提示随机设置“方块”上的图标相同图标满足要求显示保持成绩对话框是否保存成绩输入玩家姓名成绩排序后保存相应文件中汽车图案N图1 系统流程图 沈 阳 大 学课程设计说明书 NO.32.2.2 程序中自定义类说明 Memory类 成员变量bar是JMenuBar类创建的菜单条,可以向bar中添加菜单。menuGrade、menuResult、menuIcon是JMenu创建的三个菜单,这三个菜单的名称分别是“选择级别”、“查看排行榜”和“选择图标”。oneGradeItem、twoGradeItem、threeGradeIte是JMenuItem类创建的三个菜单项,被添加到menuGrade菜单中,这三个菜单项的名称分别是“初级”,“中级”和“高级”。oneGradeResult、twoGradeResult、threeGradeResult是JMenuItem类创建的三个菜单项,被添加到menuResult菜单中,这三个菜单项的名称分别是“初级排行榜”,“中级排行榜”和“高级排行榜”。carImageIcon、animalImageIcon是JMenuItem类创建的两个菜单项,被添加到menuIcon菜单中,这两个菜单项的名称分别是“汽车图标”和“动物图标”。fileOneGrade、fileTwoGrade、fileThreeGrade和gradeFile是File类创建的四个文件对象。fileOneGrade、fileTwoGrade、fileThreeGrade所引用的文件分别是“初级记忆排行榜.txt”、“中级记忆排行榜.txt”、“高级记忆排行榜.txt”,分别用来写入三个级别的成绩。gradeFile可以是fileOneGrade、fileTwoGrade、fileThreeGrade中的某一个。imageName是String类型的组件,每个单元是一个图像文件的名字。memoryArea是测试区对象,由MemoryArea类负责创建。showDiolag是负责显示成绩的对话框,由ShowRecordDialog类负责创建m和n的int型数据,其值可以确定相应级别中测试区中方块的数量,例如,对于中级水平,m=6,n=7,测试区一个有42个方块。方法actionPerformed(ActionEvent)方法是MemoryGame类实现ActionListener接口中的方法,负责执行菜单项发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。MemoryGame()是构造方法,负责完成窗口的初始化。main(String)方法是软件运行的入口方法。MemorytestPane类成员变量row和col的值确定测试区中方块的数量。MemoryTestArea类创建的对象memoryArea是MemoryGame中的成员,memoryArea对象通过调用initBlock(int,int,String,file)方法将MemoryGame类中m和n的值传递给row和col。 沈 阳 大 学课程设计说明书 NO.4usedTime是用户的用时,单位是秒。success的值是用户找到的具有同样的图标的方块的个数。gradeFile是级别文件,memoryArea对象通过调用initBlock(int,int,String,file)方法将MemoryGame类中的gradeFile的引用传递给memoryArea对象中的gradeFile。数组表allBlockList单元的个数是row和col的乘积,它的每个单元存放着一个Block对象。memoryArea对象在调用initBlock(int,int,String,file)方法时完成对allBlockList单元的初始化,即创建单元中的Block对象。字符串数组imageFileName中的每个单元是一幅图像文件的文字。memoryArea对象通过调用setImageName(String)方法将MemoryGame中存放图像文件名字的imageName数组的引用传递给imageFileName。链表openIconList用来存放用户找到的图标相同的方块上的图标。链表openBlockList用来存放用户找到的图标相同的方块。hintThread是用Thread类创建的线程对象,用来提示测试区中的Block上的图标,提示方式是将测试区中的各个Block上图标持续显示1200毫秒。hintButton是注册了ActionEvent事件的监听器,当单击它时,启动hintThread线程。showUsedTime显示用户的用时,即显示usedTime的值。hintMessage根据不同的级别显示相应的提示信息,如该级别需要用户寻找的相同图标方块的数目。timer是计时器,负责改变usedTime的值。record负责提供保存成绩的界面,是一个对话框,默认不可见。当用户寻找出级别所要求的相同图标方块的数目后,该对话框可见,用户可以在该对话框中输入姓名,并保存所输入的姓名和usedTime的值到gradeFile指定的级别文件中。方法MemoryTestPane()是构造方法,创建memoryArea对象时需使用该构造方法。initBlock(int,int,String,file)方法。memoryArea对象调用该方法将参数的值传递给row、col、imageFileName和gradeFile,并依据这些值设置allBlockList数组表的大小,然后创建allBlockList的单元中Block对象,并设置Block对象上的图标。setImageName(String)方法。memoryArea对象调用该方法可以将MemoryGame中存放图像文件名字的imageName数组的引用传递给imageFileName。当用户单击MemoryGame主类窗口的cartImageIcon和animalImageIcon菜单项时,memoryArea对象将调用该方法把存放图像文件名字的imageName数组的引用传递给imageFileName。actionPerformed(ActionEvent)方法。该方法是MemoryArea类实现的ActionListener接口中的方法。memoryArea中的每个Block对象都注册了ActionEvent事件监听器,当用户单击memoryArea中的某个Block对象时,actionPerformed(ActionEvent)方法将被调用执行,所执行的主要操作是:如果该Block对象未显示图标,并且该Block对象设置的图标和openIconList的中存放 沈 阳 大 学课程设计说明书 NO.5的图标相同,就将该图标添加到链表openIconList中,同时将该Block对象上图标显示出来,并将success的值增1;如果该Block对象未显示图标,并且该Block对象设置的图标和openIconLis的中存放的图标不相同,就将openIconList清空,然后再将该图标添加到链表openIconList中,同时将该Block对象上图标显示出来,并将success的值设置成1。但用户单击hintButton按钮时,actionPerformed(ActionEvent)方法将被调用执行,执行的主要操作是启动hintThread线程。run()方法。该方法是MemoryArea类实现的Runnable接口中的方法,启动hintThread线程后,该方法将执行,其主要操作是将测试区中的未显示图标的各个Block对象上的图标持续显示1200毫秒。Block类成员变量openStateIocn是方块上的图标。方法Block对象调用setOpenStateIcon(ImageIcon)方法可以设置它上面的图标。Block对象调用openStateIcon()方法可以获得它上面的图标。ShowRecord类成员变量gradeFile是对话框要读取的文件,该文件存储成绩。clear是注册了ActionEvent事件的按钮。showArea文本区显示对话框从gradeFile文件中读出的成绩。treeSet负责将成绩按高低排序。方法ShowRecord ()是构造方法,负责创建showDialog对象。setGradeFile(File)方法。ShowRecordDialog类创建的ShowRecordDialog对话框是主类MemoryGame窗口中的一个成员。当用户选择窗口上的“查看排行榜”菜单中的菜单项时,ShowRecordDialog对话框调用setGradeFile(File)方法将相应的级别文件传递给gradeFile。showRecord()方法。ShowRecordDialog对话框调用showRecord()方法读取gradeFile文件中的成绩,为了将成绩按高低顺序显示在showArea文本区中,showRecord()方法根据读取的名字和该名字的对应成绩,创建一个People对象,并将该People对象存放在treeSet树集中。actionPerformed(ActionEvent)是ActionListener接口中的方法,clear注册了ActionEvent事件,当用户单击clear按钮时,actionPerformed(ActionEvent)方法被调用执行,清除gradeFile文件中的内容。 沈 阳 大 学课程设计说明书 NO.6People类成员变量name是用户的名字。time是用户的用时。方法getTime()方法返回time。getName()方法返回pareTo(Object)是comparable接口中的方法,其操作是确定People对象的大小关系。Record类成员变量time是用户的用时。yourName是用户用来输入名字的文本框。enter,cancel是按钮对象,用户单击enter按钮可保存成绩,单击cancel按钮可放弃保存成绩。gradeFile是级别文件。方法Record()是构造方法,负责创建record对象。setGradeFile(File)方法。Record类创建的Record对话框是测试区MemoryTestArea中的一个成员。当用户成功单击出相应级别所要求的图标相同的方块后,测试区弹出Record对话框,Record对话框将调用setGradeFile(File)方法将测试区中的级别文件传递给Record对话框gradeFile。setTime(int)方法。当用户成功单击出相应级别所要求的图标相同的方块后,测试区弹出Record对话框,Record对话框将调用setTime(int)方法将测试区记录的用户用时传递给Record对话框中的time。actionPerformed(ActionEvent)是ActionListener接口中的方法,enter和cancel按钮注册了ActionEvent事件,当用户单击enter时,actionPerformed(ActionEvent)方法被调用执行,其操作是将用户在文本框yourName中输入的名字以及time的值保存到gradeFile文件中,然后关闭当前对话框;当用户单击cancel按钮时,actionPerformed(ActionEvent)方法将被调用执行,其操作是关闭当前对话框。3. 设计结果与分析3.1 程序运行结果运行程序后出现的主页面 如图2 所示: 沈 阳 大 学课程设计说明书 NO.7 图2 程序主页面开始游戏画面 如图3所示: 图3 游戏界面保存记录的图片 如图4所示: 沈 阳 大 学课程设计说明书 NO.8 图4 保存记录界面查看记录界面 如图5所示: 图5 查看记录界面 沈 阳 大 学课程设计说明书 NO.93.2 尚需解决的问题 小窗口中查看记录的显示方法,程序的写法不够成熟、简洁,有部分功能不能像想象的实现。4. 设计体会Java程序设计是本专业的一门重要的面向对象的程序语言。在刚开始学习时,一直担心自己、也没把握自己能否学好,也曾担心过不了考试这一关。经过近大半学期老师您不厌其烦的教导,引导我们去学习。我对Java语言有了一定的了解,但那绝对是远远不够的,还是要不断地把它应用到实践中去,融会贯通。经过为期3天的Java课程设计,亲身感受体验敲、改写Java程序代码的乐趣,我对Java编程有了较为深入的了解,不仅巩固了以前在课本上学到的知识,还学会了很多其他东西,比如Java程序不同调试平台的使用、错误的调试及数据库路径的配置等等。 一直以来,或许有不少人跟我一样,总是觉得编程是很枯燥乏味的,但是这次的体验下来,其实以前我们的想法错误的。感觉到看着敲击的代码变为一个个可以自娱自乐小游戏程序,其实是一件非常有趣的事情。并且在添加功能的过程中,不仅可以启发自己的想象力,还可以培养灵活运用知识的能力。在此过程中,我们认识到编程的重要步骤是分析,分析问题的本身和现实要求。分析过程中采用根据设置框架选择功能使我的思路特别清晰。拿到一个题目不能只局限在一种思想一种方法上,要尽量的多尝试其他的做法,然后比较,集各家之所长,拿出最优秀的程序来。其次也是最重要的就是我们应当打开我们的视野,我们应当从我们的生活的这个世界中去领悟解决问题的思想和方法通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程。作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。5. 参考文献1耿祥义,张跃平.Java2实用教程(第三版)M . 北京:清华大学出版社, 2006 2耿祥义.Java课程设计(第三版)M . 北京:清华大学出版社, 20043张跃平.Java2实用教程实验指导与习题解答(第三版)M. 北京:清华大学出版社, 2004 沈 阳 大 学课程设计说明书 NO.106. 附录6.1 Memory类的源程序代码import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.LinkedList;public class Memory extends JFrame implements ActionListener JMenuBar bar; JMenu fileMenu; JMenuItem 初级,中级,高级,初级排行榜,中级排行榜,高级排行榜; Block block; ImageIcon icon; MemoryTestPane 记忆测试板=null; File file初级=new File(初级记忆排行榜.txt), file中级=new File(中级记忆排行榜.txt), file高级=new File(高级记忆排行榜.txt); LinkedList 成绩表=null; ShowRecord 显示成绩表对话框=null; int m=5,n=6; int 图标个数=0; Container con=null; JTextField 提示条=null; File gradeFile=null; public Memory() block=new Blockm*n; 图标个数=m; icon=new ImageIcon图标个数; for(int i=0;iicon.length;i+) iconi=new ImageIcon(ani+i+.jpg); for(int i=0;iblock.length;i+) blocki=new Block(); 沈 阳 大 学课程设计说明书 NO.11 blocki.设置关闭时的图标(new ImageIcon(关闭.gif); bar=new JMenuBar(); fileMenu=new JMenu(记忆力测试); 初级=new JMenuItem(初级); 中级=new JMenuItem(中级); 高级=new JMenuItem(高级); fileMenu.setMnemonic(G); 初级.setMnemonic(B); 中级.setMnemonic(I); 高级.setMnemonic(E); 高级排行榜=new JMenuItem(高级排行榜); 中级排行榜=new JMenuItem(中级排行榜); 初级排行榜=new JMenuItem(初级排行榜); 初级.setMnemonic(T); fileMenu.add(初级); fileMenu.add(中级); fileMenu.add(高级); fileMenu.add(初级排行榜); fileMenu.add(中级排行榜); fileMenu.add(高级排行榜); bar.add(fileMenu); setJMenuBar(bar); 初级.addActionListener(this); 中级.addActionListener(this); 高级.addActionListener(this); 初级排行榜.addActionListener(this); 中级排行榜.addActionListener(this); 高级排行榜.addActionListener(this); 成绩表=new LinkedList(); if(!file初级.exists() try FileOutputStream out=new FileOutputStream(初级记忆排行榜.txt); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(成绩表); object_out.close(); 沈 阳 大 学课程设计说明书 NO.12 out.close(); catch(IOException e) if(!file中级.exists() try FileOutputStream out=new FileOutputStream(中级记忆排行榜.txt); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(成绩表); object_out.close(); out.close(); catch(IOException e) if(!file高级.exists() try FileOutputStream out=new FileOutputStream(高级记忆排行榜.txt); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(成绩表); object_out.close(); out.close(); catch(IOException e) gradeFile=file初级; setBounds(100,100,300,260); setVisible(true); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); 沈 阳 大 学课程设计说明书 NO.13 ); con=getContentPane(); 记忆测试板=new MemoryTestPane(block,icon,m,n,gradeFile); 提示条=new JTextField(初级:您需要连续找出+6+个相同图标的方块); 提示条.setEditable(false); 提示条.setForeground(Color.red); con.add(记忆测试板,BorderLayout.CENTER); con.add(提示条,BorderLayout.SOUTH); con.validate(); this.validate(); public void 给出级别测试(int 宽,int 高,File f) m=宽; n=高; 图标个数=m; gradeFile=f; block=new Blockm*n; icon=new ImageIcon图标个数; for(int i=0;iicon.length;i+) iconi=new ImageIcon(a+i+.gif); for(int i=0;iblock.length;i+) blocki=new Block(); blocki.设置关闭时的图标(new ImageIcon(关闭.gif); 记忆测试板=new MemoryTestPane(block,icon,m,n,gradeFile); con.removeAll(); con.add(记忆测试板,BorderLayout.CENTER); con.add(提示条,BorderLayout.SOUTH); con.validate(); this.validate(); public void actionPerformed(ActionEvent event) if(event.getSource()=初级) 沈 阳 大 学课程设计说明书 NO.14给出级别测试(5,6,file初级); setBounds(100,100,300,260); this.validate(); 提示条.setText(初级:您需要连续找出+6+个相同图标的方块); if(event.getSource()=中级) 给出级别测试(6,7,file中级); setBounds(100,100,340,280); this.validate(); 提示条.setText(中级:您需要连续找出+7+个相同图标的方块); if(event.getSource()=高级) 给出级别测试(7,8,file高级); setBounds(100,100,360,300); this.validate(); 提示条.setText(高级:您需要连续找出+8+个相同图标的方块); if(event.getSource()=高级排行榜) 显示成绩表对话框=new ShowRecord(this,file高级); 显示成绩表对话框.setVisible(true); if(event.getSource()=中级排行榜) 显示成绩表对话框=new ShowRecord(this,file中级); 显示成绩表对话框.setVisible(true); if(event.getSource()=初级排行榜) 显示成绩表对话框=new ShowRecord(this,file初级); 显示成绩表对话框.setVisible(true); public static void main(String args) new Memory(); 沈 阳 大 学课程设计说明书 NO.156.2 MrmoryTestPane类的源程序代码import javax.swing.*; import java.awt.event.*;import java.awt.*;import java.util.LinkedList;import java.io.*;public class MemoryTestPane extends JPanel implements ActionListener RandomSetIcon 排列图标=null; Block block; ImageIcon icon; LinkedList listIocn=null, listBlock=null; int 行数=0,列数=0; int success=0; int time=0; javax.swing.Timer 计时器=null; JTextField 显示时间=null; File gradeFile=null; boolean 计时器是否启动=false; public MemoryTestPane(Block block,ImageIcon icon,int m,int n,File f) 排列图标=new RandomSetIcon(); this.block=block; this.icon=icon; 行数=m; 列数=n; gradeFile=f; listIocn=new LinkedList(); listBlock=new LinkedList(); setLayout(new BorderLayout(); JPanel center=new JPanel(); center.setLayout(new GridLayout(行数,列数); for(int i=0;iblock.length;i+) center.add(blocki); 沈 阳 大 学课程设计说明书 NO.16 blocki.addActionListener(this); JPanel south=new JPanel(); 显示时间=new JTextField(12); 显示时间.setEditable(false); 显示时间.setForeground(Color.red); south.add(显示时间); add(center,BorderLayout.CENTER); add(south,BorderLayout.SOUTH); 排列图标.随机设置图标(block,icon); 计时器=new Timer(1000,this); 计时器是否启动=false; public void actionPerformed(ActionEvent e) if(e.getSource() instanceof Block) Block 方块=(Block)e.getSource(); ImageIcon 翻开时的图标=方块.获取翻开时的图标(); 方块.设置图标(翻开时的图标); if(listIocn.size()=0) listIocn.add(翻开时的图标); listBlock.add(方块); success=1; else ImageIcon temp=(ImageIcon)listIocn.getLast(); if(temp=翻开时的图标&!(listBlock.contains(方块) success=success+1; listIocn.add(翻开时的图标); listBlock.add(方块); if(success=列数) for(int i=0;iblock.length;i+) blocki.setEnabled(false); 沈 阳 大 学课程设计说明书 NO.17 for(int j=0;jlistBlock.size();j+) Block b=(Block)listBlock.get(j); b.setDisabledIcon(b.获取翻开时的图标(); 计时器.stop(); Record record=new Record(gradeFile); record.setTime(time); record.setVisible(true); else if(temp!=翻开时的图标)&(!(listBlock.contains(方块) listIocn.clear(); listBlock.clear(); listIocn.add(翻开时的图标); listBlock.add(方块); success=1; for(int i=0;iblock.length;i+) if(方块!=blocki) blocki.设置图标(blocki.获取关闭时的图标(); if(计时器是否启动=false) time=0; 计时器.start(); 计时器是否启动=true; if(e.getSource()=计时器) time=time+1; 显示时间.setText(您的用时:+time+秒); 沈 阳 大 学课程设计说明书 NO.186.3 People类的源程序代码import java.awt.Point;public class People implements java.io.Serializable String name=null; int time=0; public People(String name,int t) =name; time=t; public int getTime() return time; public String getName() return name; 6.4 Block类的源程序代码import javax.swing.*;import

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论