课程设计中期报告模板

上传人:第*** 文档编号:55672210 上传时间:2018-10-04 格式:DOC 页数:16 大小:255.01KB
返回 下载 相关 举报
课程设计中期报告模板_第1页
第1页 / 共16页
课程设计中期报告模板_第2页
第2页 / 共16页
课程设计中期报告模板_第3页
第3页 / 共16页
课程设计中期报告模板_第4页
第4页 / 共16页
课程设计中期报告模板_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《课程设计中期报告模板》由会员分享,可在线阅读,更多相关《课程设计中期报告模板(16页珍藏版)》请在金锄头文库上搜索。

1、 新新疆疆大大学学信信息息科科学学与与工工程程学学院院程程序序设设计计 课课程程设设计计 中中期期 报报告告题目:题目: 专专 业业 计算机科学与技术计算机科学与技术 学学 生生 姓姓 名名 学学 号号 联联 系系 方方 式式 班班 级级 计算机计算机 15-1 班班 组组 员员 姓姓 名名 联联 系系 方方 式式 检检 查查 日日 期期 2016.7.29 新疆大学信息科学与工程学院新疆大学信息科学与工程学院新疆大学信息科学与工程学院课程设计中期报告- I -目目 录录1. 课程设计内容概述 .1 1.1 项目来源及开发目的和意义 .1 1.2 总体设计内容及方案 1 1.3 本人所承担任务

2、(模块)说明 .3 1.4 开发环境和开发工具 .6 1.4.1 开发语言 6 1.4.2 开发工具 6 1.4.3 开发环境 7 1.5 项目原定进度安排 .7 2. 中期完成情况说明 .8 2.1 预定计划的执行情况 .8 2.2 中期工作说明及成果汇报 .8 2.3 存在的困难与问题 .13 2.4 如期完成预定任务的可能性分析 .13 2.5 后期工作安排 .14新疆大学信息科学与工程学院课程设计中期报告- 1 -1. 课程设计内容概述1.1 项目来源及开发目的和意义(以下为范例)曾经有一段时期,游戏开发程序员只是关心如何尽量多的开发出新的游戏并 把它们推销给玩家。那时候的游戏大多简单

3、粗糙,游戏逻辑很类似,并且每款游 戏的平均开发周期也要达到 8 到 10 个月以上,导致这样的原因一方面是由于技 术的原因,另一方面则是因为几乎每一款游戏的代码都要从头开始编写,造成了 大量的重复劳动。逐渐的一些有经验的游戏开发者摸索出了一条可重复利用代码 开发游戏的方法,这样既节省了开发游戏的时间和费用,又降低了技术难度。于 是就慢慢的产生了游戏引擎。人们对于游戏引擎的概念也逐步的深入理解。实际 上游戏引擎也是一个程序,这个理解也就是对“封装性”的理解。 随着游戏软件的发展,越来越多的人开始想自己编写游戏,自己设计游戏的 剧情和逻辑,但是由于技术难度和时间的问题,很多人都放弃了原有的想法。对

4、 于游戏公司来说,越早推出一款新类型的游戏,人们就会先接受哪款游戏,这对 于游戏公司的生存和发展是很关键的。 这对于一个具有渲染系统,物理系统,网络系统,对底层 api 封装良好,并 且可以通过解释简单的脚本语言就能实现一个简单的游戏的游戏引擎需求是十分 关键的。 通过这样一个游戏引擎只要是会简单脚本语言(例如 lua,python)的人,都 可以编写自己的游戏,实现自己的梦想。对于游戏公司来说可以不必高薪聘请很 多高级 C+程序员,而仅需懂脚本语言的人,来编写游戏逻辑即可实现一款游戏。1.2 总体设计内容及方案(以下为范例) 本项目主要任务是开发一套易于使用的跨平台的 2D 游戏引擎。引擎提

