基于虚拟机和解释器的游戏脚本系统 ——虚拟机模块设计与实现---毕业论文.doc

上传人:滴答 文档编号:1274124 上传时间:2019-01-26 格式:DOC 页数:71 大小:1.59MB
下载 相关 举报
基于虚拟机和解释器的游戏脚本系统 ——虚拟机模块设计与实现---毕业论文.doc_第1页
第1页 / 共71页
基于虚拟机和解释器的游戏脚本系统 ——虚拟机模块设计与实现---毕业论文.doc_第2页
第2页 / 共71页
基于虚拟机和解释器的游戏脚本系统 ——虚拟机模块设计与实现---毕业论文.doc_第3页
第3页 / 共71页
基于虚拟机和解释器的游戏脚本系统 ——虚拟机模块设计与实现---毕业论文.doc_第4页
第4页 / 共71页
基于虚拟机和解释器的游戏脚本系统 ——虚拟机模块设计与实现---毕业论文.doc_第5页
第5页 / 共71页
点击查看更多>>
资源描述

1、 本 科 毕 业 论 文 基于虚拟机和解释器的游戏脚本 系统 虚拟机模块设计 与实现 Game Scripting System based on Virtual Machine and Interpreter -Design and Implementation of Virtual Machine 姓 名: 学 号: 学 院: 软件学院 系:软件工程 专 业:软件工程 年 级: 指导教师: 年 月 摘 要 随着游戏行业的飞速发展,脚本语言扮演着越来越重要的身份。 游戏脚本是计算机游戏逻辑的载体, 将脚本引入到 游戏开发中,可以避免游戏逻辑的硬编码化,从而大大提高游戏的开发效率, 并进一步

2、降低成本。 目前国外已经有多个适合游戏开发的动态脚本语言(例如 Ruby、 Python、 Lua) ,而国内的游戏开发公司则也逐渐将动态脚本语言应用到开发中。 本 研究 项目为 基于虚拟机 和解释器 的 游戏 脚本 系 统 ( GSS) 的设计与实现 。其 开发 的 核心思路是:设计 对应语法的解释器,将 本研究定义的脚本 语言 程序 翻译成虚拟机接受的机器码并由虚拟机完成具体执行工作。 该虚拟机必须是简洁 、高效 的 ,且允许 跨平台 执行 。 本文 针对整个系统的 虚拟机部分为主要 研究 内容 。 该虚拟机以 Linux GCC为开发环境 , 实现了对 脚本 语言的正确执行,并 根据游戏

3、开发的需求, 提供高效垃圾回收机制与关联数 组结构。 论文 针对虚拟机的设计展开, 介绍脚本语言的研究背景、现状,开发了虚拟机部分,并 设计了几个程序对 系统 进行展示 验证 。 关键字: 虚拟机 ;脚本语言 ; 垃圾回 收 Game Scripting System based on Virtual Machine and Interpreter - Design and Implementation of Virtual Machine Abstract With the rapid development of the gaming industry, scripting languag

4、e began to play an increasingly important role. Game Script is the carrier of computer game logic. Introducing script into the game development will avoid hard-coded game logic and thus greatly improve the efficiency of game development, which will further reduce costs. At present, foreign countries

5、 have a number of dynamic scripting languages (such as Ruby, Python, LUA) for game development, and the domestic game development companies have been applying the dynamic scripting language to game development. This study introduced the design and implementation of game scripting system based on vir

6、tual machine and interpreter. The core ideas of designation are to achieve the interpreter of the corresponding syntax and to translate scripting language into the machine code which will be accepted by the virtual machine and then be implemented. The virtual machine should be easily operated, highl

7、y efficient, and allow platform independence implementation. In this thesis, we focus on the design of virtual machine, which is in Linux GCC development environment, and achieves a correct implementation of scripting language; In accordance with the needs of game developers, this virtual machine wi

