我在过去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)创建派生类...我不想做的事情,因为这似乎是非常湿的代码......而且,每次我想在游戏中添加一些内容时,我都不想创建一个全新的类...
正如我所说的,我并不是在寻找完整的代码,但到目前为止,您一直都很有帮助,所以也许只是指向我可以用来做我想要的东西的指针?或者告诉我,我是否从错误的角度接近这一切。