幻灯片1
基于Java的推箱子游戏
幻灯片2
设计背景
此次毕业设计基于java语言。将游戏地图做成通用的关卡设计,关卡用二维数组实现,在二维数组中设置值域来表示不同对象,运用二维数组的遍历算法来加载对应图片实现了游戏图片初始化状态。同时,通过初始化多个不同二维数组实现了游戏地图关卡的设计,方法巧妙且简单易行,有效的解决了图片排布问题。充分运用类和方法的调用来实现游戏关卡的初始化。用读取键值的方法判断游戏人物移动、停止、到达目的地。
幻灯片3
可行性分析
- 技术可行性:开发该系统我所用到的是JAVA语言,主要使用到的是AWT技术进行界面美化设计,对于人物移动等逻辑处理过程,我主要使用的是二维数组进行判定。在技术的选用上我选择的都是现在比较成熟的语言,所以在技术上是可行的。
- 经济可行性:本系统的开发我所使用的都是现在流行的开源软件和一台个人笔记本电脑,所以在经济上对学生的我不会有太大问题。
幻灯片4
技术和开发环境介绍
- Java语言:面向对象、简单、平台无关性、安全性、多线程的语言。
- Eclipse:集成开发工具,是开源的,基于JAVA的可拓展的开发平台。
- Swing:用户界面开发工具包,以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
- JDK:JDK就是JAVA语言的开发工具包,它是JAVA开发的核心,包括了JAVA运行环境,JAVA工具和JAVA基础类库。
幻灯片5
需求分析
- 游戏界面需求:简洁美观的用户界面,可以带给用户自然清晰的画面。
- 游戏内容需求:良好的小人与箱子设计,可以给玩家带来更真实的感觉。小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,使玩家真是感受到箱子被推入终点。
- 键盘处理事件:控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。
- 显示需求:当所有箱子都到达指定位置后即可过关,若进入死角则由玩家选择重新开始本关或者退出当前游戏,通过本关之后可以选择下一关或者退出游戏。
幻灯片6
系统模块
幻灯片7
模块功能介绍
- (1)初始化模块:该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和显示关于开发者的版本信息等。
- (2)画图模块:该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地,每次生成不通关卡和地图时此函数可以重用。
- (3)移动箱子模块:该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。
- (4)移动小人模块:该模块用于控制小人移动,并且随时判端人物是否遇到障碍或者已经进入指定位置,从而推动箱子到目的地。
- (5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。
幻灯片8
界面框架与按钮设计
- 游戏界面简单清晰,操作界面优美,有很强的带入性,游戏操作模块分为:“悔一步”,“重来”,“上一关”,“下一关”,“第1关”,“最终关”,“选关”“音乐关” 。
- “悔一步”:返回上一移动状态(可以连续返回多步);
- “重来”:重新开始当前关;
- “上一关”:返回到当前关的上一关;
- “下一关”:跳转到当前关的下一关;
- “第1关”:游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;
- “最终关”:可以跳转到最后一关,即游戏系统默认的最后一个关。
幻灯片9
选关模块
“选关”:选择想要挑战的关卡。当游戏玩家想要自主选择关卡时,可以随意输入想要跳入的关卡,节约了时间,玩家同过选择的关卡可以有效地挑战自我,连接上次的游戏进度。
幻灯片10
幻灯片11
地图绘制模块
- 地图以二维数组的形式进行存储,不同的数家代表了不同的含义。在本小游戏的地图文件中,0~9这十个数字的定义如下所示:
- 编号0:代表未定义的区域;
- 编号1:代表障碍物(或者边界);
- 编号2:代表草地;
- 编号3:代表箱子(未到指定位置);
- 编号4:代表目的地;
- 编号5:代表小人向下移动方向;
- 编号6:代表小人向左移动方向;
- 编号7:代表小人向右移动方向;
- 编号8:代表小人向上移动方向;
- 编号9:代表到达指定位置时的箱子。
幻灯片12
地图文件与相应界面
幻灯片13
移动模块
- 正移动:小人向上、下、左、右的移动是一个判断算法,其判断都是通过判断小人前面是否是草地或者是箱子或者是障碍物(或者边界)。如果是障碍物或者是边界,就不能够进行移动;如果是没有箱子或者是障碍物,就可以自由移动;又如果是有箱子,就要判断是否可以移动箱子,最后再讨论箱子被推过的位置,小人移动的位置,以及它们的原位置和被遮挡住的新位置的图形变化等等,需要运用算法使其重新绘制地图,填补空白。算法判断完毕后,传出数据并且将其记录在一个堆栈中,以备“悔一步”时使用。
- 负移动:通过记录在堆栈中的数据来判断,前一步小人的移动方向以及移动中使用过的算法,逆向将代码重新运行,同时绘制并刷新地图以达到前一步的状态。
幻灯片14
幻灯片15
悔棋模块
在推箱子小游戏中,数据的存储是非常重要的,不然就无法进行“悔一步”的操作。本小游戏系统受用了堆栈的存储方式来存储并且控制小人与箱子的移动以及地图文件的变换。而“悔一步”的操作让玩家可以进行反悔这一步操作,可避免因一时失手走错而导致的阻塞书面,可以节省玩家重新开始的时间。
幻灯片16
幻灯片17
音乐控制
在推箱子小游戏中,音乐的选择是非常重要的,通过音乐选择可以提高游戏的娱乐性。让游戏玩家可以再轻松越快的环境中进行游戏,用到了Java MIDI的sequence类和getsequence()方法。
幻灯片18
幻灯片19
系统功能测试分析
经过对系统进行测试和运行。总结出游戏系统性能如下:
(1)界面友好,游戏操作方便
系统风格可爱,界面简单,功能较完善,游戏操作简单。
(2)系统响应较快,运行较稳定
在系统运行时,游戏过程中的消息响应处理很快,且系统整体运行安全且稳定。
(3)部分系统功能仍需完善
由于开发时间等方面的原因,该系统还可以在联网进行玩家比赛、难度调节等方面予以完善。
幻灯片20
项目经验
通过编写本次毕业设计程序,我完成了基于JAVA的推箱子小游戏的软件开发任务。在这其间,我遇到了许多问题,并且明白了理论与实际结合的重要性,在充分的理论基础上必须有足够的实际应用,这样才能找到问题,解决问题。巩固旧知识,学习新知识。
幻灯片21
总结
通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知识去解决它们。在这一周的学习过程中,我不仅能够把以前所学知识联系起来,并且还学会了一些新的知识,在此期间通过对 JAVA 设计的系统训练,使我基本上达到了这周的课程设计目的,并且懂得了要想学好课,除了要有扎实的基础知识的功底深厚外,还需要有一定的实践动手能力,操作能力。