游戏智能系列之三:有限状态自动机

游戏智能是很传统的领域,有限状态机和行为树是两种主要方法。今天这篇博客主要介绍有限状态自动机。

1. 有限状态机

有限状态机 (Finite-state machine,FSM),又称有限状态自动机,是表示有限个状态以及状态之间转移和动作等行为的数学模型。从它的定义,我们可以看到有限状态机的几个重要概念。

1.状态:表示对象的某种形态,在当前形态下可能会拥有不同的行为和属性; 2.转移:表示状态变更,并且必须满足确使转移发生的条件来执行; 3.动作:表示在给定时刻要进行的活动; 4.事件:事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。

下图是一个典型的有限状态机,描述了一个简单的对战逻辑。

这个有限状态机有三个状态,分别是 idle, escape 和 attack; 不同状态之间的转换是通过动作进行的,比如 idle 状态看到哥布林就会进入 attack 状态。

2. Clashjs 游戏中的有限状态机

但是在 Clashjs 游戏中,有限状态机需要一些变化。因为 Clashjs 游戏中,一架飞机的状态不仅由它本身采取的动作决定,还由它所处的环境(包括敌机和弹药包)决定。这时候的有限状态机反而简单了,不考虑状态之间的切换,只考虑在每个状态下应该采取什么动作。Clashjs 游戏中的有限状态机的实现代码如下所示。完整的代码已经传到 GitHub 上了(地址)。

    if (utils.canKill(playerState, enemiesStates) && playerState.ammo) {
        return 'shoot';
    }
    if (direction2ammo !== playerState.direction && direction2ammo !== null) {
        return direction2ammo;
    }
    if (direction2ammo == playerState.direction){
      return 'move';
    }

    return utils.safeRandomMove();

由于状态转移部分在游戏逻辑中,有限状态机代码退化成什么状态采取什么动作的 if-else 语句了。上图实现的有限状态机的示意图如下。

3. 总结

最近为了写游戏智能系列文章,我了解了一些游戏智能相关知识。我发现和如火如荼的机器学习和虚拟现实一比,游戏智能简直就是南极的冰窟窿。例如,我们很难找到这个领域的好资料和交流圈,特别是有关实操相关的资料。我想原因有两个。第一,游戏智能不 sexy。游戏智能的算法都只是一个框架,具体游戏行为逻辑需要大量人力物力填写,比端到端的深度学习不知道低到哪里去了。第二,游戏智能不容易复现因此比较难学习。机器学习有很多公开的数据集。拿到这些数据集,我们就可以写代码调参数了。但是游戏智能和游戏紧密结合,大部分好的游戏不提供游戏智能的接口,大部分提供接口的游戏质量差强人意。这使得非游戏开发商内部人员很难有机会实践游戏智能,从而很难产生好的实操分享。虽然说了那么多坑,但自己选得路,跪着也要走完。我会努力写完游戏智能系列。

游戏人工智能系列系列文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

[译] 根据 OS 设计你的应用

Android 和 iOS 是市场上的两个主流操作系统。多数公司都会要求开发者开发对应的移动端应用。对于这些需要在两个平台上同时设计的应用,其中一个挑战就是在品...

35611
来自专栏软件技术

UI界面清晰最重要

界面清晰是UI设计的第一步,要想让用户喜欢你设计的UI,首先必须让用户认可它、知道怎么样使用它。让用户在使用时预期会发生什么,并方便地与它交互。

4199
来自专栏知晓程序

在小程序上买买买是怎样一种体验?现在就来试试吧

1103
来自专栏互联网杂技

B端设计-7个要点帮助你省时高效设计企业管理系统

ERP(企业管理系统)是典型的功能性产品,除非工作需要,几乎没有人愿意去使用它、探索它。市面上优秀的ERP软件流程清晰,操作简单,功能强大。ERP的用户是企业的...

3119
来自专栏企鹅号快讯

小程序新增搜索框历史记录列表并可搜索内容关键词

1、前几日发现小程序新增了一个功能,即在小程序的入口之一搜索框出现了搜索历史列表,如图 新增的历史列表按照搜索行为的先后顺序进行排列,与现在时间距离越近的越靠在...

2468
来自专栏达摩兵的技术空间

常见的代表性的测试方法

首先要保证你已经知道了测试的目的以及工作任务是什么哦。然后请大家看下以下的几类测试方法,酌情使用。

683
来自专栏知晓程序

微信小程序新版二维码出炉!居然一眼就记住了

仍是熟悉的夜间模式,仍是熟悉的出人意料。但这次发布的,并不是熟悉的新能力,而是把大家再熟悉不过的二维码换了个并不熟悉的新造型。

421
来自专栏BestSDK

Epic发布虚幻引擎4.18:包含新的Oculus SDK 1.17、SteamVR 1.39等

新的游戏引擎还包括对Mac上的原生SteamVR支持,使Mac上可以使用同样完善的PC界面,并增加了在两个平台之间轻松转移项目的能力。 ? 近日,Epic正式发...

34110
来自专栏有趣的Python

python分布式爬虫搜索引擎实战-0-目录索引目录:

目录: 技术选型 scrapy 可以加入requests和beautifulsoup scrapy基于twisted,性能好 方便扩展,有很多内置功能 ...

2755
来自专栏CDA数据分析师

以太坊是什么丨以太坊开发入门指南

原文地址:https://www.cnblogs.com/tinyxiong/p/7878468.html

570

扫码关注云+社区