阅读笔记-游戏开发中的人工智能-第9章-有限状态机

本文介绍了有限状态机在游戏开发中的应用,以鬼怪的行为控制为例,详细解析了状态机的设计与实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 简述

    记得,在上面向对象程序设计的课中,就学过有限状态机,后来上编译原理的时候,接着有限状态机,直到研一的形式语言自动机中,还是有限状态机。貌似有一个很列害的ERP中的核心解决方法也是状态机。不过给我印象最深的还是本科做的百项工程时,使用有限状态机实现无线模块的自动组网与通信,状态机说简单吧,确实挺简单,尤其是实际用的时候,但是想用好吧,也不轻松,状态机的实现是很简单,但是状态机得设计是要花一些心思的。
    这一章主要是通过两个例子,来说明状态机在游戏中的使用,下面分别简单说一下其中一个例子。第二个例子主要是代码较多,没有太多的不同,具体想实现状态机的时候,参考一下更有价值。

2. 鬼怪的有限状态机
    计算机控制鬼怪,有三种可能的状态:游走(roam)、闪躲(evade)以及追逐(chase),初始状态是“游走”。三个转化行为:当玩家吃了大力丸时,触发“我已变为蓝色”,当鬼怪看到玩家时,触发“看到了玩家”,当鬼怪看不到玩家时,触发“看不到玩家”。状态转化如图:
   
    相关的程序代码:   

switch(currentState) {
  
case kRoam:
    
if (imBlue==true) currentState=kEvade;
    
else if(canSeePlayer==true) currentState=kChase;
    
else if(canSeePlayer==false) currentState=kRoam;
  
case kChase:
    
if(imBlue==true) currentState=kEvade;
    
else if(canSeePlayer==false) currentState=kRoam;
    
else if(canSeePlayer==true) currentState=kChase;
  
case kEvade:
    
if(imBlue==true) currentState=kEvade;
    
else if(canSeePlayer==true) currentState=kChase;
    
else if(canSeePlayer==false) currentState=kRoam;
}

     其实,三个case里面,代码都是一样的,只要保证imBlue先判断就行了,后面就是判断canSeePlayer了。当然这个代码不是最高效的,但是比较直观,容易展示。
     个人感觉,一般优先状态机主要把握两个部分,第一部分就是在一个循环中,根据状态机做一些事情,第二个就是,做事的过程中,由于发生了一些情况,导致状态改变了,从而影响到了前面循环的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值