项目 | 内容 |
---|---|
课程:北航-2020-春-软件工程 | 博客园班级博客 |
作业要求 | 技术规格说明书 |
一.各场景中组件们需要挂载的脚本
欢迎界面:
组件 | 脚本功能 | 脚本名称及参数说明 |
---|---|---|
开始游戏 | 点击后跳转至地图界面 | Begin 无参数 |
退出 | 点击后退出游戏 | Quit 无参数 |
地图界面:
组件 | 脚本功能 | 脚本名称及参数说明 |
---|---|---|
代表关卡的圆点 | 根据存档内容显示圆点颜色及代表得分的星星 | Load 传入参数:level 表示该圆点代表的关卡数 |
游戏界面:
组件 | 脚本功能 | 脚本名称及参数说明 |
---|---|---|
添加原料的语句 | 支持拖动;需要检测拖动区域,使其不超过工作区;此外当原料进入工作区后,支持实时调整工作区各组件位置的上下关系; | AddMaterial 传入参数:materialType 指出原料类别 |
循环语句 | 除开添加原料语句的功能外,需要添加 "+" 和"-" 组件来更新循环次数,这两个组件各写脚本检测点击的动作 | LoopStatement 无参数 |
运行按钮 | 点击后运行,开始模拟拼装,包括更新工作区箭头位置+机械手取件动画+更新 盒子物品窗口 +更新合成成本组件数值 | Work 无参数 |
暂停按钮 | 点击后弹出 暂停界面 | Pause 传入参数:level 当前关卡数 |
合成指南 | 点击后跳转至合成指南界面 | Guide 传入参数:level 当前关卡数 |
分支语句:暂不考虑
先不考虑支持滑动条
合成进度条是否需要 待讨论,需要的话由运行按钮所挂脚本更新
暂停界面
组件 | 脚本功能 | 脚本名称及参数说明 |
---|---|---|
重新开始 | 清空当前关卡工作区,盒子物品,合成成本,和重置场景 | Restart 传入参数:level 当前关卡数 |
菜单 | 点击后返回欢迎界面 | BackToWelcome 无参数 |
返回 | 点击后暂停界面消失 | Hide 无参数 |
合成指南界面
组件 | 脚本功能 | 脚本名称及参数说明 |
---|---|---|
返回 | 跳转至游戏界面 | BackToGame |
暂不考虑滑动条
二.需要存储的数据
游戏的存档信息(全局变量)
各关卡得分数-利用int数组score[n] (n为关卡数量)
进入特定关卡后需要的存储的数据
合成成本-int cur_cost
已选择的语句序列- int sequence[n] (利用类型码来确定语句)
工作区指向当前执行语句的箭头位置-int cur_index
盒子物品 窗口内的数据(栈)- 利用int数组保存类型码
三.错误处理
对游戏中可能出现的错误操作进行分类处理,目前定义的错误类型如下:
错误类型 | 错误原因 |
---|---|
StatementEmptyException | 点击运行时工作区没有语句 |
LoopException | 循环语句的循环次数超过规定范围或循环语句内的语句数超过规定范围 |
ComposeException | 投入了与合成公式不匹配的合成原料 |
四.使用环境
游戏将同时发布在windows端和android端。
利用unity的功能,将游戏移植到android端非常容易。
在游戏程序逻辑上我们只需实现鼠标点击事件和手指触摸事件的转换。
五.分析
模块化 信息隐藏及封装
使用unity进行游戏开发时,各个组件的逻辑组合成整个游戏的逻辑。
每个组件就是一个小模块,每个组件上挂载的脚本只关心该组件需要实现的功能,而不关心其他组件功能是如何实现的。因此我们的实现是高度模块化的,高内聚。
组件之间需要进行交互时,组件隐藏了自身功能的具体实现逻辑,只提供交流的必须信息(主要通过c#类的封装和访问控制实现)。因此我们实现了信息的隐藏和封装。并且实现了各个组件(模块)之间的低耦合。
界面和实现分离
在unity中,组件功能的实现是通过挂载脚本做到的。
我们可以在界面设计完成后再将脚本挂载到对应组件上来实现组件的功能。
因此可以做到界面和实现分离。
灵活性
利用unity进行游戏开发,灵活性非常高。
例如要在关卡中增加一个功能,我们只需增加对应的组件及脚本即可,不需要进行其他修改。
又例如要增加一个关卡,我们只需增加一个Scene并进行相应设计,对之前实现的功能不产生任何影响。
由以上例子看出我们的游戏具有良好的扩展性及应对变化的能力。
大量数据应对
由于我们的游戏体量较小,因此不涉及对大量数据的处理。