游戏开发中的人工智能

上传人:dream****gning 文档编号:60999503 上传时间:2022-03-10 格式:PPTX 页数:23 大小:120.05KB
收藏 版权申诉 举报 下载
游戏开发中的人工智能_第1页
第1页 / 共23页
游戏开发中的人工智能_第2页
第2页 / 共23页
游戏开发中的人工智能_第3页
第3页 / 共23页
资源描述:

《游戏开发中的人工智能》由会员分享,可在线阅读,更多相关《游戏开发中的人工智能(23页珍藏版)》请在装配图网上搜索。

1、FACULTY OF SOFTWARE1-脚本AI及脚本引擎FACULTY OF SOFTWARE2脚本概述脚本引擎实例AI脚本语言的危险开发脚本语言的注意事项脚本AI及脚本引擎FACULTY OF SOFTWARE3脚本概述脚本概述 概述 开发脚本语言的动机 脚本语言剖析 编译器FACULTY OF SOFTWARE4脚本是为了简化某种特定程序的复杂任务而设计的一种编程语言。因此,脚本是根据程序的特点定制的,它的使用范围在很大程度上取决于所需要解决的问题。脚本机制可以说是游戏开发过程中不可或缺的一部分,它可以让游戏设计师而不是游戏程序员撰写出游戏的巧妙之处,并予以精细化。玩家也可以利用脚本语

2、言,建立或修改其所处的游戏世界或等级。脚本系统怎样及如何操作,主要取决于该系统的使用者。开发脚本系统时还应该考虑其他因素,例如:加密、开发描述编译器等,使得最后的结果难以让人阅读。脚本概述FACULTY OF SOFTWARE5并行开发:脚本语言可以允许设计人员在独立于程序开发人员的情况下构造很多新的特性并做修改。易于使用:脚本语言提供了一种比专业编程语言更简单,开发环境更受保护的工具。数据驱动的设计开发速度快安全性:脚本语言在一个受保护的环境中运行,可以保证脚本内的致命错误不会使游戏崩溃,最坏的情况就是脚本被停止执行。可扩展性:允许游戏使用者扩展AI开发脚本语言的动机FACULTY OF S

3、OFTWARE6一个脚本语言通常由两部分组成:语言和引擎脚本语言与任何一种编程语言一样,规定了一组特定的语法,脚本语言可以通过转化或编译变换为引擎可以处理的格式。脚本引擎也称为解释器,用来执行经过编译的脚本。经过编译的脚本称为字节码流(bytecode stream),它包含了脚本需要解释器所执行的所有内容。脚本语言的剖析FACULTY OF SOFTWARE7编译器概述词法分析器语法分析器代码生成器语法分析树FACULTY OF SOFTWARE8编译器概述编译器负责把开发人员编写的源文件转化为计算机可以执行的代码。脚本语言的编译器与传统的编译器直接产生可执行代码不同,它生成字节码流,字节码

4、流包含了脚本需要解释器所执行的所有内容。FACULTY OF SOFTWARE9编译器转换步骤:词法分析器首先用来处理词组,读入源代码,然后把它们分解为一些基本的单元,即脚本语言中任何一个单独的结构(construct),称为Token。例如:-,*,=,if,void,MyFunction。 Token被传送给语法分析器。语法分析器负责定义语言的合理结构,确保当前的脚本是一段合理的程序,负责把脚本源代码转换为编译器可以理解的结构,即语法分析树。语法分析树被交给代码生成器生成字节码流。代码生成器递归地遍历整个语法分析树以处理其中每一个节点,并生成相应的可以执行的命令。FACULTY OF SO

5、FTWARE10语法分析树语法分析树是程序员所写的脚本源代码的另一种表现形式,它能被编译器所理解。由于绝大多数编程语言都是高度结构化的,所以它们能被表示为一种树状结构。树上的每一个节点都对应了语言中的一种结构类型(例如,条件语句,函数调用,表达式等),这些节点的子节点是相应的语言结构所需要的操作数。FACULTY OF SOFTWARE11语法分析树FACULTY OF SOFTWARE12脚本引擎堆栈机堆栈机的执行控制代码流FACULTY OF SOFTWARE13脚本引擎堆栈机任何一种脚本语言都需要一个用来执行程序员所编写脚本的引擎,即翻译器,负责脚本执行的各个方面的工作。由于翻译器执行的

6、指令集并不是特定的汇编代码,因此称之为虚拟机(VM),负责执行编译器所生成的字节码流。堆栈机是脚本语言虚拟机技术中普遍采用的一种基本形式。堆栈机的操作码首先从堆栈中弹出将被操作的数据,然后把得到的答案压入同一个堆栈中。不断重复该过程,直到整个字节码流都被执行后结束。由此可知,操作仅需要堆栈和指令指针(用来指向字节码流中将被执行的下一条指令)。FACULTY OF SOFTWARE14实现堆栈机最直接的方法就是构造一个类,包括堆栈数据,指令指针以及用来处理各种操作码的逻辑过程(操作码处理器)。操作码处理器是构造堆栈机的关键,它负责处理每一个操作码所需要的工作。由于每一个操作码处理器是类中唯一的一