5、供一 套灵活的 API 接口给用户使用,并对这些 API 进行一次脚本绑定的封装,给用户新疆大学信息科学与工程学院课程设计中期报告- 2 -最方便的接口。 本引擎有 3 种使用方式: 1. 纯脚本方式,仅仅通过编写脚本调用引擎的接口来完成游戏的制作。适 合于快速开发并且游戏仅通过基本接口即可完成制作的。 2. C+方式,直接调用引擎接口而不使用脚本的封装。适合于习惯于使用 C+开发游戏或者是对于性能要求苛刻的用户。 3. 混合方式(推荐的方式),由于引擎支持扩展,对于引擎没有的功能用户可 以使用 C+自己编写扩展插件,并把一些关键算法实现在插件里(这要 比使用脚本实现算法效率高很多) ,然后在

6、脚本中使用引擎的接口和自己 的插件的接口来完成游戏的制作。灵活且不损失性能。 引擎的总体设计: 1. 引擎的核心模块(core),本模块提供对引擎编写的最底层的支持,主要包 括: 1)引擎实现了自己的 RTTI (Run-Time Type Identification 运行时类型识 别) ,从而实现了对引擎里所有继承自 Object 基类的类的对象的序列 化的支持。通过序列化实现把某个对象存盘再从硬盘读入形成一个实 例或者是通过网络发送的支持。这是引擎其他模块的基础。 2)从底层实现对智能指针的支持。基类 Object 实现了对引用计数的支 持,从而从根本上实现了对智能指针的友好的支持。 3

7、)对文件系统的支持。在底层就对对文件系统的访问进行了管理,使得 访问 zip 包像访问 OS 的文件系统一样方便,并通过设置文件的搜索 路径使得访问文件可以使用和操作系统无关的路径进行访问, 通过 设置写目录对文件的写权限进行了有效的控制。 4)其他的一些有效的工具类,包括数学库把一些常用的数学运算进行了 包装提供给其他模块使用、字符串处理类把一些常用的转换操作格式 化操作等进行了封装、线程库实现了平台无关的线程支持、动态库类 实现了多个平台的动态库加载的支持,另外还有计时器类、异常处理、 日志处理等。 2. 其他模块建立在 core 模块基础之上,包括 graphics(图形模块)抽象出了

8、一些图形相关的接口,并以插件的方式针对 DirectX 和 OpenGL 两套底层 图形库进行了不同的实现。还有 input 模块和 sound 模块分别实现了对输 入设备和音频的支持,输入设备包括键盘、鼠标、手柄等。音频包括 3D 声效,背景音乐的播放等。这些模块由同组的王磊来实现。新疆大学信息科学与工程学院课程设计中期报告- 3 -3. 对脚本的绑定的实现方案。引擎使用 swig(Simplified Wrapper and Interface Generator)轻松实现由 C/C+接口到脚本的绑定。 4. 编辑器(editor 模块) ,编辑器是本游戏引擎的一个集成开发环境,包括 脚本

9、的编写、调试,游戏场景的制作、游戏资源文件的制作等。这是引 擎中相对复杂的一个模块。1.3 本人所承担任务(模块)说明(以下为范例) 本人在整个项目中的具体任务是上面提到的 core 模块和 editor 模块。 1. core 模块: 1)RTTI 的实现:实现了一个 ClassInfo 类,里面存放了这个类相关的各 种信息如:类的名称、大小、这个类的创建函数的指针(用于动态创 建一个对象) 、基类的 ClassInfo 指针(用于分析继承关系)等。每一 个继承自 Object 类的子类都有一个 ClassInfo 的静态成员来记录这个 类的信息,通常使用宏来实现。 2)序列化的实现:使用设

10、计模式的 Visitor 模式,Object 类实现了一个 accept 函数接受 Visitor 参数,Visitor 进入类的内部后对遍历到的类 的成员进行操作,如遇到基本类型则直接按照其类型进行操作,如遇 到继承自 Object 的子类的成员变量则进行递归操作。根据 Visitor 的 类型的不同其功能也不同,引擎提供三种 Visitor: a)XmlVisitor 以 Xml 格式存取一个对象,特点:可读性高。 b)BinVisitor 以二进制的方式存取一个对象,特点:效率高,无需由 字符串解析,且占用的空间少。可用于网络传输。 c)AttributeVisitor 用于记录对象的属

