基于Java的走迷宫游戏的软件设计.docx
- 文档编号:24337123
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:19
- 大小:235.83KB
基于Java的走迷宫游戏的软件设计.docx
《基于Java的走迷宫游戏的软件设计.docx》由会员分享,可在线阅读,更多相关《基于Java的走迷宫游戏的软件设计.docx(19页珍藏版)》请在冰豆网上搜索。
基于Java的走迷宫游戏的软件设计
成绩评定表
学生姓名
班级学号
专业
电子信息工程
课程设计题目
基于Java的走迷宫游戏的软件设计
评
语
组长签字:
成绩
日期
2013年月日
课程设计任务书
学院
信息学院
专业
电子信息工程
学生姓名
班级学号
课程设计题目
基于Java的走迷宫游戏软件设计
实践教学要求与任务:
采用java技术设计走迷宫游戏软件,游戏的结果是让走迷宫者从迷宫的入口处走到迷宫的出口处。
设计要求如下:
(1)程序根据文本文件生成迷宫,这些文本文件称作迷宫文件。
迷宫文件的扩展名为.maze,其中的文本内容有着特殊的组织结构:
任意两行文本所含有的自符个数必须相同,而且字符只可以是“*”、“#”、“0”或“1”。
迷宫文件中的“*”和“#”分别代表迷宫的入口和出口,“0”和“1”分别代表迷宫中的“路”和“墙”。
//简单迷宫.maze文件
1*11111111
1000100001
1101101111
1000000001
1111111#11
(2)用户可以通过界面上提供的惨淡选项,选择“迷宫文件”来生成对应的“迷宫”。
(3)用户可以通过界面上提供的菜单选项,选择迷宫中的“墙”和“路”的外观图像。
(4)用户可以通过随时单击界面上提供的按钮,重新开始走“迷宫”。
工作计划与进度安排:
第18周:
布置课程设计任务,查阅资料,分组设计,程序调试。
第19周:
程序调试,编写课程设计报告,验收,答辩。
指导教师:
2013年6月20日
专业负责人:
2013年6月20日
学院教学副院长:
2013年6月20日
2.2.1基本要求………………………………………………………4
2.2.2课程设计论文编写要求………………………………………4
2.2.3课设考核………………………………………………………5
2.2.4选择课程设计题目具体要求…………………………………5
第1章绪论
1.编制一个求解迷宫通路的图形界面演示程序
2.设置一个可以任意设置障碍,删除障碍的迷宫。
并求出迷宫的一条通路
3.根据用户界面提示,可以使用事先设定的迷宫也可以使用自定义的迷宫。
在着迷宫同路的过程中,需将查找的过程演示出来,并且在最后时,需要标记出查找成功的一条路径。
第2章走迷宫游戏的描述
2.1本课程设计的目的
(1)熟练掌握数据结构的基本算法,提高算法设计与分析能力;
(2)基本掌握面向对象设计基本思路和方法;
(3)利用所学的基本知识和技能,解决简单的程序设计问题;
(4)提高学生的科技论文写作能力;
2.2课程设计的任务及要求
2.2.1基本要求
(1)课程设计前必须根据课程设计题目认真准备实验源程序及调试时所需的数据;
(2)要求采用简明、严格的问题描述,设计求解算法;
(3)数据结构选用得当,程序结构合理;
(4)程序简明易懂,多运用输出提示,程序运行正确;
(5)对设计进行总结和讨论;
2.2.2课程设计论文编写要求
(1)要按照书稿的规格打印撰写课设论文;
(2)论文包括目录、正文、总结和体会、参考文献、附录等;(3)正文中要有问题描述、设计求解算法、算法的实现、调试分析(调
试时出现的主要问题:
编译语法错误及修改,重点是运行逻辑问题修改和调整);
(4)课设论文装订按学校的统一要求完成;
2.2.3课设考核
从以下几方面来考查:
(1)出勤情况;
(2)设计任务的难易程度及饱满程度;
(3)课设任务完成情况;
(4)动手调试能力;
(5)论文撰写的原理分析、设计思路以及论述的层次性、条理性、格式的规范性;
2.2.4选择课程设计题目具体要求
(1)用递归算法实现,以栈和队列作为辅助结构,
(2)并设计图形用户界面提供迷宫大小、入口及出口位置和初始状态等,
(3)演示走迷宫的过程和结果。
第3章走迷宫游戏的分析与设计
3.1游戏的设计
3.1.1功能设计
1.用户可以通过单击走迷宫小人图像,开始默认模式的走迷宫游戏。
当小人图像开始移动,计时开始。
2.当用户想重新开始游戏时,可以点击窗口下方的【重新开始】按钮,重新开始游戏。
3.用户可以单击菜单栏“选择迷宫”菜单,选择不同模式的迷宫游戏。
4.用户还可以选择菜单栏“选择墙和路的图像(JPG,GIF)”菜单,从电脑中选取自己喜欢的图片作为墙和路的图像进行游戏。
3.1.2类的设计
在设计走迷宫小游戏时,编写了6个JAVA源文件:
MazeWindow.java、MazePoint.java、WallOrRoad.java、Maze.java、PersonInMaze.java、HandleMove.java
1.PersonInMaze.java
此类继承了JTextField类,当鼠标指向小人图像时会有提示信息“单击我,然后按键盘方向键”。
获取走迷宫者的小人图像。
publicclassPersonInMazeextendsJTextField{
MazePointpoint;
Toolkittool;
PersonInMaze(){
tool=getToolkit();//获得工具包
setEditable(false);//不可见
setBorder(null);//无边框
setOpaque(false);//非透明的
setToolTipText("单击我,然后按键盘方向键");//提示信息,如图3-1所示。
}
publicvoidsetAtMazePoint(MazePointp){
point=p;
}
publicMazePointgetAtMazePoint(){
returnpoint;
}
publicvoidpaintComponent(Graphicsg){
super.paintComponent(g);
intw=getBounds().width;
inth=getBounds().height;
Imageimage=tool.getImage("person.gif");//获得image图像
g.drawImage(image,0,0,w,h,this);//绘制image图像。
}
}
图3-1
2.MazePoint.java
该类获取MazePoint对象的坐标值,并返回。
publicclassMazePoint{
intx,y;
publicMazePoint(intx,inty){
this.x=x;
this.y=y;
}
publicintgetX(){
returnx;
}
publicintgetY(){
returny;
}
publicbooleanequals(MazePointp){
if(p.getX()==this.getX()&&p.getY()==this.getY())
/*如果MazePoint的对象p的x、y值和上面返回的x、y值相同,则返回true,否则返回false*/
returntrue;
else
returnfalse;
}
}
3.WallOrRoad.java
此类继承了JPanel类,JPanel是一般轻量级容器,在此容器上定义了迷宫图形,如图3-2。
publicclassWallOrRoadextendsJPanel{
booleanisRoad,isWall,isEnter,isOut;
MazePointpoint;
FilewallImage,roadImage;
Toolkittool;
WallOrRoad(){
tool=getToolkit();
}
publicvoidsetIsEnter(booleanboo){
isEnter=boo;
if(isEnter==true)
add(newJLabel("入口"));//定义迷宫的入口
}
publicbooleangetIsEnter(){
returnisEnter;
}
publicvoidsetIsOut(booleanboo){
isOut=boo;
if(isOut==true)
add(newJLabel("出口"));//定义迷宫的出口
}
publicbooleangetIsOut(){
returnisOut;
}
publicvoidsetIsRoad(booleanboo){
isRoad=boo;
if(isRoad==true){
setBorder(null);//置此组件的边框,无
}
}
publicbooleangetIsRoad(){
returnisRoad;
}
publicvoidsetIsWall(booleanboo){
isWall=boo;
if(isWall==true)
setBorder(newSoftBevelBorder(BevelBorder.RAISED));
/*SoftBevelBorder是实现某种斜面的类,这种斜面要么凸出要么凹入且拐角圆滑,BevelBorder该类实现简单的双线斜面边框,RAISED:
凸出斜面类型。
*/
}
……
catch(Exceptionexp){}
}
}
2.Maze.java
Maze类对JLayeredPane进行了继承,JLayeredPane为容器添加了深度,允许组件在需要时互相重叠。
Integer对象指定容器中每个组件的深度,其中编号较高的组件位于其他组件之上。
publicMaze(){
setLayout(null);
wallImage=newFile("wall.jpg");
roadImage=newFile("road.jpg");
person=newPersonInMaze();
handleMove=newHandleMove();
handleMove.initSpendTime();
person.addKeyListener(handleMove);
setLayer(person,JLayeredPane.DRAG_LAYER);
}
DRAG_LAYER:
拖动一个组件时,将该组件重分配到拖动层可确保将其定位在容器中的其他所有组件之上。
完成拖动后,可将该组件重分配到其正常层。
这样可确保person图像在走到roadImage图像时可覆盖roadImage图像,在走过后roadImage显示,
如图3-3、
如图3-4。
publicvoidsetMazeFile(Filef){
mazeFile=f;
char[][]a;
RandomAccessFilein=null;
StringlineWord=null;
try{in=newRandomAccessFile(mazeFile,"r");//创建RandomAccessFile类的只读对象
/*RandomAccessFile是用来访问那些保存数据记录的文件的,这样你就可以用seek()方法来访问记录,并进行读写了*/
longlength=in.length();
longposition=0;
in.seek(position);
while(position Stringstr=in.readLine().trim(); if(str.length()>=n) n=str.length(); position=in.getFilePointer(); m++; } a=newchar[m][n]; position=0; in.seek(position); m=0; while(position Stringstr=in.readLine(); a[m]=str.toCharArray(); position=in.getFilePointer(); m++; } in.close(); wallOrRoad=newWallOrRoad[m][n]; …… } …… } catch(IOExceptionexp){ JButtonmess=newJButton("无效的迷宫文件"); add(mess); mess.setBounds(30,30,100,100); mess.setFont(newFont("宋体",Font.BOLD,30)); System.out.println(exp+"mess"); } } 这个类通过数组和循环对迷宫进行了设置。 5.HandleMove.java HandleMove类不仅对JPanel类进行了继承,还改写了keyPressed(KeyEvente)和actionPerformed(ActionEvente),实现了KeyListener和ActionListener两个接口,对鼠标和键盘添加了监听器,使鼠标和键盘可以完成相应操作。 6.MazeWindow.java MazeWindow是本游戏程序的主类,在此类中对菜单和菜单项进行了设计。 publicclassMazeWindowextendsJFrameimplementsActionListener{ Mazemaze; JMenuBarbar;//声明菜单条对象 JMenumenuChoice,menuImage;//声明菜单对象 JMenuItemwallImage,roadImage,defaultImage;//声明菜单项对象 FilemazeFile,wallImageFile,roadImageFile; JButtonrenew;//声明按钮对象 MazeWindow(){ wallImageFile=newFile("wall.jpg"); roadImageFile=newFile("road.jpg"); bar=newJMenuBar();//创建菜单条对象 menuChoice=newJMenu("选择迷宫"); Filedir=newFile("."); Filefile[]=dir.listFiles(newFilenameFilter(){ publicbooleanaccept(Filedir,Stringname){ returnname.endsWith("maze"); } }); for(inti=0;i {JMenuItemitem=newJMenuItem(file[i].getName()); item.addActionListener(this); menuChoice.add(item); } mazeFile=newFile(file[0].getName()); init(); menuImage=newJMenu("选择墙和路的图像(JPG,GIF)");//创建菜单对象 wallImage=newJMenuItem("墙的图像");//创建菜单项对象 roadImage=newJMenuItem("路的图像"); defaultImage=newJMenuItem("墙和路的默认图像"); menuImage.add(wallImage);//菜单项添加到菜单上,如图3-5 menuImage.add(roadImage); menuImage.add(defaultImage); bar.add(menuChoice); bar.add(menuImage);//菜单添加到菜单条上,如图3-6 setJMenuBar(bar); wallImage.addActionListener(this);//为菜单项添加监听器 roadImage.addActionListener(this); defaultImage.addActionListener(this); renew=newJButton("重新开始"); renew.addActionListener(this);//为“重新开始”按钮添加监听器 add(maze,BorderLayout.CENTER);//默认布局,如图3-7 add(renew,BorderLayout.SOUTH); setVisible(true); setBounds(60,60,510,480); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*EXIT_ON_CLOSE: 退出应用程序后的默认窗口关闭操作*/ } 如图3-5 如图3-6 如图3-7 3.2类的UML图 第4章软件运行结果 软件运行结果如图4-1: 如图4-1 结论 “走迷宫”游戏的基本功能都已实现,在此程序中各类间反复的关联和依赖关系让类与类之间的关系复杂,稍有不明白程序就无法继续下去。 但是该游戏仅仅对几个简单的迷宫游戏进行了设计,没有实现平常的通关模式的设计,这是此游戏应该改进的地方。 通过这次“走迷宫”游戏的设计让我明白了理论与实践相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践结合起来,从理论中得出结论,才能真正的提高自己的水命,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说是困难重重,并且还发现了自己的很多不足之处,对以前所学过的知识理解得不够深刻、透彻,掌握的不够牢固。 同时在这次的设计中也有小小的体验了一下做项目的感受。 我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。 我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。 参考文献 [1]王元珍,韩宗芬.IBM-PC宏汇编语言程序设计(第二版).华中理工大学出版社. [2]叶核亚《数据结构(Java版)(第2版)》电子工业出版社 [3]耿祥义、张跃平《Java基础教程(第2版)》清华大学出版社 [4]刘小晶《数据结构(Java语言描述)》清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Java 迷宫 游戏 软件设计