收藏 分销(赏)

Java课程设计报告.doc

上传人:w****g 文档编号:10595535 上传时间:2025-06-04 格式:DOC 页数:33 大小:276.54KB 下载积分:12 金币
下载 相关 举报
Java课程设计报告.doc_第1页
第1页 / 共33页
Java课程设计报告.doc_第2页
第2页 / 共33页


点击查看更多>>
资源描述
Java语言及面向对象技术 课程设计报告 ( 2015 -- 2016年度第 1 学期) 题目 专业 软件工程 学生姓名 班级 软件141 学号 指导教师 徐 静 完成日期 2016/1/22 31 / 33 目 录 1 概 述 1 1.1 课程设计目的 1 1.2 课程设计内容 1 2 系统需求分析 1 2.1 系统目标 1 2.2 开发环境 1 3 系统概要设计 1 3.1迷宫文件 1 3.2 类的设计 2 4 系统详细设计 3 4.1 编写迷宫文件 3 4.2 MAZEWINDOW类 3 4.3 MAZE类 6 4.4 WALLORROAD类 8 4.5 MAZEPOINT类 10 4.6 PERSONINMAZE类 11 4.7 HANDLEMOVE类 12 4.8 RECORD类 14 4.9 SHOWRECORD类 16 4.10 SOUND类 17 4.11 所需图像和音乐 17 5 测试 18 5.1 测试方案 18 5.2 测试结果 18 6 小结 24 参考文献 25 附 录 26 附录 源程序清单 26 走迷宫 1 概 述 1.1 课程设计目的 1.2 课程设计内容 2 系统需求分析 2.1 系统目标 2.2 开发环境 JDK ,Eclipse 3 系统概要设计 3.1 3.2 类的设计 3.2.1类的组合 3.2.2 MazeWindow.java类(主类) 3.2.3 Maze.java 3.2.4 WallOrRoad.java 3.2.5 MazePoint.java 3.2.6 PersonInMaze.java 3.2.7 HandleMove.java 3.2.8 Record.java 3.3.9 ShowRecord.java 3.3.10 Sound.java 4 系统详细设计 6 小结 参考文献 [1]耿祥义,张跃平.  Java2实用教程(第三版)[M] . 北京:清华大学出版社, 2006 [2]耿祥义.  Java课程设计(第三版)[M] . 北京:清华大学出版社, 2004 [3]张跃平. Java2实用教程实验指导及习题解答(第三版)[M]. 北京:清华大学出版社, 2004 ……… 附 录 附录 源程序清单 MazeWindow类 package 走迷宫Java; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Hashtable; import javax.swing..*; public class MazeWindow extends JFrame implements ActionListener{ /** * */ private static final long serialVersionUID = 3362664598156059146L; Maze maze; JMenuBar bar; JMenu menuChoice,menuImage,hero; JMenuItem wallImage,roadImage,personImage,defaultImage,heroItem,clearHero; ; File 英雄榜=new File("英雄榜.txt"); JButton renew; ShowRecord showRecord; static String[] mazeName; static String currentMap; @SuppressWarnings("rawtypes") Hashtable hashtable=null; @SuppressWarnings({ "rawtypes", "unchecked" }) MazeWindow(){ wallImage File("wall.jpg");//创建wall.jpg的新文件 roadImage File("road.jpg");//创建road.jpg的新文件 bar=new JMenuBar(); menuChoice=new JMenu("选择迷宫"); File("."); File file[]=dir.listFiles(new (){ public boolean accept( name){ return name.endsWith("maze"); } }); mazeName=new String[]; for(int i=0;i<) { mazeName[i]=file[i].getName().substring(0, file[i].getName().length()-5);//substring(截取的起始位置,截取的长度); } for(int i=0;i<mazeName.length;i++){ JMenuItem item =new JMenuItem(mazeName[i]); item.addActionListener(this);//MazeWindow类的实例(当前窗口)做监视器 menuChoice.add(item); } maze [0].getName()); currentMap=mazeName[0]; init(); menuImage=new JMenu("选择墙、路和走迷宫者的图像(JPG,GIF)"); wallImage=new JMenuItem("墙的图像"); roadImage=new JMenuItem("路的图像"); personImage=new JMenuItem("走迷宫者的图像"); defaultImage=new JMenuItem("墙、路的默认图像"); hero=new JMenu("英雄榜"); heroItem=new JMenuItem("查看英雄榜"); clearHero=new JMenuItem("清空英雄榜"); hero.add(clearHero); hero.add(heroItem); bar.add(hero); menuImage.add(wallImage); menuImage.add(roadImage); menuImage.add(personImage); menuImage.add(defaultImage); bar.add(menuChoice); bar.add(menuImage); setJMenuBar(bar);//将菜单条添加到窗口中 wallImage.addActionListener(this); roadImage.addActionListener(this); personImage.addActionListener(this); heroItem.addActionListener(this); clearHero.addActionListener(this); defaultImage.addActionListener(this); renew=new JButton("重新开始"); renew.addActionListener(this); add(maze,BorderLayout.CENTER); add(renew,BorderLayout.SOUTH); hashtable=new Hashtable(); for(int i=0;i<) { hashtable.put(mazeName[i]+"1",mazeName[i]+"#"+100+"#匿名1"); hashtable.put(mazeName[i]+"2",mazeName[i]+"#"+100+"#匿名2"); hashtable.put(mazeName[i]+"3",mazeName[i]+"#"+100+"#匿名3"); } if(!英雄榜.exists()) {//英雄榜是File类对象; boolean exists() 测试此抽象路径名表示的文件或目录是否存在。 try{ out=new (英雄榜); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(hashtable); //void writeObject(Object obj) 将指定的对象写入 ObjectOutputStream。 objectOut.close(); //void close() 关闭流。 out.close(); //java.io 类 的方法 void close() 关闭此文件输出流并释放及此流有关的所有系统资源。 } catch(IOException e){} } showRecord =new ShowRecord(this,mazeName.length); setVisible(true); setBounds(60,60,510,480); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void init(){ if(maze!=null){ remove(maze); remove(maze.getHandleMove()); } maze=new Maze();//创建Maze类的对象 maze.setWallImage(wallImageFile); maze.setRoadImage(roadImageFile); maze.person.setPersonImage(personImageFile); maze.setMaze); add(maze,BorderLayout.CENTER); add(maze.getHandleMove(),BorderLayout.NORTH); validate(); } public void actionPerformed(ActionEvent e){//重写接口中的方法 if(e.getSource()==roadImage){ J chooser=new J(); filter=new ("JPG&GIF Images","jpg","gif"); chooser.set(filter); int state=chooser.showOpenDialog(null); (); if(){ roadImage; maze.setRoadImage(roadImageFile); } } else if(e.getSource()==wallImage){ J chooser=new J(); filter=new ("JPG&GIF Images","jpg","gif"); chooser.set(filter); int state=chooser.showOpenDialog(null); (); if(){ wallImage; maze.setWallImage(wallImageFile); } } else if(e.getSource()==personImage){ J chooser=new J(); filter=new ("JPG&GIF Images","jpg","gif"); chooser.set(filter); int state=chooser.showOpenDialog(null); (); if(){ personImage; maze.person.setPersonImage(personImageFile); } } else if(e.getSource()==defaultImage){ wallImage File("wall.jpg"); roadImage File("road.jpg"); maze.setWallImage(wallImageFile); maze.setRoadImage(roadImageFile); } else if(e.getSource()==heroItem){ showRecord.setMazeName(mazeName); showRecord.readAndShow(hashtable); showRecord.setVisible(true); } else if(e.getSource()==clearHero){ File("英雄榜.txt"); f.delete(); JFrame t=new JFrame("提示!"); t.setFont(new Font("楷体",Font.BOLD,30)); t.setSize(300,215); t.setLocationRelativeTo(null); JPanel pan=new JPanel(); t.setContentPane(pan); BorderLayout bLayout=new BorderLayout(20,20); pan.setLayout(bLayout); JLabel leb=new JLabel("英雄榜已清空,请重新载入游戏。"); pan.add(leb,BorderLayout.CENTER); t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); t.setVisible(true); } else if(e.getSource()==renew){ init(); } else{ JMenuItem item=(JMenuItem)e.getSource(); maze ()+".maze"); currentMap=item.getText(); maze.getHandleMove().setMap(currentMap); init(); } } public static void main(String[] args){ new MazeWindow(); } } Maze类 package 走迷宫Java; import java.awt.*; import javax.swing.*; //import java.awt.event.*; import java.io.*; public class Maze extends JLayeredPane{ /** * */ private static final long serialVersionUID = 43668678L; ; MazePoint [][] mazePoint; WallOrRoad [][] wallOrRoad; PersonInMaze person; HandleMove handleMove; ; int distance=26,m=0,n=0; public Maze(){ setLayout(null); wallImage=new File("wall.jpg"); roadImage=new File("road.jpg"); person=new PersonInMaze(); handleMove=new HandleMove(); handleMove.initSpendTime(); person.addKeyListener(handleMove); setLayer(person,JLayeredPane.DRAG_LAYER);//设置组件person在分层窗口的最上面的一层 } public void setMaze f){ mazeFile=f; char [][]a; RandomAccess; //String lineWord=null; try{ in=new RandomAccess,"r"); long length=in.length();//获取文件mazeFlie的长度 long position=0; in.seek(position);//将读取位置定位到文件的起始 while(position<length){ String str=in.readLine().trim();//从文件中读取一个文本行并去除str前后的空格 if(str.length()>=n) n=str.length(); position=in.get();//读取当前读写的位置 m++;//数组MazeaPoint的行数 } a=new char [m][n];//创建一个二维字符数组,由m个一维数组构成 position=0; in.seek(position);//将读取位置定位到文件的起始 m=0; while(position<length){ String str=in.readLine(); a[m]=str.toCharArray();//将字符串中的全部字符存放在一个字符数组中 position=in.get();//读取当前读写的位置 m++; } in.close(); wallOrRoad=new WallOrRoad[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ wallOrRoad[i][j]=new WallOrRoad(); if(a[i][j]=='1'){ wallOrRoad[i][j].setIsWall(true); wallOrRoad[i][j].setWallImage(wallImage); wallOrRoad[i][j].repaint(); } else if(a[i][j]=='0'){ wallOrRoad[i][j].setIsRoad(true); wallOrRoad[i][j].setRoadImage(roadImage); wallOrRoad[i][j].repaint(); } else if(a[i][j]=='*'){ wallOrRoad[i][j].setIsEnter(true); wallOrRoad[i][j].setIsRoad(true); wallOrRoad[i][j].repaint(); } else if(a[i][j]=='#'){ wallOrRoad[i][j].setIsOut(true); wallOrRoad[i][j].setIsRoad(true); wallOrRoad[i][j].repaint(); } } } mazePoint=new MazePoint[m][n]; int Hspace=distance,Vspace=distance; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ mazePoint[i][j]=new MazePoint(Hspace,Vspace); Hspace=Hspace+distance; } Hspace=distance; Vspace=Vspace+distance; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ add(wallOrRoad[i][j]); wallOrRoad[i][j].setSize(distance,distance); wallOrRoad[i][j].setLocation(mazePoint[i][j].getX(),mazePoint[i][j].getY()); wallOrRoad[i][j].setAtMazePoint(mazePoint[i][j]); mazePoint[i][j].setWallOrRoad(wallOrRoad[i][j]); mazePoint[i][j].setIsWallOrRoad(true); if(wallOrRoad[i][j].getIsEnter()){ person.setAtMazePoint(mazePoint[i][j]); add(person); person.setSize(distance,distance); person.setLocation(mazePoint[i][j].getX(),mazePoint[i][j].getY()); person.requestFocus(); person.repaint(); } } } handleMove.setMazePoint(mazePoint); } catch(IOException exp){ JButton mess =new JButton("无效的迷宫文件"); add(mess); mess.setBounds(30,30,100,100); mess.setFont(new Font("宋体",Font.BOLD,30)); System.out.println(exp+"mess"); } } public void setWallImage(File f){ wallImage=f; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(wallOrRoad[i][j].getIsWall()) wallOrRoad[i][j].setWallImage(wallImage); wallOrRoad[i][j].repaint(); } } } public void setRoadImage(File f){ roadImage=f; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(wallOrRoad[i][j].getIsRoad()) wallOrRoad[i][j].setRoadImage(roadImage); wallOrRoad[i][j].repaint(); } } } public HandleMove getHandleMove(){ return handleMove; } } WallOrRoad类 package 走迷宫Java; import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.io.*; public class WallOrRoad extends JPanel{ /** * */ private static final long serialVersionUID = 48249320L; boolean isRoad,isWall,isEnter,isOut,havePassed; MazePoint point; ; Toolkit tool; WallOrRoad(){ tool=getToolkit(); } public void setIsEnter(boolean boo){ isEnter=boo; if(isEnter==true) add(new JLabel("入口"));//定义迷宫的入口 } public boolean getIsEnter(){ return isEnter; } public void setIsOut(boolean boo){ isOut=boo; if(isOut==true) add(new JLabel("出口"));//定义迷宫的出口 } public boolean getIsOut(){ return isOut; } public void setIsRoad(boolean boo){ isRoad=boo; if(isRoad==true){ setBorder(null);//置此组件的边框,无 } } public boolean getIsRoad(){ return isRoad; } public void setIsWall(boolean boo){ isWall=boo; if(isWall==true) setBorder(new SoftBevelBorder(BevelBorder.RAISED));/* SoftBevelBorder是实现某种斜面的类,这种斜面要么凸出要么凹入且拐角圆滑,BevelBorder该类实现简单的双线斜面边框,RAISED:凸出斜面类型。*/ } public boolean getIsWall(){ return isWall; } public void setAtMazePoint(MazePoint p){ point=p; } public MazePoint getAtMazePoint(){ return point; } public void setWallImage(File f){ wallImage=f; } public void setRoadImage(File f){ roadImage=f; } public void paintComponent(Graphics g){ super.paintComponent(g); int w=getBounds().width; int h=getBounds().height; try{ if(isRoad==true){ Image image=tool.getImage(roadImage.toURI().toURL()); g.drawImage(image,0,0,w,h,this); } else if(isWall=true){ Image image=tool.getImage(wallImage.toURI().toURL()); g.drawImage(image,0,0,w,h,this); } } catch(Exception exp){} } } MazePoint类 package 走迷宫Java; public class MazePoint{ int x,y; boolean haveWallOrRoad; WallOrRoad wallOrRoad=null; public MazePoint(int x,int y){ this.x=x; this.y=y; } public boolean isHaveWallOrRoad(){ return haveWallOrRoad; } public void setIsWallOrRoad(boolean boo){ haveWallOrRoad=boo; } public int getX(){ return x; } public int getY(){ return y; } public boolean equals(MazePoint p){ if(p.getX()==this.getX()&&p.getY()==this.getY()) return true; else return false; } public void setWallOrRoad(WallOrRoad obj){ wallOrRoad=obj; } public WallOrRoad getWallOrRoad(){ return wallOrRoad; } } PersonInMaze类 package 走迷宫Java; import javax.swing.*; import java.awt.*; import java.io.File; public class PersonInMaze extends JTextField{ /** * */ private static final long serialVersionUID = 1L; MazePoint point; String person="person.jpg"; Toolkit tool; ; PersonInMaze(){ tool=getToolkit(); setEditable(false); setBorder(null); setOpaque(false); setToolTipText("单击我,然后按键盘方向键"); } public void setAtMazePoint(MazePoint p){ point=p; } public MazePoint getAtMazePoint(){ return point; } public void setPersonImage(File f){ personImage=f; } public void paintComponent(Graphi
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服