8、ll provide efficient garbage collection mechanism and associative array structure. This thesis is concerned with the implementation of virtual machine. Firstly it introduced the research background and current situation of scripting language; Then it was followed by the implementation of virtual mac

9、hine. Finally, a number of programs were designed to verify this game scripting system. Key words: Virtual Machine; Scripting Language; Garbage Collection 目录 第一章 绪论 . 1 1.1 研究背景与选题意义 . 1 1.2 研究现状与存在的问题 . 2 1.3 主要研究内容及特色 . 4 1.4 本文结构安排 . 6 第二章 GSS 的架构设计 . 7 2.1 GSS 系统需求分析 . 7 2.2 GSS 系统分析与设计 . 7 2.3

10、虚拟机模块构架设计 . 11 2.4 小结 . 20 第三章 GSS VM 的实现 . 21 3.1 实现的环境和语言 . 21 3.2 系统开发流程 . 22 3.3 虚拟机实现 . 22 3.4 系统运行结果 . 36 3.5 小结 . 44 第四章 总结与展望 . 45 参考文献 . 46 致谢 . 47 Contents Chapter 1 Introduction. 1 1.1 Background. 1 1.2 Current Situation . 2 1.3 Contents and Tasks . 4 1.4 Architecture of Thesis . 6 Chapte

11、r 2 Overall Design of GSS . 7 2.1 Requirement Analysis of GSS . 7 2.2 Analysis and Design of GSS . 7 2.3 Framwork of GSS Virtual Machine . 11 2.4 Summary. 20 Chapter 3 Implementation & Exhibition of GSS VM . 21 3.1 Environment and Development Language . 21 3.2 Development Process . 22 3.3 Implentati

12、on of GSS VM . 22 3.4 System Display And Evaluation. 36 3.5 Summary. 44 Chapter 4 Conclusions and Future Work. 45 References . 46 Acknowledgements. 47 第一章 绪论 1 第一章 绪论 随着游戏项目规模的不断扩大,传统的编译型语言 C/C+已无法满足游戏开发者对于语言灵活性、易用性、 动 态编译的需求。基于效率的 考虑 ,作为底层的游戏引擎大部分使用汇编、 C/C+等语言开发 , 游戏本身却用动态脚本语言来实现 1。本章将对脚本语言的现状进行阐述,

13、并对本文研究内容以及本文的结构安排进行总体概述。 1.1 研究背景与选题意义 每一个技术的出现,都可能催生一个巨大的行业。在互联网技术日趋成熟 发展,并实现将现实生活与虚拟世界完美结合的世界大背景下,网络基础设施正逐渐由窄带向 宽带过渡的中国,一个巨大的数字娱乐媒体行业 网络游戏业应运而生。 大型的网络游戏在选择编程语言时,基于效率的考虑 , 普遍使用 C/C+实现。然而,随着网络游戏市场的需求越来越庞大,在程序人才大量匮乏的情况下造成了 C/C+人才的高成本。另外,即便有足够的 C/C+程序员,在开发游戏过程中,也不能无视 C/C+的高级特性和高度灵活性带来的高项目风险。 C/C+是易学难精

14、的编程语言,在开发大型网络游戏的时候程序员的水平参差不齐, C/C+语言的高级特征也不可避免会被大量滥用,因此给项目带来高风险、 高成本 1。 同时,传统的方法中游戏逻辑是被硬编码到游戏主程序中。由此带来的直接后果之一就是程序编译极度耗费时间。因为游戏逻辑的任何一个小变动都将导致整个程序的重新编译,尤其在游戏开发和测试阶段,这种变动通常是很普遍、频繁的 2。 而最近几年,游戏规模 均 已经以 G 为计量单位,故一次完全编译 可能 要耗去 一 个小时。 脚本语言的执行效率比传统的编译型语言要低。 然而,随着机器性能的飞跃 ,当前 游戏业中的主要矛盾已经由性能低下的硬件与游戏执行效率之间的矛盾转变

