基于JAVA实现的记忆测试小游戏

Sunshine

发布日期: 2019-05-19 18:32:54 浏览量: 1848
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 需求分析与总体设计

1.1 需求分析

记忆测试系统是通过回忆法测试记忆能力,测试手段分为初级、中级和高级三个级别,使用该系统以达到测试和锻炼记忆能力的目的。同时保存每个用户的不同等级的成绩。

在记忆测试系统中,编写6个Java源文件:MemoryGame.java、MemoryTestArea.java、Block.java、ShowRecordDialog.java、Record.java、People.java。

记忆测试系统的功能结构图如图1.1所示:

1.2 总体设计模块

1.2.1 MemoryGame.java(主类)

MemoryTestArea类是主类MemoryGame窗口中的一个JPanel容器,所创见的对象称为“测试区”,这个“测试区”别添加到MemoryGame窗口的中心。MemoryTestArea类主要有6种类型的成员:ArrayList<Block>、String、Record、Timer、File和Thread对象。

1.2.2 MemoryTestArea.java

MemoryTestArea类是主类MemoryGame窗口中的一个JPanel容器,所创见的对象称为“测试区”,这个“测试区”别添加到MemoryGame窗口的中心。MemoryTestArea类主要有6种类型的成员:ArrayList<Block>、String、Record、Timer、File和Thread对象。

1.2.3 Block.java

Block类是Jbubtton的子类,负责为MemoryTestArea类中的ArrayList<Block>数组表提供Block对象。

1.2.4 Record.java

Record类是javax.swing包中Jdialog对话框的子类,当用户成功单击出相应级别所要求的图表相同的方块后,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。

1.2.5 ShowRecordDialog.java

ShowRecordDialog类是java.swing包中JDialog对话框的子类,当用户单击“查看排行榜”时,ShowRecordDialog创建的对象显示用户的成绩。

1.2.6 People.java

People对象封装用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。

1.2.7 Backgroundmusic.java

Backgroundmusic类是给系统增加的背景音乐。并且循环播放。

1.2.8 图像文件

hzw0.jpg、hzw1.jpg、hzw2.jpg、hzw3.jpg、hzw4.jpg、hzw5.jpg、hzw6.jpg、hzw7.jpg、hyrz0.jpg、hyrz1.jpg、hyrz2.jpg、hyrz3.jpg、hyrz4.jpg、hyrz5.jpg、hyrz6.jpg、hyrz7.jpg。(系统所需的图像文件,存放于根目录下。)

2 详细设计

  • 操作界面设计:编译运行,选择级别,图标游戏开始,如果用户不清楚相同图标的位置时,点击提示

  • 界面方案:窗口大小:setBounds(100,100,400,360);setVisible(true)

  • 字体的大小和颜色:hinMessage.setFont(new Font(“宋体”,Font.BOLD,18))

  • 布局控制:又上到下,先是菜单:选择级别,查看排行榜,选择图标

  • 提示信息:hintMessage.setText(“您需要用鼠标单击出” +col+“个同样图标的方块” )

2.1 MemoryGame主类

MemoryGame创建窗口如图2.1所示

2.1.1 成员变量

  • bar是JMenuBar类创建的菜单条,可以向bar中添加菜单

  • menuGrade、menuResult、menuIcon是JMenu创建的三个菜单,这三个菜单的名称分别是“选择级别”、“查看排行榜”和“选择图标”

  • oneGradeItem、twoGradeItem、threeGradeIte是JMenuItem类创建的三个菜单项,被添加到menuGrade菜单中,这三个菜单项的名称分别是“初级”,“中级”和“高级”

  • oneGradeResult、twoGradeResult、threeGradeResult是JMenuItem类创建的三个菜单项,被添加到menuResult菜单中,这三个菜单项的名称分别是“初级排行榜”,“中级排行榜”和“高级排行榜”

  • hzwImageIcon、hyrzImageIcon是JMenuItem类创建的两个菜单项,被添加到menuIcon菜单中,这两个菜单项的名称分别是“海贼王图标”和“火影忍者图标”

  • ileOneGrade、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.1.2 方法

  • actionPerformed(ActionEvent)方法是MemoryGame类实现ActionListener接口中的方法,负责执行菜单项发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作

  • MemoryGame()是构造方法,负责完成窗口的初始化

  • main(String[])方法是软件运行的入口方法

2.2 MemoryTestArea类

MemoryTestArea创建的测试区如图2.2所示

2.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.2.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接口中的方法,启动hintThread线程后,该方法将执行,其主要操作是将测试区中的未显示图标的各个Block对象上的图标持续显示1200毫秒

2.3 Block类

Block类创建的按钮如图2.3所示

图标不可见方块 图标可见方块

2.3.1 成员变量

  • openStateIocn是方块上的图标

2.3.2 方法

  • Block对象调用setOpenStateIcon(ImageIcon)方法可以设置它上面的图标

  • Block对象调用openStateIcon()方法可以获得它上面的图标

2.4 Record类

