迷宫(JAVA课设,含代码) - 图文

更新时间:2024-04-20 10:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计说明书 NO.1

迷宫冒险 1.课程设计的目的 随着科技进步,时代发展,计算机走进了大家的生活。计算机程序强大的功能为使用者提供服务,编程语言也变得越来越流行。Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。 为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练应用面向对象的思想和设计方法解决实际问题的能力,也是为了增加同学们娱乐游戏选择而开发了一个适合学生的,能提升思考力的迷宫冒险游戏,这既锻炼了动手能力,还能进行消遣娱乐,可谓一举两得。 2.设计方案论证 2.1需求分析 制作一个图形界面的满足玩家娱乐要求的迷宫冒险应用游戏,完成简单的动漫人物迷宫冒险过程。制作的迷宫冒险应用程序具有多种功能,迎合玩家的需求。该应用程序运行时,玩家只需点击地图上的动漫人物,然后利用键盘上的上下左右键位进行人物移动控制。当人物到达出口时,屏幕上显示“恭喜您通关了”的信息框。应用程序主界面上可进行迷宫类型选择,由简单迷宫,中等迷宫,难度迷宫这三类难易程度不同的迷宫组成,玩家可根据自身游戏水平进行选择。为了体现游戏人性化,玩家还可以自己选择迷宫的道路,障碍的图片,但是选择的图片必须是规定的图片格式。该应用程序还添加了记时功能,让玩家通过记时体验到游戏的娱乐性和刺激性。如果对成绩不满,玩家可以点击“在挑战一次”。 2.2设计思路 根据对游戏系统进行的需求分析,本系统将分为6个模块:分别是迷宫主界面模块、记时设计模块、迷宫设计模块、道路和障碍设计模块、动漫冒险者设计模块、出入口设计模块。实现的功能有: (1)迷宫的选择 沈 阳 大 学

课程设计说明书 NO.2

玩家可以根据自身需求来进行选择简单迷宫、中等迷宫、难度迷宫三类中选择一类迷宫进行游戏。 (2)选择道路和障碍的图像 玩家可以根据个人喜好对迷宫中的道路和障碍的图片进行选择,但是图片的格式有规定,必须是“jpg”或“gif”格式的。 (3)游戏记时 当玩家控制迷宫中的动漫人物进行游戏时,计时器就开始进行记时,直到动漫人物到达出口时,记时结束,并在屏幕上显示游戏用时。 (4)开始游戏 玩家将鼠标移动至迷宫中的动漫冒险者,即可看到“单击我然后按键盘方向键”,单击后,游戏开始。玩家即可通过键盘上的方向键进行游戏。 (5)游戏结束 玩家控制动漫冒险者移动至迷宫地图的出口处时,游戏的计时器停止计时,并弹出信息框“恭喜您通关了”,游戏结束。 (6)冒险脚步声 玩家单击动漫冒险者后,便可以用键盘方向键进行控制。动漫冒险者每移动一步便会发出一声“嘟”的响声。 (7)再次挑战 玩家可以根据个人对自己通关时间长短的满意程度选择再次挑战,单击“在挑战一次”即可。 (8)计时界面位置 利用边界式布局管理器BorderLayout将计时界面置于上方。 (9)再次挑战界面位置 利用边界式布局管理器BorderLayout将再次挑战界面置于下方。 沈 阳 大 学

课程设计说明书 NO.3

迷宫冒险系统 迷宫主界面模块 记时设计模块 迷宫设计模块 道路和障碍设计模块 动漫冒险者设计模块 出入口设计模块 图1迷宫冒险系统6大模块 2.3设计方法 (1)迷宫冒险系统主界面模块 迷宫冒险系统主界面模块包括MazeWindow.java和Maze.java两个文件。MazeWindow是迷宫冒险系统的主运行类,其中有运行整个程序的main方法,该文件生成了Maze类的一个实例,从而生成了迷宫冒险系统的界面。MazeWindow类继承自JFrame类,以ActionListener为接口实现了事件侦听的接口,它有一个不带参数的构造方法MazeWindow (),用来生成MazeWindow的实例。MazeWindow类将所有的功能集中到菜单栏中,并通过调用其他模块来实现迷宫冒险系统的各个功能。 (2)记时设计模块 记时设计模块主要由HandleMove.java共1个文件组成。HandleMove类继承自JPanel类,以ActionListener为接口实现事件的侦听的接口。该模块利用了一个2维数组来进行实现,并对计时显示的字体、背景色、显示位置进行设计。该模块定义了一个无参返回值的变量SpendTime,利用SpendTime这个变量来对记时的开始触发源和记时的结束触发源。 沈 阳 大 学

