版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java程序设计课程设计报告JAVA程序设计课程设计报告题 目:记忆游戏姓 名:学 号:班 级:指导教师:完成时间 成 绩: 信息工程学院2015年6月1目 录1 概 述11.1 课程设计目的11.2 课程设计内容12 需求分析22.1 设计目标22.2 主体功能22.3 开发环境23 概要设计33.1 系统的功能模块划分33.2 系统流程图44 详细设计55测试75.1 测试方案85.2 测试结果86 小结11参考文献12附 录13附录1 源程序清单133记忆测试系统1 概 述 1.1 课程设计目的1) 巩固和提高java编程技术。2) 培养掌握成学设计的基本思路和方法。3) 加强研发、调试
2、程序的能力。4) 增强分析、解决问题的能力。5) 提高科技论文写作能力。1.2 课程设计内容记忆测试系统是通过回忆法测试记忆能力,测试手段分为初级,中级和高级三个级别。记忆测试系统设计要求如下:(1)单击“记忆测试”菜单可以选择初级、中级或高级三个级别。(2)单击“记忆测试”菜单还可以查看初级记忆榜、中级记忆榜或高级记忆榜,通过记忆榜存储每个级别的成绩。(3)选择级别后,将出现相应级别的测试区。测试区由m*n个方块组成,程序通过设置m和n的值来确定相应的测试级别,例如,对于初级级别,m=3,n=3。每个方块上都有一个图标,但该图标默认不可见。用鼠标单击测试区中的任何一个方块,则计时器开始启动动
3、,同时该方块上的图标将显示出来。(4)m*n个方块组成的测试区中有m个图标,每个图标重复出现n次,并且随机分布在测试区中的m*n各方块上。用户必须用鼠标连续单击出n个图表相同的方块,也就是说,如果用户已经用鼠标连续单击出p(p<n)个图标相同的方块,当再单击另一个方块时,如果该方块的图标和上一个的相同,那么该方块的图标和前p次单击出的方块的图标仍然可见;否则前p次单击出来的方块的图标全都变得不可见,只有当前单击的方块的图标可现。(5)测试区能显示用户的同时,并根据级别的不同,提示用户必须用鼠标连续单击出多个图标相同的方块。(6)测试区有提示图标所在位置的功能。用户单击测试区中的“提示”按
4、钮后,测试区将持续1.2秒为用户显示全部方块上的图标。用户每单击一次“提示”按钮,用户用时将增加10秒。(7)连续单击出级别所要求的若干个相同的方块后,将弹出保存成绩对话框,用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。2 需求分析2.1 设计目标1单击“记忆测试”菜单可以选择初级、中级、高级三个级别,通过记忆榜可以查看初级记忆榜、中级记忆榜或高级记忆榜。2.选择级别后,将显示相应级别的测试区域。测试区域由若干个方块组成,每个方块上都有一个图标,但该图标默认情况下不可见。用鼠标单击测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来。对于初级级别,用户必须用鼠标连续
5、单击3个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出n(n<3)个图标相同的方块,单击另一个方块时,如果该方块的图标和上一个相同,那么该方块的图标和前n次单击出的方块的图标仍然可见,否则,前n次单击出的方块的图标都变为不可见。3.连续单击出该级别所要求的若干个图标形同的方块后,将显示保存成绩对话框,成绩按所用时间排序。用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。2.2 主体功能本游戏是通过由用户点击图片显示出图片后,如果是相同的,便保持图形,如果用户点开的是不同的图片则先前点击的图片被清空。当用户同时点击出规定数目的图片后,弹出保存成绩框。2.3 开发环境Win7;
6、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(方块)MemoryTe
7、stPane(测试版)ShowRecord(显示成绩)显示成绩)ShowHelp(帮助)RandomSetIcon(随机排列图标)Record(记录成绩)People(用户信息)图3.1 类之间的组合关系图3.1 类之间的关系3.2 系统流程图 图3.2 系统流程图4 详细设计4.1工作原理系统主体部分是在底层容器上插入面板,并在面板上安排按钮阵列,当用户点击按钮,经过随机安排在按钮后面的图片显示出来。通过对比图片下标,如果所显示图片和前一个显示图片一样,则没变化;如果,不一样,则把以前所有显示的图片重新用按钮遮盖。当用户点开指定数量的图片时,就进入记录数据部分。在测试过程中,显示用户测试时间
8、。记录数据部分。是把用户输入的姓名和系统记录用户测试时间写入指定文档中保存。查阅数据部分,是把指定文档的数据显示给用户,包括姓名和测试时间。用户此时可以清除文档中数据,即可删除排行榜。4.2 算法思路主窗口安排指定数量按钮,是通过用户所选级别传参数计算后进行安排。随机分布图片需要随机函数随机产生指定数量的图片下标,并传给主窗口的按对应按钮通过对比所显示图片的下标,统计显示的相同图片的数量。用户测试开始后,记录测试时间,并保存。4.3主类Memorya).成员变量主要成员变量(属性):成员变量描述变量类型名称菜单条JMenuBarBar菜单JMenuItemFileMenu菜单项JMenuBar
9、初级,中级,高级,初级排行榜,中级排行榜,高级排行榜面板容器MemoryTestPane记忆测试板方块数组Blockblock显示成绩ShowRecord显示成绩表对话框图标数组ImageIconiconb).方法主要方法:名称功能备注Memory创建窗口构造方法给出级别测试选择级别actionPerformed处理ActionEvent事件接口方法Main主程序开始执行4.4类Blocka).成员变量主要成员变量(属性):成员变量描述变量类型名称方块翻开时的图标ImageIcon翻开时的图标方块关闭时的图标ImageIcon关闭时的图标b).方法主要方法:名称功能备注Block创建方块对象的
10、构造方法获取翻开时的图标获取方块翻开时的图标获取关闭时的图标获取方块关闭时的图标设置翻开时的图标设置翻开时的图标设置关闭时的图标设置关闭时的图标设置图标设置方块上的图标actionPerformed处理ActionEvent事件处理ActionEvent事件4.5类MemoryTestPanea).成员变量主要成员变量(属性):变量描述变量类型名称随机排列图标对象RandomSetIcon排列图标方块数组Blockblock图标数组ImageIconicon添加方块对象用的链表LinkedListlistIcon添加图标对象用的链表LinkedListlistIcon确定是否成功的对象ints
11、uccess用来计时的对象Timer计时器记忆测试板的行数和列数int行数,列数b).方法主要方法:名称功能备注MemoryTestPane创建记忆测试板对象的构造方法actionPerformed处理ActionEvent事件接口方法4.6类ShowRecorda). 成员变量主要成员变量(属性):成员变量描述变量类型名称存放成绩的文件FilegradeFile按钮对象JButton确定,清除显示成绩的区域JTextAreashowb).方法主要方法:名称功能备注ShowRecord创建显示成绩窗口构造方法actionPerformed处理ActionEvent事件接口方法4.7类Recor
12、da).成员变量主要成员变量(属性):成员变量描述变量类型名称用时inttime输入测试者的名字JTextFieldyourname存放成绩的文件FilegradeFile是否保存成绩的按钮JButton确定,取消 b).方法主要方法:名称功能备注Record创建保存成绩窗口构造方法actionPerformed处理ActionEvent事件接口方法setTime设置时间setFile设置文件4.8类RandomSetIcona).成员变量(无)b).方法主要方法:名称功能备注随机设置图标随机排列记忆测试板中方块的图标4.9类Peoplea)成员变量主要成员变量(属性):描述变量类型名称测试者
13、名字Stringname用时inttimeb) 方法主要方法:名称功能备注People传递名字和时间构造方法getTime返回使用者用时getName返回使用者名字5测试5.1 测试方案将7个java文件保存到一个文件夹中,例如,D:jiyiceshi。将7个文件分别编译成相应的字节码(.class)文件。然后,用java解释器运行主类:C:jiyiceshijava Memory 程序运行后选择各菜单,分别进行功能测试。5.2 测试结果(1)运行效果 图5.2.1 运行效果(2)当选择“记忆力测试”后,自己可以设置游戏的难度,效果如图图5.2.2 初级效果图图5.2.3 中级效果图图5.2.
14、4 高级效果图图5.2.5 排行效果图(3)当游戏结束后,查看“初级排行榜”,将显示初级的成绩记录效果图5.2.5 初级成绩记录6 小结Java程序设计是本专业的一门重要的面向对象的程序语言。在刚开始学习时,一直担心自己、也没把握自己能否学好,也曾担心过不了考试这一关。经过近大半学期老师您不厌其烦的教导,引导我们去学习。我对Java语言有了一定的了解,但那绝对是远远不够的,还是要不断地把它应用到实践中去,融会贯通。经过为期一周的Java课程设计,亲身感受体验敲、改写Java程序代码的乐趣,我对Java编程有了较为深入的了解,不仅巩固了以前在课本上学到的知识,还学会了很多其他东西,比如Java程
15、序不同调试平台的使用、错误的调试及数据库路径的配置等等。 一直以来,或许有不少人跟我一样,总是觉得编程是很枯燥乏味的,但是这次的体验下来,其实以前我们的想法错误的。感觉到看着敲击的代码变为一个个可以自娱自乐小游戏程序,其实是一件非常有趣的事情。并且在添加功能的过程中,不仅可以启发自己的想象力,还可以培养灵活运用知识的能力。在此过程中,我们认识到编程的重要步骤是分析,分析问题的本身和现实要求。分析过程中采用根据设置框架选择功能使我的思路特别清晰。拿到一个题目不能只局限在一种思想一种方法上,要尽量的多尝试其他的做法,然后比较,集各家之所长,拿出最优秀的程序来。其次也是最重要的就是我们应当打开我们的
16、视野,我们应当从我们的生活的这个世界中去领悟解决问题的思想和方法通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程。作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。23参考文献文献写法如下:1. 专著、论文集、毕业论文、报告等疯狂Java讲义 (2008-09)李刚著附 录附录1 源程序清单Memory.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.uti
17、l.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 Fi
18、le("高级记忆排行榜.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;i<icon.length;i+) iconi=new ImageIcon("a"+i+
19、".gif"); for(int i=0;i<block.length;i+) blocki=new Block(); blocki.设置关闭时的图标(new ImageIcon("关闭.gif"); bar=new JMenuBar(); fileMenu=new JMenu("记忆力测试"); 初级=new JMenuItem("初级"); 中级=new JMenuItem("中级"); 高级=new JMenuItem("高级"); fileMenu.setMne
20、monic('G'); 初级.setMnemonic('B'); 中级.setMnemonic('I'); 高级.setMnemonic('E'); 高级排行榜=new JMenuItem("高级排行榜"); 中级排行榜=new JMenuItem("中级排行榜"); 初级排行榜=new JMenuItem("初级排行榜"); 初级.setMnemonic('T'); fileMenu.add(初级); fileMenu.add(中级); fileMenu
21、.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 Linke
22、dList(); 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 FileOutp
23、utStream("中级记忆排行榜.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=n
24、ew 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); ); con=getContentPane(); 记忆测试板
25、=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 高
26、,File f) m=宽; n=高; 图标个数=m; gradeFile=f; block=new Blockm*n; icon=new ImageIcon图标个数; for(int i=0;i<icon.length;i+) iconi=new ImageIcon("a"+i+".gif"); for(int i=0;i<block.length;i+) blocki=new Block(); blocki.设置关闭时的图标(new ImageIcon("关闭.gif"); 记忆测试板=new MemoryTestPan
27、e(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()=初级) 给出级别测试(3,3,file初级); setBounds(100,100,300,260); this.validate(); 提示条.setText(&qu
28、ot;初级:您需要连续找出"+3+"个相同图标的方块"); if(event.getSource()=中级) 给出级别测试(4,4,file中级); setBounds(100,100,340,280); this.validate(); 提示条.setText("中级:您需要连续找出"+4+"个相同图标的方块"); if(event.getSource()=高级) 给出级别测试(5,5,file高级); setBounds(100,100,360,300); this.validate(); 提示条.setText(&qu
29、ot;高级:您需要连续找出"+5+"个相同图标的方块"); 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初级); 显示成
30、绩表对话框.setVisible(true); public static void main(String args) new Memory(); Block.javaimport javax.swing.*;import java.awt.event.*;public class Block extends JButton implements ActionListener ImageIcon 翻开时的图标=null,关闭时的图标=null; public Block() addActionListener(this); public ImageIcon 获取翻开时的图标() return
31、 翻开时的图标; public ImageIcon 获取关闭时的图标() return 关闭时的图标; public void 设置翻开时的图标(ImageIcon icon) 翻开时的图标=icon; public void 设置关闭时的图标(ImageIcon icon) 关闭时的图标=icon; public void 设置图标(ImageIcon icon) setIcon(icon); public void actionPerformed(ActionEvent e) this.setIcon(翻开时的图标); MemoryTestPane.javaimport javax.swi
32、ng.*; 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;
33、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(
34、); setLayout(new BorderLayout(); JPanel center=new JPanel(); center.setLayout(new GridLayout(行数,列数); for(int i=0;i<block.length;i+) center.add(blocki); blocki.addActionListener(this); JPanel south=new JPanel(); 显示时间=new JTextField(12); 显示时间.setEditable(false); 显示时间.setForeground(Color.red); south
35、.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 翻开时的图标=方块.获取翻开时的图标(); 方块.设置图标(翻开时的图标);
36、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;i<block.length;i+) blocki.setEnabled
37、(false); for(int j=0;j<listBlock.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()
38、; listIocn.add(翻开时的图标); listBlock.add(方块); success=1; for(int i=0;i<block.length;i+) if(方块!=blocki) blocki.设置图标(blocki.获取关闭时的图标(); if(计时器是否启动=false) time=0; 计时器.start(); 计时器是否启动=true; if(e.getSource()=计时器) time=time+1; 显示时间.setText("您的用时:"+time+"秒"); ShowRecord.javaimport java
39、.io.*;import java.util.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class ShowRecord extends JDialog implements ActionListener File gradeFile=null; JButton 确定,清除; JTextArea show=null; public ShowRecord(JFrame frame,File f) super(frame,"记忆测试排行榜:"+f.toString(); gra
40、deFile=f; show=new JTextArea(6,4); 确定=new JButton("显示排行榜"); 确定.addActionListener(this); 清除=new JButton("清空排行榜"); 清除.addActionListener(this); Container con=getContentPane(); con.add(new JScrollPane(show),BorderLayout.CENTER); JPanel p=new JPanel(); p.add(确定); p.add(清除); con.add(p,
41、BorderLayout.SOUTH); setBounds(100,100,320,185); setVisible(false); setModal(true); addWindowListener(new WindowAdapter() public void windwoClosing(WindowEvent e) setVisible(false); dispose(); ); public void actionPerformed(ActionEvent e) if(e.getSource()=确定) try show.setText(null); FileInputStream
42、in=new FileInputStream(gradeFile); ObjectInputStream object_in=new ObjectInputStream(in); LinkedList 成绩=(LinkedList)object_in.readObject(); object_in.close(); sort(成绩); for(int i=0;i<成绩.size();i+) People people=(People)成绩.get(i); show.append("n"+people.getName()+"成绩:"+people.getTime(); catch(Exception ee) if(e.getSource()=清除) try FileInputStream in=new FileInputStream(gradeFile); ObjectInputStream object_in=new ObjectInputStream(in); LinkedList 成绩=(LinkedList)object_in.readObject(); object_in.close(); 成绩.clear(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年浙教新版必修3生物下册月考试卷含答案
- 2025年统编版八年级历史下册月考试卷
- 2025年度乳制品安全检测与质量控制服务合同3篇
- 二零二五年度安徽电信合同履行全程监控合同
- 2025年度高科技产业园区土地租赁及配套设施建设合同3篇
- 2025年度留学奖学金申请代理服务合同4篇
- 二零二五版分手后情侣分手后共同债务清偿及财产分割合同4篇
- 二零二五版高端医疗器械采购订单及合同执行监管服务合同
- 二零二五年度办公楼楼梯口装饰装修工程合同样本4篇
- 2025年度东北大豆出口贸易公司与国外采购商购销合同4篇
- 收纳盒注塑模具设计(论文-任务书-开题报告-图纸)
- 博弈论全套课件
- CONSORT2010流程图(FlowDiagram)【模板】文档
- 脑电信号处理与特征提取
- 高中数学知识点全总结(电子版)
- GB/T 10322.7-2004铁矿石粒度分布的筛分测定
- 2023新译林版新教材高中英语必修一重点词组归纳总结
- 苏教版四年级数学下册第3单元第2课时“常见的数量关系”教案
- 基于协同过滤算法的电影推荐系统设计
- 消防应急预案流程图
- 人教统编版高中语文必修下册第六单元(单元总结)
评论
0/150
提交评论