2 需求分析2.1 设计目标1.单击“记忆测试”菜单可以选择初级、中级、高级三个级别,通过记忆榜可以查看初级记忆榜、中级记忆榜或高级记忆榜2.选择级别后,将显示相应级别的测试区域测试区域由若干个方块组成,每个方块上都有一个图标,但该图标默认情况下不可见用鼠标单击测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来对于初级级别,用户必须用鼠标连续单击3个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出n(n<3)个图标相同的方块,单击另一个方块时,如果该方块的图标和上一个相同,那么该方块的图标和前n次单击出的方块的图标仍然可见,否则,前n次单击出的方块的图标都变为不可见3.连续单击出该级别所要求的若干个图标形同的方块后,将显示保存成绩对话框,成绩按所用时间排序用户可以通过该对话框选择是否将自己的成绩保存到成绩表中2.2 主体功能本游戏是通过由用户点击图片显示出图片后,如果是相同的,便保持图形,如果用户点开的是不同的图片则先前点击的图片被清空当用户同时点击出规定数目的图片后,弹出保存成绩框2.3 开发环境Win7;MyEclipse 8.5软件3 概要设计3.1系统的功能模块划分记忆测试系统共包含8个java源文件和若干个图像文件(用户可以增加)。
类之间的主要关系如下图所示在测试系统中,可以编写6个Java源文件:MemoryGame.java、MemoryTestArea.java、Block.java、ShowRecordDialog.java、Record.java、People.java记忆测试系统除了上述6个Java源文件产生的类外,还需要Java系统提供的一些重要的类记忆测试系统所用到的一些重要的类以及之间的组合关系如图3.1所示Memory(主类)Block(方块)MemoryTestPane(测试版)ShowRecord(显示成绩)显示成绩)ShowHelp(帮助)RandomSetIcon(随机排列图标)Record(记录成绩)People(用户信息)图3.1 类之间的组合关系图3.1 类之间的关系3.2 系统流程图 图3.2 系统流程图4 详细设计4.1工作原理系统主体部分是在底层容器上插入面板,并在面板上安排按钮阵列,当用户点击按钮,经过随机安排在按钮后面的图片显示出来通过对比图片下标,如果所显示图片和前一个显示图片一样,则没变化;如果,不一样,则把以前所有显示的图片重新用按钮遮盖。
当用户点开指定数量的图片时,就进入记录数据部分在测试过程中,显示用户测试时间记录数据部分是把用户输入的姓名和系统记录用户测试时间写入指定文档中保存查阅数据部分,是把指定文档的数据显示给用户,包括姓名和测试时间用户此时可以清除文档中数据,即可删除排行榜4.2 算法思路主窗口安排指定数量按钮,是通过用户所选级别传参数计算后进行安排随机分布图片需要随机函数随机产生指定数量的图片下标,并传给主窗口的按对应按钮通过对比所显示图片的下标,统计显示的相同图片的数量用户测试开始后,记录测试时间,并保存4.3主类Memorya).成员变量主要成员变量(属性):成员变量描述变量类型名称菜单条JMenuBarBar菜单JMenuItemFileMenu菜单项JMenuBar初级,中级,高级,初级排行榜,中级排行榜,高级排行榜面板容器MemoryTestPane记忆测试板方块数组Block[]block显示成绩ShowRecord显示成绩表对话框图标数组ImageIcon[]iconb).方法主要方法:名称功能备注Memory创建窗口构造方法给出级别测试选择级别actionPerformed处理ActionEvent事件接口方法Main主程序开始执行4.4类Blocka).成员变量主要成员变量(属性):成员变量描述变量类型名称方块翻开时的图标ImageIcon翻开时的图标方块关闭时的图标ImageIcon关闭时的图标b).方法主要方法:名称功能备注Block创建方块对象的构造方法获取翻开时的图标获取方块翻开时的图标获取关闭时的图标获取方块关闭时的图标设置翻开时的图标设置翻开时的图标设置关闭时的图标设置关闭时的图标设置图标设置方块上的图标actionPerformed处理ActionEvent事件处理ActionEvent事件4.5类MemoryTestPanea).成员变量主要成员变量(属性):变量描述变量类型名称随机排列图标对象RandomSetIcon排列图标方块数组Blockblock图标数组ImageIcon[]icon添加方块对象用的链表LinkedListlistIcon添加图标对象用的链表LinkedListlistIcon确定是否成功的对象intsuccess用来计时的对象Timer计时器记忆测试板的行数和列数int行数,列数b).方法主要方法:名称功能备注MemoryTestPane创建记忆测试板对象的构造方法actionPerformed处理ActionEvent事件接口方法4.6类ShowRecorda). 成员变量主要成员变量(属性):成员变量描述变量类型名称存放成绩的文件FilegradeFile按钮对象JButton确定,清除显示成绩的区域JTextAreashowb).方法主要方法:名称功能备注ShowRecord创建显示成绩窗口构造方法actionPerformed处理ActionEvent事件接口方法4.7类Recorda).成员变量主要成员变量(属性):成员变量描述变量类型名称用时inttime输入测试者的名字JTextFieldyourname存放成绩的文件FilegradeFile是否保存成绩的按钮JButton确定,取消 b).方法主要方法:名称功能备注Record创建保存成绩窗口构造方法actionPerformed处理ActionEvent事件接口方法setTime设置时间setFile设置文件4.8类RandomSetIcona).成员变量(无)b).方法主要方法:名称功能备注随机设置图标随机排列记忆测试板中方块的图标4.9类Peoplea)成员变量主要成员变量(属性):描述变量类型名称测试者名字Stringname用时inttimeb) 方法主要方法:名称功能备注People传递名字和时间构造方法getTime返回使用者用时getName返回使用者名字5测试 5.1 测试方案将7个java文件保存到一个文件夹中,例如,D:\jiyiceshi。
将7个文件分别编译成相应的字节码(.class)文件然后,用java解释器运行主类:C:\jiyiceshi\java Memory 程序运行后选择各菜单,分别进行功能测试5.2 测试结果(1)运行效果 图5.2.1 运行效果(2)当选择“记忆力测试”后,自己可以设置游戏的难度,效果如图图5.2.2 初级效果图图5.2.3 中级效果图图5.2.4 高级效果图图5.2.5 排行效果图(3)当游戏结束后,查看“初级排行榜”,将显示初级的成绩记录效果图5.2.5 初级成绩记录6 小结Java程序设计是本专业的一门重要的面向对象的程序语言在刚开始学习时,一直担心自己、也没把握自己能否学好,也曾担心过不了考试这一关经过近大半学期老师您不厌其烦的教导,引导我们去学习我对Java语言有了一定的了解,但那绝对是远远不够的,还是要不断地把它应用到实践中去,融会贯通经过为期一周的Java课程设计,亲身感受体验敲、改写Java程序代码的乐趣,我对Java编程有了较为深入的了解,不仅巩固了以前在课本上学到的知识,还学会了很多其他东西,比如Java程序不同调试平台的使用、错误的调试及数据库路径的配置等等。
一直以来,或许有不少人跟我一样,总是觉得编程是很枯燥乏味的,但是这次的体验下来,其实以前我们的想法错误的感觉到看着敲击的代码变为一个个可以自娱自乐小游戏程序,其实是一件非常有趣的事情并且在添加功能的过程中,不仅可以启发自己的想象力,还可以培养灵活运用知识的能力在此过程中,我们认识到编程的重要步骤是分析,分析问题的本身和现实要求分析过程中采用根据设置框架选择功能使我的思路特别清晰拿到一个题目不能只局限在一种思想一种方法上,要尽量的多尝试其他的做法,然后比较,集各家之所长,拿出最优秀的程序来其次也是最重要的就是我们应当打开我们的视野,我们应当从我们的生活的这个世界中去领悟解决问题的思想和方法通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义参考文献文献写法如下:1. 专著、论文集、毕业论文、报告等疯狂Java讲义 (2008-09)李刚著附 录附录1 源程序清单Memory.javaimport 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 Block[m*n]; 图标个数=m; icon=new ImageIcon[图标个数]; for(int i=0;i((People)list.get(j)).getTime()) { People temp=(People)list.get(j); list.set(j,(People)list.get(i)); list.set(i,temp); } } } }}Record.javaimport java.io.*;import java.util.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class Record extends JFrame implements ActionListener{ int time=0; JTextField yourName,label; JButton 确定,取消; File gradeFile=null; public Record(File f) { super("记录你的成绩到:"+f.toString()); gradeFile=f; setBounds(100,100,330,160); setResizable(false); setVisible(false); 确定=new JButton("确定"); 取消=new JButton("取消"); yourName=new JTextField(8); yourName.setText("匿名"); 确定.addActionListener(this); 取消.addActionListener(this); Container con=getContentPane(); con.setLayout(new GridLayout(2,1)); label=new JTextField("输入你的姓名,将成绩存放到排行榜:"+f.toString()); label.setEditable(false); con.add(label); JPanel p=new JPanel(); p.add(yourName); p.add(确定); p.add(取消); con.add(p); addWindowListener(new WindowAdapter() { public void windwoClosing(WindowEvent e) { setVisible(false); dispose(); } } ); } public void setFile(File f) { grade。