推箱子Java课程设计报告书.docx
《推箱子Java课程设计报告书.docx》由会员分享,可在线阅读,更多相关《推箱子Java课程设计报告书.docx(50页珍藏版)》请在冰豆网上搜索。
![推箱子Java课程设计报告书.docx](https://file1.bdocx.com/fileroot1/2022-10/13/ab6744b7-9257-4efd-a1c7-c442be254e48/ab6744b7-9257-4efd-a1c7-c442be254e481.gif)
推箱子Java课程设计报告书
《面向对象程序设计》
课程设计报告
题目:
经典推箱子趣味游戏设计与实现
院(系):
信息科学与工程学院
专业班级:
计算机科学与技术1201班
学生:
程伟
学号:
20121183011
指导教师:
吴奕
2014年12月29日至2015年1月9日
华中科技大学武昌分校制
面向对象程序设计课程设计任务书
一、设计(调查报告/论文)题目
经典推箱子趣味游戏设计与实现
二、设计(调查报告/论文)主要容
容:
本游戏要求用户将游戏地图中所有放置着的箱子推到指定的地点来完成游戏,用户通过绕开地图中的障碍物将可移动的箱子推到目的地,游戏的难度在于要求用户通过合理的路径安排来使所有的箱子最后都到达目的地。
游戏一共50关,随着关数的升高,游戏的难度随之增大。
基本功能与要求:
1初始化游戏界面设计
2地图的绘制
3每一关都按照数组重新绘制地图
4小人与箱子的移动
5完成"悔一步"的操作。
三、原始资料
1.《面向对象程序设计课程设计》指导书
2.耿祥义.JAVA大学实用教程.北京:
清华大学,2009.
四、要求的设计(调查/论文)成果
1.课程设计报告
2.课程设计软件
五、进程安排
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]广彬.Java课程设计案例精编(第二版).北京:
清华大学,2011.
[2]耿祥义.Java课程设计(第二版).北京:
清华大学,2008.
[3]耿祥义.JAVA大学实用教程.北京:
清华大学,2009.
[4]邹林达.国君Java2程序设计基础.北京:
清华大学,2010.
[5]邹林达.Java2程序设计基础实验指导.北京:
清华大学,2010.
指导教师(签名):
20年月日
1需求与总体设计……………………………………………………………………………1
1.1需求分析………………………………………………………………………1
1.2总体设计………………………………………………………………………2
2详细设计…………………………………………………………………………………4
2.1mainFrame类………………………………………………………………………4
2.2mainpanel类………………………………………………………………………5
2.3Sound类………………………………………………………………………7
2.4Readmap类………………………………………………………………………7
3编码实现……………………………………………………………………………9
3.1游戏源码………………………………………………………………………9
4系统测试…………………………………………………………………………………42
总结…………………………………………………………………………………45
1需求与总体设计
1.1需求分析
1.1.1功能结构图
推箱子游戏的功能结构图如图1.1所示。
在系统中,编写4个Java类:
mainFrame,mainpanel,Sound,Readmap;分别对应初始化游戏界面,游戏操作,背景音乐,绘制地图。
图1.1
1.1.2UML类图
推箱子系统除了上述4个Java类外,还需要Java系统提供的一些重要的类。
这些类之间的UML图如图1.2所示。
图1.2
1.2总体设计
1.2.1mainFrame类
mainFrame类负责创建系统的主窗口。
mainFrame类有多种重要类型的对象,这些对象构成了游戏界面的简明与美观,并且通过监听实现方法赋予了这些组件的相应功能。
MainFrame类通过调用Readmap类来实现将地图绘制在游戏主界面,通过调用Sound类来实现对背景音乐的管理,实现音乐开关以及选择上一曲下一曲的操作。
设计中包括了所有你所能直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单,使得玩家能够很直观的见到所有游戏中的功能.界面中有菜单,包括:
"选项""设置音乐""帮助"。
按钮包括:
"重来""悔一步""第一关""上一关""下一关""最终关""选关""音乐"等。
1.2.2mainpanel类
Mainpanel类中集成了小人与箱子的移动规则,并且还包含了对键盘操作移动的响应方法。
在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物动作会使系统更有效.通过控制人物,箱子,空地,障碍物在数组中的位置的改变来控制移动动作.
小人与箱子移动的算法移动中包括正移动,与"悔一步"的负移动.正移动:
小人上下左右的移动是由本组咸英智组员所做,归结起来上下左右是一个判断的算法,判断都是通过判断小人前面是否是空位箱子或者是墙,如果没有就移动;有的话,据判断箱子是否可以移动,最后讨论箱子推过的,小人移动,以及被遮挡住点的图形变化,重新绘制地图,算法判断完毕.
1.2.3Sound类
Sound类主要功能是播放背景音乐,包含了一些对音乐的操作方法。
在玩游戏的同时听一听动听的音乐,有助于舒缓疲劳,放松心情。
1.2.4Readmap类
Readmap类是绘制地图的类,将已经制作好的地图绘制在游戏界面上。
其主要功能是给用户一个友好的游戏界面,游戏中包括50关的地图,推箱子这个游戏的50个地图是事先完成的,将所有地图上面的信息以数字的形式储存在一个20*20的二维数组当中;然后,每一关都按照数组重新绘制地图,这样就拥有了50地图。
2详细设计
2.1mainFrame类
MainFrame类用于初始化屏幕。
该类首先用两个for循环初始化屏幕20*20围的状态,初始化为0,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以80*25的彩色方式显示;最后移动光标到指定的位置输出。
设置界面的标题,窗口大小,添加按钮组件以及各种组件的布局
super("推箱子咯");//设置标题
setSize(720,720);
setVisible(true);//设置窗口可见
setResizable(false);
//创建按钮
btnrenew=newJButton("重来");
btnback=newJButton("悔一步");
btnlast=newJButton("上一关");
btnnext=newJButton("下一关");
btnchoose=newJButton("选关");
btnfirst=newJButton("第1关");
btnover=newJButton("最终关");
btnmuc=newJButton("音乐关");
actionPerformed(ActionEvent)
itemStateChanged(ItemEvent)
2.2mainpanel类
该类用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。
小人与箱子移动的算法移动中包括正移动,与"悔一步"的负移动.正移动:
小人上下左右的移动是由本组咸英智组员所做,归结起来上下左右是一个判断的算法,判断都是通过判断小人前面是否是空位箱子或者是墙,如果没有就移动;有的话,据判断箱子是否可以移动,最后讨论箱子推过的,小人移动,以及被遮挡住点的图形变化,重新绘制地图,算法判断完毕.传出数据记录在,一个栈当中,以备"悔一步"使用.负移动:
通过记录在栈中的数据判断,前一步是的移动方向以及移动使用过的算法,逆向将代码重新运行,同时绘制地图以达到前一步的状态.
Mainpanel类中包含了
(1)重来:
重新开始当前关;
(2)悔一步:
返回上一移动状态(可以连续返回多步)
(3)第一关:
游戏系统默认开始关为第一关,此按钮可以将关从其它关跳跃到第一关.
(4)上一关:
返回到当前关的上一关;
(5)下一关:
返回到当前关的下一关;
(6)最终关:
跳跃到最后一关,即第五十关;
(7)选关:
选择想要玩的关;
(8)音乐关(开):
默认为开,点击自动关闭音乐和开启音乐.
(9)更换音乐:
从不同的音乐中选取适合玩家的音乐.
键盘操作的方法
iswin()//判断是否获胜
isMystackEmpty()
paint(Graphics)
箱子移动与人物移动的方法。
该方法是实现箱子的移动。
根据游戏规则,箱子可以在空地之间、目的地之间、空地和目的地之间来回移动。
backright(int)//返回右移
moveright()//右移操作
backleft(int)//返回左移
moveleft()//左移操作
backdown(int)//返回下移
movedown()//下移操作
backup(int)//返回上移
moveup()//上移操作
remove()//移除
返回back()//
键盘监听
keyReleased(KeyEvent)//释放键盘
keyTyped(KeyEvent)//判断键盘操作是否有效
keyPressed(KeyEvent)//按下键盘
2.3Sound类
(1)将本地音乐读取进程序
loadSound()
(2)音乐关(开):
默认为开,点击自动关闭音乐和开启音乐.
mystop()
isplay()
(3)更换音乐:
从不同的音乐中选取适合玩家的音乐.
setMusic(String)
2.4Readmap类
该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。
形成地图以二维数组的形式进行存储的,不同的数字有着不同的含义.在地图当中不同的数字代表不同的含义我当时是将0~9解读成为不同的图形与图像.①"0"代表"地图以的空位";②"1"代表"地图中的边缘";③"2"代表"地图以的空位非点位;④"3"代表"地图中的箱子";⑤"4"代表"点位";⑥"5"代表"小人面部朝下";⑦"6"代表"小人面部朝左";课程设计说明书⑧"7"代表"小人面部朝右";⑨"8"代表"小人面部朝上";⑩"9"代表"箱子已经到达点位。
Readmap(int)//读取地图文件
getmap()//获取地图用于在目的地画箱子,传入参数x、y指明位置。
该类调用getmap()进行输出,
3编码实现
3.1推箱子游戏设计源码
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
importjava.io.*;
importjavax.sound.midi.*;
importjava.util.Stack;
publicclasshh
{
//程序主方法,游戏由此开始
publicstaticvoidmain(String[]args)
{
//创建游戏界面
newmainFrame();
}
}
//显示游戏的主界面,一些常用组件的布局及其相应功能的监听与实现
classmainFrameextendsJFrameimplementsActionListener,ItemListener
{
JLabellb;
JLabellb2;
JButtonbtnrenew,
btnlast,
btnnext,
btnchoose,
btnfirst,
bt