记忆测试系统设计.docx
- 文档编号:11112257
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:30
- 大小:189.95KB
记忆测试系统设计.docx
《记忆测试系统设计.docx》由会员分享,可在线阅读,更多相关《记忆测试系统设计.docx(30页珍藏版)》请在冰豆网上搜索。
记忆测试系统设计
综合案例
记忆测试软件系统设计
◆图形界面编程
◆I/O文件流编程
◆多线程编程
◆常用API编程
◆面向对象基础
2011-11
记忆测试系统
题目简介
本游戏是通过由用户点击图片显示出图片后,如果是相同的,便保持图形,如果用户点开的是不同的图片则先前点击的图片被清空。
当用户同时点击出规定数目的图片后,弹出保存成绩框。
主要内容:
◆设计要求
◆总体设计
◆详细设计
◆代码调试
◆软件开发
◆课程设计题目
软件效果图
记忆测试系统软件的运行效果图如下所示:
图1.0记忆系测试统软件的运行效果
1.1设计要求
记忆测试系统是通过回忆法测试记忆能力,测试手段分为初级、中级、高级三个级别。
(一)记忆测试系统设计内容、要求:
(1)单击“选择级别”菜单可以选择初级、中级或高级。
(2)单击“查看排行榜”菜单可以查看初级记忆榜、中级记忆榜或高级记忆榜,通过记忆榜存储每个级别的成绩。
(3)选择级别后,将出现相应级别的测试区。
测试区由m*n个方块组成,程序通过设置m和n的值来确定相应的测试级别,例如,对于初级级别,m=5,n=6。
每个方块上都有一个图标,但该图标默认不可见。
用鼠标单击测试区中的任何一个方块,则计时器开始启动动,同时该方块上的图标将显示出来。
(4)m*n个方块组成的测试区中有m个图标,每个图标重复出现n次,并且随机分布在测试区中的m*n各方块上。
用户必须用鼠标连续单击出n个图表相同的方块,也就是说,如果用户已经用鼠标连续单击出p(p (5)测试区能显示用户的同时,并根据级别的不同,提示用户必须用鼠标连续单击出多个图标相同的方块。 (6)测试区有提示图标所在位置的功能。 用户单击测试区中的“提示”按钮后,测试区将持续1.2秒为用户显示全部方块上的图标。 用户没单击一次“提示”按钮,用户的勇士将增加10秒。 (7)连续单击出级别所要求的若干个相同的方块后,将弹出保存成绩对话框,用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。 (8)单击“选择图标”菜单可重新选择方块图标样式,既可以重新选择m个图标。 (二)设计目标: (1)改进程序,使用户能为方块选择更多图标。 (2)改进测试条件,例如单击鼠标的次数越多则成绩越差等。 (3)改进程序,增加更加丰富的音乐效果。 当用户成功翻开相同图标方块后,程序播放简短、动听的一声音乐,而用户翻开不相同图标方块,程序播放简短、警告的音乐。 用Java可以编写播放.au、.aiff、.wav、.midi、.rfm格式的音频。 假设音频文件hello.au位于应用程序当前目录中。 1.2总体设计 在测试系统中,可以编写6个Java源文件: MemoryGame.java、MemoryTestArea.java、Block.java、ShowRecordDialog.java、Record.java、People.java。 记忆测试系统除了上述6个Java源文件产生的类外,还需要Java系统提供的一些重要的类。 记忆测试系统所用到的一些重要的类以及之间的组合关系如图1.1所示。 图1.1类之间的组合关系 以下是6个Java原文件的总体设计。 1.2.1MemoryGame.java(主类) MemoryGame.java类负责创建记忆测试系统的主窗口,该类含有main方法,记忆测试系统从该类开始执行。 MemoryGame类有四种重要类型的对象,分别是String、File、MemoryTestArea和ShowRecordDialog对象。 MemoryGame类创建的窗口对象以及其中的主要成员对象如图1.2所示。 MemoryGame类主要成员的作用将在后面的详细设计中阐述。 (a)对话框 (b)窗口及测试区 图1.2MemoryGame窗口及主要的成员对象 1.2.2MemoryTestArea.java MemoryTestArea类是主类MemoryGame窗口中的一个JPanel容器,所创见的对象称为“测试区”,这个“测试区”别添加到MemoryGame窗口的中心。 MemoryTestArea类主要有6种类型的成员: ArrayList MemoryTestArea类的主要成员的作用将在后面的详细设计中阐述 1.2.3Block.java Block类是Jbubtton的子类,负责为MemoryTestArea类中的ArrayList 1.2.4Record.java Record类是javax.swing包中Jdialog对话框的子类,当用户成功单击出相应级别所要求的图表相同的方块后,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。 1.2.5ShowRecordDialog.java ShowRecordDialog类是java.swing包中JDialog对话框的子类,当用户单击“查看排行榜”时,ShowRecordDialog创建的对象显示用户的成绩。 1.2.6People.java People对象封装用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。 1.3详细设计及实现 操作界面设计: 点击运行,选择级别,图标游戏开始,如果用户不清楚相同图标的位置时,点击提示。 界面方案: 窗口大小: setBounds(100,100,400,360);setVisible(true); 字体的大小和颜色: hinMessage.setFont(newFont(“宋体”,Font.BOLD,18)); 布局控制: 又上到下,先是菜单: 选择级别,查看排行榜,选择图标; 提示信息: hintMessage.setText(“您需要用鼠标单击出”+col+“个同样图标的方块”);图标随机排布,有M*N个方块随机分布,下面是一记录用户时间以及提示按钮,提示用户相同图标的位置。 1.3.1MemoryGame类 1.效果图 (如图1.3MemoryGame创建窗口所示) 图1.3MemoryGame创建窗口 2.类成员变量及方法设计 1)成员变量 ▪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个方块。 2)方法 ▪actionPerformed(ActionEvent)方法是MemoryGame类实现ActionListener接口中的方法,负责执行菜单项发出的有关命令。 用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。 ▪MemoryGame()是构造方法,负责完成窗口的初始化。 ▪main(String[])方法是软件运行的入口方法。 3.代码(MemoryGame.java) importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; importjava.io.*; importjava.util.LinkedList; publicclassMemoryGameextendsJFrameimplementsActionListener{ JMenuBarbar; JMenumenuGrade,menuResult,menuIcon; JMenuItemoneGradeItem,twoGradeItem,threeGradeItem; JMenuItemoneGradeResult,twoGradeResult,threeGradeResult; JMenuItemcarImageIcon,animalImageIcon; FilefileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile; StringimageName[]; MemoryTestAreamemoryArea; ShowRecordDialogshowDiolag=null; intm=5,n=6; finalintimageNumber=7; MemoryGame(){ fileOneGrade=newFile("初级记忆排行榜.txt"); fileTwoGrade=newFile("中级记忆排行榜.txt"); fileThreeGrade=newFile("高级记忆排行榜.txt"); bar=newJMenuBar(); menuGrade=newJMenu("选择级别"); oneGradeItem=newJMenuItem("初级"); twoGradeItem=newJMenuItem("中级"); threeGradeItem=newJMenuItem("高级"); menuGrade.add(oneGradeItem); menuGrade.add(twoGradeItem); menuGrade.add(threeGradeItem); menuResult=newJMenu("查看排行榜"); oneGradeResult=newJMenuItem("初级排行榜"); twoGradeResult=newJMenuItem("中级排行榜"); threeGradeResult=newJMenuItem("高级排行榜"); menuResult.add(oneGradeResult); menuResult.add(twoGradeResult); menuResult.add(threeGradeResult); menuIcon=newJMenu("选择图标"); carImageIcon=newJMenuItem("汽车图标"); animalImageIcon=newJMenuItem("动物图标"); animalImageIcon.addActionListener(this); carImageIcon.addActionListener(this); menuIcon.add(carImageIcon); menuIcon.add(animalImageIcon); bar.add(menuGrade); bar.add(menuResult); bar.add(menuIcon); setJMenuBar(bar); oneGradeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); oneGradeResult.addActionListener(this); twoGradeResult.addActionListener(this); threeGradeResult.addActionListener(this); if(! fileOneGrade.exists()){ try{fileOneGrade.createNewFile(); } catch(IOExceptionexp){} } if(! fileTwoGrade.exists()){ try{fileTwoGrade.createNewFile(); } catch(IOExceptionexp){} } if(! fileThreeGrade.exists()){ try{fileThreeGrade.createNewFile(); } catch(IOExceptionexp){} } setBounds(100,100,400,360); setVisible(true); memoryArea=newMemoryTestArea(); imageName=newString[imageNumber]; for(inti=0;i imageName[i]=newString("car"+i+".jpg"); } m=5; n=6; gradeFile=fileOneGrade; memoryArea.initBlock(m,n,imageName,gradeFile); add(memoryArea,BorderLayout.CENTER); showDiolag=newShowRecordDialog(); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } publicvoidactionPerformed(ActionEventevent){ if(event.getSource()==oneGradeItem){ m=5;n=6; gradeFile=fileOneGrade; memoryArea.initBlock(m,n,imageName,gradeFile); } if(event.getSource()==twoGradeItem){ m=6;n=7; gradeFile=fileTwoGrade; memoryArea.initBlock(m,n,imageName,gradeFile); } if(event.getSource()==threeGradeItem){ m=7;n=8; gradeFile=fileThreeGrade; memoryArea.initBlock(m,n,imageName,gradeFile); } if(event.getSource()==carImageIcon){ for(inti=0;i imageName[i]=newString("car"+i+".jpg"); } memoryArea.setImageName(imageName); memoryArea.initBlock(m,n,imageName,gradeFile); } if(event.getSource()==animalImageIcon){ for(inti=0;i imageName[i]=newString("ani"+i+".jpg"); } memoryArea.setImageName(imageName); memoryArea.initBlock(m,n,imageName,gradeFile); } if(event.getSource()==oneGradeResult){ showDiolag.setGradeFile(fileOneGrade); showDiolag.showRecord(); showDiolag.setVisible(true); } if(event.getSource()==twoGradeResult){ showDiolag.setGradeFile(fileTwoGrade); showDiolag.showRecord(); showDiolag.setVisible(true); } if(event.getSource()==threeGradeResult){ showDiolag.setGradeFile(fileThreeGrade); showDiolag.showRecord(); showDiolag.setVisible(true); } } publicstaticvoidmain(Stringargs[]){ newMemoryGame(); } } 1.3.2MemoryTestArea类 1.效果图 图1.5MemoryTestArea创建的测试区 2.类成员变量及方法设计 1)成员变量 ▪row和col的值确定测试区中方块的数量。 MemoryTestArea类创建的对象memoryArea是MemoryGame中的成员,memoryArea对象通过调用initBlock(int,int,String[],file)方法将MemoryGame类中m和n的值传递给row和col。 ▪usedTime是用户的用时,单位是秒。 ▪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指定的级别文件中。 2)方法 ▪MemoryTestArea()是构造方法,创建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的中存放的图标相同,就将该图标添加到链表openIconList中,同时将该Block对象上图标显示出来,并将success的值增1;如果该Block对象未显示图标,并且该Block对象设置的图标和openIconLis的中存放的图标不相同,就将openIconList清空,然后再将该图标添加到链表openIconList中,同时将该Block对象上图标显示出来,并将success的值设置成1。 但用户单击hintButton按钮时,actionPerformed(ActionEvent)方法将被调用执行,执行的主要操作是启动hintThread线程。 ▪run()方法。 该方法是MemoryArea类实现的Runnable接口中的方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 记忆 测试 系统 设计