确定稍后要执行的函数调用

  • 本文关键字:执行 函数调用 c#
  • 更新时间 :
  • 英文 :


所以我正在尝试编程一个战斗系统,非常像神奇宝贝,用户可以选择一个移动,生成一个敌人移动,然后按照速度统计确定的顺序执行。我希望玩家执行的移动类型可能会有所不同,比如由一个有3个参数的函数定义的攻击,或者由一个只有2个参数的功能定义的与另一个玩家切换。所以我需要做的是确定一个具有不同函数和参数的函数调用,这些函数和参数将编程一些操作,然后以某种方式存储它,这样我就可以在以后轮到他们时调用它。我正在努力想办法做到这一点。我能想到的唯一方法是将函数调用写成字符串,然后稍后执行,但这并不优雅,尤其是因为C#没有方便的方法来执行字符串。如果有人对我如何实现这一目标有任何建议,我们将不胜感激:)

编辑:这是我的代码

manager.attack (10, currentPlayer, enemy);
checkIfPlayerWon ();
manager.attack (10, enemy, currentPlayer);
checkIfPlayerLost ();

因此,无论采取什么行动,我都想取代经理进攻的部分。所以它可以是manager.attack(),也可以是带有2个参数的manager.switchPlayers()。

我认为Jon Skeet的建议是创建一个具有特定数量参数(甚至为0)的委托,包装操作。然后你可以把它传来传去,只要时间合适就可以打电话给它。

粗略示例:

private Action GetPlayerAction(manager, player, enemy, actionType, param1, param2, param3)
{
switch(actionType) {
case actionType1:
return () => { manager.attack(param1, player, enemy); checkIfPlayerWon(); }
case actionType2:
return () => manager.heal(param2, player);
// ....
}
}

// to use
var playerAction = GetPlayerAction(manager, player, enemy, param1, param2);
// do some things ...
playerAction();

最新更新