状态机-如何传递有关成功状态时该怎么做的信息

问题描述

我在城市管理游戏中将自己的状态机用于我的AI,它运行良好。我使用了一个非常简单的界面:

public interface IState
{
    int Id { get; set; }

    void Enter();
    void Execute();
    void Exit();
}

更改状态:

public void ChangeState(IState newState)
    {

        if (currentState != null)
            currentState.Exit();

        if (currentState != newState)
        {
            currentState = newState;
            currentState.Enter();
        }
    }

我唯一的问题是,我发现自己重新编写了很多逻辑来给出一个场景:

有面包师,铁匠,建筑工人等等。所有这些职业都有找到最接近的存储设施并去收集其工作所需材料的状态。

对所有这些人都使用相同的逻辑,除了上面写着当您到达仓库时该做什么的那句话外,也就是说,面包师想拿小麦然后回到他们的面包店。铁匠会想要得到一些铁,然后回到他们的铁匠那里。

基本上他们所做的是:

  1. 查找存储
  2. 转到存储空间
  3. 如果存储具有资源,请更改状态以返回工作场所
  4. 否则,找到下一个最近的存储,并查看该存储是否具有资源
  5. 重复3直到找到资源。

您可以想象,我对状态“回到工作场所”有完全相同的问题,除了到达时要做的事情外,它在该州的逻辑基本相同。

是否有一些聪明的方法可以创建一个称为“ FindStorageState”的状态,并向其传递有关我的单位抵达时该怎么做的信息?

这是一个专业模样的很好例子:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)