java记忆测试系统_第1页
java记忆测试系统_第2页
java记忆测试系统_第3页
java记忆测试系统_第4页
java记忆测试系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

工学院Java语言与面向对象课程设计报告(2014年秋学期)记忆测试系统学院:专业班级:**:**:指导教师:永平2015年1月24日目录题目简介…………12.设计的容、要求和目标…………………23.总体设计…………44.详细设计…………75.运行调试…………76.总结………………7附录………21一、题目简介记忆测试系统通过回忆法测试记忆能力测试手段分为初级中级高级三个级别。二、设计的容、要求和目标我设计的记忆测试系统除了要编写的6个java文件所给的类外还需在添加一些功能如添加图标改良测试条件添加音乐功能使程序有翻开一样的图标是播放一段音乐同时播放另一段音乐等。列出菜单有选择级别选择图标成绩记忆榜在菜单下有M*N个图标随机分布点击一个图标被保存下来点击下一个图标时与上一个图标比图标一样而方块不同则success加1反之则不变当点击六个一样的图标时记录所需的时间保存在成绩记忆排行榜中点击成绩排行榜可登陆成绩且会给成绩排行由高到低。设计要求如下:1.单击“选择级别〞菜单可以选择初级中级高级。2.单击“查看排行榜〞菜单可以查看记忆榜通过记忆榜存储每个级别的成绩。3.选择级别后将出项相应级别的测试区。测试区由M*N个方块组成程序通过设置M和N的值来确定相应的测试级别例如对于初级级别M=5N=6.每个方块上都有一个图标但该图标默认不可见。用鼠标当即测试区中的任何一个方块则计时器开场启动同时该方块上的图标将显示出来。4.M*N个方块组成的测试区中有M个图标每个图标重复出现N次并且随机分布在测试区中的M*N个方块上。用户必须用鼠标连续单击出N个图标一样的方块也就是说如果用户已经用鼠标连续单击出P个图标一样的方块当再单击另一个方块时如果该方块的图标和上一个的一样则该方块的图标和前P次单击出的方块的图标仍然可见否则前P次单击出的方块的图标全都变得不可见只有当前单击的方块的图标可见。5.测试区能显示用户的用时并根据级别的不同提示用户必须用鼠标连续单击出多少个图标一样的方块。6.测试区有提示图标所在位置的功能。用户单击测试区中的“提示〞按钮后测试区将持续1.2秒为用户显示全部方块上的图标。用户每单击一次“提示〞按钮用户的用时将增加10秒。7.连续单击出级别所要求的假设干个图标一样的方块后将弹出保存成绩的对话框用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。8.单击“选择图标〞菜单可重新选择方块的图标样式即可以重新选择M个图标。设计目标可以选择级别图标当用户游戏完毕后可以选择是否保存成绩连续点击六个一样的图标可见连续一样的图标播放一段音乐同播放另一段音乐。当用户不清楚一样图标的位置时可以按“提示〞按钮将会对用户进展提示信息。设计目标:可以选择级别图标当用户游戏完毕后可以选择是否保存成绩连续点击六个一样的图标可见连续一样的图标播放一段音乐不同播放另一段音乐。当用户不清楚一样图标的位置时可以按“提示〞按将会对用户进展提示信息。三、总体设计测试系统中可以编写6个java源文件MenoryGame.java,MenoryTestArea.java,Block,java,People.java,Record.java和ShowRecordDialog.java。记忆测试系统除了上述7个Java源文件产生的类外还需要Java系统提供的一些重要的类。记忆测试系统所用到的一些重要的类以及之间的组合关系如图1所示。MemoryGameMemoryGameStringFileMemoryTestAreaShowRecordDialogFlieTreeSet<people>ArrayList<Blosck>StringRecordTimerFileThread图1以下是六个源文件的总体设计1.MenoryGame类责创立记忆测试系统的主窗口该类含有main方法记忆测试系统从该类开场执行。MenoryGame类有四种重要类型的对象分别是String,Flie,MenoryTestArea和ShowRecordDialog对象。MenoryGame类创立的窗口对象以及其中的主要成员对象。MenoryGame类的主要成员的作用将在后面的详细设计中阐述。2.MenoryTestArea.javaMenoryTestArea类是主类MenoryGame窗口中的一个Jpanel容器所创立的对象称为测试区这个测试区被添加到MenoryGame窗口的中心。MenoryTestArea类主要有六个种类型的成员ArrayList<Block>,String,Record,Timer,File和Thread对象MenoryTestArea类的主要成员的作用将在后面的详细的设计中阐述。3.Block.javaBlock类是utton的子类负责为MenoryTestArea类中ArrayList<Block>数组表提供Block对象。4.Record.javaRecord类是java*.swing包中Jdialog对话框的子类当用户成功单击出相应的级别所要求的图标一样的方块后Record创立的对象负责保存用户的名字和成绩到相应的级别文件中。5.ShowRecordDialog.javaShowRecordDialog类java*.swing包中Jdialog对话框的子类当用户单击“查看排行榜〞时ShowRecordDialog创立负责显示用户的成绩。6.People.javaPeople对象封装用户的名字和成绩以便ShowRecordDialog对象可以按成绩的上下排序用户。四详细设计4.1操作界面设计如图2所示:图24.2类成员变量及方法设计:〔一〕MemoryGame类成员变量:Bar是JmenuBar类创立的菜单条可以向bar中添加菜单。menuGradeBar和menuIcon是Jmenu类创立的三个菜单这三个菜单的名称分别是“选择级“查看排行榜〞“选择图标〞。oneGradeItemtwoGradeItem和threeGradeItem是JmenuItem类创立的三个菜单项被添加到menuGrade菜单中这三个菜单项的名称分别是“初级〞“中级〞“高级〞。oneGradeResulttwoGradeResult和threeGradeResult是JmenuItem类创立的三个菜单项被添加到menuResult菜单中。这三个菜单项的名称分别是“初级排行榜〞“中级排行榜〞“高级排行榜〞。carImageIcon和animalImageIcon是JmenuItem类创立的两个菜单项被添加到menuIcon菜单中。这两个菜单项的名称分别是“汽车图标〞“动物图标〞。fileOneGradefileTwoGradefilethreeGrade和gradeFile是File类创立的四个文件对象。fileOneGradeileTwoGrade和filethreeGrade三个文件对象所引用的文件分别是“初级排行榜.t*t〞,“中级排行榜.t*t〞“高级排行榜.t*t〞分别用来写入三个级别的成绩。gradeFlie可以是fileOneGradefileTwoGrade和filethreeGrade中的*一个。imageName是String类型的数组每个单元是一个图像文件的名字。menoryArea是测试区对象由MenoryArea类负责创立。showDialog是负责显示成绩的对话框由ShowRecordDialog类负责创立m和n是int型数据其值可以确定相应级别中测试区中方块的数量例如对于中级水平m=6,n=7,测试区一共有42方块。方法:actionPerformed〔ActionEvent〕方法是MenoryGame类实现的ActionListener接口中的方法负责执行菜单项发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件导致actionPerformed〔ActionEvent〕方法执行相应的操作。MenoryGame〔〕是构造方法负责完成窗口的初始化。main(String[])方法是软件运行的入口方法。〔二〕MemoryTestArea类成员变量:row和col的值确定测试区中方块的数量。MemoryTestArea类创立的对象memoryArea是MemoryGame中的成员memoryArea对象通过调用initBlock(int,int,String[],File)方法将MemoryGame类中m和n的值传递给row和col。usedTime是用户的用时单位是秒。success的值是用户找到的具有同样的图标的方块的个数gradeFiel是级别文件memoryArea对象通过调用initBlock(int,int,String[],Fil)方法将MemoryGame类中的gradeFile的引用传递给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指定的级别文件中。方法:MemoryTestArea是构造方法创立memoryArea对象时需使用该构造方法。initBlock〔int,int,String[]File〕方法。memoryArea对象调用该方法将参数的值传递给row,colimageFileName和gradeFile并依据这些值设置allBlockListList数组表的大小然后创立allBlockList的单元中的Block对象并设置Block对象上的图标。setImageName〔String[]〕方法。memoryArea对象调用该方法可以将MemoryGame中的存放图像文件名字的imageName数组的引用传递给imageFileName。当用户单击MemoryGame主类窗口的carImageIcon和animalImageIcon菜单项时memoryArea对象将调用该方法把存放图像文件名字的imageName数组的引用传递给imageFileName。ionPerformed〔ActionEvent〕方法。该方法是MemoryARea类实现的ActionListener接口中的方法。memoryArea中的每个Block对象都注册了ActionEvent事件监听器当用户单击memoryArea中的*个Block对象时actionPerformed〔ActionEVent〕方法将被调用执行所执行的主要操作是如果该Block看对象未显示图标并且该Block对象设置的图标和openIconList的中存放的图标一样就将该图标添加到链表opemIconList中同时将该Block对象上的图标显示出来并将success的值增1如果该Block对象未显示图标并且该Block对象设置的图标和openIconList的中存放的图标不一样就将openIconList清空然后再将该图标添加到链表opemIconList中同时将该Block对象上的图标显示出来并将success的值设置成1.当用户单击hintButton按钮时actionPerfomed〔ActionEVent〕方法将被调用执行执行的主要操作是启动hintThread线程。〔三〕Blcok类成员变量:openStateIcon是方块上的图标方法:Block对象调用setOpenStateIcon〔ImageIcon〕方法可以设置它上面的图标。Block对象调用getOpenStateIcon〔〕方法可以获得它上面的图标〔四〕ShowRecordDialog类ShowRecorDialog效果图如图3所示:图3成员变量:gradeFile是对话框要读取的文件该文件存储成绩。clear是注册了ActionEVent事件的按钮。showArea文本区显示对话框从gradeFile文件中读出的成绩。treeSet负责将成绩按上下排序。方法:ShowRecordDialog()是构造方法负责创立showDialog对象setGradeFile(File)方法。ShowRecordDialog类创立的ShowRecordDialog对话框是主类MemoryGame窗口中的一个成员。当用户选择窗口上的“查看排行榜〞菜单中的菜单项是ShowRecordDialog对话框调用setGradeFile(File)方法将相应的级别文件传递给gradeFile。showRecord()方法。ShowRecordDialog对话框调用该方法读取gradeFile文件中的成绩为了将成绩按上下顺序显示在showArea()文本区中showRecord方法根据读取的名字和该名字的对应成绩创立一个People对象存放在treeSet数集中。actionPerformed(ActionEVent)是ZctionListener接口中的方clear注册了ActionEVent事件当用户单击clear按钮时actionPerform(ActionEvent)方法被调用执行所执行的操作是去除gradeFile文件中的容。(五)People类成员变量:name是用户的名字time是用户的用时方法:getTime()方法返回timegetName方法返回namepareTo(Object)是parable接口中的方法,其操作是确定People对象的大小关系(六)Record类成员变量:Time是用户的用时。yourName是用户用来输入名字的文本框。enter和cancel是按钮对象用户单击center按钮可以保存成绩单击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)方法别提调用执行其操作时将用户在文本框youName中输入的名字以及time的只保存到gradeFile文件中然后关闭当前对话框当用户单击cancer按钮时,actionPerformed(ActionEvent)方法别调用执行,其操作及时关闭当前对话框。五、运行调试主界面如图4:图4测试去效果图如图5:图5六、总结通过两个周对Java程序设计的学习,我们对Java语言有了更进一步的了解,知道了如何运用以前学过的知识来完本钱次课程设计。我们小组选择了"记忆测试系统"的设计,主要实现记忆力的测试,主要分为初级记忆力的测试、中级记忆力的测试和高级记忆力的测试等功能。选择这个题目时感觉有点困难好似无从下手根本上没有一个具体的设计思路。因此我们先对小组成员进展分工,明确好各自的主要任务,然后分头查阅资料,上网搜索相关线索每个人的工作做好之后再由组长用一个主函数连接起来进展整个程序的调试运行最后我们也顺利的完成了"记忆测试系统"的设计且得到了同学们的认可和喜爱。对于整个程序的流程构架、主界面的布局、数据的保存和去除等开场时我们并没有十足的把握,但是因为之前我们在图书馆查阅了很多的资料也上网搜索了很多这方面的解决方案方法。在课程设计的第一个星期里我们就顺利地把代码组织并编写好了。在连接所有的类的时候遇到了一点问题不过在教师的指导,我们都把它解决了。在课程设计的前一个周,我们就把整个程序顺利地运行出来了,心里感到无比的兴奋与冲动。在这个过程中我们运用了我们平时所学的知识查阅了大量的资料。在其中我们得到了意志的锻炼在反复的操作中我们不断成长在收获成功的同时我们更得到了Java上机编程的深切体会和丰厚的编程经历。接下来,经过小组的认真思考、分析和讨论在教师的指导下我们对系统功能的缺乏之处给予了最后的完善。在辩论的过程中在教师的提问下,我们分别把自己的设计思想讲解给教师听,同时认真的听取教师的意见和建议,很多问题都得到了与教师的认可和赞同。时间是短暂的,但收获是丰厚的。经过这样两周的课程设计我们对Java程序设计的知识又重新稳固了,特别对程序的调试运行有了更深刻的体会。这次的课程设计给了我们一个把学习到的知识付诸于实践的时机只有把理论与实际相结合才能做出让人耳目一新的Java应用程序来。附录:程序清单MenoryGameimportjava*.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.LinkedList;publicclassMemoryGamee*tendsJFrameimplementsActionListener{JMenuBarbar;//创立一个菜单条barJMenumenuGrade,menuResult,menuIcon;//创立3个菜单项选择择级别、查看排行榜、选择图标JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;//添加到menuGrade中,初级、中级高级JMenuItemoneGradeResult,twoGradeResult,threeGradeResult;JMenuItemcarImageIcon,animalImageIcon,huaImageIcon;//创立菜单项FilefileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile;//创立文件其中gradeFile可以是前三个中的任意一个StringimageName[];//每个单元是一个图像文件的名字MemoryTestAreamemoryArea;ShowRecordDialogshowDiolag=null;//负责显示成绩的对话框intm=5,n=6;//m,n确定相应级别中测试区中方块的数量默认等级为初级finalintimageNumber=7;//构造方法MemoryGame(){fileOneGrade=newFile("初入江湖记忆排行榜.t*t");fileTwoGrade=newFile("人在江湖记忆排行榜.t*t");fileThreeGrade=newFile("高手如云记忆排行榜.t*t");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("种类二");huaImageIcon=newJMenuItem("花图标");animalImageIcon.addActionListener(this);//添加监视器carImageIcon.addActionListener(this);huaImageIcon.addActionListener(this);menuIcon.add(carImageIcon);menuIcon.add(animalImageIcon);menuIcon.add(huaImageIcon);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.e*ists()){//是否存在**文件,不存在创立此文件try{fileOneGrade.createNewFile();}catch(IOE*ceptione*p){}}if(!fileTwoGrade.e*ists()){try{fileTwoGrade.createNewFile();}catch(IOE*ceptione*p){}}if(!fileThreeGrade.e*ists()){try{fileThreeGrade.createNewFile();}catch(IOE*ceptione*p){}}setBounds(100,100,400,360);this.setSize(newDimension(700,400));setVisible(true);memoryArea=newMemoryTestArea();imageName=newString[imageNumber];//设置默认情况下为初级汽车图标for(inti=0;i<imageName.length;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.E*IT_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.length;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.length;i++){imageName[i]=newString("ani"+i+".jpg");}memoryArea.setImageName(imageName);memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==huaImageIcon){for(inti=0;i<imageName.length;i++){imageName[i]=newString("hua"+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();//构造方法,负责完成窗口的初始化}}MenoryTestAreaimportjava*.swing.*;importjava.awt.event.*;importjava.awt.*;importjava.util.*;importjava.io.*;importjava.applet.*;import.*;publicclassMemoryTestAreae*tendsJPanelimplementsActionListener,Runnable{//实现ActionListener和,Runnable接口,所创立的对象introw,col;FilegradeFile;ArrayList<Block>allBlockList;//数组表allBlockList每个单元存放一个Block对象StringimageFileName[];//字符串数组**中每个单元是一幅图像文件的名字LinkedList<ImageIcon>openIconList;LinkedList<Block>openBlockList;//java.util的类LinkedList<E>列表主要方法为//add(Ee)将指定元素添加到此列表的结尾。intsuccess=0;//用户找到的具有同样的方块的个数ThreadhintThead;//用来提示测试区中的Block对象uttonhintButton,pauze,kk,restart;//声明各个按钮intusedTime=0;JTe*tFieldshowUsedTime,hintMessage;java*.swing.Timertimer;Recordrecord;JPanelcenter,south,north;FilemusicFile;URIuri;URLurl;AudioClipclip;Booleantimerisstart=false;//定义一个布尔值来判断计时是否开场MemoryTestArea(){setLayout(newBorderLayout());//布局设置allBlockList=newArrayList<Block>();openIconList=newLinkedList<ImageIcon>();openBlockList=newLinkedList<Block>();hintThead=newThread(this);hintMessage=newJTe*tField();hintMessage.setHorizontalAlignment(JTe*tField.CENTER);//设置文本对齐方式hintMessage.setEditable(false);//不可编辑hintMessage.setFont(newFont("宋体",Font.BOLD,18));//字体设置//设置三个容器center=newJPanel();south=newJPanel();north=newJPanel();hintButton=newutton("提示");pauze=newutton("暂停游戏");kk=newutton("继续游戏");restart=newutton("重新开场");hintButton.addActionListener(this);kk.addActionListener(this);//为继续游戏按钮添加事件监听pauze.addActionListener(this);//为暂停游戏按钮添加事件监听restart.addActionListener(this);showUsedTime=newJTe*tField(8);showUsedTime.setEditable(false);showUsedTime.setHorizontalAlignment(JTe*tField.CENTER);south.add(newJLabel("用时:"));//在容器中添加标签south.add(showUsedTime);south.add(newJLabel("提示图标位置(导致次数增加):"));south.add(hintButton);north.add(pauze);north.add(kk);north.add(restart);north.add(hintMessage);add(south,BorderLayout.SOUTH);add(north,BorderLayout.NORTH);timer=newjava*.swing.Timer(1000,this);record=newRecord();//创立record文件,当用户成功完成时弹出对话框,写入record//保存用户游戏的游戏记录}publicvoidinitBlock(intm,intn,Stringname[],Filef){row=m;col=n;gradeFile=f;center.removeAll();imageFileName=name;ImageIconicon[]=newImageIcon[imageFileName.length];for(inti=0;i<icon.length;i++){icon[i]=newImageIcon(imageFileName[i]);}if(allBlockList.isEmpty()){for(inti=0;i<row*col;i++){allBlockList.add(newBlock());}}else{allBlockList.clear();for(inti=0;i<row*col;i++){allBlockList.add(newBlock());}}for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).addActionListener(this);////get()方法:get(intinde*)返回此列表中指定位置处的元素。allBlockList.get(i).setOpenStateIcon(icon[i%row]);/*调用Block的方法加载图片:voidsetOpenStateIcon(ImageIconicon){openStateIcon=icon;}*/}Collections.shuffle(allBlockList);//随机排列allBlockList中的节点center.setLayout(newGridLayout(row,col));for(inti=0;i<allBlockList.size();i++){center.add(allBlockList.get(i));}add(center,BorderLayout.CENTER);if(timer.isRunning()){timer.stop();}hintMessage.setTe*t("您需要用鼠标单击出"+col+"个同样图标的方块");usedTime=0;showUsedTime.setTe*t(null);validate();}publicvoidsetImageName(Stringname[]){imageFileName=name;}publicvoidactionPerformed(ActionEvente){ImageIconicon[]=newImageIcon[imageFileName.length];if(e.getSource()==pauze){timer.stop();for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(false);}}if(e.getSource()==kk){timer.start();timerisstart=true;for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(true);}}if(e.getSource()==restart){//设置重新开场的按钮。for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setOpenStateIcon(icon[i%row]);Collections.shuffle(allBlockList);//使用默认随机源对指定列表进展置换}usedTime=0;timer.stop();hintMessage.setTe*t("请点击等级选择开场游戏!");timerisstart=false;for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(true);}}if(e.getSource()instanceofBlock)//它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据////判断是否为Block对象;{if(!timer.isRunning())timer.start();Blockblock=(Block)e.getSource();ImageIconopenStateIcon=block.getOpenStateIcon();block.setIcon(openStateIcon);if(openIconList.size()==0){openIconList.add(openStateIcon);openBlockList.add(block);success=1;}else{ImageIcontemp=openIconList.getLast();if(temp==openStateIcon&&!(openBlockList.contains(block))){/*判断表示"翻开的图片和第一个翻开的图片一样,而且这个翻开的图片不是已经翻开的图片这也就是要找出的"用户成功翻开一样图标方块"这个行为的判断;*/success=success+1;/////////////////////////成功翻开图片时播放音乐///////////////////////////////try{musicFile=newFile("hello1.wav");uri=musicFile.toURI();url=uri.toURL();clip=Applet.newAudioClip(url);}catch(E*ceptionee){}clip.play();////////////////////////成功翻开图片时播放音乐///////////////////////////////openIconList.add(openStateIcon);openBlockList.add(block);if(success==col){for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(false);}for(intj=0;j<openBlockList.size();j++){Blockb=openBlockList.get(j);b.setDisabledIcon(b.getOpenStateIcon());//设置对象b在不能激活状态下的图标}timer.stop();record.setTime(usedTime);record.setGradeFile(gradeFile);record.setVisible(true);}}elseif((temp!=openStateIcon)&&(!(openBlockList.contains(block)))){/*判断表示"翻开的图片和第一个翻开的图片不同,而且这个翻开的图片不是已经翻开的图片这也就是要找出的"用户翻开不一样图标方块后"这个行为的判断。*/openIconList.clear();openBlockList.clear();openIconList.add(openStateIcon);openBlockList.add(block);success=1;usedTime=usedTime+10;////////////////////////失败翻开图片时播放音乐////////////////////////////try{musicFile=newFile("hello2.wav");uri=musicFile.toURI();url=uri.toURL();clip=Applet.newAudioClip(url);}catch(E*ceptionee){}clip.play();////////////////////////失败翻开图片时播放音乐////////////////////////////for(inti=0;i<allBlockList.size();i++){if(allBlockList.get(i)!=block)allBlockList.get(i).setIcon(null);}}}}if(e.getSource()==hintButton){if(!hintThead.isAlive())hintThead=newThread(this);for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).removeActionListener(this);usedTime=usedTime+10;try{hintThead.start();}catch(IllegalThreadStateE*ceptione*){}}if(e.getSource()==timer){usedTime++;showUsedTime.setTe*t("您的用时:"+usedTime+"秒");}}publicvoidrun(){//实现Runnable接口的方法for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).setIcon(allBlockList.get(i).getOpenStateIcon());try{Thread.sleep(1200);}catch(InterruptedE*ceptione*p){}for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).addActionListener(this);for(inti=0;i<allBlockList.size();i++)if(!openBlockList.contains(allBlockList.get(i)))allBlockList.get(i).setIcon(null);}}Blockimportjava*.swing.*;importjava.awt.event.*;publicclassBlocke*tendsutton{ImageIconopenStateIcon;publicImageIcongetOpenStateIcon(){returnopenStateIcon;}publicvoidsetOpenStateIcon(ImageIconicon){openStateIcon=icon;}}Recordimportjava.io.*;importjava.util.*;importjava*.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassRecorde*tendsJDialogimplementsActionListener{inttime=0;JTe*tFieldyourName;JLabellabel;uttonenter,cancel;FilegradeFile=null;publicRecord(){setBounds(100,100,330,160);setResizable(false);setModal(true);setVisible(false);//隐藏对话框enter=newutton("确定");cancel=newutton("取消");yourName=newJTe*tField(8);yourName.setTe*t("匿名");enter.addActionListener(this);cancel.addActionListener(this);setLayout(newGridLayout(2,1));label=newJLabel();add(label);JPanelp=newJPanel();p.add(yourName);p.add(enter);p.add(cancel);add(p);}publicvoidsetGradeFile(Filef){gradeFile=f;setTitle("保存成绩到"+gradeFile.getName());label.setTe*t("保存成绩到"+gradeFile.getName());validate();}publicvoidsetTime(inttime){this.time=time;}publicvoidactionPerformed(ActionEvente){if(e.getSource()==enter){LinkedList<People>list=newLinkedList<People>();try{RandomAccessFileout=newRandomAccessFile(gradeFile,"rw");out.seek(out.length());//定位读写位置out.writeUTF(yourName.getTe*t());//写入你的名字out.writeInt(time);//记录时间out.close();}catch(E*ceptionevent){}setVisible(false);}if(e.getSource()==cancel){setVisible(false);}}}ShowRecordDialogimportjava.io.*;importjava.util.*;importjava*.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassShowRecordDialoge*tendsJDialogimplements

温馨提示

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

评论

0/150

提交评论