7、个成员函数,可以通过一个函数指针表来正确地调用。操作码的值由堆栈机定义,它需要定义从0开始的连续的整数,来作为函数指针表的索引。每个操作码处理器都返回一个布尔变量来表明操作码所定义的操作是否成功,若操作失败则停止对字节码流的执行,调用错误恢复程序后清空。脚本引擎堆栈机FACULTY OF SOFTWARE15堆栈机例如:Class VM bool HandlePush ( Opeode op ) / . typedef bool( VM:*OpcodeHandler )(opcode ); OpcodeHandler m_opHandlersNnm_opcode;每个函数处理器被OpcodeH

8、andler定义,都以一个操作码为参数。通过把当前指令的操作码传递给处理器,对应不同操作就分别调用某个固定的处理器来执行。FACULTY OF SOFTWARE16堆栈机中还包括一个堆栈数据成员,用来存放各种操作所需的操作数。由于STL容器向量提供了常数时间的插入和删除操作,而且对于每一个数据项的随机访问操作都是常数时间的,所以非常适合用来构造这种堆栈。堆栈机中还包括一个指令指针,指令指针始终指向所需执行的下一条指令,表现为指向字节码流的操作码指针。脚本引擎堆栈机FACULTY OF SOFTWARE17初始化,即清空堆栈、将指令指针指向字节码流的起始位置。进入循环,依次执行每条指令。首先,指

9、令指针所指向的操作码被获得,作为索引传递给操作码处理器用来调用正确的操作处理函数。循环直到整个字节流码被执行完毕后结束。操作码处理器完成堆栈操作的所有细节,例如:出栈、入栈、相加操作等。堆栈机的执行FACULTY OF SOFTWARE18控制代码流条件语句对于简单条件语句,即只具有条件为真时所执行的程序块。首先得到条件表达式的取值,然后把它压入堆栈的顶部,接着执行“为0时跳转”操作,即首先把堆栈顶部的操作数弹出,若值为假,则按照字节流码中给出的偏移量进行跳转(跳到条件语句后的第一条语句);若值为真,则执行条件语句中的程序块。对于具有条件为真和为假的程序块而言,偏移量指向条件表达式为假时所需执

10、行的程序块的第一句。编译器会在条件表达式为真时,所需执行的程序块结束的地方,生成一条相对跳转语句,用来跳过紧跟在后面的条件为假时所需执行的程序块。FACULTY OF SOFTWARE19控制代码流循环语句循环语句执行时混合使用条件转移和相对转移指令。例如:C风格的for循环会生成以下伪汇编代码: Perform preloop expression.A: Perform loop conditional expression. Jump to label B if top-stack element is zero. Perform loop body statements. Perform

11、 loop incremental expression. Jump to label A.B: First statement after the for-loop.FACULTY OF SOFTWARE20控制代码流函数 由于当函数执行完毕时需要返回到调用它的代码所在的位置,所以虚拟机需要通过维护一个指令指针的地址堆栈来对函数调用的状态进行跟踪,以便当函数返回时对指令指针的值进行更新。即当函数被调用时,当前指令指针的值被压入这个堆栈的顶部,然后函数中第一条指令的地址值被赋给指令指针。当函数执行完毕时,函数堆栈顶部的数据被用来重置指令指针的值,以便程序执行回到函数调用的地方。 虚拟机用堆栈帧

12、(stack frames)来存放函数的返回值、参数和局部变量。通过帧指针(frame pointer)指向第一个局部变量来访问堆栈帧中的任何参数和局部变量。处于激活状态的堆栈帧都维护在一个链表中,并且被保存在调用堆栈(call stack)中,调用堆栈中包含每个堆栈帧的指针和指令指针。FACULTY OF SOFTWARE21实例指定对手属性:决定因素是游戏类型脚本的基本分析影响对手行为 增加预先定义好的全局变量,并由游戏引擎赋值,以评估游戏世界里的特殊情况。 AI角色的移动口语互动 口语嘲讽 辅助暗示触发事件及增加气氛FACULTY OF SOFTWARE22AI脚本语言的缺陷语言的成熟性

13、:改进、开发工具、参考手册缺乏具有完全特性的开发、调试和统计工具脚本都是在运行时进行解释的,因此具有更大的性能负担固定性的AI脚本会使得游戏重玩性大大降低设计正确的界面(编辑器)设计者与AI交互 决定AI实体的初始位置、提供附加AI实体参数、指定运动路径、指定AI实体之间或AI实体和游戏中对象的关系、设计偶然被触发的事件FACULTY OF SOFTWARE23开发脚本语言的注意事项注意被固化在AI中的能力,如果AI能独立地做越多工作,则脚本语言所需补充的东西就越少脚本语言是否合适需求是否需要一个特性完备的编程语言还是一个简单的触发系统考虑使用已有的编程语言考虑设计者可以使用的调试工具考虑运行时的性能问题注意所开发出脚本的灵活性

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!