Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统

  谈到人工智能(AI),这个话题就太大了;大学里有《人工智能教程》专门讲这方面的知识,什么大名鼎鼎的人工神经网络遗传算法等等均可一窥究竟,这里如赘述似乎有些班门弄斧,我们暂且丢它一边去吧。

  本节,我的主要目的是与大家共同探讨AI在RPG游戏中的应用。看过之前教程的朋友一定不会陌生,A*算法就是其中的一个重要组成部分;而本系列Demo中则使用了更为高级的改进型A*算法,不仅优化了性能,同时也大幅提升了玩家的操控体验。除此之外,AI更常见于RPG游戏中的角色,接下来我将引领大家循着AI的足迹,逐步探寻Silverlight网页游戏中的AI系统设计与Demo实现。

  以一份网上见到的AI系统文档作为开始,我们不妨首先分析下它的主体思路,大可断定其为直观的解析当前国内即时类MMORPG主流角色AI设计:以古老而传统的有限状态机FSM(Finite State Machine)固定决策树AI为原型,简单而直接。当然,为了让游戏体验更加有趣且不至于显得一成不变,我会考虑引入基于Random的各类概率机制,即使用随机性和灵活性更强一些的模糊状态机FuSM(Fuzzy State Machine)。所有非控角色的行为完全无规律可循难道不会更吸引人吗?

  有了大体思路后,接下来我们要做的就是将复杂而庞大的AI系统简化,使之更好理解并最终转化成Silverlight游戏程序代码。纵横剖析,我更青睐于按照策略AI (tactic)与行为AI (action)两部分予以划分。所谓“策略AI”即角色何时采取何种决策,而“行为AI”则为角色按决策执行何种行动。

  基于以上方案,我首先在角色控件的内部添加一个计时器用于AI逻辑循环,其中策略AI间隔3秒执行一次,用于敌对角色的搜捕(索敌);行为AI与角色动作切帧率同步,根据实时情判断应该执行警戒/追击/攻击/转向/逃逸/或其他等行动;而这两种AI在角色控件中分别对应两个事件,对于主角来说,玩家的操作已相当于主角的策略,因此主角只需注册行为AI事件,而其他非控角色则需要同时兼具两者以具备完整的AI能力:

/// <summary>
/// 动作(帧)切换时触发
/// </summary>
public event EventHandler ActionTrigger;

/// <summary>
/// 以1秒为基础单位的时间间隔触发器
/// </summary>
public event EventHandler<IntervalTriggerArgs> IntervalTrigger;

/// <summary>
/// 间隔触发器参数
/// </summary>
public class IntervalTriggerArgs : EventArgs {
public int Count { get; set; }
}

int tickCount = 0;
IntervalTriggerArgs intervalTriggerArgs
= new IntervalTriggerArgs();
void intervalTrigger_Tick(object sender, EventArgs e) {
intervalTriggerArgs.Count
= tickCount;
if (IntervalTrigger != null) { IntervalTrigger(this, intervalTriggerArgs); }
tickCount
= tickCount == Int32.MaxValue ? 0 : tickCount + 1;
}

NET技术Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。