课程设计说明书 NO.4

动漫冒险者运动 记时开始 动漫冒险者到达出口 图2 记时功能结构图 记时结束 (3)迷宫设计模块 迷宫设计模块主要由2个2维数组组成,它们组成了主界面中“选择迷宫”菜单的内容,其中包括简单迷宫、中等迷宫、难度迷宫三大类。该模块的类继承自JLayeredPane类,主要通过2个2维数组来实现。并且对迷宫中的道路和障碍的插入图片格式进行了要求。该模块使用try和catch来捕获和处理异常。当迷宫地图不可用时则弹出对话框“无效的迷宫文件”。 (4)道路和障碍设计模块系统 道路和障碍设计模块主要由MazePoint.java这个文件组成,这个文件组成了主界面中的迷宫地图中的道路和障碍的内容。 (5)动漫冒险者设计模块 动漫冒险者设计模块主要是对迷宫地图中处于入口处的动漫冒险玩家进行设计。该模块利用语句使鼠标箭头移动到动漫冒险者上时显示文字“单击我,然后按键盘方向键”,并为冒险者的图片格式、长度、宽带、初始位置等等进行进一步的设计,让动漫冒险者更加生动。 (6)出入口设计模块 出入口设计模块主要是定义了出口与入口以及当动漫冒险者处于这两个位置时的状态和事件的链接。 (7)迷宫冒险流程图 沈 阳 大 学

课程设计说明书 NO.5

开始 进入主界面 简单迷宫地图 Yes 迷宫选择 中等迷宫地图 确认选择 No 默认的迷宫地图 难度迷宫地图 Yes 路和障碍选择 自行选择符合格式的道路和障碍图片 No 点击冒险者 确认选择 键盘方向键控制 到达出口 再次挑战 结束 图3迷宫冒险流程图 3.设计结果与分析 在开发环境为JCreator的电脑上编写java程序,利用java程序实现迷宫冒险的运作。程序包含MazeWindow.java、HandleMove.java、Maze.java、MazePoint.java、PersonInMaze.java、WallOrRoad.java六个java源文件。其中MazeWindow为程序的主类,贯穿始终,通过调用其他模块功能来实现整个迷宫冒险小游戏的全部功能,是游戏安全运行。程序进过检查修改无误后运行得到如下运行结果。 (1)迷宫冒险运行主界面 沈 阳 大 学

课程设计说明书 NO.6

图4 主界面 主界面由3个选项卡、1个迷宫地图和记时界面3部分组成。3个选项卡分别为“迷宫选择”、“选择路和墙的图像”、“再挑战一次”,各自有着不同的功能。迷宫地图中的蓝色机器猫为迷宫冒险者。 (2)选择迷宫界面,如图5所示。 图5 迷宫选择界面 点击迷宫冒险主界面上的“选择迷宫”选项卡,玩家即可选择“简单迷宫”、“中等迷宫”、“难度迷宫”这3大类难易程度各不相同迷宫中的适合自己的一个进行迷宫冒险游戏。 (3)选择墙和路的图像界面,运行界面如图6所示。 沈 阳 大 学

课程设计说明书 NO.7

图6 选择墙和路的图像界面 单击迷宫主界面上的“选择墙和路的图像”选项卡,玩家即可对迷宫冒险游戏的墙和路进行个性化设计。 (4)墙的图像选择,运行界面如图7所示。单击打开后即可成功设置,如图8所示。 图7 墙的图像选择界面 图8墙的个性化界面图 再单击“墙的图像”进入这个界面,便可选择玩家想要的并且符合格式要求的图像作为墙。路的选择也如此。 (5)记时界面,运行效果如图9所示。 沈 阳 大 学

课程设计说明书 NO.8

