所以我试图编制一个战斗系统,非常像神奇宝贝,用户可以选择一个移动,生成一个敌人移动,然后两个都按照他们的速度统计数据确定的顺序执行。 我希望玩家执行的移动类型可能会有所不同,例如由具有3个参数的函数定义的攻击或者使用仅具有2个参数的函数定义的另一个玩家切换。所以我需要做的是确定一个具有不同函数和参数的函数调用,这些函数和参数将编程一些动作,然后以某种方式存储它,以便我可以在以后轮到它时调用它。 我正在努力弄清楚如何实现这一目标。我能想到的唯一方法是将函数调用作为字符串编写,然后再执行它,但这并不优雅,特别是因为C#没有方便的执行字符串的方法。 如果有人对如何实现这一点有任何建议,我将不胜感激:)
编辑:这是我的代码
manager.attack (10, currentPlayer, enemy);
checkIfPlayerWon ();
manager.attack (10, enemy, currentPlayer);
checkIfPlayerLost ();
所以这是manager.attack部分,我想用任何动作替换。所以它可能是manager.attack(),也可能是带有2个参数的manager.switchPlayers()。
答案 0 :(得分:0)
我认为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();