基于JAVA实现的RPG解谜游戏东方梦黎明

Juvenile

发布日期: 2019-03-15 10:37:14 浏览量: 351
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1、课程设计内容概述

1.1 目的

《东方project》系列简称东方,是日本同人游戏社团上海爱丽丝幻乐团所制作的一系列同人游戏、相关作品以及其二次创作所构成的覆盖游戏、动画、漫画、音乐、文学等诸多方面的领域。系列中主要形式是飞机弹幕游戏,也有格斗游戏,本次我进行了新的尝试,设计了一款简单的Rpg探索解谜类游戏。用户在一个屋子里醒来,通过不断探索获得道具达成条件,避开死亡点,了解到整个故事并从密室中逃脱。本次课程设计的目的是利用Java实现简单的Rpg游戏《东方梦黎明》。

1.2 游戏流程

  • 游戏玩家选择开始或继续游戏

  • 系统读取存档,或者选择新的开始读取地图文件,游戏加载地图的二维数组并开始剧情,剧情通过Z键推进。在非剧情模式下,玩家通过避开死亡点,寻找钥匙等物品打开新的地图,或者阅读某些书籍日记等达成条件,不断接近boss,在结尾避开boss的追捕从密室逃出去

  • 根据游戏中的成就迎来不同的结局

2、程序设计基本思想

2.1 需求分析

2.1.1 基本需求

  • 基本界面:能够通过基本的界面实现与用户的交互,开始界面的选项、剧情的自动进行、游戏中气氛的适当营造、结束界面的友好和美观

  • 绘画和操作:能实现人物和地图的移动、继续游戏的读档和游戏中的存档界面的调出、游戏中调出物品栏、游戏中人物行走

  • 地图操作:系统能够根据用户走动以适当的移动速度移动地图,能够在地图中检测碰撞、调查物品和获得道具,地图之间的转换尽量自然

  • 镜子的映像:实现人物在镜子前出现人像,人物的方向不同,镜像也不同,当人物移动到远离镜子的某个位置时,镜子上出现模糊的鬼影

  • 追逐战:创造多数Rpg游戏都有的怪物追杀部分,追赶的算法不需要太复杂,允许玩家和怪物隔着桌子对峙的情况,但同时避免怪物被卡在一个地图走不动,人物移动到另一个地图“逍遥法外”的情况

  • 双结局:玩家如果在游戏中表现一般(即未达成某个条件),系统在玩家逃离屋子后将给予普通结局。若达成条件,则达成好结局或真结局

2.1.2 性能需求

  • 选择比较合理的传输方案,优化资源的利用,实现图像稳定快速的即时传输,地图的移动尽量优化,避免出现人物移动会卡顿的现象

  • 不进行大量耗时的动作,优化程序的反应速度。

2.1.3 可靠性和可用性

  • 对界面进行优化,提升整个界面的流畅程度和界面效果,提高与用户的亲和度

  • 整个系统应该进行多方面的测试,保证在各种情况下的稳定工作

  • 保证程序流程明确

  • 对异常进行合理处理

2.1.4 扩展功能

  • 可以实现通过用户的反馈

  • 为了加强游戏的可行性,游戏在解谜过程中进行适当的提示

2.2 整体构架

大体沿用Rpg游戏单机的风格,只有客户端,作为用户进行游戏的平台,包括客户端的界面,同时实现存读档、死亡、剧情等功能。

UML类图

2.3 主要部分关键技术实现

2.3.1 界面部分

使用photoshop做出想要在各个部分的界面使用的图,放入包中,在程序中通过反射调用图片,首先在frame中使用setLayout(null),然后添加panel,panel中使用线程不断重画。转动的指针图像使用一个图像序列实现动态效果。另写一个Lib类存放游戏常用int数据,包括窗口的长和宽,以及图片的尺寸,常用的字体等,方便修改。

2.3.2 绘画部分

使用Image设置画布,并且使用BufferedImage中的subImage()将获得人物移动的四个方向走跑共32张图放进Image数组中,绘画功能由drawImage()实现,注意绘画的顺序,先是地图再是人物最后是周围的黑色阴影。游戏不在主体部分使用frame和panel之外的任何GUI组件,全部依靠paint实现,确保整个游戏的美观以及界面变化的自由和简单。使用Control类存放公用的静态布尔数值,以确认某个键是否被按下,简化监听器的使用。