图9 用时界面 玩家单击迷宫地图上的动漫冒险者之后,主界面上既可以看到记时器已经被触发,开始显示“您的用时:*秒”,一直到玩家所控制的动漫冒险者到达迷宫地图上的出口处,记时停止。 (6)通关提示界面,运行效果如图10所示。 图10 通关提示界面 当玩家控制的动漫冒险者到达迷宫地图上的出口位置时,即表示玩家完成了一次迷宫冒险游戏,主界面上会弹出一个对话框,对话框的内容为“恭喜您通关了”,点击确定可继续。 (7)再次挑战界面,运行效果如图11所示。 图11再次挑战界面 当玩家通关后或者正在通关时,想再挑战时便可以单击迷宫冒险主界面下方的“再挑战一次”选项卡,这个选项卡可以将处于任何状态的运行的主界面的任务初始化,让玩家重新开始。 (8)鼠标移至人物上界面,如图12所示。 图12鼠标移至人物上界面 当游戏未开始时,玩家可将鼠标移动至动漫迷宫冒险者上,便可看到“单击我然后按键盘方向键”的提示。 4.设计体会 本次Java课程设计我们这组做的课题是迷宫,刚开始拿到题目我不知如何下手,沈 阳 大 学

课程设计说明书 NO.9

经过自己查找资料,以及找其他同学请教,我确定了设计的设计目标以及具体实现方式,包括如何将 Java 的思想运用到实际系统的详细设计之中。 实验过程中,首先要将系统要实现的功能分为几大模块,然后挨个模块分别完成,在此过程中使我加深了对 Java 的理解,以及如何进行系统模块的划分,学会发现其他同学的长处,并积极请教问题。虽然大家都已经学过Java,但大家都有存在各类问题,所以通过努力实验,进一步培养我们利用Java语言进行编程和调试程序的能力,同时使我能够学会利用java不同的类编写较复杂具有实际意义和算法复杂度较小的程序。与此同时熟练掌握Java语言的编辑,编译,调试程序,并将算法转变为程序实现。正确理解各种数据类的逻辑特性和存储表示和基本操作的算法实现。掌握算法的时间分析和空间分析的技术。针对问题的特点选择合适的数据类型,设计实用高效的算法,提高大家的算法设计的能力和动手实验的技能。实验过程中,我们分为逻辑设计和详细设计两个步骤实现.逻辑设计指的是对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据类为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各函数的算法作为逻辑设计的结果,应写出每个抽象数据类型的定义,各主要模块的算法,并画出模块之间的调用关系图;详细设计的结果是对数据类的基本操作的规格说明做出进一步的求精,写出类存储结构的类型定义,按照算法书写规范用类 java语言写出函数形式的算法框架。. 通过这次课程设计,使我灵活应用所学java类和包的知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;并用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养我们严谨的科学态度和良好的工作作风。 熟练掌握java的类、包的基本操作的实现, 能够利用存储设计算法解决简单的问题。同时在这学期的课程设计中,培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。在实验课上, 我学会了很多学习的方法。而这是日后最实用的。 要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我的将来也有很大的帮助。以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我都可以在实验结束之后变的更加成沈 阳 大 学

课程设计说明书 NO.10

熟,会面对需要面对的事情,以及学会遇到问题,不急不慌,慢慢解决它 这次课程设计本人复习书本,上网查资料,图书馆查资料,遇到实在是不会的,就去问同学问老师。终于历时两个星期在大家的帮助下顺利完成了本次课程设计。虽然过程辛苦是不可避免,但收获还是令人感到尤其的欣慰。 在这次的课程设计中不仅检验了我所学习的知识, 也培养了我的实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终 完成整个事情。 在设计过程中,学会利用各种工具查资料,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。 实验过程中,也十分感谢实验指导老师的指点与教导。这次课程设计不仅是对这学期所学知识的 一种综合检验,而且也是对自己动手能力的一种提高,增强了自己实践能力。通过这次课程 设计使我明白了自己知识还比较欠缺,只是学习书本知识还是远远不够的,自己不会的东西 还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。 5.参考文献 [1]丁振凡.Java语言实用教程[M].北京:北京邮电大学出版社,2005 [2] ]刘升华.JAVA从入门到实践[M].北京:清华大学出版社 2009 [3] 陈国君. Java2设计基础[M].北京:清华大学出版社 2009 [4]朱喜福.Java程序设计[M].北京:人民邮电出版社 2005 [5]饶一梅. Java语言程序设计[M].北京:人民邮电出版社 2009 附录 (1)//MazeWindow.java import javax.swing.*; 沈 阳 大 学

课程设计说明书 NO.16

