Cod*_*bie 0 c# unity-game-engine
我正在创建一个类似于万智牌的纸牌游戏,其中有一个用于解决效果的堆栈系统。例如,我抽一张牌,我的对手可以用他自己的抽牌效果来回应。然后进入堆栈的最后一个效果将触发,依此类推,直到堆栈中的所有效果都结算。我认为处理这个问题的最佳方法是将效果列表存储为方法,然后使用新方法解析并从最后到第一个删除它们。这是可能的还是我以错误的方式处理这个问题?
我不会存储实际的方法,而是存储对象。
例如,您可以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)
归档时间: |
|
查看次数: |
122 次 |
最近记录: |