15、为快速变化的市场需要与低效的开发工具之间的 矛盾 。 易学易用 且 解释 型 的 脚本 语言 在 游 戏编程中 的 大量引用 是历史的必然 3,4。 相对于传统的编译型语言,脚本语言主要有以下优势: 基于虚拟机和解释器的游戏脚本系统 2 1. 易学易用 : 脚本语言中抽象符号、 古怪的语法和缩写词相对较少,编写和维护容易,其结果是 测试、 调试和修改也变得容易 ; 2. 动态数据类型检查 : 变量不需要预先定义其类型,系统会在运行时自 行检查变量的类型 ; 3. 自动垃圾收集和内存分配 : 据 CERT(The Computer Emergency Response Team)报告称,软件中

16、80%的漏洞是由缓冲区溢出产生的 5, 脚本语言没有指针,在运行时自动处理垃圾收集和内存分配,这样就使 得缓冲区溢出难以发生 ; 4. 较少编程时间 : 脚本语言针对游戏中的特殊需求,提供了相应的 高级 数据类型等专门机制,使得实现同样的功能,脚本语言实现比 C/C+实现所花时间缩短 5 倍 6,7; 5. 可移植性强 : 脚本语言与处理器、 操作系统无关 , 对于基于虚拟机开发的脚本语言 ,当 其 编写的 程序移植到不同的平台时,程序可以不需要更改 ; 6. 扩展性强 : 脚本语言非常容易与 C/C+、 Java 整合, 其 提供了外界联系的接口,语言的组件或库可以 用于 扩展脚本语言功能。

17、 另外, 本论文选题除了 脚本语言本身价值, 还出于该课题对 本文 作者的吸引:设计一个虚拟 机将有助于对操作系统的了解、对实现的算法数据结构等的知识拓展以及 编程质量 的 提高 。 1.2 研究现状与存在的问题 脚本语言对开发效率的主要贡献在于:内置了丰富语言特性和数据结构,使得可以用更少的语句完成相同的功能;拥有完善的自动内存管理和简单实用的异常机制;没有指针;灵活的类 /函数定义方式使得开发人员可以以更合理的方式完成编码任务。 就目前来看,比较流行的脚本有: 1. Python: Python( Lutz & Ascher, 2004)是一种面向对象的解释式脚本语言。它的开发工作由“ P

18、ython 软件基金协会”承担。 Python 的语法没有 直接以任何一种常用的语言为基础。它是类型检测的,然后是动态类第一章 绪论 3 型化 的语言; Python 语言提供了三种类型的数据结构代替数据:表、被称为元组( tuple)的不变表、以及被称 为字典的散列; Python 包括了Perl语言的模式匹配功能,还具有异常处理功能; 垃圾回收在对象不再使用时回收它们。 2. Ruby: 由 Yukihiro Matsumoto 在 1996 年发布的一种新语言。 其诞生的动机是它的设计者对 Perl和 Python 的不满 他 需要一门完全面向对象的脚本语言。 Ruby 中所有的类、对象

19、都是动态的,这意味着 可以动态为它们添加方法。 同时也意味着在每次执行期间,类和对象拥有不同的方法集。 因此,同一个类的不同实例呈现不同的行为, 方法、数据和常量都能包含在类的定义中。 3. Erlang: Erlang 是一种通用的面向并发的 编程语言, 它由瑞典电 信设备制造 商爱立信 所辖的 CS-Lab 开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。 4. LUA: LUA 是一种轻量语言, 1993 年由巴西里约热内卢天主教大学的3 位研究人员开发 8。 官方 版本中只包括一个精简的核心和最基本的库,而网络通讯、图形界面等并 没有提供默认支持。 LUA 是一个动态弱