Record类创建的保存成绩对话框,如图2.4所示

2.4.1 成员变量

  • time是用户的用时

  • yourName是用户用来输入名字的文本框

  • enter,cancel是按钮对象,用户单击enter按钮可保存成绩,单击cancel按钮可放弃保存成绩

  • gradeFile是级别文件

2.4.2 方法

  • 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)方法将被调用执行,其操作是关闭当前对话框

2.5 ShowRecordDialog类

ShowRecordDialog类创建的查看排行榜对话框,如图2.5所示

2.5.1 成员变量

  • gradeFile是对话框要读取的文件,该文件存储成绩

  • clear是注册了ActionEvent事件的按钮

  • showArea文本区显示对话框从gradeFile文件中读出的成绩

  • treeSet负责将成绩按高低排序

2.5.2 方法

  • ShowRecordDialog()是构造方法,负责创建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文件中的内容

2.6 People类

People类对象中的数据使用户的姓名和成绩,被显示在ShowRecordDialog对话框中shoeArea的文本区中,如图2.6所示

2.6.1 成员变量

  • name是用户的名字

  • time是用户的用时

2.6.2 方法

  • getTime()方法返回time

  • getName()方法返回name

  • compareTo(Object)是comparable接口中的方法,其操作是确定People对象的大小关系

2.7 Backgroundmusic类

Backgroundmusic类添加背景音乐。

2.7.1 成员变量

  • File:需要读取的文件,该文件储存音频文件

  • URI:统一资源标识符,是一个用于标识资源名称的字符串

  • URL:统一资源定位符,指出文件的位置

2.7.2 方法

  • AudioClip()是用于播放音频剪辑的简单抽象

  • aau.loop()循环播放背景音乐

  • e.printStackTrace()是深层次的输出异常调用的流程

3 系统测试

记忆测试系统主界面如图4.1所示:

记忆测试系统选择等级如图4.2所示:

记忆测试系统选择图标如图4.3所示:

记忆测试系统初级难度海贼王图标背景测试成功效果图如图4.4所示:

记忆测试系统高级难度火影忍者图标背景测试成功效果图如图4.5所示:

记忆测试系统查看排行榜测试效果图如4.6所示

总结

这次课程设计选择做了一个有意思的小系统—记忆测试系统,也算一个小游戏吧。可用于娱乐性的检验个人记忆力。按设计要求,系统的基本功能都已实现,玩家用户进入界面可以自行选择等级测试,本系统提供了三个等级以供选择,分别为初级、中级和高级。还可以根据玩家用户的喜好选择图标类型,本人因为喜爱动漫,就增加了海贼王和火影忍者两种图标。测试完成后会记录玩家用户的用时成绩,并排好序。因为本系统的记忆测试还是有些难度的,所以做了提示功能,玩家可以牺牲游戏时间得到提示。

此系统值得一提的新增项,就是加入了背景音乐,玩家用户一打开运行此程序,背景音乐就开始播放,并且是循环播放,给以玩家更好的体验。

本程序还有一些地方做的不够细致,考虑的不够完善。发现了自身的一些知识储备不足,调试程序的时候遇到各种各样的错误提示,这里有同学的大力帮助,还有自己网上查询一些案例分析,慢慢的把程序调试出来了。在最后的阶段遇到的一个图片如何放入运行的窗体的问题,这是最后一步,也是最关键的一步,不知道将图片放入哪个指定的文件夹,后来经过同一组的同学们一起网上查找,自己测试,后来发现原来只要把图像文件放入根目录就行。当时就有种豁然开朗的感觉,或许这就是程序员开发、调试程序的乐趣吧。

这个记忆测试系统还有许多改进的地方,还有更多的设想。比如:在玩家选中正确图标时、选错图标时、成功完成一次测试时播放不同类型的音效,以此提高玩家的感官体验。在用户玩家选择不同等级测试时,更换不同的背景音乐。在玩机用户完成测试后也播放不一样的音乐。还有这个系统的操作界面改进,初始界面过于单调,略显古板,本想通过更改界面颜色让系统看上去更美观一些。

本次课程设计收获了很多,做一个系统,需要静心、有耐心、要细心。切实结合用户的使用需求和现实意义去完成设计。不管什么系统,只用运用到实际应用中,才具有现实意义。

这是一次很不错的开发系统经验。

上传的附件 cloud_download 基于JAVA实现的记忆测试小游戏.7z ( 6.00mb, 68次下载 )
error_outline 下载需要13点积分

keyboard_arrow_left上一篇 : 基于C++的菜鸟驿站 基于MySql和JSP的题库管理系统 : 下一篇keyboard_arrow_right



Sunshine
2019-05-19 18:32:40
基于JAVA实现的记忆测试小游戏
2020-06-21 12:57:16
哥,这个程序运行为什么没有图片啊
雪灼
2020-12-22 09:01:13
应该需要你自己加入图片吧

发送私信

这个世界上我只相信两个人,一个是我,另一个不是你

14
文章数
15
评论数
最近文章
eject