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