走迷宫游戏设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《面向对象程序设计》
课程设计报告
题目:“走迷宫”游戏制作
专业:计算机科学与技术
班级:计算机科学与技术14(1)
**:***
****:***
成绩:
计算机学院
2016年 5 月 28 日
计算机学院《面向对象程序设计》课程设计报告
目录
1、设计目的与要求--------------------------------------------------- 1
1.1 设计目的--------------------------------------------------- 1
1.2 设计要求--------------------------------------------------- 1 1.3 实现功能------------------------------------------------------- 1
1.4 界面设计-------------------------------------------------- 1
2、开发平台和技术--------------------------------------------------- 2
2.1 Java语言-------------------------------------------------- 2 2.2 GreenFoot------------------------------------------------- 3
2.3 环境配置-------------------------------------------------- 3
3、模块具体实现和主要动画触发-------------------------------------- 3
4、总结------------------------------------------------------------- 4
5、参考文献:------------------------------------------------------- 4
6、附录:----------------------------------------------------------- 5
“走迷宫”游戏制作
1、设计目的与要求
1.1 设计目的
(1)熟练掌握数据结构的基本算法,提高算法设计与分析能力;
(2)基本掌握面向对象设计基本思路和方法;
(3)利用所学的基本知识和技能,解决简单的程序设计问题;
(4)提高学生的科技论文写作能力;
1.2 设计要求
(1)课程设计前必须根据课程设计题目认真准备实验源程序及调试时所需的数据;
(2)要求采用简明、严格的问题描述,设计求解算法;
(3)数据结构选用得当,程序结构合理;
(4)程序简明易懂,多运用输出提示,程序运行正确;
(5)对设计进行总结和讨论;
1.3 实现功能
(1)用户可以通过单击走迷宫小人图像,开始默认模式的走迷宫游戏。

当小人图像开始移动,计时开始。

(2)当用户想重新开始游戏时,可以点击窗口下方的【重新开始】按钮,重新开始游戏。

(3) 用户可以单击菜单栏“选择迷宫”菜单,选择不同模式的迷宫游戏。

(4) 用户还可以选择菜单栏“选择墙和路的图像(JPG,GIF)”菜单,从电脑中选取自己喜欢的图片作为墙和路的图像进行游戏。

1.4 界面设计
(1)编制一个求解迷宫通路的图形界面演示程序。

(2)设置一个可以任意设置障碍,删除障碍的迷宫。

并求出迷宫的一条通路
(3)根据用户界面提示,可以使用事先设定的迷宫也可以使用自定义的迷宫。

在着迷宫同路的过程中,需将查找的过程演示出来,并且在最后时,需要标记出查找成功的一条路径。

2、开发平台和技术
2.1 Java语言
java语言的流行除了因为它能够编制嵌入HTML文件中的Applet外,还在于Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点java 语言的结构与编写方式,与c++语言类似,因此学习Java语言,不仅要了解Java语言特点,同时还要有程序设计基础和面向对象的概念。

java语言的特点如下:
java语言的特点一:简单、高效
Java语言的特点二:面向对象
Java语言的特点三:平台无关性
Java语言的特点四:交互式特性
Java语言的特点五:多线程机制
Java语言的特点六:动态的内存管理机制
Java语言的特点七:安全性
2.2 GreenFoot
Greenfoot[1]是针对那些想让自己熟悉如何使用Java的人而设计的,是一个功能完整的开发环境,可以使用Java方便地编写游戏和进行模拟。

它还可以被用来作为Java语言的教程,以及设计2D小游戏,可以实用于所有年龄段的用户,而不仅仅是初学者。

2.3 环境配置
J DK ersion: 2.3.0(版本)及Greenfoot的安装
3、模块具体实现和主要动画触发
在设计走迷宫小游戏时,编写了6个JAVA源文件:MazeWindow.java、MazePoint.java、WallOrRoad.java、Maze.java、PersonInMaze.java、HandleMove.java
1、PersonInMaze.java
此类继承了JTextField类,当鼠标指向小人图像时会有提示信息“单击我,然后按键盘方向键”。

获取走迷宫者的小人图像。

2、MazePoint.java
该类获取MazePoint对象的坐标值,并返回。

3、WallOrRoad.java
此类继承了JPanel类,JPanel 是一般轻量级容器,在此容器上定义了迷宫图形。

4、Maze.java
Maze类对JLayeredPane进行了继承,JLayeredPane位容器添加了深度,允许组件在需要时互相重叠。

