人工智能与游戏的基础知识.ppt_第1页
人工智能与游戏的基础知识.ppt_第2页
人工智能与游戏的基础知识.ppt_第3页
人工智能与游戏的基础知识.ppt_第4页
人工智能与游戏的基础知识.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第10章人工智能与游戏 10 1人工智能与游戏的基础知识10 2追踪和躲避算法10 3寻径算法 目录 10 1人工智能与游戏的基础 10 1 1人工智能的概念人工智能的研究是为了构建能像人类一样思考的计算机 更确切的定义是 AI是一种在计算机中模拟人类思维过程的技术 AI是一个非常广泛的研究领域 而和游戏相关的AI只是整个AI知识域中一个相对较小的子集 人类思维并不是一个容易模拟的过程 这也就说明了为什么AI是如此之宽广的一个研究领域 虽然有很多不同的AI方法 但是它们都是在计算机处理能力范围内模拟出人类的决策能力 大多数传统的AI系统使用各种基于信息的算法来进行决策 就像人类使用各种事先经验和心智规则来做出决定一样 在过去 基于信息的算法具有完全确定性 于是每个决策都可以沿着一个可预言的逻辑流程倒推回去 现在 很多AI研究者意识到AI的确定性过程还不足以对人类思维精确建模 AI的研究热点从确定性AI模型转移到更加现实的 尝试考虑人类思维的微妙复杂性的AI模型 例如 最佳猜测 决策 就人类的思维而言 除了完整的逻辑决策过程外 这种类型的猜测还可能结合过去的经验 个人偏好以及当前的情绪状态来得出 10 1人工智能与游戏的基础 10 1 2游戏人工智能的类型 1 漫游AI漫游AI确定一个游戏对象如何在一个虚拟的游戏世界中漫游 它是一种对游戏中NPC进行运动建模的AI系统 在这种AI系统中 NPC自己做出决定 确定它们如何在一个虚拟世界中漫游 典型的漫游AI例子有 在一些RPG游戏中 怪兽追着玩家角色运动 在飞行游戏中 漫游AI也用来实现按照预先定义的方式飞行的NPC战机 并适时躲避游戏玩家发射的子弹 基本上 对于计算机控制的游戏角色 不论它必须做出决定改变当前路径 还是要在游戏中实现需要的结果 或者只是简单地遵守某种特定的移动方式 都可以使用漫游AI 实现漫游AI通常都比较简单 一般根据一个游戏角色的位置 改变另一个游戏角色的速度或位置 游戏角色的漫游移动也可以由随机的或预先定义的方式影响 10 1人工智能与游戏的基础 10 1 2游戏人工智能的类型 2 行为AI行为AI用于确定追踪在一个游戏玩家控制的角色后面的那些游戏对象的行为 这种追踪行为其实是一种AI系统 称为行为AI 行为AI常混合使用几种漫游AI算法来赋予游戏角色特定的AI行为 如果希望NPC有时候跟踪 有时候躲避 有时候遵从一种运动方式 甚至完全随机移动 那么可以考虑使用行为AI 而行为AI的另外一个作用就是可以改变游戏的难度 例如 可以设计一种行为AI模式 让NPC按照一定的时间比例采取跟踪 躲避和随机移动三种移动模式组合而成的行为AI 如果希望在不同的关卡中设置游戏的不同难度 低难度关卡可以设置为20 的时间跟踪玩家角色 20 的时间躲避玩家角色 60 的时间随机移动 高难度关卡可以设置为 40 的时间跟踪玩家角色 20 的时间躲避玩家角色 40 的时间随机移动 3 策略AI在一个策略游戏中 策略AI从一组固定的实现定义的漫游规则中确定最佳的移动 10 2追踪和躲避算法 追踪和躲避的问题在游戏开发中是随处可见的 无论开发的是什么类型的游戏 是第一人称射击游戏 或者是实时战略游戏 还是角色扮演游戏 游戏中的各种NPC角色都会追踪或躲避玩家角色 在第一人称射击游戏中 敌对方的NPC需要追踪玩家角色并向玩家角色射击 当玩家角色向NPC射击的时候 它必须躲避玩家角色的射击 在实时战略游戏中 NPC所控制的部队时刻都在追踪玩家角色的部队和基地 并向玩家角色发起攻击 当玩家角色开始反击时 NPC又要开始躲避攻击 而游戏的进程也是在这种不断的追踪 躲避过程中推进的 总之 在任何一个种类的游戏中 都会看到NPC在进行追踪和躲避运动 10 2追踪和躲避算法 追踪和躲避其实是一个两步的决策判断问题 首先根据一种行为模式决定NPC采取追踪行为还是采取躲避行为 其次是开始追踪或者逃跑 很多开发者认为追踪与躲避问题还包括另外的一层含义 即避开NPC运动路径上的障碍物 实现追踪和躲避算法的最简单 最直观的想法是根据玩家角色的位置信息 改变NPC的位置 在游戏循环的每帧中 缩小NPC与玩家角色在游戏世界中坐标的距离 可以使得NPC更接近玩家 实现追踪效果 在游戏循环的每帧中 增大NPC与玩家角色在游戏世界中坐标的距离 可以实现躲避与逃跑 而所谓的增大NPC与玩家角色的距离 可以简单地理解为 通过算法分别增大NPC位置坐标与玩家角色位置坐标各个对应分量差值的绝对值 一般而言 二维游戏中坐标值由 X Y 两个分量表示 三维游戏的坐标值由 X Y Z 三个分量表示 10 2追踪和躲避算法 10 2 1基本的追踪和躲避追踪算法的本质 就是根据玩家角色的位置信息 改变NPC的位置 减小NPC与玩家角色在游戏世界中坐标的距离 例10 1 基本追踪算法 xNPC与yNPC分别代表NPC的两个坐标分量 xPlayer与yPlayer分别代表玩家角色的两个坐标分量if xNPC xPlayer xNPC elseif xNPCyPlayer yNPC elseif yNPC yPlayer yNPC 10 2追踪和躲避算法 10 2 1基本的追踪和躲避躲避在逻辑上与追踪刚好相反 它的目的是让NPC摆脱玩家角色的追踪与打击 所以 躲避算法可以通过与追踪相似的方式实现 但是 它们的坐标操作方向相反 例10 2 基本躲避算法 if xNPC xPlayer xNPC elseif xNPCyPlayer yNPC elseif yNPC yPlayer yNPC 10 2追踪和躲避算法 10 2 2随机性追踪和躲避算法基本的追踪和躲避算法确实可以使NPC完成追踪或者躲避任务 但是它过于简单的处理方式使得NPC的运动过程不太自然 甚至会在一定程度上影响游戏的可操作性和可玩性 例如 在追踪过程中 NPC会飞快地向玩家靠近 在这种情况下 玩家还没来得及反应就已经被NPC击中 而同时在NPC躲避的过程中 也会飞快地逃离玩家 无论如何玩家也不可能追得上NPC 这些情况都会打击游戏玩家的信心与兴趣 从而不利于提高游戏的可玩性与趣味性 在绝大多数的情况下 在进行游戏设计时都希望能够得到一种折中的情况 这样玩家才有可能在游戏中战胜NPC 并获得游戏的趣味性 10 2追踪和躲避算法 10 2 2随机性追踪和躲避算法为了实现上述所说的折中情况 让NPC的运动方式更为平滑 一个比较好的办法就是在追踪和躲避的过程中加入一些随机性 例10 3 随机追踪算法 if Math abs rand nextlnt 2 0 if xNPC xPlayer xNPC elseif xNPCyPlayer yNPC elseif yNPC yPlayer yNPC 10 2追踪和躲避算法 10 2 3基于贴砖的追踪和躲避算法在传统的2D和2 5D游戏中 游戏场景通常采用贴砖构造 基于贴砖的场景会被分割成许多不连续的砖块 砖块可以是正方形 菱形和六边形 游戏角色的位置只能处在某个贴砖的中心 并且游戏角色在场景中的移动是以贴砖为单位的 游戏角色的每次移动都会从一个贴砖的中心移动到另外一个相邻的贴砖的中心 而在以像素为坐标的连续环境中 游戏角色在场景中的移动是以像素为单位的 游戏角色的移动方向限制较小 10 2追踪和躲避算法 10 2 3基于贴砖的追踪和躲避算法无论在以像素为单位的连续环境中还是以贴砖为单位的环境中 上述的基本追踪和躲避算法的思想都是适用的 只是算法在表示和实现上稍有不同 在连续环境中 X和Y坐标代表以屏幕某个像素点为原点的像素坐标 通常是屏幕的左上角或者左下角 而在贴砖环境中 X和Y坐标代表贴砖的行编号和列编号 例10 4 贴砖环境中的追踪算法 xNPCTile与yNPCTile分别代表NPC的两个坐标分量 xPlayerTile与yPlayerTile分别代表玩家角色的两个坐标分量if xNPCTile xPlayerTile xNPCTile elseif xNPCTileyPlayerTile yNPCTile elseif yNPCTile yPlayerTile yNPCTile 10 3寻径算法 10 3 1简单寻径算法从最基本的层次来讲 路径寻找只是让某个游戏角色从其最初的位置移动到所需到达的目的地的过程而已 从某种意义上说 简单寻径算法和基本追踪算法的原理是完全一样的 其目的都是让游戏角色在某种运动方式的指引下慢慢靠近目标位置 所不同的是 在追踪算法中 目标位置是游戏中的另一个游戏角色所在的位置 而在寻径算法中 目标位置可能是某个游戏角色所在的位置也可能是游戏地图上的某个区域 10 3寻径算法 10 3 1简单寻径算法 例10 5 简单寻径算法 currentX与currentY分别代表NPC当前坐标的X和Y分量 destinationX与destinationY分别代表目标位置坐标的X和Y分量if currentX destinationX currentX elseif currentXdestinationY currentY elseif currentY destinationY currentY 10 3寻径算法 10 3 1简单寻径算法比较好的做法是让游戏角色沿着比较自然的视线路径行走 可以用Bresenham线段光栅化算法来实现这种效果 Bresenham算法是图形学中进行直线段光栅化的算法 其目的是找出一条直线段在屏幕上所经过的像素集合 而事实上 这个像素的集合也可以看成从屏幕上一个点通向另外一个点的路线 其效果如图10 2所示 需要注意的是 在基于贴砖的游戏环境中使用这种算法 Bresenham算法所找到的不是一个以像素为基础的路径集合 而是一个以贴砖为基础的像素集合 10 3寻径算法 简单寻径算法 Bresenham算法 10 3寻径算法 10 3 2A 算法简单寻径算法在一些古老而简单的游戏中能够很好地解决问题 可是随着计算机处理能力的提高 现在的游戏在设计上比起街机时代的游戏要复杂很多 这些简单的算法变得不太适用 例如 当场景中充满河流 森林 围墙等各种障碍物时 角色需要找到一条绕开障碍物并到达目标的最佳的路径就是一种相对复杂的情况 解决这些问题的方法就是采用A 算法 一种高效的启发式搜索算法 A 算法总能够在一个有障碍物的复杂场景中找出一条从出发点到目标点的最佳路径 这里 最佳 的含义在不同的游戏中也不尽相同 有的游戏认为 最佳 是指人物角色在到达目标地点后其体力耗费最少 有的游戏则是指用最短的时间到达目标地点 而对于绝大多数游戏来说 最佳 的意思是指能够绕开障碍物而且走过的距离最短 10 3寻径算法 10 3 2A 算法A 算法可以理解为 搜索一条由出发点到目标地点的路径 使得这条路径的 代价 是最小的 而不同的游戏对此处的 代价 将有不同的含义 基于贴砖的游戏场景作为基础 在一个有障碍物的基于贴砖的游戏地图中寻找一条经过两点而代价最小的路径 在贴砖场景中 假定游戏角色在任意两个相邻的非障碍物贴砖之间移动都会产生 代价 而障碍物贴砖不可通过 如图所示 A点可以通过不同的路径到达B点和C点 但是代价不同 10 3寻径算法 10 3 2A 算法在A 算法的处理过程中 每个贴砖都被称为一个节点 A 算法在计算过程中为每个非障碍物节点都计算一个通过这个节点到达目标地点的代价函数 记为f n 在计算过程中 f n 为一个估算值 随着计算的进行每个节点的f n 值都有可能改变 A 算法定义 f n g n h n g n 表示从起始点移动到当前节点耗费的代价 根据之前的条件 垂直和水平方向代价为10 对角线方向为14 h n 表示当前点到目标点估计代价 一般设定这个估计代价值为 当前点到目标点的水平和垂直方格的总数 然后乘以10 A 算法在计算过程中使用到两个链表 一个叫做open表 另一个叫做closed表 closed表中的节点是其所有相邻节点的f n 值全部计算过的节点 open表中的节点是计算过f n 值 但是其所有相邻节点的f n 值没有全部计算的节点 10 3寻径算法 10 3 2A 算法的具体步骤 1 将起始点添加到open表中 2 重复以下步骤 寻找open表中f n 值最低的点作为当前点 并将它放入closed表中 遍历当前节点相邻的所有8个节点 如果不可通过或已经在closed表中 则略过 如果不在open表中 则将其添加进open表中 并把当前节点作为其父节点 记录这个节点的f n g n h n 值 如果已经在open表中 则检查g n 值 看是否存在更好的路径 如果存在 则把这个节点的父节点改为当前点 并重新计算这个节点的g n 和f n 值 对open表按f n 值排序 当目标点被放入closed表中时 路径被找到 另一种情况是 没有找到目标点 open表已空 也就是说 路径不存在 3 如果找到路径 则从目标点开始 按父节点返回起始点 这就是我们需要的路径 10 3寻径算法 10 3 2A 算法A 算法在计算过程中的每步都会对所有open表里的节点按照f n 值的大小进行排序 选择f n 值最小的节点将其移动到closed表中 并考虑其所有相邻节点 具体步骤如下 如果某个相邻节点不在open表中

温馨提示

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

评论

0/150

提交评论