将方法存储在列表中

Cod*_*bie 0 c# unity-game-engine

我正在创建一个类似于万智牌的纸牌游戏,其中有一个用于解决效果的堆栈系统。例如,我抽一张牌,我的对手可以用他自己的抽牌效果来回应。然后进入堆栈的最后一个效果将触发,依此类推,直到堆栈中的所有效果都结算。我认为处理这个问题的最佳方法是将效果列表存储为方法,然后使用新方法解析并从最后到第一个删除它们。这是可能的还是我以错误的方式处理这个问题?

dom*_*nic 7

我不会存储实际的方法,而是存储对象。

例如,您可以IAction使用函数创建一个接口Run

然后为每个执行的操作创建一个类IAction

然后,在维护相当于“堆栈”的 MTG 的地方,您可以向IEnumerable<IAction>其中添加实例。

这有道理吗?

编辑:我写了一些代码来说明这个想法

EDIT2:使用堆栈数据结构而不是 LinkedList

interface IEffect
{
    void Resolve();
}

class SomeEffect : IEffect
{
    public void Resolve()
    {
        // do something
    }
}

class EffectStack
{
    private Stack<IEffect> _effectStack = new Stack<IEffect>();

    public void Add(IEffect effect)
    {
        _effectStack.Push(effect);
    }

    public void ResolveAll()
    {
        while (_effectStack.Count)
        {
            _effectStack.Pop().Resolve();
        }
    }
}

class Client
{
    private EffectStack _effectStack = new();
    
    public void Run()
    {
        _effectStack.Add(new SomeEffect());
        
        _effectStack.ResolveAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用实际的“Stack&lt;IEffect&gt;”或“Queue&lt;IEffect&gt;”呢? (3认同)