Integer 对象指定容器中每个组件的深度,其中编
号较高的组件位于其他组件之上。

5、HandleMove.java
HandleMove类不仅对JPanel类进行了继承,还改写了keyPressed(KeyEvent e)和actionPerformed(ActionEvent e),实现了KeyListener和ActionListener 两个接口,对鼠标和键盘添加了监听器,使鼠标和键盘可以完成相应操作。

6.MazeWindow.java
MazeWindow是本游戏程序的主类,在此类中对菜单和菜单项进行了设计。

4、总结
“走迷宫”游戏的基本功能都已实现,在此程序中各类间反复的关联和依赖关系让类与类之间的关系复杂,稍有不明白程序就无法继续下去。

但是该游戏仅仅对几个简单的迷宫游戏进行了设计,没有实现平常的通关模式的设计,这是此游戏应该改进的地方。

通过这次“走迷宫”游戏的设计让我明白了理论与实践相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践结合起来,从理论中得出结论,才能真正的提高自己的水命,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说是困难重重,并且还发现了自己的很多不足之处,对以前所学过的知识理解得不够深刻、透彻,掌握的不够牢固。

同时在这次的设计中也有小小的体验了一下做项目的感受。

我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。

我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。

5、参考文献:
[1]王元珍,韩宗芬.IBM-PC宏汇编语言程序设计[M].第二版.华中理工大学出版社,2005
[2]叶核亚.数据结构[M].Java版第2版.北京:电子工业出版社,2009
[3]耿祥义,张跃平.Java基础教程[M].第2版.北京:清华大学出版社,2009
[4]刘小晶.数据结构[M].Java语言描述.北京:清华大学出版社,2009
6、附录:
public class PersonInMaze extends JTextField{
MazePoint point;
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 paintComponent(Graphics g){
super.paintComponent(g);
int w=getBounds().width;
int h=getBounds().height;
Image image=tool.getImage("person.gif"); //获得image图像g.drawImage(image,0,0,w,h,this);//绘制image图像。

}
}
public class MazePoint{
int x,y;
public MazePoint(int x,int y){
this.x=x;
this.y=y;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public boolean equals(MazePoint p){
if(p.getX()==this.getX()&&p.getY()==this.getY()) /*如果MazePoint的对象p的x、y值和上面返回的x、y值相同,则返回true,否则返回false*/
return true;
else
return false;
}
}
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;
if(isEnter==true)
add(new JLabel("入口"));//定义迷宫的入口
}
Public boolean getIsEnter(){
return isEnter;
}
public void setIsOut(boo lean 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)); /*
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);
}
public class MazeWindow extends JFrame implements ActionListener{ Maze maze;
JMenuBar bar;//声明菜单条对象
JMenu menuChoice,menuImage;//声明菜单对象
JMenuItem wallImage,roadImage,defaultImage;//声明菜单项对象
File mazeFile,wallImageFile,roadImageFile;
JButton renew;//声明按钮对象
MazeWindow(){
wallImageFile=new File("wall.jpg");
roadImageFile=new File("road.jpg");
bar=new JMenuBar();//创建菜单条对象
menuChoice=new JMenu("选择迷宫");
File dir=new File(".");
File file[]=dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith("maze"); } });
for(int i=0;i< file.length;i++)
{
JMenuItem item=new JMenuItem(file[i].getName());
item.addActionListener(this);
menuChoice.add(item);
}
mazeFile=new File(file[0].getName());
init();
menuImage=new JMenu("选择墙和路的图像(JPG,GIF)");//创建菜单对象wallImage=new JMenuItem("墙的图像");//创建菜单项对象
roadImage=new JMenuItem("路的图像");
defaultImage=new JMenuItem("墙和路的默认图像");
menuImage.add(wallImage);//菜单项添加到菜单上,
menuImage.add(roadImage);
menuImage.add(defaultImage);
bar.add(menuChoice);
bar.add(menuImage);//菜单添加到菜单条上
setJMenuBar(bar);
wallImage.addActionListener(this);//为菜单项添加监听器roadImage.addActionListener(this);
defaultImage.addActionListener(this);
renew=new JButton("重新开始");
renew.addActionListener(this);//为“重新开始”按钮添加监听器add(maze,BorderLayout.CENTER);//默认布局,
add(renew,BorderLayout.SOUTH);
setVisible(true);
setBounds(60,60,510,480);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*EXIT_ON_CLOSE:退出应用程序后的默认窗口关闭操作*/ }。

相关文档
最新文档