新疆大学。
信息科学与工程学院。
《程序设计》课程设计中期报告。
题目。专业计算机科学与技术
学生姓名。学号。
****。班级计算机15-1班
组员姓名。****。
检查日期 2016.7.29
新疆大学信息科学与工程学院。
目录。1. 课程设计内容概述 1
1.1 项目**及开发目的和意义 1
1.2总体设计内容及方案 1
1.3 本人所承担任务(模块)说明 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. 课程设计内容概述。
以下为范例)
曾经有一段时期,游戏开发程序员只是关心如何尽量多的开发出新的游戏并把它们推销给玩家。那时候的游戏大多简单粗糙,游戏逻辑很类似,并且每款游戏的平均开发周期也要达到8到10个月以上,导致这样的原因一方面是由于技术的原因,另一方面则是因为几乎每一款游戏的**都要从头开始编写,造成了大量的重复劳动。逐渐的一些有经验的游戏开发者摸索出了一条可重复利用**开发游戏的方法,这样既节省了开发游戏的时间和费用,又降低了技术难度。
于是就慢慢的产生了游戏引擎。人们对于游戏引擎的概念也逐步的深入理解。实际上游戏引擎也是一个程序,这个理解也就是对“封装性”的理解。
随着游戏软件的发展,越来越多的人开始想自己编写游戏,自己设计游戏的剧情和逻辑,但是由于技术难度和时间的问题,很多人都放弃了原有的想法。对于游戏公司来说,越早推出一款新类型的游戏,人们就会先接受哪款游戏,这对于游戏公司的生存和发展是很关键的。
这对于一个具有渲染系统,物理系统,网络系统,对底层api封装良好,并且可以通过解释简单的脚本语言就能实现一个简单的游戏的游戏引擎需求是十分关键的。
通过这样一个游戏引擎只要是会简单脚本语言(例如lua,python)的人,都可以编写自己的游戏,实现自己的梦想。对于游戏公司来说可以不必高薪聘请很多高级c++程序员,而仅需懂脚本语言的人,来编写游戏逻辑即可实现一款游戏。
以下为范例)
本项目主要任务是开发一套易于使用的跨平台的2d游戏引擎。引擎提供一套灵活的api接口给用户使用,并对这些api进行一次脚本绑定的封装,给用户最方便的接口。
本引擎有3种使用方式:
1. 纯脚本方式,仅仅通过编写脚本调用引擎的接口来完成游戏的制作。适合于快速开发并且游戏仅通过基本接口即可完成制作的。
2. c++方式,直接调用引擎接口而不使用脚本的封装。适合于习惯于使用c++开发游戏或者是对于性能要求苛刻的用户。
3. 混合方式(推荐的方式),由于引擎支持扩展,对于引擎没有的功能用户可以使用c++自己编写扩展插件,并把一些关键算法实现在插件里(这要比使用脚本实现算法效率高很多),然后在脚本中使用引擎的接口和自己的插件的接口来完成游戏的制作。灵活且不损失性能。
引擎的总体设计:
1. 引擎的核心模块(core),本模块提供对引擎编写的最底层的支持,主要包括:
1) 引擎实现了自己的rtti (run-time type identification运行时类型识别) ,从而实现了对引擎里所有继承自object基类的类的对象的序列化的支持。通过序列化实现把某个对象存盘再从硬盘读入形成一个实例或者是通过网络发送的支持。这是引擎其他模块的基础。
2) 从底层实现对智能指针的支持。基类object实现了对引用计数的支持,从而从根本上实现了对智能指针的友好的支持。
3) 对文件系统的支持。在底层就对对文件系统的访问进行了管理,使得访问zip包像访问os的文件系统一样方便,并通过设置文件的搜索路径使得访问文件可以使用和操作系统无关的路径进行访问, 通过设置写目录对文件的写权限进行了有效的控制。
4) 其他的一些有效的工具类,包括数学库把一些常用的数**算进行了包装提供给其他模块使用、字符串处理类把一些常用的转换操作格式化操作等进行了封装、线程库实现了平台无关的线程支持、动态库类实现了多个平台的动态库加载的支持,另外还有计时器类、异常处理、日志处理等。
2. 其他模块建立在core模块基础之上,包括graphics(图形模块)抽象出了一些图形相关的接口,并以插件的方式针对directx和opengl两套底层图形库进行了不同的实现。还有input模块和sound模块分别实现了对输入设备和音频的支持,输入设备包括键盘、鼠标、手柄等。
音频包括3d声效,背景**的**等。这些模块由同组的王磊来实现。
3. 对脚本的绑定的实现方案。引擎使用swig(simplified wrapper and interface generator)轻松实现由c/c++接口到脚本的绑定。
4. 编辑器(editor模块),编辑器是本游戏引擎的一个集成开发环境,包括脚本的编写、调试,游戏场景的制作、游戏资源文件的制作等。这是引擎中相对复杂的一个模块。
以下为范例)
本人在整个项目中的具体任务是上面提到的core模块和editor模块。
1. core模块:
1) rtti的实现:实现了一个classinfo类,里面存放了这个类相关的各种信息如:类的名称、大小、这个类的创建函数的指针(用于动态创建一个对象)、基类的classinfo指针(用于分析继承关系)等。
每一个继承自object类的子类都有一个classinfo的静态成员来记录这个类的信息,通常使用宏来实现。
2) 序列化的实现:使用设计模式的visitor模式,object类实现了一个accept函数接受visitor参数,visitor进入类的内部后对遍历到的类的成员进行操作,如遇到基本类型则直接按照其类型进行操作,如遇到继承自object的子类的成员变量则进行递归操作。根据visitor的类型的不同其功能也不同,引擎提供三种visitor:
a) xmlvisitor以xml格式存取一个对象,特点:可读性高。
b) binvisitor以二进制的方式存取一个对象,特点:效率高,无需由字符串解析,且占用的空间少。可用于网络传输。
c) attributevisitor 用于记录对象的属性,把运行时对象的所有属性记录下来,可以绑定到编辑器进行编辑。
3) 智能指针的支持:object类继承自referencecounted,记录当前的引用计数并实现了加减操作并负责对引用计数降为0是对象的释放。pointer类就是我们的智能指针类,它是一个模板类,在构造、拷贝、赋值运算、销毁时确保正确地对它所控制的object类的指针进行增减引用计数操作。
4) 文件系统:使用了开源库physfs并进行了简单的接口包装。
2. editor模块:
使用开源的界面库wxwidgets2.8.9进行界面的开发,选择的理由:
1) 开源、跨平台,符合我们引擎的设计初衷。
2) 它不仅仅是一套界面库,还提供了一些其他的平台无关的类库。
3) 它使用操作系统的原生控件。
4) 众多的contrib库和辅助开发程序,并且有code::blocks等ide也是使用它来开发的。
编辑器的总体设计:
图1-1 编辑器组成示意图。
编辑器主要功能使用动态库的方式实现,并对外提供一套api接口,主程序通过调用此动态库来完成相应的功能,并且主程序提供编辑器的主要的ui框架与用户交互。为什么不将两者合在一起实现呢?这是因为我们的编辑器要支持扩展,支持扩展的代价就是要对外开放接口,而开发接口的最好的方法就是动态库。
这样第三方扩展插件便可以轻松地使用编辑器的接口来完成它的功能,但它也必须遵从一定的规范才能被编辑器的主程序识别并顺利地加载,这个规范就是:插件一定要实现“插件接口”,编辑器内留出了多种支持的插件类型的接口,如:调试器插件用于对脚本语言的调试、向导插件用于新建某一类型的文件、文件类型处理插件用于对特定类型的文件进行编辑(材质编辑、粒子编辑、ui编辑都属于这种类型)。
编辑过程中与用户的交互是无法避免的,如何把在编辑过程中用户触发的事件在编辑器和插件之间以及插件和插件之间传递需要由一个系统来处理——事件系统:
图1-2 编辑器事件系统示意图。
用户进行编辑操作时会触发编辑器内部的事件,事件进入编辑器的事件处理系统,处理系统根据其类型查找相应的eventsinks,然后依次调用注册的**函数将消息分派下去处理。这样一些插件就可以通过注册某些关心的事件的**函数来响应用户操作。
要实现相同的功能还有另一种方式:为每一个类型的事件写一个虚函数,由插件继承并实现此接口,利用c++的多态特性来实现。相比较而言,我们的处理方式更加灵活,并且性能更好(因为多层次的继承c++的虚函数表会造成性能问题)。
课程设计报告格式 课程设计
洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...
课程设计总结,课程设计报告
课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...
课程设计 课程设计报告格式
学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...