recordTime.start(); PersonInMaze person=null; person=(PersonInMaze)e.getSource(); int m=-1,n=-1; MazePoint startPoint=person.getAtMazePoint(); for(int i=0;i

课程设计说明书 NO.17

} } else if(e.getKeyCode()==KeyEvent.VK_LEFT){ int k=Math.max(n-1,0); if(p[m][k].getWallOrRoad().getIsRoad()){ tool.beep(); person.setAtMazePoint(p[m][k]); person.setLocation(p[m][k].getX(),p[m][k].getY()); } } else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ int k=Math.min(n+1,p[0].length-1); if(p[m][k].getWallOrRoad().getIsRoad()){ tool.beep(); person.setAtMazePoint(p[m][k]); person.setLocation(p[m][k].getX(),p[m][k].getY()); } } } public void actionPerformed(ActionEvent e){ spendTime++; showTime.setText(\您的用时:\秒\ } public void keyReleased(KeyEvent e){ PersonInMaze person=(PersonInMaze)e.getSource(); int m=-1,n=-1; MazePoint endPoint=person.getAtMazePoint(); if(endPoint.getWallOrRoad().getIsOut()){ 沈 阳 大 学

课程设计说明书 NO.18

recordTime.stop(); JOptionPane.showMessageDialog(this,\恭喜您通关了\消息框\ JOptionPane.INFORMATION_MESSAGE ); } } public void keyTyped(KeyEvent e) {} } (3) //Maze.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class Maze extends JLayeredPane{ File mazeFile; MazePoint [][] mazePoint; WallOrRoad [][] wallOrRoad; PersonInMaze person; HandleMove handleMove; File wallImage,roadImage; int distance=26,m=0,n=0; public Maze(){ setLayout(null); wallImage=new File(\ roadImage=new File(\ person=new PersonInMaze(); handleMove=new HandleMove(); handleMove.initSpendTime(); 沈 阳 大 学

课程设计说明书 NO.19

person.addKeyListener(handleMove); setLayer(person,JLayeredPane.DRAG_LAYER); } public void setMazeFile(File f){ mazeFile=f; char [][]a; RandomAccessFile in=null; String lineWord=null; try{ in=new RandomAccessFile(mazeFile,\ long length=in.length(); long position=0; in.seek(position); while(position=n) n=str.length(); position=in.getFilePointer(); m++; } a=new char[m][n]; position=0; //位置 in.seek(position); m=0; while(position

课程设计说明书 NO.20

} in.close(); wallOrRoad=new WallOrRoad[m][n]; for(int i=0;i

课程设计说明书 NO.21

mazePoint=new MazePoint[m][n]; int Hspace=distance,Vspace=distance; for(int i=0;i

课程设计说明书 NO.22

} } handleMove.setMazePoint(mazePoint); } catch(IOException exp){ JButton mess=new JButton(\无效的迷宫文件\ add(mess); mess.setBounds(30,30,100,100); mess.setFont(new Font(\宋体\ System.out.println(exp+\ } } public void setWallImage(File f){ wallImage=f; for(int i=0;i

课程设计说明书 NO.23

wallOrRoad[i][j].repaint(); } } } public HandleMove getHandleMove(){ return handleMove; } } (4)//MazePoint.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; 沈 阳 大 学

课程设计说明书 NO.24

} 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; } } (5)//PersonInMaze.java import javax.swing.*; import java.awt.*; public class PersonInMaze extends JTextField{ MazePoint point; Toolkit tool; PersonInMaze(){ tool=getToolkit(); setEditable(false); setBorder(null); setOpaque(false); setToolTipText(\单击我,然后按键盘方向键\ } public void setAtMazePoint(MazePoint p){ 沈 阳 大 学

课程设计说明书 NO.25

point=p; } public MazePoint getAtMazePoint(){ return point; } public void paintComponent(Graphics g){ super.paintComponent(g); int w=getBounds().width; int h=getBounds().height; Image image=tool.getImage(\ g.drawImage(image,0,0,w,h,this); } } (6)//WallOrRoad.java import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.io.*; public class WallOrRoad extends JPanel{ boolean isRoad,isWall,isEnter,isOut; MazePoint point; File wallImage,roadImage; Toolkit tool; WallOrRoad(){ tool=getToolkit(); } public void setIsEnter(boolean boo){ isEnter=boo; 沈 阳 大 学

课程设计说明书 NO.26

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)); } 沈 阳 大 学

课程设计说明书 NO.27

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); 沈 阳 大 学

课程设计说明书 NO.28

} } catch(Exception exp){} } } 沈 阳 大 学

本文来源:https://www.bwwdw.com/article/i9tp.html

Top