2.3.3 地图部分

地图类中含有一个二维数组,即地图的每个块都是一种MapObject,大多数是一样的,少部分块具有特殊的功能,实现人物获得道具、人物死亡、推开门后地图的转换等。

2.3.4 文件部分和可维护性

将某个地图编写完整后,将其写入某个文件中,不同地图对应不同文件,游戏加载时加载全部地图,确保游戏拥有较好的可维护性。同时,人物调查物品显示的字符串信息也写入配置文件,编写时根据编号寻找配置文件的信息。不同的剧情和死亡方式都是一个小小的类,不同场合new的类也不同,这些也要写入配置文件,游戏运行时根据场合读取配置文件并使用反射机制产生不同效果。

2.4 完成时间进度情况

  • 第一、二周:实现绘画的各项功能,MVC整体框架建设完毕,为各个界面做图

  • 第三周:完成各种相对较大的界面的编写(开始界面、游戏界面、loading界面、存档读档界面、游戏结束界面等),完成地图大体框架,让人物实现动画效果

  • 第四、五周:地图类的编写,地图元素类的编写,不同地图元素子类的编写,使用网络实现反馈部分

  • 第六周:debug并发布游戏的各种版本进行内测

  • 第七、八周:根据内测的反映调整游戏或修补bug,学习安卓,尝试开发安卓版本

2.5 特色功能

  • 游戏主界面拥有帮助界面

  • 当图片缺失时会进行错误提示并强制退出,音乐文件缺失时会进行提示

  • 在Rpg类游戏加入反馈功能,让玩家能方便的反馈信息,包括游戏的bug或不足等

  • 剧情的独创

2.6 编程环境及工具

  • JDK8

  • eclipseMars

3、使用说明及运行结果

3.1 初始化读取图片

new ImageSets类,若文件缺失,则catch文件未发现异常并显示对话框做出提示结束游戏,若文件完整,则进行下一步。如果是jar文件,则弹出splash图片表明程序正在初始化。运行GameMain。

3.2 开启客户端

运行GameMain,弹出初始界面

按下鼠标会出现帮助界面

点击开始则开始游戏,继续游戏则弹出加载游戏的界面

开始游戏: 游戏开始在屋子里醒来,按下Z会推进游戏剧情。剧情结束后玩家可以自由移动

左边是一段无限循环的鬼打墙(无限回廊),所以只能从右边的门走出房间。此时右边的门锁着,只能去回廊的墙洞找到钥匙

出门到客厅。再右走进入一个没有意义的房间,不要踏上血迹,不然会有飞刀飞过来,GameOver

正下方是客厅。可以发现现在不能出门。左上方的屋子也进不去

然后可以在下方的厨房发现一把钥匙

然后X调出物品栏发现获得了一把钥匙

现在进入上方房间,有镜子和带有密码的日记本,此时有一个影子会出现在镜子里,当角色回头时影子又从镜子中消失了

在图书室找到线索可以解开密码本

客厅右上角的书架有一张纸条,阅读后可以通过鬼打墙

即将进入追逐战,下面的工作就是在剧情结束后跑到客厅大门口,注意不要被追上或者跑到死亡点,否则都会GameOver。

首先存个档以防万一,如果死掉了读取存档就可以从这里继续玩

逃出去后就是后续故事之类的东西,然后是结局。由于是课设而不是正式出版的游戏,并没有做的太大,只要读过密码日记本就是真结局,没读过就逃出房间是普通结局

整个介绍滚动结束后鼠标点击或Z键X键返回主界面

4、总结及心得体会

通过这次课程设计,我深刻感受到了我能力上的不足。课堂上的知识没有完全理解,理解的部分也只是理解,真正运用到实践中还是有各种各样的问题。首先是对程序的整体把握不好,对于程序的整体思路并不是很清晰。此外在具体执行每个部分的时候也会出现各种各样的问题,例如报错、程序运行达不到预期效果等等,好在有百度谷歌和CSDN大神的帮助才得以完成这次的课程设计。今后仍需加倍努力!

上传的附件 cloud_download 基于JAVA实现的RPG解谜游戏东方梦黎明.7z ( 11.20mb, 1次下载 )
error_outline 下载需要13点积分

发送私信

我依旧深信时间是良药虽苦口,但有效

11
文章数
13
评论数
最近文章
eject