传递使用方法作为成员的类

时间:2017-10-16 12:43:17

标签: c#

我在过去6个月左右的时间里一直在学习C#,而且目前我仍然坚持使用基于回合制的游戏系统。

我尝试过几种不同的东西并观看了很多关于它的视频,但我没有找到我想要的东西。也许这是不可能的,但现在就是这样。另外,我没有找人写代码或任何东西,我主要是在寻找指针。

switch (currentBattleState)
{
    case (BattleState.WAIT):
        {
            if (heroesToManage.Count > 0)
                currentBattleState = BattleState.ACTION_SELECT;
            break;
        }

    case (BattleState.ACTION_SELECT):
        {
            foreach(Button button in buttons)
                button.interactable = true;    
            break;
        }
}

这是战斗状态机的当前状态。我现在有两个按钮,一个会攻击,一个会打开一个法术书来选择施放哪个法术。

我需要的是像这样的伪代码:

void OnClicked()
{
    ChooseSpell(); // If it's the "magic" button
    ChooseTarget();

    // And this Action will pass the target to the Attack() or Cast() 
    // function on the HeroStateMachine 
    listOfActions.Add(new Action(origin, target, Attack() or Cast())
}

然后当BattleStateMachine处理每个Action时,再次使用伪代码,因为我不知道怎么做:

void ProcessAction(Function action, int index = 0)
{
    // This would result in Cast(origin, target) or Attack(origin, target)
    action(listOfAction[index].origin, listOfAction[index].target); 
}

// And then call it like this ?
ProcessAction(listOfActions[0].function)

我们将它从列表中删除,所以基本上,这将是先进先出类型的东西。

问题在于我还没有办法做到这一点。到目前为止,我观看的视频正在为每种类型的攻击,咒语或项目(所有来自BaseAction)创建派生类...我不想做的事情,因为这似乎是非常湿的代码......而且,每次我想在游戏中添加一些内容时,我都不想创建一个全新的类...

正如我所说的,我并不是在寻找完整的代码,但到目前为止,您一直都很有帮助,所以也许只是指向我可以用来做我想要的东西的指针?或者告诉我,我是否从错误的角度接近这一切。

0 个答案:

没有答案