- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2019年游戏开发中的人工智能
游戏开发中的人工智能 --------脚本AI及脚本引擎 脚本AI及脚本引擎 脚本概述 脚本引擎 实例 AI脚本语言的危险 开发脚本语言的注意事项 脚本概述 脚本概述 概述 开发脚本语言的动机 脚本语言剖析 编译器 脚本是为了简化某种特定程序的复杂任务而设计的一种编程语言。因此,脚本是根据程序的特点定制的,它的使用范围在很大程度上取决于所需要解决的问题。 脚本机制可以说是游戏开发过程中不可或缺的一部分,它可以让游戏设计师而不是游戏程序员撰写出游戏的巧妙之处,并予以精细化。玩家也可以利用脚本语言,建立或修改其所处的游戏世界或等级。 脚本系统怎样及如何操作,主要取决于该系统的使用者。 开发脚本系统时还应该考虑其他因素,例如:加密、开发描述编译器等,使得最后的结果难以让人阅读。 并行开发:脚本语言可以允许设计人员在独立于程序开发人员的情况下构造很多新的特性并做修改。 易于使用:脚本语言提供了一种比专业编程语言更简单,开发环境更受保护的工具。 数据驱动的设计 开发速度快 安全性:脚本语言在一个受保护的环境中运行,可以保证脚本内的致命错误不会使游戏崩溃,最坏的情况就是脚本被停止执行。 可扩展性:允许游戏使用者扩展AI 脚本语言的剖析 一个脚本语言通常由两部分组成:语言和引擎 脚本语言与任何一种编程语言一样,规定了一组特定的语法,脚本语言可以通过转化或编译变换为引擎可以处理的格式。 脚本引擎也称为解释器,用来执行经过编译的脚本。 经过编译的脚本称为字节码流(bytecode stream),它包含了脚本需要解释器所执行的所有内容。 编译器 概述 词法分析器 语法分析器 代码生成器 语法分析树 编译器概述 语法分析树 语法分析树是程序员所写的脚本源代码的另一种表现形式,它能被编译器所理解。由于绝大多数编程语言都是高度结构化的,所以它们能被表示为一种树状结构。 树上的每一个节点都对应了语言中的一种结构类型(例如,条件语句,函数调用,表达式等),这些节点的子节点是相应的语言结构所需要的操作数。 语法分析树 脚本引擎 堆栈机 堆栈机的执行 控制代码流 脚本引擎——堆栈机 任何一种脚本语言都需要一个用来执行程序员所编写脚本的引擎,即翻译器,负责脚本执行的各个方面的工作。 由于翻译器执行的指令集并不是特定的汇编代码,因此称之为虚拟机(VM),负责执行编译器所生成的字节码流。 堆栈机是脚本语言虚拟机技术中普遍采用的一种基本形式。堆栈机的操作码首先从堆栈中弹出将被操作的数据,然后把得到的答案压入同一个堆栈中。不断重复该过程,直到整个字节码流都被执行后结束。由此可知,操作仅需要堆栈和指令指针(用来指向字节码流中将被执行的下一条指令)。 脚本引擎——堆栈机 实现堆栈机最直接的方法就是构造一个类,包括堆栈数据,指令指针以及用来处理各种操作码的逻辑过程(操作码处理器)。 操作码处理器是构造堆栈机的关键,它负责处理每一个操作码所需要的工作。由于每一个操作码处理器是类中唯一的一个成员函数,可以通过一个函数指针表来正确地调用。 操作码的值由堆栈机定义,它需要定义从0开始的连续的整数,来作为函数指针表的索引。 每个操作码处理器都返回一个布尔变量来表明操作码所定义的操作是否成功,若操作失败则停止对字节码流的执行,调用错误恢复程序后清空。 堆栈机 例如: Class VM{ bool HandlePush ( Opeode op ) // ... typedef bool( VM::*OpcodeHandler )(opcode ); OpcodeHandler m_opHandlers[Nnm_opcode]; } 每个函数处理器被OpcodeHandler定义,都以一个操作码为参数。通过把当前指令的操作码传递给处理器,对应不同操作就分别调用某个固定的处理器来执行。 脚本引擎——堆栈机 堆栈机中还包括一个堆栈数据成员,用来存放各种操作所需的操作数。由于STL容器向量提供了常数时间的插入和删除操作,而且对于每一个数据项的随机访问操作都是常数时间的,所以非常适合用来构造这种堆栈。 堆栈机中还包括一个指令指针,指令指针始终指向所需执行的下一条指令,表现为指向字节码流的操作码指针。 堆栈机的执行 初始化,即清空堆栈、将指令指针指向字节码流的起始位置。 进入循环,依次执行每条指令。首先,指令指针所指向的操作码被获得,作为索引传递给操作码处理器用来调用正确的操作处理函数。循环直到整个字节流码被执行完毕后结束。 操作码处理器完成堆栈操作的所有细节,例如:出栈、入栈、相加操作等。 控制代码流——条件语句 对于简单条件语句,即只具有条件为真时所执行的程序块。首先得到条件表达式的取值,然后把它压入堆栈的顶部,接着执行“为0时跳转”操作,即
文档评论(0)