首页 Java课程设计动物换位(有背景音乐,调色板,英雄排行榜)

Java课程设计动物换位(有背景音乐,调色板,英雄排行榜)

举报
开通vip

Java课程设计动物换位(有背景音乐,调色板,英雄排行榜)Java课程设计动物换位(有背景音乐,调色板,英雄排行榜) 课程设计报告 专业:电子信息工程 班级:11030301 学号:1103030123 姓名:丁亚东 指导老师:王红 周越 (课程设计时间:2012年07月03-2012年07月14日) 1 成 绩 评 定 表 学生姓名 丁亚东 班级学号 1103030123 专 业 电子信息工课程设计题目 动物换位 程 评 语 组长签字: 成绩 2012 年 月 日 日期 2 课程设计任务书 学 院 信息学院 专 业 学生姓名 班级学...

Java课程设计动物换位(有背景音乐,调色板,英雄排行榜)
Java课程设计动物换位(有背景音乐,调色板,英雄排行榜) 课程设计报告 专业:电子信息工程 班级:11030301 学号:1103030123 姓名:丁亚东 指导老师:王红 周越 (课程设计时间:2012年07月03-2012年07月14日) 1 成 绩 评 定 表 学生姓名 丁亚东 班级学号 1103030123 专 业 电子信息工课程设计题目 动物换位 程 评 语 组长签字: 成绩 2012 年 月 日 日期 2 课程设计任务 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 学 院 信息学院 专 业 学生姓名 班级学号 课程设计题目 基于Java的动物换位游戏软件设计 实践教学要求与任务: 采用java技术设计动物换位游戏软件,设计要求如下: (1) 程序分为3个级别,用户可以通过界面上提供的菜单来选择“初级”、“中级” 和“高级”这三个级别。对于“初级”级别,在水平排列的7块石头上的左右 各有3个类型相同的动物,中间的石头上没有动物;对于“中级”级别,在水 平排列的9块石头上的左右各有4个类型相同的动物,中间的石头上没有动物; 对于“高级”级别,在水平排列的11块石头上的左右各有5个类型相同的动物, 中间的石头上没有动物。 (2) 用鼠标单击一个动物,如果该动物的前方的石头上没有动物,该动物就跳跃到 该石头上,如果该动物前方的石头上有其他的动物,但隔位上的石头没有动物, 该动物就越过自己前面的动物跳跃到石头上,其他情形时,该动物不跳跃(跳 跃时不能超过2块石头)。 (3) 左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。 (4) 用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。 (5) 可以随时单击界面上提供的按钮,重新开始当前的级别。 (6) 用户通过菜单选项,可以选择左、右动物的图像。 工作计划 幼儿园家访工作计划关于小学学校工作计划班级工作计划中职财务部门工作计划下载关于学校后勤工作计划 与进度安排: 第18周:布置课程设计任务,查阅资料,分组设计,程序调试。 第19周:程序调试,编写课程设计报告,验收,答辩。 指导教师: 专业负责人: 学院教学副院长: 2012年 月 日 2012年 月 日 2012年 月 日 3 Java课程设计 目录 1(设计目的 .................................................................................................错误~未定义书签。 2(总体设计 .................................................................................................错误~未定义书签。 2.1ChangeAnimalWindow. java ( 主类) .......................................................错误~未定义书签。 图2.1.1类之间组合关系........................................................................错误~未定义书签。 2.2 Animal.java........................................................................................错误~未定义书签。 2.3 Point.java...........................................................................................错误~未定义书签。 2.4 Stone.java..........................................................................................错误~未定义书签。 2.5 HandleMouse.java............................................................................错误~未定义书签。 2.6 AutoMoveAnimal.java......................................................................错误~未定义书签。 2.7 Sound.java.........................................................................................错误~未定义书签。 2.8 ShowRecord.java ..................................................................................错误~未定义书签。 2.9 record.java ...........................................................................................错误~未定义书签。 3程序流程及主要代码..................................................................................错误~未定义书签。 3.1ChangeAnimalWindow类 ......................................................................错误~未定义书签。 3.1.1 效果图 .........................................................................................错误~未定义书签。 3.1.2 U M L 图 ...................................................................................错误~未定义书签。 3.1.3 成 员 变 量 ................................................................错误~未定义书签。 3.1.4 方 法 .......................................................................................错误~未定义书签。 3.1.5 源代码 ..........................................................................................错误~未定义书签。 3.2 Anima l .................................................................................................错误~未定义书签。 3.2.1效果图 ...........................................................................................错误~未定义书签。 3.2.2 UML 图 .........................................................................................错误~未定义书签。 3.2.3成员变量 .......................................................................................错误~未定义书签。 3.2.4方法 ..............................................................................................错误~未定义书签。 3.2.5源代码 ...........................................................................................错误~未定义书签。 3.3 Point类................................................................................................错误~未定义书签。 3.3.1效果图 ...........................................................................................错误~未定义书签。 4 3.3.2 UM L 示图 .....................................................................................错误~未定义书签。 3.3.3成员变量 .......................................................................................错误~未定义书签。 3.3.4方法 ..............................................................................................错误~未定义书签。 3.3.5源代码 ...........................................................................................错误~未定义书签。 3.4 Stone类 ...............................................................................................错误~未定义书签。 3.4.1效果图 .....................................................................................错误~未定义书签。 3.4.2 UML 图 .........................................................................................错误~未定义书签。 3.4.3成员变量 .................................................................................错误~未定义书签。 3.4.4 方法 .........................................................................................错误~未定义书签。 3.4.5 源代码 ....................................................................................错误~未定义书签。 3.5 HandleMouse类 ..........................................................................错误~未定义书签。 3.5.1 效果图 ....................................................................................错误~未定义书签。 3.5.2 UML 图 ..................................................................................错误~未定义书签。 ...............................................................................错误~未定义书签。 3.5.3成员变量 3.5(4 方法 .................................................................................错误~未定义书签。 3.5.5 源代码...................................................................................错误~未定义书签。 3.6 AutoMoveAnimal类 ................................................................错误~未定义书签。 3.6.1 效果图...................................................................................错误~未定义书签。 3.6.2 UM L 图......................................................................................错误~未定义书签。 3.6.3成员变量 .......................................................................................错误~未定义书签。 3.6.4方法 ..............................................................................................错误~未定义书签。 3.6.5 源代码(AutoMoveAnimal.java) ......................................................错误~未定义书签。 3.7sound类 ...............................................................................................错误~未定义书签。 3.7.1 效果图 ..........................................................................................错误~未定义书签。 3.7.2 UM L 图......................................................................................错误~未定义书签。 3.7.3 成员变量 ......................................................................................错误~未定义书签。 3.7.5 源代码 ..........................................................................................错误~未定义书签。 3.8 ShowRecord类 .....................................................................................错误~未定义书签。 3.8.1 效果图 ..........................................................................................错误~未定义书签。 3.8.2源代码 ...........................................................................................错误~未定义书签。 5 3.9 Record类 .............................................................................................错误~未定义书签。 3.9.1效果图 ...........................................................................................错误~未定义书签。 3.9.2源代码 ..................................................................................错误~未定义书签。 4(代码调试 .................................................................................................错误~未定义书签。 5.软件发布 ....................................................................................................错误~未定义书签。 5.1用文本编辑器 .................................................................................错误~未定义书签。 5.2 生成 JA R 文件. ..................................................................错误~未定义书签。 6.课程设计题目.............................................................................................错误~未定义书签。 7.我的成果 ....................................................................................................错误~未定义书签。 7.1 调色板 ................................................................................................错误~未定义书签。 ............................................................................................错误~未定义书签。7.2 成绩排名 图7.3 颁发 .............................................................................................错误~未定义书签。 图7.4 破记录..........................................................................................错误~未定义书签。 图 7.4.1 记录再现.................................................................................错误~未定义书签。 8.参考文献 ....................................................................................................错误~未定义书签。 9(一句心里话..............................................................................................错误~未定义书签。 1(设计目的 设计 GUI 界面的动物换位游戏,游戏的结果是让左右两组动物交换位置。 具体要求 如下: (1)程序分为 3 个级别,用户可以通过界而上提供的菜单来选择"初级"、"中级"和"级"这 3 个级别。对于"初级"级别,在水平排列的 7 块石头上的左右各有 3 个类型相高 9 块石头上的左右同的动物中,间的石头上没有动物;对于"中级"级别,在水平排列的 4 个类型相同的动物,中间的石头上没有动物;对于"高级"级别,在水平排列的 11 各有 块石头上的左右各拥有 5 个类型相同的动物,中间的石头上没有动物。 (2)用鼠标单击一个动物,如果该动物前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有其他的动物,但相隔的位置上的石头没有动物,该动物就越过自己前面的动物跳跃到石头上,其他情形时,该动物不跳跃或跳跃时不能越过 2 块 石头。 (3)左方的动物只能向右方跳跃,右方的动物只能向左方跳跃。 6 (4)用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。 (5)可以随时单击界面上提供的按钮,重新开始当前的级别。 JButton (6)用户通过菜单选项,可以选择左、右方动物的图像。 File 2(总体设计 100 在设计动物换位时,需要编写 9个 Java 源文件: ChangeAnimal Window. java 、80ShowRecord Point.java 、Animal.java、Stone.java 、HandleMouse.java ,sound.java, 60东部 西部showRecord.java,Record.java和 AutoMoveAnimal.java。动物换位除了需要编写的上述 9 40Record 北部 个 Java 源文件所给出的类外,还需要20 Java 系统提供的一些重要的类,如 JMenultem, 0File 和 ]Button 类。动物换位所用到的一些重要的类以及之间的组合关系如图所示 第一季度第三季度 JMenuItem 2.1ChangeAnimalWindow. java ( 主类) ChangeAnimalWindow 类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执AutoMoveAnimal 行。ChangeAnimal Window类的成员变量中有五种重要类型的对象: Animal、Point、Stone、 HandleMouse 和AutoMoveAnimal 对象。ChangeAnimalWindow 将在后面的详细设计中阐述。HandleMouse ChangeAnimalWindow 类创建的窗口以及其中的主要成 Stone ChangeAnimalWindow Point Animal Sound 图2.1.1类之间组合关系 7 成员对象如图 2.1.2所示 图2.1.2 ChangeAnimalWindow窗口及主要成员变量 2.2 Animal.java Animal 类是 JPanel的一个子类,创建的对象是ChangeAnimalWindow 类的重要成员之一,用来表示"动物" 2.3 Point.java Point类负责创建确定位血的对象.使用 Point对象 .可以确定 Animal 以及 Stone 对象在铜体巾的位置 2.4 Stone.java Stone类是 JButton的一个手挠,创建的对象表示"石头”。 2.5 HandleMouse.java HandleMouse类所创建的对象负责处理鼠标事件。 2.6 AutoMoveAnimal.java AutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。 2.7 Sound.java Sound类所创建的对象是为了给游戏添加背景音乐。对于点不同的按钮可以播放不同的音乐,增加了游戏的人性化。 2.8 ShowRecord.java ShowRecord 创建界面负责显示个人记录,自己在的得分和排名情况。 8 2.9 record.java 创建对象为了加入成绩界面。 3程序流程及主要代码 3.1ChangeAnimalWindow类 3.1.1 效果图 ChangeAnimalWindow 创建的窗口效果如图 3.1.1 所示. 图3.1.1主类ChangeAnimalWindow创建的窗口效果 3.1.2 U M 图L ChangeAnimalWindow 类是javax.swing包JFrame的 一 个 子类, 并实 现 了 ActionListener接口,标明该类的主要成员变是和方法的 UML图,如图4. 4 所示。 以下是 U M L 图中有关方法的详细说明. 9 JFrame ActionListener ChangeAnimalWindow amountOfAnimal,distance:ileftImageFile, rightImageFile: File nt renew,quit,autoButton:JButton animal:Animal[] bar:JMenuBar point:Point[] menuGrade:JMenu stone:Stone[] oneGradeItem, twoGradeItem, handleMouse: threeGradeItem:JMenuItem HandleMouse autoMoveAnimal: ChangeAnimalWindow():无类needDoing():void AutoMoveAnimal 型 actionPerformed(ActionEvent):vo Init:void id setAmountOfAnimal(int):int main(String):void removeAnimalAndStone():void 图 3.1.2 ChangeAnimalWindow UML示图 3.1.3 成 员 变 量 • amountOfAnimal是Int型数据,默认值 是6. amountOfAnimal的值用来 确定ChangeAnimalWindow窗体中"动物"的数目,即 Animal对象的数目。 • distance 是 int型数据,默认值是 80.distance 的值用来确定 Point 对象之间的距离,进而可以确定 Animal 之间,Stone 之间的距离以及 Animal 和 Stone 对象外观的 大小。 • animal 是 Animal 型数组,其长度为 amountOfAnima l。 • Point 是 Point 型数组,其长度为 amountOfAnimal +1。 • Stone 是 Stone 型数组,其长度为 amountOfAnimal +1。 • HandleMouse 是 HandleMouse 类创建的鼠标事件监视器,用来监视 animal 数组中Animal 对象触发的鼠标事件。 • auroMoveAnimal是 AutoMoveAnimal 类创建的对话框。通过该对话框可以实现程序向将左右动物交换位置。 • bar 是 JMenuBar 创建的菜单条,用来添加菜单, bar 被放置在窗口的顶部。 • MenuGrade 是 JMenu 创建的菜单,其名字为"选择级别"menuImage 也是 JMenu 创建的菜单,其名字为"选择动物图像(jPG ,GIF)"menuGrade和 menuImage被添加 10 到菜单条bar中。 • oneGradeItem,twoGradeItem和 threeGradeItem是JMenultem 创建的菜单项, 它 们的名字 依次为"初级"、"中级"和 ..高级",这 三 个菜单项被添加到菜单项 menuGrade 中。LeftImage、rightImage和defa ultImage也是JMenultem创建的菜单 项,其名字依次为"左面动物的图像"、"右面动物的图像"、"左右面的动物的默认图 像",这 三个菜单项被添加到菜单项 menumage 中。oneGradeItem ,twoGradeItem 和1 threeGradeItem 以及 leftImage、rightImage 和 defaultImage 都将当前窗 口注册为向己的ActionEvcnt 事件监视器。 • renew、 quit 和 autoButton 是 JButton创建的按钮对象,名字依次为"重新开 始"、"撤销"和"自动演 示 "Renew 、quit和autoButton都将在当前接口注册为自己 的 ActionEvent 事件监视器。 3.1.4 方 法 • ChangcAnimalWindow()是构造方法,负责完成窗口的初始化。 init( )方法负责完成 Animal Stone Point对象的创建。 • setamountOfAnimal(int)方法负责设置动物的个数,即 amountOfAnimal的值。• removeAnimal AndStone()方法负责从窗体中移掉动物和石头,即移掉 Animal 对象 和 Stone 对象。 • needDoing( ) 方法负责执行一些经常需要重复执行的代码。 • ActionPerformed( ActionEvent) 方法是ChangeAnimalWindow类实现的 接口中的方法。ChangeAnimalWindow 创建的窗口是 oneGradeltem,ActionListener twoGradeItem、 threeGradeItem 、leftImage 、rightImage defaultImage 菜单项和 renew quit autoButton 按组的 ActionEvent 事件监视器。当用户选中某个菜单项或单击按钮时,筒口将执行 actionPerformed ( ActionEvent ) 方法进行相应的操作。如 oneGradeItem 、twoGradeItem 和threeGradeItem三个菜单项的某 一 项果用户选中 actionPerformed ( ActionEvent ) 方法所执行的操作就是改变 amountOfAnimal时, 的值,_执行 needDoing()方法,完成必要的初始化。如果用户选中leftlmage和rightImage 菜单项的某一个时,actionPerformed(ActionEvent)方法所执行的操作就是改变leftIm ageFile和rightImageFile的引用。当 用户单击 renew 按钮时,actionPerformed (ActionEvent) 方法所进行的操作是保持当前的amountofAnimal的值,并执行needDoing()方法,完 成必要的初始化,当用户单击 quit 按钮时, ActionPeform ed (ActionEve nt) 方法所进行的操作是撤销当前"动物"的前一次跳跃。当用户单击autoButton按钮时, 11 action Performed (ActionEvent)方法所进行的操作是弹出 autoMoveAnimal对话框,用 用户可以通过该对话框让程序显示动物换位 过程。 • main( String) 方法是程序运行的入口方法。 3.1.5 源代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.io.*; import java.util.*; import javax.swing.filechooser.*; public class ChangeAnimalWindow extends JFrame implements ActionListener{ int amountOfAnimal=6; int distance=80; Animal [] animal; Hashtable hashtable=new Hashtable(); Point [] point; Stone [] stone; HandleMouse handleMouse; AutoMoveAnimal autoMoveAnimal; File leftImageFile,rightImageFile,heroFile; JButton renew,quit,autoButton=null; JMenuBar bar; JMenu menuGrade,menuImage,menuHero,yingyue,tui,tiao;//在菜单中定12 义了音乐,推出对 JMenuItem oneGradeItem,twoGradeItem,threeGradeItem; JMenuItem leftIamge,rightIamge,defaultImage; JMenuItem hero,bofang1,chu,bofang2,bofang3,she; ShowRecord showHeroRecord=new ShowRecord(this,hashtable); JPanel pCenter; ChangeAnimalWindow(){ pCenter=new JPanel(); pCenter.setBackground(Color.lightGray); pCenter.setLayout(null); handleMouse=new HandleMouse(); autoMoveAnimal=new AutoMoveAnimal(); leftImageFile=new File("dog.jpg"); rightImageFile=new File("cat.jpg"); heroFile=new File("英雄.txt");//打开英雄排行榜 init(); bar=new JMenuBar(); menuGrade=new JMenu("选择级别"); yingyue =new JMenu("选择音乐"); tui=new JMenu("退出游戏"); tiao=new JMenu("背景颜色"); menuImage=new JMenu("选择动物图像(JPG,GIF)"); menuHero=new JMenu("游戏英雄榜"); oneGradeItem=new JMenuItem("初级"); twoGradeItem=new JMenuItem("中级"); threeGradeItem=new JMenuItem("高级"); 13 bofang1=new JMenuItem("播放一");//在菜单设置中创建播放 bofang2=new JMenuItem("播放二"); bofang3=new JMenuItem("播放三"); chu=new JMenuItem("终止"); she=new JMenuItem("调色"); she.addActionListener(this); chu.addActionListener(this); bofang1.addActionListener(this); bofang2.addActionListener(this); bofang3.addActionListener(this); leftIamge=new JMenuItem("左面动物的图像"); rightIamge=new JMenuItem("右面动物的图像"); defaultImage=new JMenuItem("左右动物的默认图像"); hero=new JMenuItem("英雄"); hero.addActionListener(this); menuGrade.add(oneGradeItem); menuGrade.add(twoGradeItem); menuGrade.add(threeGradeItem); menuImage.add(leftIamge); menuImage.add(rightIamge); menuImage.add(defaultImage); menuHero.add(hero); bar.add(menuGrade); bar.add(menuImage); bar.add(yingyue); bar.add(tui); bar.add(tiao); tiao.add(she); yingyue.add(bofang1); //把播放添加到菜单设置中 yingyue.add(bofang2); yingyue.add(bofang3); 14 tui.add(chu); bar.add(menuHero); setJMenuBar(bar); oneGradeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); leftIamge.addActionListener(this); rightIamge.addActionListener(this); defaultImage.addActionListener(this); hero.addActionListener(this); renew=new JButton("重新开始"); renew.addActionListener(this); autoButton=new JButton("自动演示"); autoButton.addActionListener(this); quit=new JButton("撤消"); quit.addActionListener(this); JPanel north=new JPanel(); north.add(renew); north.add(quit); north.add(autoButton); String mess="互换左右动物位置"; JLabel hintMess=new JLabel(mess,JLabel.CENTER); north.add(hintMess); add(north,BorderLayout.NORTH); add(pCenter,BorderLayout.CENTER); JPanel south=new JPanel(); south.add(handleMouse); add(south,BorderLayout.SOUTH); setVisible(true); setBounds(60,60,710,300); validate(); 15 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void init(){ animal=new Animal[amountOfAnimal]; point=new Point[amountOfAnimal+1]; stone=new Stone[amountOfAnimal+1]; int space=distance; for(int i=0;i=2&&m%2==0) amountOfAnimal=m; } public void removeAnimalAndStone(){ for(int i=0;i step=handleMouse.getStep(); int length=step.size(); int start=-1,end=-1; if(length>=2){ end=step.get(length-1); start=step.get(length-2); step.remove(length-1); step.remove(length-2); 20 Animal ani=point[end].getThisAnimal(); int w=ani.getBounds().width; int h=ani.getBounds().height; ani.setLocation(point[start].getX()-w/2,point[start].getY()-h); ani.setAtPoint(point[start]); point[start].setThisAnimal(ani); point[start].setIsHaveAnimal(true); point[end].setIsHaveAnimal(false); } } else if(e.getSource()==hero){ showHeroRecord.setVisible(true); } else if(e.getSource()==leftIamge){ JFileChooser chooser=new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif"); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&&state==JFileChooser.APPROVE_OPTION){ leftImageFile=file; for(int i=0;i boolean spendTime:int showTime: recordTime:Timer JTextField HandleMouse(Container con):无类型 setPoint(Point[]):void initStep():void initSpendTime():void getStep():ArrayList setCountTime(boolean):void mousePressed(MouseEvent) mouseRelease(MouseEvent):void 图 3.5.2 HandleMouse UML 3.5.3成员变量 • point 是 Point 型数组,用来存放 ChangeAnimalWindow方法体中 point 数组的引用. • step 是 ArrayList < Integer> 数组袭,用来存放移动"动物"的步骤。 • spendTime 用来记录用户移动"动物"所用时间.recordTime 是计时记录. • success 是 boolean 型数据,当该变量的值为 true 时表示用户成功地将左右动物换位. • countTime 是 boolean 型数据.当该变量的值为 true 时,将启动计时器为用户计时; 32 否则不为用户计时. • showTime 是 JTextField 创建的文本框,负责显示用时. 3.5(4 方法 • HandleMouse()是构造方法,负责创建 HandleMouse对象。 • handleMouse对象调用setPoint(Point[] point )方法将ChangeAnimalWindow 窗体中的 point 对象的引 用传递给该对象中的 point ,以便handleMouse 移动方法体中的 Animal对象. • handleMouse 对象调用 initStep()方法清空 step 中的数据 • handleMouse 对象调用 initSpcndTime() 将 spendTime 的值设置为O. • handleMouse 对象调用 setCountTime( boolean ) 设置是启动计时器。 • handleMouse 对象调用 get Stcp( )返回 step 对象.mousePressed( Mouse Event) 方法是 HandleMouse类实现MouseListener 接 口监听的方法,当用户用在ChangeAnimalWindow 窗体(Animal 对象上按下鼠标时, 将触发 MouseEvent 鼠标耶件.handleMouse 对象将调 执行 mousePressed( MouseEvent) 方法对郁件作:tl 处理,即根据规则移动>ltj前被鼠用 标单击的 Animal对象mouseReleased( MouseEvcn l ) 方法是 HandleMouse 类实现的 MouseListener 接 口中的方法 .ChangeAnimalWindow 窗体中的 Animal 对象上释放鼠标时,将触发 MouseEvent 鼠标事件 .handleMouse 对象将调用执行mouseReleased ( MouseEvent ) 方法对事件作出处理,其主要操作是判断用户是否已经成功动物换位。 actionPedormed (ActionEvent )是 HandleMouse 类实现的 ActionListener 接口中的 方法. 使用 Time r 类的掏浩方法: Time r (int a. Object b) 创建了计时都 z RecordTime.其中的参数 a 的单位是毫秒.确定计时器每隔 a 毫秒"振铃"一次,参数 b 是计时器的监视器. 在这里取 a = 1000,监视器 b 是当前 handleMouse 对象. 计时苦苦发生的振铃事件ActionEvent 事件,当振铃事件发生时,监视器就会监视到 这个事件,监视器就调川 actionPerformed( ActionEvent) 方法. 当振铃每隔 1000 毫秒发生一次时,方法 actionPcrformed ( ActionEve nt)就被执行一次,所执行的操作就是拨着step指定的步骤移动-个 Animal对象. 3.5.5 源代码 import java.awt.event.*; import java.awt.*; import java.util.*; 33 import javax.swing.*; public class HandleMouse extends JPanel implements MouseListener,ActionListener { Point [] point; Record record; int grade; JButton jb=new JButton("添加"); ArrayList step; int spendTime=0; javax.swing.Timer recordTime; boolean success=false,countTime=false; JTextField showTime; HandleMouse(){ step=new ArrayList(); recordTime=new javax.swing.Timer(1000,this); showTime=new JTextField(26); showTime.setEditable(false); showTime.setHorizontalAlignment(JTextField.CENTER); showTime.setFont(new Font("楷体_GB2312",Font.BOLD,18)); add(new JLabel("负责处理鼠标事件,并显示您的用时:",JLabel.CENTER)); add(showTime); this.add(jb); jb.addActionListener(this); setBackground(Color.cyan); } public void setPoint(Point [] point){ this.point=point; } public void initStep(){ step.clear(); 34 } public void initSpendTime(){ spendTime=0; showTime.setText(null); recordTime.stop(); } public ArrayList getStep(){ return step; } public void setCountTime(boolean b){ countTime=b; } public void mousePressed(MouseEvent e){ if(countTime) recordTime.start(); else showTime.setText("不给您计时"); Animal animal=null; animal=(Animal)e.getSource(); int w=animal.getBounds().width; int h=animal.getBounds().height; int m=-1; Point startPoint=animal.getAtPoint(); for(int i=0;i=1){ if(point[m-1].isHaveAnimal()==false){ animal.setLocation(point[m-1].getX()-w/2,point[m-1].getY()-h); animal.setAtPoint(point[m-1]); point[m-1].setThisAnimal(animal); point[m-1].setIsHaveAnimal(true); startPoint.setIsHaveAnimal(false); step.add(m); 36 step.add(m-1); } else if(m-1>=1&&point[m-2].isHaveAnimal()==false){ animal.setLocation(point[m-2].getX()-w/2,point[m-2].getY()-h); animal.setAtPoint(point[m-2]); point[m-2].setThisAnimal(animal); point[m-2].setIsHaveAnimal(true); startPoint.setIsHaveAnimal(false); step.add(m); step.add(m-2); } } } public void actionPerformed(ActionEvent e){ spendTime++; showTime.setText("您的用时:"+spendTime+"秒"); if(e.getSource()==jb){ int number =3; if(number==3){ recordTime.stop(); record=new Record(); switch(grade){ case 1: record.setGrade("初级"); break; case 2: record.setGrade("中级"); break; case 3: record.setGrade("高级"); 37 break; } record.setTime(spendTime); record.setVisible(true); } } } public boolean isSuccess(){ boolean boo=true; int i=0; for(i=0;i bStart,bStop,bContinu e, AutoMoveAnimal():bClose:JButton 无类型 setPoint(Point[]):void actionPerformed(ActionEvent):void setStep():void 图 3.6.2 AutoMoveAnimal 类的UML图 以下是 UM L 回中有关数据和方法的详细说明。 3.6.3成员变量 • point 是 Point 型数组,用来存放 ChangeAnimalWindow 窗体中 point 数细的引用. • step 是 ArrayList< Integer>型对象,用来存放移动"动物"的步骤。 • bStart ,bStop ,bContinue,bClose 是 JButton 按钮,当用户单击 bStart 按钮时,重载将接着 step 中的步骤开始移动动物;单击按钮 bStop 时,暂停移动动物;单击 bContinue 按钮时,恢复移动动物;正在击bClose按钮时,关闭当前对话框并停止移动动物. • time 是 javax. swing 包Timer 类创建的计时器.使用 Timer 类的构造方法: TimerCint a ,Object b) 创建一个计时器,其中的参数 a 的单位是毫秒,确定计时器每 隔 a 毫秒"振铃"一次,参数 b 是计时器的监视器。在这里我们取 a =1000 ,监视器 b 是当前对话框. 计时器发生的振铃事件是 ActionEvent 类型事件,当振铃事件发生 时,监视器就会监视到这个事件,监视器就回调 Action Listener 接口中的 actionPedorm ed 方法. 当振铃每隔 1000 毫秒发生一次时,方法 actionPedormed 就 被执行一次,并按着 step 指定的步骤移动一个动物. 3.6.4方法 • AutoMoveAnim a l O是构造方法,用来创建对象 autoMoveAnimal . 40 • autoMoveAnimal 对象 setPoint(Point []point ) 方法将 ChangeAnimalWindow 窗体 point 数组的引用传递给该对象,以便 autoMovcAnimal 对象移动 ChangeAnimalWindow 窗体中的动物. • actionPerformed ( ActionEvent) 是接口 ActionListencr 中的方法。当 用户王在岱 bStart、bStop、bContinue或 bClose 当中任何一个按钮时,autoMoveDisc 对象将调 用执行 actionPeformed ( ActionEvent) 方法,该方法的操作是,如果用户单击了 bStart 按钮,就披着 moveStep 中的步骤开始移动盘子;如果单击了 bStop 按钮,就 暂停移动盘子;如果单击了 bContinue 按钮.就恢复移动盘子;如果单击了 bClose 按钮,就关闭当前对话框,并停止移动盘子. • autoMoveAnimal 对象调用 setStep ()方法设置自 step 对象中的数据.step 是ArrayList ,存放着移动"动物"的步骤,这些步骤是 setStep()方法用算法 生成的整数序列,例如当, step 中存放的整数序列是"4 ,3,2 ,4"时,那么该序列表示 了两个连续的移动步骤"将 point[4]上的动物移动到 point[3]上"和"将 point[2]上的动物移动到 point[4]上" 3.6.5 源代码(AutoMoveAnimal.java) import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.ArrayList; public class AutoMoveAnimal extends JDialog implements ActionListener{ Point [] point; ArrayList step; JButton bStart,bStop,bContinue,bClose; javax.swing.Timer time; int i,M,middle,startPoint,m=0; int [] a; AutoMoveAnimal(){ step=new ArrayList(); setModal(true); setTitle("演示动物换位"); time=new javax.swing.Timer(1000,this); 41 time.setInitialDelay(10); bStart=new JButton("演示"); bStop=new JButton("暂停"); bStop.setEnabled(false); bContinue=new JButton("继续"); bContinue.setEnabled(false); bClose=new JButton("关闭"); bStart.addActionListener(this); bStop.addActionListener(this); bContinue.addActionListener(this); bClose.addActionListener(this); setLayout(new FlowLayout()); add(bStart); add(bStop); add(bContinue); add(bClose); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ time.stop(); i=startPoint; m=0; bStart.setEnabled(true); bStop.setEnabled(false); bContinue.setEnabled(false); setVisible(false); } }); } public void setPoint(Point [] point){ this.point=point; 42 } public void actionPerformed(ActionEvent e) { if(e.getSource()==time){ int start,end; if(m<=step.size()-2){ start=step.get(m); end=step.get(m+1); autoMoveAnimal(start,end); } m=m+2; if(m>step.size()-1){ time.stop(); m=0; bStart.setEnabled(true); bStop.setEnabled(false); bContinue.setEnabled(false); setVisible(false); } } else if(e.getSource()==bStart){ time.start(); bStart.setEnabled(false); bStop.setEnabled(true); } else if(e.getSource()==bStop){ time.stop(); bContinue.setEnabled(true); } else if(e.getSource()==bContinue){ time.restart(); } 43 else if(e.getSource()==bClose){ time.stop(); i=startPoint; m=0; bStart.setEnabled(true); bStop.setEnabled(false); bContinue.setEnabled(false); setVisible(false); } } private void autoMoveAnimal(int start,int end){ Animal ani=point[start].getThisAnimal(); int w=ani.getBounds().width; int h=ani.getBounds().height; ani.setLocation(point[end].getX()-w/2,point[end].getY()-h); ani.setAtPoint(point[end]); point[end].setThisAnimal(ani); point[end].setIsHaveAnimal(true); point[start].setIsHaveAnimal(false); } private int get(int i,int [] a){ int c=-1; if(i>=0&&i<=a.length-1) c=a[i]; else c=-1; return c; } public void setStep(){ a=new int[point.length]; M=point.length-1; 44 middle=(point.length)/2; startPoint=middle-1; i=startPoint; a[middle]=0; step=new ArrayList(); for(int k=0;k<=middle-1;k++) a[k]=1; for(int k=middle+1;k=0){ int temp=a[i-1]; a[i-1]=a[i-2]; a[i-2]=temp; step.add(i-2); step.add(i-1); } else{ int temp=a[i-1]; a[i-1]=a[i]; a[i]=temp; step.add(i); step.add(i-1); 47 } } else{ int temp=a[i-1]; a[i-1]=a[i]; a[i]=temp; step.add(i); step.add(i-1); } } else{ boolean ok=true; for(int k=0;k<=i-2;k++) if(get(k,a)==1) ok=false; if(ok){ int temp=a[i-1]; a[i-1]=a[i]; a[i]=temp; step.add(i); step.add(i-1); } } } else{ if(get(i-2,a)==0){ if(get(i-3,a)==1||get(i-3,a)==-1){ int temp=a[i-2]; a[i-2]=a[i]; a[i]=temp; 48 step.add(i); step.add(i-2); } else{ boolean ok=true; for(int k=Math.max(i-4,0);k>=0;k--) if(get(k,a)==1) ok=false; if(ok){ int temp=a[i-2]; a[i-2]=a[i]; a[i]=temp; step.add(i); step.add(i-2); } } } } } i++; if(i==M+1) i=0; if(isComplete()) break; } } private boolean isComplete(){ boolean boo=true; int i=0; for(i=0;i=0){ } }catch(Exception e){ auline.write(abDat e.printStackTrace(); return; }finally{ auline.drain(); auline.close(); } } 3.8 ShowRecord类 3.8.1 效果图 } 我厉害吧。。 图3.8.1展示排行 53 3.8.2源代码 import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; public class ShowRecord extends JDialog implements ActionListener{ File file=new File("英雄榜.txt"); String name=null; Hashtable hashtable=null; JButton 显示,重新记分; JLabel label初级[],label中级[],label高级[]; public ShowRecord(JFrame frame,Hashtable h) { setTitle("扫雷英雄榜"); hashtable=h; setBounds(100,100,320,185); setResizable(false); setVisible(false); setModal(true); label初级=new JLabel[3]; label中级=new JLabel[3]; label高级=new JLabel[3]; 54 for(int i=0;i<3;i++) { label初级[i]=new JLabel(); label初级[i].setBorder(null); label中级[i]=new JLabel(); label中级[i].setBorder(null); label高级[i]=new JLabel(); label高级[i].setBorder(null); } label初级[0].setText("初级"); label初级[1].setText(""+9); label初级[1].setText("丁亚东"); label中级[0].setText("中级"); label中级[1].setText(""+12); label中级[1].setText("陈博"); label高级[0].setText("高级"); label高级[1].setText(""+18); label高级[1].setText("汪明"); JPanel pCenter=new JPanel(); pCenter.setLayout(new GridLayout(3,3)); for(int i=0;i<3;i++) pCenter.add(label初级[i]); for(int i=0;i<3;i++) pCenter.add(label中级[i]); for(int i=0;i<3;i++) pCenter.add(label高级[i]); pCenter.setBorder(BorderFactory.createTitledBorder("扫雷英雄榜")); 显示=new JButton("显示成绩"); 重新记分=new JButton("重新记分"); 显示.addActionListener(this); 55 重新记分.addActionListener(this); JPanel pSouth=new JPanel(); pSouth.setLayout(new FlowLayout(FlowLayout.RIGHT)); pSouth.add(重新记分); pSouth.add(显示); add(pCenter,BorderLayout.CENTER); add(pSouth,BorderLayout.SOUTH) ; } public void readAndShow(){ try{ FileInputStream in=new FileInputStream(file); ObjectInputStream object_in=new ObjectInputStream(in); hashtable=(Hashtable)object_in.readObject(); object_in.close(); in.close(); String temp=(String)hashtable.get("初级"); StringTokenizer fenxi=new StringTokenizer(temp,"#"); label初级[0].setText(fenxi.nextToken()); label初级[1].setText(fenxi.nextToken()); label初级[2].setText(fenxi.nextToken()); temp=(String)hashtable.get("中级"); fenxi=new StringTokenizer(temp,"#"); label中级[0].setText(fenxi.nextToken()); label中级[1].setText(fenxi.nextToken()); label中级[2].setText(fenxi.nextToken()); temp=(String)hashtable.get("高级"); fenxi=new StringTokenizer(temp,"#"); label高级[0].setText(fenxi.nextToken()); label高级[1].setText(fenxi.nextToken()); 56 label高级[2].setText(fenxi.nextToken()); } catch(Exception e){} } public void actionPerformed(ActionEvent e) { if(e.getSource()==重新记分) { hashtable.put("初级","初级#"+9+"#丁亚东"); label初级[0].setText("初级"); label初级[1].setText(""+999); label初级[2].setText("匿名"); hashtable.put("高级","高级#"+18+"#汪明"); label高级[0].setText("初级"); label高级[1].setText(""+999); label高级[2].setText("匿名"); try{ FileOutputStream out=new FileOutputStream(file); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(hashtable); object_out.close(); out.close(); } catch(IOException event){} setVisible(false); 3.9 Record类 } 3.9.1效果图 if(e.getSource()==显示){ readAndShow(); } } 别羡慕哥,我已然成了传说。。。。 图3.9.1展示自我 57 3.9.2源代码 import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Record extends JDialog implements ActionListener{ int time=0; String grade=null; String key=null; String message=null; JTextField textName; JLabel label=null; JButton 确定,取消; public Record(){ setTitle("记录你的成绩"); this.time=time; this.grade=grade; setBounds(100,100,240,160); setResizable(false); setModal(true); 确定=new JButton("确定"); 取消=new JButton("取消"); 58 textName=new JTextField(8); textName.setText("匿名"); 确定.addActionListener(this); 取消.addActionListener(this); setLayout(new GridLayout(2,1)); label=new JLabel("您现在是...高手,输入您的大名上榜"); add(label); JPanel p=new JPanel(); p.add(textName); p.add(确定); p.add(取消); add(p); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); } public void setGrade(String grade){ this.grade=grade; label.setText("您现在是"+grade+"高手,输入您的大名上榜 "); } public void setTime(int time){ this.time=time; } public void actionPerformed(ActionEvent e){ if(e.getSource()==确定){ message=grade+"#"+time+"#"+" "+textName.getText(); key=grade; writeRecord(key,message); setVisible(false); } if(e.getSource()==取消){ 59 setVisible(false); } } public void writeRecord(String key,String message){ File f=new File("英雄榜.txt"); try{ FileInputStream in=new FileInputStream(f); ObjectInputStream object_in=new ObjectInputStream(in); Hashtable hashtable=(Hashtable)object_in.readObject(); object_in.close(); in.close(); String temp=(String)hashtable.get(key); StringTokenizer fenxi=new StringTokenizer(temp,"#"); fenxi.nextToken(); int n=Integer.parseInt(fenxi.nextToken()); if(time
本文档为【Java课程设计动物换位&#40;有背景音乐,调色板,英雄排行榜&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_682974
暂无简介~
格式:doc
大小:375KB
软件:Word
页数:81
分类:
上传时间:2018-02-05
浏览量:186