Java课程设计走迷宫.docx
- 文档编号:11239709
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:54
- 大小:1.37MB
Java课程设计走迷宫.docx
《Java课程设计走迷宫.docx》由会员分享,可在线阅读,更多相关《Java课程设计走迷宫.docx(54页珍藏版)》请在冰豆网上搜索。
Java课程设计走迷宫
Java语言与面向对象技术
课程设计报告
(2014--2015年度第1学期)
走迷宫
走迷宫的设计
1概述
1.1课程设计目的
1.加深对《Java语言与面向对象技术》课程根底知识的理解,掌握Java语言面向对象程序设计的开发方法和步骤;
2.进一步理解面向对象程序设计的思想和方法,利用Java语言进展程序设计的能力;
3.课程设计将课本上的理论知识和实际应用相结合,锻炼学生发现问题、分析问题和解决问题的能力。
加强学生研发、编写、调试程序的能力;
4.培养学生在项目开发中团队合作精神、创新意识与能力;
5.提高学生科技论文写作能力,规X完成课程设计报告。
1.2课程设计内容
设计GUI界面的走迷宫游戏,游戏的目的是让走迷宫者从迷宫的入口处进从迷宫出口处出。
具体内容如下:
(1)程序根据文本文件生成迷宫,这些文本文件称作迷宫文件。
迷宫文件的扩展名为.maze,其中的文本内容有着特殊的组织结构:
任意两行文本所含有的字符个数必须一样,而且字符只可以是“*〞、“#〞、“0”或“1”。
迷宫文件中的“*〞和“#〞分别代表迷宫的入口和出口,“0”和“1”分别代表迷宫中的“路〞和“墙〞。
例如,迷宫文件“中等〞所生成的迷宫如图1-1所示。
//中等
图1-1中等迷宫界面
〔2〕用户可以通过界面上提供的菜单项选择项,选择“迷宫文件〞来生成对应的迷宫类型。
〔3〕用户可以通过界面上提供的菜单项选择项,选择迷宫中的“墙〞和“路〞的外观图像以与默认“墙〞和“路〞的图像。
同时用户也可以更改迷宫中“走迷宫者〞的图像。
〔4〕当用户开始玩游戏时想重新开始,用户可以随时单击界面上下方图片位置提供的按钮,重新开始走迷宫。
〔5〕本程序还具有音乐播放的功能,当用户成功移动走迷宫者后,程序播放简短的一声音乐。
〔6〕本迷宫程序增加“英雄榜〞功能既排名功能,当用户成功将迷宫中的走迷宫者从入口移动到出口,如果成绩能排进前三名,就弹出一个对话框,将用户的成绩保存到“英雄榜〞中,并且可以查看“英雄榜〞以与删除“英雄榜〞。
2系统需求分析
系统目标
设计一个基于java的走迷宫小游戏,游戏的结果是让走迷宫者从迷宫的入口处走到迷宫的出口处。
根据已有的走迷宫小游戏进展新功能的增加。
主体功能
〔1〕玩家可以任意选择不同的迷宫图进展走迷宫游戏。
〔2〕玩家可以自定义玩家头像、墙的图像以与路的图像。
〔3〕游戏进展时可以点击提示按钮重新开始游戏
〔4〕根据玩家所玩的记录进展排行榜设置,分别列出保存各类型迷宫〔简单迷宫、中等迷宫、复杂迷宫〕的前三名,玩家完后可以点击英雄榜自行查看。
〔5〕玩家可以去除英雄榜并且重新载入游戏。
2.3开发环境
Eclipse
3系统概要设计
系统的功能模块划分
1.系统的总体设计
在设计走迷宫时,需要编写6个java源文件:
MazeWindow.java、Maze.java、WallOrRoad.java、MazePoint.java、PersonInMaze.java、HandleMove.java、Record.java、ShowRecord.java和Sound.java。
走迷宫除了上述6个java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JmenuItem和File等类。
走迷宫所用到的一些重要的类以与之间的组合关系如如下图所示:
图3-1各类之间的关系
2.系统模块划分
本系统主要有以下几个功能模块:
创建走迷宫的主窗口、创建迷宫、创建墙和路与确定位置的对象,创建走迷宫者,创建处理键盘事件对象,创建英雄榜与显示英雄榜。
该软件主要组成模块和各个模块之间的调用关系如如下图所示:
3.2系统流程图
玩家开始打开界面进展游戏,通过菜单项选择项选择简单、中等、复杂迷宫中的一种进展游戏。
开始的界面各个图像是程序默认的图像,玩家也可以根据自己的喜好自行选择文件夹里的图像来设置墙的图像、路的图像以与走迷宫者的图像。
然后玩家根据提示点击走迷宫者开始游戏,玩家通过对键盘的操作来控制走迷宫者,使其从入口进入从出口出来。
在玩的期间如果玩家在十秒内没能从出口出来如此玩家的图像会变成猪的图像。
游戏完毕后如果玩家破纪录如此根据提示进入英雄榜,同时可以查看英雄榜。
玩家还可以去除英雄榜重新打开界面进展游戏。
具体活动流程图如下所示:
图3-3活动流程图
4系统详细设计
系统的主界面设计
1.成员变量
maze是Maze类声明的对象,用来刻画迷宫,是MazeWindow类中最重要的成员之一。
MazeWindow类根据迷宫文件,即根据该类中的mazeFile来创建maze对象。
bar是JMenuBar创建的菜单条,用来添加菜单。
bar被放置在窗口的顶部。
menuChoice是JMenu创建的菜单,其名字为“选择迷宫文件〞。
menuChoice和menuImage被添加到菜单条bar中。
wallImage、roadImage、和defaultImage是JMenuItem创建的菜单项,名字依次为“墙的图像〞、“路的图像〞和“墙和路的默认图像〞,这三个菜单项被添加到菜单menuImage中。
wallImage、roadImage和defaultImage都将当前窗口注册为自己的ActionEvent事件监控器。
mazeFile、wallImageFile和roadImageFile是File的对象,其中mazeFile用来存放迷宫文件的引用,而wallImageFile和roadImageFile分别用来存放迷宫中“墙〞和“路〞的外观图像文件的引用。
renew是utton创建的按钮对象,名字为“重新开始〞。
Renew将当前窗口注册为自己的ActionEvent事件监控器。
2.方法
MazeWindow〔〕是构造方法,负责完成窗口的初始化操作,其重要的操作之一是:
读取当前目录中扩展名为.maze的迷宫文件,并根据迷宫文件的名字创建JMenuItem菜单项添加到menuChoice菜单中,然后将当前窗口注册为每个菜单上的ActionEvent事件监控器。
另外,该构造方法在执行过程中,将mazeFile初始化为menuChoice菜单中的第一个菜单项所代表的迷宫文件,并根据该迷宫文件创建MazeWindow窗口中的maze对象。
该构造方法还对wallImageFile和roadImageFile进展了初始化,并指定迷宫中“墙〞和“路〞所使用的默认图像。
init〔〕方法根据迷宫文件初始化maze对象,完成必要的初始化操作。
actionPerformed〔ActionEvent〕方法是MazeWindow类实现的ActionListener接口中的方法。
MazeWindow类创建的窗口时menuChoice菜单和menuImage菜单中的菜单项以与renew按钮上的ActionEvent事件监控器。
当用户选中某个菜单项或单击按钮时,窗口将执行actionPerformed〔ActionEvent〕方法进展想应得操作。
如果用户选中menuChoice菜单中的某个菜单项,即用户选择了一个迷宫文件,actionPerformed〔ActionEvent〕方法所执行的操作就是改变mazeFile所引用的迷宫文件,然后调用init〔〕方法。
如果用户选中menuImage菜单中的wallImage或roadImageFile菜单项时,actionPerformed〔ActionEvent〕方法所执行的操作就是分别改变wallImage和roadImage所引用的图像文件,从而让maze对象改变“墙〞或路的图像,如果用户选中menuImage菜单中的defaultImage菜单项,actionPerformed〔ActionEvent〕方法所执行的操作就是将wallImage和roadImageFile所引用的图像文件恢复到默认设置,并让maze对象恢复“墙〞或“路〞的默认图像。
当用户单击rennew按钮时,actionPerformed〔ActionEvent〕方法所进展的操作时保持当前的mazeFile所引用的迷宫文件,并执行init方法。
main〔String[]〕方法是程序运行的入口方法。
3.主界面效果图如如下图所示
图4-1主界面图
4.2Maze的设计
1.成员变量
mazeFile是File类声明的对象,用来存放迷宫文件的引用。
mazePoint是MazePoint类型的二位数组,其单元为MazePoint类创建的对象,用来确定“墙〞和“路〞以与“走迷宫者〞的位置,即确定WallOrRoad以与PersonInMaze对象在maze对象中的位置。
wallOrRoad是WallOrRoad类型的二维数组,七单元为WallOrRoad类索川江的对象,用来表示迷宫中的“墙〞或“路〞。
person是PersonInMaze类创建的对象,用来表示迷宫中的“走迷宫者〞。
handleMove是HandleMove类创建的对象,负责处理person对象上的键盘事件。
wallImage和roadImage是File类声明的对象,用来存放绘制“墙〞和“路〞的外观的图文件的引用。
distance、m和n是int型数据。
mazePoint对象根据distance的值来进展初始化,以便确定mazePoint对象之间的距离,m和n的值是二维数组mazePoint的行数和列数。
2.方法
maze〔〕是构造方法,负责创建maze对象。
maze对象调用setmazeFile〔File〕方法可根据参数指定的迷宫文件完成必要的初始化,例如,创建mazePoint和wallOrRoad数组等。
maze对象调用setWallImage〔File〕方法可以设置wallImage文件对象。
maze对象调用setRoadImage〔File〕方法可以设置roadImage文件对象。
maze对象调用getHandleMove〔〕返回到handleMove对象。
3.根据编写的简单迷宫文件所显示的迷宫图像如如下图所示
图4-2简单迷宫图像-
4.3PersonInMaze的设计
1.效果图
PersonInMaze创建的对象效果如下列图
图4-3走迷宫者图像
2.类的主要成员变量和方法
成员变量:
point是MazePoint型对象,用来确定PersonInMaze对象在Maze所创建的迷宫容器的位置。
tool是Toolkit对象,用来获得Inage对象。
方法:
MazePoint〔〕是构造方法,负责完成MazePoint对象的初始化。
PersonInMaze对象调用setAtMazePoint〔MazePoint〕方法设置自己所在的“点〞,即设置属性point的对象引用。
PersonInMaze对象电影getAtMazePoint〔〕返回自己所在的“点〞,即返回point对象的引用。
PersonInMaze对象调用painTponent〔Graphics〕方法绘制图形,即绘制tool对象所获得的Image对象。
4.4WallOrRoad的设计
1.成员变量
isRoad、isWall、isEnter和isOut是boolean型数据,取值为true或false,分别用了表示WallOrRoad对象是否为“路〞、“墙〞、“入口〞和“出口〞。
point是MazePoint型对象,用来确定WallOrRoad对象在Maze所创建的迷宫容器中的位置。
wallImage和roadImage是File类型的对象,用来确定WallOrRoad对象上所绘制的图像文件。
tool是Toolkit型对象,负责创建Image对象。
2.方法
WallOrRoad〔〕是构造方法,负责完成WallOrRoad对象的初始化。
WallOrRoad对象调用setIsEnter〔boolean〕方法设置自己是否为迷宫的“入口〞。
WallOrRoad对象调用getIsEnter〔〕方法判断自己是否为迷宫的“入口〞,即返回isEnter属性的值。
WallOrRoad对象调用setIsOut〔boolean〕方法设置自己是否为迷宫的“出口〞。
WallOrRoad对象调用getIsOut〔〕方法判断自己是否为迷宫的“出口〞,即返回isOut属性的值。
WallOrRoad对象调用setIsRoad〔boolean〕方法设置自己是否为迷宫的“路〞。
WallOrRoad对象调用getIsRoad〔〕方法判断自己是否为迷宫的“路〞,即返回isRoad属性的值。
WallOrRoad对象调用setIsWall〔boolean〕方法设置自己是否为迷宫的“墙〞。
WallOrRoad对象调用getIsWall〔〕方法判断自己是否为迷宫的“墙〞,即返回isWall属性的值。
WallOrRoad对象调用setAtMazePoint〔MazePonit〕方法设置自己所在的“点〞,与设置point对象的引用。
WallOrRoad对象调用getAtMazePoint〔〕方法返回到自己所在的“点〞,即返回point对象的引用。
WallOrRoad对象调用setWallImage〔File〕方法设置wallImage文件对象。
WallOrRoad对象调用setRoadImage〔File〕方法可以设置roadImage文件对象。
WallOrRoad对象调用paintponent〔Graphics〕方法绘制图像,即绘制tool对象根据roadImage或wallImage文件所见获得的Image对象。
4.5MazePoint的设计
1.效果图
MazePoint创建的对象负责确定WallOrRoad对象和PersonInMaze对象在Maze容器中的所在位置。
MazePoint创建的对象没有可现实的效果图。
2.类的主要成员变量和方法
1)成员变量
x和y是MazePoint对象中的两个int型数据,分别用来表示容器坐标系中的x轴坐标和y轴坐标值。
havaWallOrRoad是boolean型数据,如果有WallOrRoad对象在该MazePoint对象上时,haveWallOrRoad的值是true;否如此为false。
wallOrRoad是WallOrRoad类声明的对象,用来存放一个WallOrRoad对象的引用,明确该WallOrRoad对象在当前MazePoint对象上。
2)方法
MazePoint(int,int)是构造方法,用来创建MazePoint对象。
MazePoint对象上是否有WallOrRoad对象,isHaveWallOrRoad()方法返回true;否如此返回false。
MazePoint对象调用setIsWallOrRoad〔boolean〕方法可以根据参数的值设置当前MazePoint对象上是否有WallOrRoad对象。
MazePoint对象调用getX〔〕和getY〔〕方法可以返回其中的x轴坐标和y轴坐标。
MazePoint对象调用equls〔TowerPoint〕方法可以判断当前MazePoint对象是否和参数指定的MazePoint对象一样。
Point对象调用setWallOrRoad〔WallOrRoad〕方法,将参数指定的WallOrRoad对象放置在当前MazePoint对象上。
Point对象调用getWallOrRoad〔〕方法可以返回当前MazePoint对象上的WallOrRoad对象。
4.6Sound的设计
1.成员变量
AudioClip声明对象 aau;String 类声明soundname确定铃声的名字;
设定 boolean型的对象 b初始值为false
2.方法
makeSound(Stringsoundname)制作铃声,setSound(Stringsoundname)设置铃声,stop()使铃声停止,booleanisPlaying()判断铃声是否播放
4.7Record的设计
1.成员变量
Time为时间,设定其初始值为0.
Maze为String类声明的对象,用来确定人物所处的迷宫,message用来输出信息。
textName为JTextField声明的对象,用来设置文本名称,
label为Label声明的对象,其值为空,
utton声明两个对象,分别为确定,取消。
2.方法
Record()方法用来记录成绩,setMaze(Stringmaze)用来设置迷宫类型,actionPerformed(ActionEvente)用来记录走迷宫者的表现,isBrokenRecord(Stringkey,inttime)/在HandleMove中调用,key是迷宫名,此方法用来判断是否破纪录了,writeRecord(Stringkey,Stringmessage),key是迷宫文件名,message是记录地图名、时间、用户名的字符串,写下记录。
3.记录英雄榜效果图如下所示
图4-4记录成绩效果图
5测试
5.1测试方案
首先打开游戏查看游戏的主界面是否符合要求,然后根据提示开始进展游戏。
根据菜单栏选项任意选择一种迷宫游戏看是否根据自己的选择而改变。
点击菜单栏墙和路的图像选择默认的图像检查是否跟代码编写时设置一样,然后根据自己喜好选择不同的图片作为墙和路的背景。
开始游戏根据提示点击走迷宫者图像开有游戏,检查键盘方向键是否控制走迷宫者走的方向,根据键盘的上下左右的控制是否会分别四种不同的声音发出。
检测是否遇到墙就不能走,当走迷宫者在迷宫内十秒内还没有走出看走迷宫者的图像是否变成猪的图像。
当玩家走出迷宫破纪录是否记录个人信息,检查英雄榜是否真有前三名的成绩。
清空英雄榜重新开始游戏查看英雄榜是否真的被清空。
5.2测试结果
1.选择迷宫种类的测试
在原文件内编写不同三种迷宫文件,在主界面中根据选择会出现不同的迷宫如如下图所示:
图5-1中等迷宫图像
图5-2复杂迷宫图像
图5-3简单迷宫图像
2.迷宫图片的设置测试
以上的图像都是默认的图像,玩家可以更改墙、路以与走迷宫者的图像。
在玩家玩超过十秒还没出来的时候走迷宫者会变成猪的头像,点击窗口下方可重新开始游戏。
图5-4选择图片是打开的文件
图5-5修改路、墙走迷宫者后的迷宫图像
3.开始游戏的测试
玩家根据提示点击走迷宫者进展游戏同时开始计时,用键盘上、下、左、右键控制走迷宫者开始走迷宫,只有从入口进从出口处出来游戏才完毕。
如果在迷宫内时间超过十秒钟如此走迷宫者的图像变成猪的图像。
图5-6开始游戏的界面
图5-7游戏超过十秒走迷宫者的图像变化
图5-8上图有小人图像按钮为重新开始按钮
4.破纪录记录成绩的测试
玩家通过迷宫后程序会根据玩家的成绩做出不同响应,并把玩该种迷宫成绩的前三名列入英雄榜。
图5-9游戏完成超过十秒界面
图5-10闯关成功界面
图5-11记录成绩界面
图5-12查看英雄榜界面
6小结
走迷宫的游戏功能已经根本实现,在此次课程设计过程中,我遇到了一些问题在程序中各类的反复关联和依赖关系让类与类之间的关系复杂,不是能很好的把握,这样对游戏的实现造成了一定的麻烦,通过向同学请教渐渐地摸索了一些,而当把各个类都编写完之后,程序运行不起来,当时觉得很困惑,明明自己编写的类已经没什么过失,可就是运行不起来有点小郁闷,再经同学指点发现原来是一些必要的文件的存放路径不对,当一切都整合完毕之后,程序运行起来了,这让我十分开心。
同时我也意识到团队合作的重要性,个人的力量在某些方面是有限的,而一个团队的智慧是无穷大的。
通过这次“走迷宫’的课程设计更让我意识到了理论与事件结合的在重要性,只有理论知识是完全不够的,我们还要学会将它运用到实践中,用它来实现我们所要做的项目。
亲身的实践让我们对理论知识的一些难点和不懂的地方有了更好地理解与认识。
希望以后能有更多的机会动手来进展操作。
参考文献
[1]耿祥义,X跃平. Java2实用教程(第三版)[M].:
清华大学,2006
[2]耿祥义. Java课程设计(第三版)[M].:
清华大学,2004
[3]X跃平.Java2实用教程实验指导与习题解答〔第三版〕[M].:
清华大学,2004
附录
附录1源程序清单
MazeWindow
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.util.Hashtable;
importjavax.swing.filechooser.*;
publicclassMazeWindowextendsJFrameimplementsActionListener{
Mazemaze;
JMenuBarbar;//声明菜单条对象
JMenumenuChoice,menuImage,hero;//声明菜单对象
JmenuItemwallImage,roadImage,defaultImage,playerImage1,heroItem,heroclear;
FilemazeFile,wallImageFile,roadImageFile;
uttonrenew;//声明按钮对象
Stringplayer="人.jpg";
ShowRecordshowRecord;//ShowRecord类创建一个类对象
File英雄榜=newFile("英雄榜.txt");
Filefile[]=null;
staticString[]mazeName;
staticStringcurrentMap;
Hashtablehashtable=null;//哈希表(英雄榜)
MazeWindow(){
wallImageFile=newFile("墙.jpg");
roadImageFile=newFile("路.jpg");
bar=newJMenuBar();//创建菜单条对象
menuChoice=newJMenu("选择迷宫");
Filedir=newFile(".");
file=dir.listFiles(newFilenameFilter(){
publicbooleanaccept(Filedir,Stringname){
returnname.endsWith("maze");
}
}
);
mazeName=newString[file.length];
for(inti=0;i { mazeName[i]=file[i].getName().substring(0,file[i].getName().length()-5);//substring(截取的起始位置,截取的长度); } for(inti=0;i { JMenuItemitem=newJMenuItem(mazeName[i]); item.addActionListener(this); menuChoice.add(item); } mazeFile=newFile(file[0].getName());
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 迷宫
![提示](https://static.bdocx.com/images/bang_tan.gif)