(计算机应用技术专业论文)脚本生成工具的研究与应用.pdf_第1页
(计算机应用技术专业论文)脚本生成工具的研究与应用.pdf_第2页
(计算机应用技术专业论文)脚本生成工具的研究与应用.pdf_第3页
(计算机应用技术专业论文)脚本生成工具的研究与应用.pdf_第4页
(计算机应用技术专业论文)脚本生成工具的研究与应用.pdf_第5页
已阅读5页,还剩46页未读 继续免费阅读

(计算机应用技术专业论文)脚本生成工具的研究与应用.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 在计算机游戏中,玩家与游戏对象的交互是通过手动编写脚本程序实现。计 算机游戏具有复杂且有深度的故事情节,因此游戏的脚本程序实现起来很复杂。 通常游戏故事的作者是无法完成脚本的编写的,必须由专业的程序员编写,但是 手写脚本实现的交互效果容易与游戏故事作者的意图产生分离。本文尝试开发一 种工具,使得游戏故事作者使用该工具能生成必要的脚本,从而实现玩家与游戏 对象的交互。设计模式可以有效的提高软件的可复用性,可靠性和可维护性,受 到了广泛的关注,目前的研究主要集中在通用的设计模式方面,而对游戏领域的 设计模式研究较少。本文尝试把设计模式与游戏领域知识结合,设计一种模式语 言,并开发了把模式语言转换成游戏脚本自卜种工具。本文主要做了以下三个方 面的工作: 1 应用设计模式的概念定义一般游戏故事情节的高层描述。在分析传统游 戏故事的脚本编写所存在的问题基础上,采用设计模式的思想定义了一种游戏模 式。主要是用模式表示一般游戏故事情节,并给出了游戏模式的定义。 2 设计一种游戏模式的形式化语言,g s g 语言。该语言用于描述游戏模式 结构,模式组件之间的关系,组件与脚本的关系,并设计g s g 语言的语法。该 语言定义简单而且容易理解。 3 开发了g s g 语言转换成游戏脚本的工具。使用该工具,用户不必了解 g s g 语言,就可以用可视化方法来构造游戏故事情节所需的模式,然后用实例 化好的模式来自动生成脚本代码。 关键字:设计模式;计算机游戏;脚本语言;游戏脚本 a b s t r a c t t h et r a d i t i o n a la p p r o a c ht oi m p l e m e n t i n gt h ei n t e r a c t i o n sb e t w e e nap l a y e r c h a r a c t e ra n da l lo b j e c ti nc o m p u t e rg a m ei st ow r i t es c r i p t si nap r o c e d u r a ls c r i p t i n g l a n g u a g e t h eg a m es t o r yi so f t e nc o m p l e xa n dp r o f o u n d t h es c r i p t sa r eu s u a l l ys o c o m p l e xt h a tt h e ym u s tb ew r i t t e nb yt h ep r o f e s s i o n a lp r o g r a m m e rr a t h e rt h a nb yt h e a u t h o ro ft h eg a m es t o r i e s i ti n t r o d u c e sad i s c o n n e c t i o nb e t w e e nt h ea u t h o r si n t e n t i o na n dt h ei n t e r a c t i o n si m p l e m e n t e df r o mt h ep r o g r a m m e r sw r i t t e ns c r i p t s d e s i g n p a t t e r ni sa ne f f e c t i v es o l u t i o nt os o l v et h ec o m m o np r o b l e mi ns o f t w a r ed e v e l o p m e n t i ti su s e dt oi m p r o v et h es o f t w a r er e u s a b i l i t y ,r e l i a b i l i t ya n dm a i n t a i n a b i l i t y n o w ,t h e r e s e a r c h e so fd e s i g np a t t e r na lea l m o s tc o n c e n t r a t e do nc o m m o nd e s i g np a t t e r n ,b u t d e s i g np a t t e r ni ng a m ed o m a i ni sl a c k t r y i n gt oc o m b i n ed e s i g np a t t e r nw i t hg a m e d o m a i nk n o w l e d g e ,d e s i g n i n gap a t t e r nl a n g u a g ea n dd e v e l o p i n gat o o lw h i c hc o n v e r t sp a t t e r nl a n g u a g et og a m es c r i p t i n gl a n g u a g ea r ep r e s e n ti nt h ep a p e r m a i nw o r k i sd o n ea sf o l l o w i n gf r o mt h r e ea s p e c t s :, 1 c o n c e p to fd e s i g np a t t e r ni sa p p l i e df o rh i g h l e v e la b s t r a c td e s c r i p to fag e n - e r a lg a m es t o r y b a s e do na n a l y s i st h ep r o b l e mo fw r i t i n gs c r i p t s ,w eu s et h ei d e ao f d e s i g np a t t e r nt od e f m ean e wg a m ep a t t e r n t h ep a t t e r nd e s c r i b e sac o m m o ns c e n a r i o i ng a m es t o r i e sa n dg i v e sad e f i n i t i o no fg a m e p a t t e r n 2 d e s i g nap a t t e r nl a n g u a g e ,n a m e dg s g t h el a n g u a g ei su s e dt od e s c r i b et h e s t r u c t u r eo fg a m ep a t t e r n ,t h er e l a t i o no fc o m p o n e n t si nt h ep a t t e r na n dt h er e l a t i o n b e t w e e nc o m p o n e n t sa n ds c r i p t s t h eg r a m m a ra n ds e m a n t i co ft h el a n g u a g ei sa l s o d e s i g n e dw i t ht h eg s gl a n g u a g e t h i sl a n g u a g ed e f i n i t i o ni ss i m p l ea n de a s yt oa n - d e r s t a n d 3 d e v e l o pt h et o o lw h i c hc a nc o n v e r tt h eg s gl a n g u a g et ot h eg a m es c r i p t s w i t ht h et o o l ,t h eu s e rd o e sn o tn e e dt ou n d e r s t a n dt h eg s g l a n g u a g e ,m a yu s et h e v i s i b l em e t h o dt oc o n s t r u c tt h ep a t t e r nw h i c ht h eg a m es t o r yn e e d s ,t h e nc r e a t ea u t o m a t i c a l l yt h es c r i p tc o d ew i t ha ni n s t a n t i a lp a t t e r n k e yw o r d s :d e s i g np a t t e r n ;c o m p u t e rg a m e ;s c r i p tl a n g u a g e ;g a m es c r i p t i n g 长沙理工大学 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所 取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任 何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡 献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的 法律后果由本人承担。 作者签名:害澎欠扎 日期:2 。8 年妇朋 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同 意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许 论文被查阅和借阅。本人授权长沙理工大学可以将本学位论文的全部或 部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制 手段保存和汇编本学位论文。 本学位论文属于 1 、保密口,在年解密后适用本授权书。 2 、不保密团。 ( 请在以上相应方框内打“4 ) 作者签名:安泼王洲 日期:2 0 0 8 年t 月功日 导师签名:日期:2 0 0 8 年厂月矽日 第一章绪论昴一早瑁i 匕 1 1选题背景及意义 世界上每年计算机游戏( 游戏主机和游戏软件) 的销售额超过了1 0 0 亿美元。 计算机游戏界经常与电影,娱乐界两者都基于受到商家和公众的关注。大多数游 戏的发行和投资都引起了媒体的关注,而公众的关注程度则来自于预期的销售 量,它的增长由技术和创意带动。游戏开发周期为三到四年是很平常的,而且很 多游戏预算均超过了2 5 0 0 万美元。电影与游戏的不同是电影的角色直接影响电 影的商业效果。游戏主要投资是游戏内容的创作上。它包括作者编写的游戏故事, 美术创作人员编辑的动画特效,计算机科研人员设计的游戏引擎和用于开发游戏 的工具。 在游戏开发中主要的工作围绕着游戏内容的创作而进行。游戏内容主要考虑 的是游戏故事。它由多方面组成:故事情节主线,次要情节,角色以及所有它 们之间的交互。不像电影中的情节是线性的发展,游戏的交互情况很复杂:玩家 可影响故事的发生时间,作者必须考虑所有可能的行为并用适当的方法进行处 理。故事的复杂和故事情节的非线性增加了游戏开发的成本。 游戏公司已经知道游戏内容成为游戏开发的瓶颈。一般他们自己研发或购买 3 d 内容创作工具,但是这些工具不能自动生成玩家与游戏对象交互的脚本。因 为在游戏中玩家与游戏对象的交互都是通过手动编写复杂脚本完成。脚本可以用 自定义的语言例如v s l ( v i r t o o l sd e v l l l ) 或使用l u a 2 l ( a n a r kg a m e f a c e l 3 】) ,也可 以用c c + + ( g a m e b r y o l 4 1 f 阿i3 dg a m e s t u d i o l 5 1 ) 。在这里脚本问题很明确,没有用 更高层抽象的构造来生成代码。所以没有很好的方法来处理,所有p y t h o n 代码 必须手动编写1 6 1 1 7 1 。 创建游戏故事相关内容并转换成程序脚本,在游戏运行时创建期望的行为已 经成为游戏开发过程中的瓶颈。例如,当一个作者创建一些内容,它必须被脚本 程序员精确的实现这些游戏内容。这个过程充满着错误:作者可能在规范方面产 生错误,程序员则在实现这些规范时可能产生错误。理想的是程序员应该尽量消 除和避免这些错误。游戏开发的梦想是作者不依赖于程序员而实现游戏内容。 在游戏界,使用脚本简化游戏是众所周知的过程,这使得简化工具大量涌现。 例如,脚本语言已经普遍存在于这些内容中。它们提供在系统程序语言( c c + + ) 之上更高一层的抽象。我们希望使用脚本语言来简化内容,因此减少编程的时间, 降低程序错误率,从而使效率和质量得到保证。通用脚本语言,例如p y t h o n 已 经被一些游戏公司用作舢脚本,例如t r o k i a 公司的吸血鬼:化装舞会i 引,电子 艺界的占地2 1 9 1 ,f i r a x i s 游戏公司的文明4 p o l , a t a r i 的后院冰球【1 1 l 都是采用p y t h o n 作脚本语言。其他游戏公司使用自行研发的脚本语言,例如 n w s c f i p t 1 2 】是b i o w a r e 公司开发,无冬之夜系列游戏使用的脚本。当然自定义 脚本语言需要一定的研发资金,相反h a 是一种开源的脚本语言,用于扩展应用 程序和游戏脚本。用l u a 编写脚本的游戏有b i o w a r e 公司的孤胆强手2 【12 1 ,碧育公司的孤岛惊魂1 1 3 j ,m i n d w a r e 公司的止痛剂:嗑药过量1 1 4 1 ,r e l i c 娱乐的家园2 【1 5 1 。e p i c 公司【1 6 l 设计一个可视化编程语言用来克服游戏内容之 间的差异。这个可视化编程工具称为k i s m e t 切。让用户画图和注解流程图。所 有这些工具简化了游戏内容的详细设计和代码的转换,但不能解决一个根本问 题:游戏创作者需要与脚本程序员进行交互来实现游戏内容。理想的解决方案是 游戏作者通过一种工具规范和测试游戏,而不需要程序员执行作者的意图。 1 2脚本及其生成工具的研究现状 在展开本节讨论之前,我们首先给出一个脚本语言的定义,以便在下文中讨 论相关问题时有一个统一的前提。 计算机脚本语言是在某一运行的程序中,通过调用程序可访问的模块,以 解释方式执行的程序形式。这里有三个要点,首先脚本语言不像传统语言那样可 独立的编译成为可执行程序。它必须有一个正在运行的程序执行上下文,我们通 常称这个程序上下文为脚本环境;其次,脚本语言执行时调用的是环境程序可访 问的模块:最后,脚本语言是解释执行的。 1 2 1脚本语言的研究现状 脚本语言处在软件设计的高层,与应用紧密联系对脚本语言的使用与研究 一直是软件设计的重要一环其研究具有一个显著的特点:在具体应用领域层次, 表现出空前的繁荣,而在综合层次,对脚本语言还缺乏一个系统严谨的理论体系 由于脚本语言面向应用的特点,对脚本语言的研究往往基于某一特定的环境。例 2 如,v s l 语言在v o i p 中的应用【1 8 1 ,可重构应用服务器的i c e t i p 脚本语言1 1 9 1 。二 十世纪六十年代到九十年代初脚本语言主要与系统软件配合以提供系统接口:组 件由系统程序设计语言创建,并由脚本语言组合在一起。此时对脚本语言的研究 体现了与操作系统和系统语言紧密结合的特性随着九十年代以来,计算机速度 不断提高,图形用户界面和组件构造重要性的不断提高,因特网的迅速普及等发 展趋势大大提高了脚本语言的应用。对脚本语言的研究侧重于图形化,网络化的 特点。 面向应用的脚本语言同样需要一个系统化的理论支持,而对此的研究远远 没有跟上脚本本身的发展速度。计算机应用人员远大于系统开发人员,而脚本语 言正是面向应用与系统组件的粘贴,系统化的脚本理论是今后计算机软件领域的 一个必然方向。 即使在特定领域,脚本语言应用也还有很大的发展空间。如今的游戏引擎都 具有自己脚本系统,例如u n r e a l s c r i p t 是专门为u n r e a l 游戏引擎而设计的。 1 2 2设计模式及其形式化语言研究现状 2 0 世纪9 0 年代以后,g o f 设计模式【2 0 】己成为软件工程领域研究的一大热点。 通过收集并用统一的描述方式将软件分析和设计专家的经验整理成设计模式,软 件工程师针对软件开发中具体的问题从己有的相似设计模式中寻找解决方案。设 计模式为重用专家设计经验提供了一种手段。 从总体上讲,国内对设计模式形式化的研究比较少。万剑恰、薛锦引2 1 】提 出利用角色模型、类型模型、类模型1 2 2 】和d i s c o 语言规范【2 3 l 相结合的描述方法, 旨在提高描述的精确性和克服不同描述语言的缺陷。杨炳儒、张德政1 2 4 】利用超 图模型对设计模式进行初步描述。 国外学者对设计模式形式化的研究的关注程度较高,且已发展成为软件工程 中的一个研究热点之一。 “ l e p u s l 2 5 】可以描述高抽象度的软件结构,精确地表达设计模式的内部元素 的约束和逻辑关系。而这些特点是能实现设计模式的验证、发现、匹配、推理等 内容的基础和条件。同时应该看到,l e p u s 侧重于设计模式结构方面的描述, 而对于动态的交互行为和语义变化等方面缺乏更为精确的描述,而且其语言结构 较为复杂。 3 d i s c o 是由m i k k o n e n i 斟,于1 9 9 8 年提出的,侧重于描述设计模式中参与者 的交互行为,没有提供对设计模式结构方面的描述。其主要是为了描述复杂系统 时,辅助其他描述语言规范,表达系统时序行为。d i s c o 通过参与者和协作来表 达设计模式,使用类、关系和动作来描述设计模式的动态行为。d i s c o 的动态描 述是面向一个封闭系统的,不能由外部事件触发或触发外部事件。同时,其强调 的是系统的整体行为,对于实例的独立局部属性或性质并不描述。d i s c o 同时支 持多继承和属性细化,是实现设计模式相互组合和属性检查、验证的基础。 约束图( c o n s t r a i n td i a g r a m ) 是k e n t 2 2 】等在1 9 9 8 年提出的,分别用角色模型、 类型模型和类模型来描述设计模式。集合是利用文氏图( v e n nd i a g r a m s ) 1 2 6 l 来描述 的,用扩展u m l 类来表达类的抽象实例。约束图是利用分层的抽象机制,对提 高设计模式描述的精确性、消除二义性有积极的作用。 l a y o m l 2 7 , 2 8 1 引入了层( 1 a y e r s ) 、状态( s t a t e s ) 和目录( c a t e 9 0 r i e s ) 等概念。层是用 来封装对象集合、目录、状态和方法等,整体上代表一个程序集合或设计概念。 状态是对对象具体状态的抽象,简化了具体状态的描述。目录是使用类来描述可 能的使用者( c l i e n t ) ,以限制对象的使用。 m a r i t t ah e i s e l l 2 9 】等人将u m l 类图、o b j e c t z 和l s c 图结合起来建立软件组 件的形式化模型。模式“结构 比具体类结构更抽象,用后两种方法形式化设计 模式存在一些不足。 形式化是设计模式进一步发展的必然阶段和有利支持,有众多的学者关注它 的发展趋势和存在的问题:( 1 ) 从现在的研究内容来看,各种形式化语言对设计模 式描述多数是不完整的,很多语言侧重表现某一个或几个方面。即使有些思路是 整合各种语言描述设计模式,但仍然没有能够克服这个问题,同时又增加了描述 的复杂度。( 2 ) 语言形式和内容不易于一般程序员掌握。多数是利用逻辑学和数 学公式进行描述,同时定义复杂的步骤和概念。( 3 ) 研究思路和对象相对固定, 多数研究思路是沿用g o f 对设计模式的描述框架,形式化其中设计的部分概念, 如参与者、协作和结构等。( 4 ) 缺乏对设计模式本身的深入研究,如设计模式的 实质形态等。 4 1 2 3脚本生成工具研究现状 计算机技术发展到今天,脚本语言已经称为一种重要的编程形式。脚本语 言是一种对现有程序执行单位进行组织的语言。脚本语言和系统程序设计语言互 为补充,在二十世纪六十年代以来的大多数主要的计算机平台都同时提供这两种 类型的语言。通常我们把可由脚本使用的程序执行单位称为组件,而脚本语言在 组件框架中有着典型的应用:组件由系统程序设计语言创建,并由脚本语言组合 在一起。然而,速度更快的机器,更好的脚本语言,图形用户界面和组件构造重 要性的不断提高,因特网的发展等发展趋势大大提高了脚本语言的应用。在今后 的十年中,这种趋势将继续,完全使用脚本语言的程序将越来越多,系统程序设 计语言将主要用来创建组件,然而在现阶段,脚本生成工具的发展还不能满足人 们的需求。 首先,人们对脚本生成工具的理论研究程度远不及对它的应用。脚本语言的 出现是为由系统语言设计的组件提供执行和组合的动作,是一种应用弥补性的语 言。脚本语言也是对其他语言的简化的一种表示,但对脚本语言的进一步抽象并 本没有引起学者的足够重视。在硬件技术高速发展和分布式软件技术日益普及的 背景下,脚本进行抽象与特定领域结合得到该领域的设计模式。这样使得脚本代 码在不同的游戏系统中重用。这一理论必然会得到足够的重视。 其次,脚本工具的应用也存在着很多尚未开发的空间。任何科学技术的推广 应用必然要有相应理论的支持,模式理论研究引起更多的科学家和公司对模式支 持工具的研究。人们开发的模式支持工具,往往只考虑对模式的简单支持。而没 有考虑实际应用领域的需求。而且很多公司的脚本生成工具只对自己公司设计的 脚本提供支持,例如e p i c 的k i s m e t 工具。或者缺少对脚本更高层的支持,例如 c r y t e k 的s a n d b o x 2 只支持越脚本。而且一些工具还需要手动编写脚本,例如 b i o w a r e 公司的a u r o r a 工具集,要求作者有n w s c r i p t 脚本编程经验而且还要熟 悉内容创作。 另外在游戏开发领域,脚本生成工具往往具有很强的针对性,这样带来的问 题就是一套现有的脚本工具很难引入外界的功能组件。其脚本的专业性使得此平 台具有一定的封闭性,很难适应于多种游戏的创作,所以需要利用模式对游戏领 域知识进行封装,使得游戏模式与脚本无关性。然后根据不同的脚本设计不同的 5 生成器。 1 3论文研究的内容 本论文主要对脚本生成工具的进行研究,主要内容有如下几点: 1 通过对传统游戏故事的脚本编写过程进行研究和分析,得出手写脚本的 问题,考虑用户的需求,文章提出一种解决方案替代手动编写脚本。利用设计模 式的思想,该方案是构建一种基于脚本代码上的更高一层的抽象,即用一种模式 的集合描述所有游戏中对象的交互。 2 游戏模式的形式化语言。设计一种模式语言称g s g 语言。该语言用于形 式化描述游戏模式,定义语言的语法产生式,该语言可描述游戏模式结构,模式 组件之间的关系,以及组件与脚本中函数和变量的关系 3 开发了基于模式的游戏脚本生成工具。该工具用g s g 语言表示游戏模 式,将g s g 语言转称游戏脚本。该工具用可视化方法构造游戏故事场景所需的 模式,用户不必了解g s g 语言,可编写出游戏故事,然后用实例化好的模式自 动生成脚本。 4 对游戏模式修改的各种操作进行讨论。在产生式设计模式的思想启发下, 运用游戏模式的组件操作构造新的模式,讨论模式组件的修改的难度系数。 1 4 论文的组织 本论文共分为七章,组织如下: 第一章绪论。主要介绍了本文的研究背景和意义,脚本语言的研究现状、设 计模式及其形式化语言研究现状、脚本生成工具研究现状。 第二章主要介绍了游戏脚本和游戏系统的相关概念。脚本在游戏中的作用是 实现游戏逻辑与具体实现的分离。讨论了脚本嵌入自宿主语言中,它是通过虚拟 机解释执行。对各种脚本进行分类,分别介绍不同类型脚本的特点。现在的主流 脚本在游戏中的使用情况。最后介绍脚本在不同类型游戏系统的应用。 第三章介绍现在的游戏内容创作工具,提出这些工具的不足。从游戏脚本的 复杂性和脚本可重用性方面,分析手写脚本的缺点。本章提供解决这些问题的方 法,即定义一个模式的集合描述所有r p g 游戏中对象的交互。这个模式是基于 脚本代码之上的更高层的抽象。 第四章介绍游戏模式语言。定义一种游戏模式的形式化语g s g 语言,并设 6 计g s g 语言的语法和语义。该语言用于描述游戏模式结构,模式组件之间的关 系,组件与脚本的关系。 第五章介绍一类游戏模式,即行为模式。从协同行为和行为匹配两个方面讨 论行为模型。 第六章g s g 工具的设计与实现。主要介绍g s g 工具实现脚本生成的过程。 用户选择一个恰当的模式创建出这个模式的实例,设置模式中组件的相关参数, 对模式中的组件进行修改操作以匹配游戏故事的描述,根据调整的模式生成脚本 代码。g s g 工具的体系结构包括故事编写工具,模式设计工具和基本组件构建 工具。该工具提供可视化方法让用户选择和使用模式,工具把模式用g s g 语言 来表示,通过g s g 语言转化为脚本语言。 第七章:总结和展望。主要列举了论文工作的主要贡献,并且对进一步的研 究工作提出展望。 7 第二章游戏脚本概论 2 1用脚本实现游戏逻辑和具体实现分离 用一种高度结构化的方法将游戏代码和游戏内容加以分离。当你在编写游戏 引擎代码时,根本不需要考虑物品的表述。同样,当你在解决物品描述问题时, 不需要考虑游戏引擎方面的编码问题。引擎开发人员不用关心图形和声音等其它 的游戏媒体和游戏逻辑,只需要用c c + + 设计具体引擎的实现。关卡设计师、建 模师、动画师只要用脚本描述游戏内容和游戏逻辑,而且不需重新编译游戏就可 看到他们修改的效果。脚本成为不同开发人员通信的桥梁。 2 2 脚本在游戏中的运行过程 打开某种文本编辑器,输入脚本代码。当你完成这一切后,你将源文件交给 脚本编译器,编译器负责将其转化为虚拟机字节码。 一个脚本系统并不仅仅只是为自己设计一个高级的、c c + + 形式的语言,它 还需要创立一种低级的汇编语言,即虚拟机器码( v i r t u a lm a c h i n ec o d e ) 。脚本编 译器将脚本转换为这种代码,并且这个结果在主应用程序的虚拟机中运行。虚拟 机和主应用程序之间也可以相互通信,并且通过这个桥梁,脚本可以向主机发送 具体的控制指令。如图2 - 1 可表示这个交互过程。虚拟机的脚本装载器( s c r i p t l o a d e r ) 将虚拟机器码从脚本文件中载入,并允许虚拟机执行这些代码。除了一 套运行环境,虚拟机还为运行的脚本和主应用程序提供一个通信通道,即交互界 面。 脚本代码是通过虚拟机来执行。通过虚拟机,脚本代码可以向游戏发出信息, 游戏也可以进行信息反馈。例如脚本可能会询问游戏现在这个游戏玩家有多少体 力值。游戏将会对这个信息传递给脚本并允许它对此进行处理,最后脚本将执行 与之相关的功能。主应用程序提供一组具有a p i ( a p p l i c a t i o np r o g r a m m i n gi n t e r f a c e ) 函数的运行脚本。主应用程序可以通过调用这些功能函数来控制游戏。 8 图2 - 1 交互过程 2 3脚本系统的基本类型 像多数其他复杂的系统一样,脚本也有很多种不同的形式。一些脚本包含有 高度结构化的、特征丰富的编译器,它们有的像c 这样面向对象的语言,甚至 像c + + 这样的面向对象的语言。而其他的一些脚本则像l o g o 程序的简单指令 集。 2 3 1面向过程的语言系统和面向对象的语言系统 主流脚本编程系统中最常使用的是那些基于面向过程或者面向对象,这些系 统使用高级的、结构化的或者面向对象的语言来编写脚本,这些脚本随后被编译 成能够在虚拟机内部运行的虚拟机字节码,或者不加编译直接由解释器解释执 行。系统使用的虚拟机或解释器将会与主应用程序集成,使得主应用程序可以调 用脚本并和脚本进行交互。 应为这些系统设计的语言在语法和设计上通常都与c c + + 语言非常相似,因 此它们非常灵活、自由,事实上也可以适用于任何一种主要的计算任务。虽然这 种类型的很多脚本系统都只被设计用于某一种程序,但是它们中的大多数都能够 被有效用于其他地方,从游戏到w e b 服务器再到三维模拟器。 u n r e a l 就是这样一个游戏范例,在它上面真正很好地体现了这种脚本编程方 法。它使用的脚本编程语言u n r e a l s c r i p t 是专门为开发游戏u n r e a l 而设计的,是 一种类似于c c + + 的很好的面向对象语言。 9 2 3 2 基于命令的语言系统 一 基于命令的语言通常就会像l o g o 语言一样,非常具体,它们全部由接受 一个到两个参数的针对具体程序的命令组成。例如,一个为虚拟的r p g 游戏设 计的基于命令的脚本系统会允许脚本调用一些针对该游戏的功能函数,从而完成 某些常见任务,例如在游戏世界中移动游戏玩家的位置、获得物品、和其他的人 物进行对话等。 形成这个虚拟语言的命令都是非常明确的,它们都针对于非常具体的某一种 r p g 游戏。尽管它们缺少了像变量、表达式、分支结构、循环体等这样常见的 语言结构,从而一定程度上限制了它们的灵活性,但是它们仍然可以快捷地将线 性任务转换成为常见的宏。像p h o t o s h o p 和m i c r o s o f tw o r d 这样的程序允许用户 用宏来记录它们的行为,这些行为也可以在以后重新实现。本质上,这些程序使 用的是相同的方式来存储宏:用一种程序特定的、基于命令的语言记录每一步动 作。从很多方面上看,你可以认为h t m l 是一种基于命令的脚本,而a l b e i t 是 种形式更复杂的脚本。 2 4 现有的脚本语言 2 4 1 n w s c r i p t n w s c r i p t 是一个完全面向过程的脚本语言,语法与c 类似。该脚本语言主要 用作b i o w a r e 公司的无冬之夜的系列游戏的脚本。该脚本内制游戏引擎函数方便 脚本调用引擎a p i 但不能用于其他游戏系统。 2 4 2l u a h a 是轻量级的强大的扩展编程语言。l n a 是一个面向过程的脚本设计系统, 在包括游戏在内的很多领域中都得到了很好的应用。例如c r y t c k 公司的f a r c r y 。 它最明显的特征就是可以用它编写的程序来对它自身进行拓展。因此,它的核心 代码很少,通常是由用户来实现附加的特征( 比如类) 。g s c r i p t 是一个简洁的、 高度可扩展的可编译语言,也能很好地和c c + + 进行交互,因此,它也是编写游 戏脚本的一个很普通的选择。 2 4 3 p y t h o n p t h o n 是一种通用目的的脚本语言。它使用一种简单而又有效的面向对象的 1 0 方法。不同的编程人员已经将它成功的应用于无数的项目中( 包括一些成功的商 业游戏) 例如e a 公司的b a t t l ef i e l d2 是使用p y t h o n 做游戏脚本。 2 4 4j a v a j a v a 也被证明是一种可行的、特征丰富的编写脚本的语言,尽管j a v a 宣称 它适用于编写与平台无关的应用( 经常侧重网络) 。j a v a 的虚拟机,即j v m ,可 以很容易调用本地接口j n l 和c c + + 程序进行结合,因为它广泛应用于专业级 的电子商务中,所以j v m 对于编译脚本来说是最优的多线程运行环境,而且这 门语言本身也很灵活并且高度的面向对象。 2 4 5 u n r e a l s c r i p t u n r e a l s c r i p t 是为了给开发团队和第三方虚幻开发者提供一个强大,并且能 很自然解决游戏编程的各种不同需求的内建程序语言而开发的。支持时间、状态、 属性和网络等主要概念。这是传统编程语言不重视的。这大大简化了u n r e a l s c r i p t 的代码。基于c c + + 的m 和游戏逻辑编程的复杂程度主要取决于如何处理需要 一定游戏时间完成的事件,以及那些依靠对象状态特点的事件。在c c + + 中,这 需要用到很难编写,理解,维护和出错的代码。u n r e a l s c r i p t 提供了对时间,状 态和网络的支持,大大简化了游戏编程。提供了类似j a v a 的简单的,面向对象 的程序语言,并且提供编译时的查错。就像j a v a 给网络程序员带来了一个简洁 的编程平台,u n r e a l s c r i p t 给3 d 游戏提供了同样干净,简单,强大的程序语言。 但只能用于u n r e a l 引擎。 2 5游戏系统介绍 2 5 1角色扮演游戏 角色扮演游戏并不是应用脚本的唯一的一种游戏类型,实际上r p g ( r o l e p l a y i n gg a m e s ) 游戏一般要比其他类型的游戏要使用更多的脚本。原因就在于 r p g 游戏的确适宜于使用脚本,因为它们也确确实实需要大量的游戏内容,好 几百幅地图,难以计数的武器、敌人和物品,成千上万的普通人物,好几百兆的 声音和音乐等。因此,自然而然,r p g 游戏开发人员就需要有一个很好的方法 以一种结构化的、有组织的方式来开发这些内容。因而,脚本系统成为首选。 脚本主要应用在以下几个方面的内容: ( 1 ) 复杂而有深度的故事情节 在故事情节方面,r p g 游戏看起来更像是交互式小说。游戏中将会出现进 行无穷行对话的人物角色和带有无数“场景点”的高度结构化的游戏场景。设置 这些场景点的目的就是为了推动故事中游戏的进展。在玩家冒险经历的每一个场 景点,游戏都需要知道玩家在到达该处之前完成了哪些主要的事情,从而确定游 戏世界中的现在状态以及将要发生的事情。例如,如果游戏玩家不能提前阻止坏 人炸毁通往游戏世界隐蔽处的那座桥梁,那么他们后来或许就不得不要寻找另外 一条可以替代的路径。 ( 2 ) 非玩家角色 所有r p g 游戏都需要玩家和游戏中的其他非玩家角色n p c ( n o n p l a y e r c h a r a c t e r s ) 进行对话,以收集那些对于解决问题或者战胜挑战所必需的信息和 线索。r p g 游戏中大多数的非玩家角色都只是进行一些琐碎的对话。无论你使 用这些对话多少次,你都会发现它们都是由一连串直到游戏结束都一成不变的对 话组成。一些人物也不仅仅只是简单地四处漫游,他们可能会提出一些玩家可以 迅速做出回答的问题,也有可能要求玩家用一些金币和他们交换信息、物品,或 者其他的一些东西。在这些情况下,条件逻辑、循环,以及读取游戏标记的能力 等这些东西就会变得相当关键了。 ( 3 ) 物品和武器和敌人等 物品和武器与游戏中大多数其他的对象一样遵循相似的规范。每一件物品 和武器都和一段脚本程序相关联,这些脚本程序只有当它被使用的时候才会被执 行。像非玩家角色一样,因为很多物品的行为都非常像是宏,所以就可以使用基 于指令的语言来编写它们。其他一些则需要和游戏标记以及条件逻辑打交道。因 为物品和武器经常需要具有动画的成分,所以循环对于它们也就会变得非常重要 了。r p g 游戏通常要求设计出令人信服的详细而又真实的游戏世界,那么很明 显,整个世界中就会出现很多各种各样的物品和武器。在r p g 游戏中,任何一 样东西如果没有找到完善的脚本编写方法,最终都会陷入一种混乱的无法控制的 困境。此外,现在的游戏玩家希望看到更多更炫的动画效果。因为图形编程是一 个困难而又复杂的领域,所以一种多功能的脚本语言是绝对必要的。物品脚本和 游戏脚本一般都需要完成一系列的任务。本文件通过提供武器被使用时游戏需要 1 2 运行的代码来定义这些武器的行为。 在p r g 游戏中,敌人充当的是邪恶的敌对角色。他们在游戏世界中四处游 荡并不停地袭击游戏玩家以阻止他们完成那些他们希望完成的任务。它具有非玩 家角色的特征或者是个性为中心的方面,同时它还具有物品和武器的功能以及破 坏特性。因此,怎样在你的r p g 游戏中定义敌人基本上就是一个怎样将这两个 实体背后的概念相结合的过程。 2 5 2第一人称射击游戏( f i r s t p e r s o ns h o o t e r s ,f p s s ) 第一人称射击游戏是脚本编程系统研究和发展的另外一个热点。因为这些 游戏通常几乎等价于具体实现游戏环境以及游戏玩家和游戏世界中其他居住者 的交互,所以脚本在为第一人称射击游戏世界中的生物和物体注入生命方面就扮 演了十分重要的角色。虽然通常情况下第一人称射击游戏对于媒体的总体要求比 角色扮演游戏的要少,但是它在敌人智能以及环境交互作用这两个方面所期望实 现的具体细节和深度都要更多。从整体上看,角色扮演游戏通常更多是关于冒险 和故事,而第一人称射击游戏却更加注重那种切身体验和游戏由一个时刻到另外 一个时刻的真实感。游戏h a l o 是一个第一人称射击游戏。h a l o 是由b u n g e e 公 司设计发行的一个很流行的第一人称射击游戏。它使用的图像可能很难和静止的 黑白图像区分开来,但是这个游戏中却充满了各种逼真的移动物体。第一人称射 击游戏需要复杂的游戏引擎、高端的硬件设备,以及对于脚本系统的科学使用。 因此,游戏玩家希望会有下面场景的发生:当柳条箱爆炸的时候能够产生很 多飞起来的碎片;受到射击的窗户会炸得粉碎;敌人聪明而又有策略,他们结队 发动进攻并且能相互协调以产生一个更加真实的对抗;威力巨大的手枪能够从一 边水平射击到另外一边。在第一人称射击游戏中,那些因循守1 日的家伙以及那些 只有同样功能的武器是没有生存空间的。即使是级别本身也需要具有个性并且富 于变化。所有这些都渴望具有一种编写脚本的解决方法,因为它允许这些组件在 外部编写,并且可以像游戏自身的语言一样能够被很灵活地进行控制。此外,运 行脚本和主应用程序之间的交互在第一人称射击游戏中也被提到了一种前所未 有的高度,从而保证游戏中的环境能够达到一种以假乱真的地步。虽然一个完美 的第一人称射击游戏当然要基于大量的游戏成分,不过这个部分中我们将只是重 点讨论它们中两个重要成分能够编写脚本加以实现的可能性:标准物品,如柳条 1 3 箱、可回收的开关,以及敌人的智能( e n e m y a i ) 。 2 6小结 本章主要介绍游戏脚本的运行机制,脚本系统的基本类型。现在常见的脚本 语言的特点和应用领域。在游戏系统方面,角色扮演游戏和第一人称射击使用脚 本较多。 1 4 第三章游戏模式 3 1游戏内容创作工具介绍 r p g 游戏需要非常复杂的人工智能和丰富的故事情节都是通过计算机图形 技术表现给玩家。游戏开发公司也提供游戏工具给用户,这些工具可以让玩家自 己创作游戏的内容。例如b i o w a r e 公司的a u r o r a 工具集,e p i cg a m e s 公司的虚 幻竞技场的u n r e a l e d 工具,c r 吼e k 公司的孤岛惊魂2 的s a n d b o x 2 工具。这些都 是游戏公司自己的设计人员用于开发游戏内容的工具。这包括像c c + + 的脚本语 言,用于控制在游戏世界中的角色和特定物体。没有程序设计经验的人看到复杂 的脚本系统会不知所措。非程序员需要一套工具,该工具可帮组他们对游戏的创 作而无需编写脚本代码即可自动生成含人工智能和故事情节的脚本。 我们设计一个工具g s g ,这个工具帮助那些无编程经验甚至不了解脚本语 言的人编写游戏脚本。为了满足广泛的学习能力、表达能力、可扩展性,g s g 工具使用产生式设计模式1 1 8 】操作程序设计的三层抽象。g s g 处理虚拟游戏世界 的知识管理问题是通过记录和组织分散于游戏世界对象中的几千条脚本。g s g 支持脚本的测试和模式的重用。g s g 的功能和范围与前面提到的商业工具相比 完全不同。这个工具的主要目的是重用设计模式,并且从程序员到非程序员的知 识转换直接应用到游戏内容的设计中。 3 2 游戏脚本的复杂性 脚本设计人员和程序员是有区别的,很多脚本化的物品和脚本任务不需要任 何程序员的传统工具。例如算法复杂度,类的继承,指针,参数传递转换。脚本 化的任务是r p g 游戏的最大挑战。主要是因为随着计算机的性能的提高和程序 复杂性在游戏场景需要更强的人工智能和令人信服的角色行为。这样必须为这些 情况手动编写代码增加游戏可完性。例如,在游戏中,玩家在游戏开始时离开一 个大厅,一个n p c 靠近过来请求你帮助他找到他的家。玩家是一位英雄并且可 以帮助他。这个游戏场景可以通过设计者用脚本设计。但一个游戏像这样的场景 有成千上百个,每一个场景都要协调的组织在一起。创建和测试这些脚本都很困 难并且需要大量的时间。我们提出一种方法可以管理这种复杂性并提供框架支持 电脑的a i 。n p c 可自己学习,记忆游戏中的事件并拥有丰富的行为。 3 3脚本代码重用 为了决定g s g 的功能需求,考虑脚本的控制流,变量的使用的,经常使用 的脚本集合,以及玩家的实际需要。g s g 的主要功能是知识转化过程。g s g 让 程序员把知识打包成一个一个的组件并描述数据的输入和输出。对于用户来讲, 他只想让一个脚本做一个简单的任务,这比使用大量的注解和说明要好。g s g 在更高层抽象来封装脚本。 考虑到用户接口( u i ) 功能,提供可视的操作。但本章主要讨论脚本代码重 用而不是u i 的实现。主要考虑变量的概念、参数的别名等,这些都需要技术性 的处理。建立代码重用模型,该模型依赖于已有的行为模型并且转化成有背景的 故事形式。这还不能充分实现故事。我们面临的挑战是可通过工具生成有图形约 束的智能交互故事。n p c 拥有很多行为,但是游戏设计者主要考虑游戏故事怎 样展开。这样故事中的n p c 整合越是具有挑战的一个问题,g s g 试图解决这 些问题。用户可用前面提到的游戏建模工具或内容构建工具建立游戏用的模型, 并把这些模型加入g s g 中。一旦这些游戏对象建立后可用g s g 编写游戏故事。 3 4手写脚本的弊端 游戏引擎是计算机游戏核心。它包括图形渲染,声音管理,网络互联等。一 个游戏引擎开发团队可用引擎开发多个游戏,同时开发辅助设计工具集。这些工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论