软件工程课程设计学校:大连交通大学专业:软件工程班级:072班姓名:学号:0701030216目录1总体设计 (1)1.1本系统的主要功能描述 (1)1.2系统包含的类及类之间的关系 (1)1.3 Java源文件及其功能 (2)2 详细设计 (2)2.1主类ChangeAnimalWindow (2)2.2类Animal (3)2.3类 HandleMouse (4)2.4类 AutoMoveAnimal (4)2.5类Point (5)3功能测试及运行效果 (6)3.1 系统初始界面 (6)3.2 自动演示后界面 (6)3.3游戏成功预览界面 (7)3.4英雄榜界面 (7)参考文献 (7)附录软件源程序 (8)1总体设计1.1本系统的主要功能描述在科技飞速发展、知识日新月异的今天,很多人已经离不开电脑了,包括玩一些休闲小游戏,一个功能齐全的动物换位小游戏应该是很受人们喜爱的。
通过图形技术,实现图片的导入。
通过消息响应机制,使程序可以响应用户的鼠标操作,进行动物换位游戏的操作。
对于本系统,我们需要实现以下一些基本功能:(1) 要实现人机交互,用户可以通过鼠标来操作动物位置。
(2)在游戏成功时会出现成功提示。
(3)用户在玩游戏的时候可以在游戏界面上选择音乐播放。
(4)用户可以选择插入任意已存储的图片。
(5)具有英雄榜功能,可以查看自己的成绩。
(6)具有帮助功能,可以查看游戏规则,和不懂得选项。
1.2系统包含的类及类之间的关系本系统共包括9个Java源文件。
类之间的关系如图1-1所示。
图1-11.3 Java源文件及其功能2 详细设计2.1主类ChangeAnimalWindow(1)成员变量见表2-1(2)方法见表2-2表2-2 主要方法(3)源代码见文件ChangeAnimalWindow.java2.2类Animal(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件Animal.java2.3类 HandleMouse(1)成员变量见表2-5(2)方法见表2-6(3)源代码见文件HandleMouse.java2.4类 AutoMoveAnimal(1)成员变量见表2-7(2)方法见表2-8(3)源代码见文件AutoMoveAnimal.java2.5类Point(1)成员变量见表2-9(2)方法见表2-10(3)源代码见文件Point.java3功能测试及运行效果3.1 系统初始界面图3-1 初始界面3.2 自动演示后界面图3-2 自动演示后界面3.3游戏成功预览界面图3-3 游戏成功预览界面3.4英雄榜界面图3-4 英雄榜界面参考文献[1] 耿祥义、张跃平著. Java2实用教程(第三版). 北京:清华大学出版社,2006.[2] 宋现锋编著. Java游戏编程导学 . 北京:清华大学出版社,2004[3] 张海藩编著. 软件工程导论(第5版) . 北京:清华大学出版社,2008.[4].雍俊海编著.Java程序设计习题集.北京:清华大学出版社,2006[5].朱福喜编著.Java语言习题与解析.北京:清华大学出版社,2006[6].吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社,2006附录软件源程序ChangeAnimalWindow。
Javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.ArrayList;import java.io.*;import sun.audio.*;import .*;import java.applet.*;import javax.swing.filechooser.*;import javax.swing.border.*;import java.util.*;public class ChangeAnimalWindow extends JFrame implements ActionListener{ int amountOfAnimal=6;int distance=80;Animal [] animal;Point [] point;Stone [] stone;HandleMouse handleMouse;AutoMoveAnimal autoMoveAnimal;File leftImageFile,rightImageFile;JButton renew,quit,autoButton=null;JMenuBar bar;JMenu menuGrade,menuImage,menuMusic,menuHelp;JMenuItem oneGradeItem,twoGradeItem,threeGradeItem,fourGradeItem;JMenuItem leftIamge,rightIamge,defaultImage;JMenuItem playMusic,loopMusic,stopMusic;JMenuItem help;AudioClip clip;JPanel pCenter;File 英雄榜=new File("英雄榜.txt");Hashtable hashtable=null;ShowRecord showHeroRecord=null;Record record;ChangeAnimalWindow(){pCenter=new JPanel();pCenter.setBackground(Color.red);pCenter.setLayout(null);handleMouse=new HandleMouse();autoMoveAnimal=new AutoMoveAnimal();leftImageFile=new File("dog.jpg");rightImageFile=new File("cat.jpg");init();bar=new JMenuBar();menuGrade=new JMenu("游戏");menuImage=new JMenu("选择动物图像(JPG,GIF)");menuMusic=new JMenu("背景音乐选项");menuHelp=new JMenu("帮助");oneGradeItem=new JMenuItem("初级");twoGradeItem=new JMenuItem("中级");threeGradeItem=new JMenuItem("高级");fourGradeItem=new JMenuItem("英雄榜");leftIamge=new JMenuItem("左面动物的图像");rightIamge=new JMenuItem("右面动物的图像");defaultImage=new JMenuItem("左右面动物的默认图像");playMusic=new JMenuItem( "播放");loopMusic=new JMenuItem("循环");stopMusic=new JMenuItem("停止");help=new JMenuItem("游戏规则");menuGrade.add(oneGradeItem);menuGrade.add(twoGradeItem);menuGrade.add(threeGradeItem);menuGrade.add(fourGradeItem);menuImage.add(leftIamge);menuImage.add(rightIamge);menuImage.add(defaultImage);menuMusic.add(playMusic);menuMusic.add(loopMusic);menuMusic.add(stopMusic);menuHelp.add(help);bar.add(menuGrade);bar.add(menuImage);bar.add(menuMusic);bar.add(menuHelp);setJMenuBar(bar);help.addActionListener(this);oneGradeItem.addActionListener(this);twoGradeItem.addActionListener(this);threeGradeItem.addActionListener(this);fourGradeItem.addActionListener(this);hashtable=new Hashtable();hashtable.put("初级","初级#"+999+"#匿名");hashtable.put("中级","中级#"+999+"#匿名");hashtable.put("高级","高级#"+999+"#匿名");if(!英雄榜.exists()) {try{ FileOutputStream out=new FileOutputStream(英雄榜);ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(hashtable);objectOut.close();out.close();}catch(IOException e){}}showHeroRecord=new ShowRecord(this,hashtable);leftIamge.addActionListener(this);rightIamge.addActionListener(this);defaultImage.addActionListener(this);playMusic.addActionListener(this);loopMusic.addActionListener(this);stopMusic.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,400);validate();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<point.length;i++){point[i]=new Point(space,100);space=space+distance;}for(int i=0;i<animal.length;i++){animal[i]=new Animal();animal[i].addMouseListener(handleMouse);if(i<animal.length/2){animal[i].setIsLeft(true);}else{animal[i].setIsLeft(false);}}for(int i=0;i<stone.length;i++){stone[i]=new Stone();pCenter.add(stone[i]);stone[i].setSize(distance*8/9,18);int w=stone[i].getBounds().width;int h=stone[i].getBounds().height;stone[i].setLocation(point[i].getX()-w/2,point[i].getY());point[i].setThisStone(stone[i]);}for(int i=0;i<animal.length;i++){animal[i].setSize(distance*6/7,distance*3/4);int w=animal[i].getBounds().width;int h=animal[i].getBounds().height;pCenter.add(animal[i]);if(i<animal.length/2){animal[i].setIsLeft(true);animal[i].setLeftImage(leftImageFile);animal[i].repaint();animal[i].setLocation(point[i].getX()-w/2,point[i].getY()-h);animal[i].setAtPoint(point[i]);point[i].setThisAnimal(animal[i]);point[i].setIsHaveAnimal(true);}else{animal[i].setIsLeft(false);animal[i].setRightImage(rightImageFile);animal[i].repaint();animal[i].setLocation(point[i+1].getX()-w/2,point[i+1].getY()-h);animal[i].setAtPoint(point[i+1]);point[i+1].setThisAnimal(animal[i]);point[i+1].setIsHaveAnimal(true);}}handleMouse.setPoint(point);handleMouse.setCountTime(true);autoMoveAnimal.setPoint(point);autoMoveAnimal.setStep();}public void setAmountOfAnimal(int m){if(m>=2&&m%2==0)amountOfAnimal=m;}public void removeAnimalAndStone(){for(int i=0;i<point.length;i++){if(point[i].getThisAnimal()!=null)pCenter.remove(point[i].getThisAnimal());}for(int i=0;i<stone.length;i++){if(point[i].getThisStone()!=null)pCenter.remove(point[i].getThisStone());}pCenter.validate();pCenter.repaint();}public void needDoing(){init();handleMouse.initStep();handleMouse.initSpendTime();handleMouse.setCountTime(true);autoMoveAnimal.setPoint(point);}public void actionPerformed(ActionEvent e){if(e.getSource()==oneGradeItem){distance=80;removeAnimalAndStone();setAmountOfAnimal(6);needDoing();}else if(e.getSource()==twoGradeItem){distance=70;removeAnimalAndStone();setAmountOfAnimal(8);needDoing();}else if(e.getSource()==threeGradeItem){distance=60;removeAnimalAndStone();setAmountOfAnimal(10);needDoing();}else if(e.getSource()==fourGradeItem){if(showHeroRecord!=null)showHeroRecord.setVisible(true);}else if(e.getSource()==help){Help a=new Help();} else if(e.getSource()==renew){removeAnimalAndStone();needDoing();}else if(e.getSource()==autoButton){removeAnimalAndStone();needDoing();handleMouse.setCountTime(false);autoMoveAnimal.setStep();int x=this.getBounds().x+this.getBounds().width/2;int y=this.getBounds().y+this.getBounds().height;autoMoveAnimal.setLocation(x,y);autoMoveAnimal.setSize(this.getBounds().width/2,120);autoMoveAnimal.setVisible(true);}else if(e.getSource()==quit){ArrayList<Integer> 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);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()==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<animal.length;i++){if(animal[i].getIsLeft()==true){animal[i].setLeftImage(leftImageFile);animal[i].repaint();}}}}else if(e.getSource()==rightIamge){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){ rightImageFile=file;for(int i=0;i<animal.length;i++){if(animal[i].getIsLeft()==false){animal[i].setRightImage(rightImageFile);animal[i].repaint();}}}}else if(e.getSource()==defaultImage){leftImageFile=new File("dog.jpg");rightImageFile=new File("cat.jpg");for(int i=0;i<animal.length;i++){if(animal[i].getIsLeft()==true)animal[i].setLeftImage(leftImageFile);elseanimal[i].setRightImage(rightImageFile);animal[i].repaint();}}if(e.getSource()==playMusic){try {File f=new File("K 歌之王.wav");URI uri=f.toURI();URL url=uri.toURL();clip=Applet.newAudioClip(url);clip.play();}catch(Exception ee){}}else if(e.getSource()==loopMusic){try {clip.loop();}catch(Exception ee){}}else if(e.getSource()==stopMusic){clip.stop();}validate();}public static void main(String args[]){new ChangeAnimalWindow();}}point.javapublic class Point{int x,y;boolean haveAnimal;Animal animal=null;Stone stone;public Point(int x,int y){this.x=x;this.y=y;}public boolean isHaveAnimal(){return haveAnimal;}public void setIsHaveAnimal(boolean boo){haveAnimal=boo;}public int getX(){return x;}public int getY(){return y;}public boolean equals(Point p){if(p.getX()==this.getX()&&p.getY()==this.getY()) return true;elsereturn false;}public void setThisAnimal(Animal animal){this.animal=animal;}public Animal getThisAnimal(){return animal;}public void setThisStone(Stone stone){this.stone=stone;}public Stone getThisStone(){return stone;}}。