20、类型语言,支持增量式垃圾收集策略。有内建的、与操作系统无关的协作多线程( coroutine)的支持 。 相对而言,国内对于脚本语言的研究热情似乎远低于国外。但是近几年,随着多家游戏软件开发企业对动态语言的研究与应用力度,脚本语言逐渐为大众所熟悉。如网易在“大话西游”系列中使用 LUA 完成配置管理和逻辑控制,而 GBITS则在游戏所有地方包括服务器端、客户端、引擎方面则全部由脚本语言 LPC 来完成。 脚本语言有许多优势,但它亦存在诸多不足,主要表现在以下几个地方: 1. 执行效率低 : 与编译型的静态语言相比,脚本 语言边解释边执行,这样虽然减少了程序人员的编码时间和调试难度,但它的执行速

21、度慢,所以它不适合开发系统的底层部分,如游戏引擎 ; 2. 安全性不佳 : 使用游戏脚本语言写的源代码解释后的字节码容易受到攻击 ; 基于虚拟机和解释器的游戏脚本系统 4 3. 其它 : 游戏脚本语言缺乏对底层资源的控制和管理,调试器也不够先进。 1.3 主要研究内容及特色 本研究的主要内容是研究几种典型的脚本语言,并 针对在实际游戏开发中碰到的需求, 设计实现 GSS 脚本 系统 。 其中, GSS 是 Game Scripting System 的首字母缩写,该系统由三部分组成:本研究中定义的脚本语言,将脚本语言源文件翻 译成字节码文件的解释器模块和具体执行字节码的虚拟机模块 。 使用 G

22、SS 定义的脚本语言编写的源文件以 .ds 为后缀 。 GSS 实现 的基本 框架 如图 1-1 所示 。 源 程 序源 文 件读 入解 释 器语 法 分 析词 法 分 析字 节 码 生 成 器字 节 码虚 拟 机堆 栈运 行 逻 辑m a p p i n g垃 圾 回 收图 1-1 GSS 实现基本框架 脚本系统通过解释器分析 .ds 文件中的脚本 程序 ,生成虚拟机识别的字节码,并 由 虚拟机对字节码逐条进行执行。 将脚本系统运用于游戏中, 即由游戏引擎(一般为 C/C+实现)负责进行调用脚本系统,脚本系统通过执行返回结果并回到游戏引擎处。 脚本系统在游戏中 具体的运用流程如图 1-2 所

23、示 。 第一章 绪论 5 宿 主 程 序 ( 游 戏 主 程 序 )宿 主 C / C + +程 序G S S 系 统调 用 接 口脚 本 文 件 ( d s 格 式 )图 1-2 GSS 系统运行环境 本人在设计中主要负责虚拟机端的设计实现, 并针对 GSS 进行性能测试。其中,虚拟机 研究的主要内容包括有 : 1. 虚拟机构造: 设计基于堆栈的虚拟机实现,其处理逻辑是基于堆栈,并模拟正文段、堆栈段、数据堆以及数据段 等内存区域 ; 2. 虚拟机逻辑: 设计一套机器码, 在 解释器将源程序翻译为虚拟机内部的机器码后, 由 虚拟机进行执行 ; 3. Mapping: 实现一个高效的关联数组 结

24、构 ,并由 脚本 语法 给予 直接 支持 。在游戏需求中,存在大量的属性、值的关系 ,例如一个玩家的 经验值为150 则可表示为 userexp=150。需要在 GSS 中直接对该数据结构进行支持; 4. 自动内存管理: 通过自动 内存管理, 将内存中的垃圾给与有效释放, 使程序员能够把注意力集中到真正的问题上,从而降低开发 成本 、 缩短 开发 周期 。 本文实现的 GSS 虚拟机除了具备上述功能外,还具备以下特色: 1. 简洁、高效 : 这得益于对数据结构、算法以及设计上的斟酌, 而 有 研究表明,功能复杂性低有利于更好的指令局部性 9; 2. 可移植: GSS 的虚拟机 允许跨平台, 它基于 一个事实为:每一种新推出的计算机平台都有一个 ANSI C 或 C+编译器,故 GSS VM 采 用 ANSI C语法编写 ,并严格要求 其 在各个平台下编译均通过且运行正常;

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。