11、性,把运行时对象的所有属性 记录下来,可以绑定到编辑器进行编辑。 3)智能指针的支持:Object 类继承自 ReferenceCounted,记录当前的引 用计数并实现了加减操作并负责对引用计数降为 0 是对象的释放。 Pointer 类就是我们的智能指针类,它是一个模板类,在构造、拷贝、 赋值运算、销毁时确保正确地对它所控制的 Object 类的指针进行增 减引用计数操作。 4)文件系统:使用了开源库 PhysFS 并进行了简单的接口包装。新疆大学信息科学与工程学院课程设计中期报告- 4 -2. editor 模块: 使用开源的界面库 wxWidgets2.8.9 进行界面的开发,选择的理

12、由: 1)开源、跨平台,符合我们引擎的设计初衷。 2)它不仅仅是一套界面库,还提供了一些其他的平台无关的类库。 3)它使用操作系统的原生控件。 4)众多的 contrib 库和辅助开发程序,并且有 Code:Blocks 等 IDE 也是 使用它来开发的。编辑器的总体设计:图 1-1 编辑器组成示意图编辑器主要功能使用动态库的方式实现,并对外提供一套 API 接口,主程 序通过调用此动态库来完成相应的功能,并且主程序提供编辑器的主要的 UI 框 架与用户交互。为什么不将两者合在一起实现呢?这是因为我们的编辑器要支持 扩展,支持扩展的代价就是要对外开放接口,而开发接口的最好的方法就是动态新疆大学

13、信息科学与工程学院课程设计中期报告- 5 -库。这样第三方扩展插件便可以轻松地使用编辑器的接口来完成它的功能,但它 也必须遵从一定的规范才能被编辑器的主程序识别并顺利地加载,这个规范就是: 插件一定要实现“插件接口” ,编辑器内留出了多种支持的插件类型的接口,如: 调试器插件用于对脚本语言的调试、向导插件用于新建某一类型的文件、文件类 型处理插件用于对特定类型的文件进行编辑(材质编辑、粒子编辑、UI 编辑都属 于这种类型) 。 编辑过程中与用户的交互是无法避免的,如何把在编辑过程中用户触发的事 件在编辑器和插件之间以及插件和插件之间传递需要由一个系统来处理事件 系统:图 1-2 编辑器事件系统

14、示意图用户进行编辑操作时会触发编辑器内部的事件,事件进入编辑器的事件处理 系统,处理系统根据其类型查找相应的 EventSinks,然后依次调用注册的回调函 数将消息分派下去处理。这样一些插件就可以通过注册某些关心的事件的回调函 数来响应用户操作。新疆大学信息科学与工程学院课程设计中期报告- 6 -要实现相同的功能还有另一种方式:为每一个类型的事件写一个虚函数,由 插件继承并实现此接口,利用 C+的多态特性来实现。相比较而言,我们的处理 方式更加灵活,并且性能更好(因为多层次的继承 C+的虚函数表会造成性能问 题) 。 调试器的实现:调试有 2 种实现方式:单进程使用线程调试和多进程使用进 程

15、间通信的方式。 方式一:容易编码,但需要保证调试和运行能够“友好”地相处,我们的编 辑器不满足这种条件,编辑器和游戏是两个不同的进程,并且编辑器本身也使用 游戏的一些库,着非常容易造成资源的混乱。 方式二:必须进行进程间的通信,进程间的通信又主要有三种方式:管道、 共享内存、套接字。其中管道的方式不合适,因为被调试的游戏端行为难以控制 其基本输入流和输出流很可能被游戏的输入输出扰乱。而共享内存方式虽然效率 高但难以编码并且受限于必须是同一主机的进程。最终选用了套接字的方式,通 过 loop back 来实现,不但编码方式符合习惯并且只要实现了单机的调试,只需要 改变连接的主机名称即可实现远程调试甚至实现跨平台的调试。1.4 开发环境和开发工具1.4.1 开发语言(以下为范例) 考虑到性能和代码的可维护性,引擎底层使用 C+语言开发,上层提供给用 户的开发接口可以是 C+或者其他脚本语言如:Lua、Python 等。1.4.2 开发工具(以下为范例) (1)Windows 下主要采用 Microsoft Visual Studio .NET 2003 开发, 同时支持 2005、2008。 (2)Linux 下采用 Code:Blocks 开发,版本 8.02。新疆大学信息科学与工程学院课程设计中期报告- 7 -1.4.3 开发环境(以下为范例) 图形库:在 Windo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号