我正在制作一款战斗基于组合系统的游戏。您必须从 5 个随机生成的 Action 中选择 2 个,例如弱攻击、格挡或闪避等。 您选择的这 2 个操作会生成具有不同结果的组合。
我正在研究执行这些操作的算法,我想知道除了使用 switch case 之外是否还有更好的方法。
现在我得到了这样的东西:
void comboEffect(int firstAction, int secondAction)
// weak attack = 1; strong attack = 2 etc
{
switch (firstAction)
{
case 1:
switch (secondAction)
{
case 1:
// execute 11 combo (weak attack + weak attack)
break;
case 2:
// execute 12 combo (weak attack + strong attack)
break;
... etc
}
break;
case 2:
switch (second action)
{
case 1:
// execute 21 combo
... etc
}
最佳答案
你可以这样做
class ActionGen
{
private readonly Dictionary<Tuple<int,int>, Action> _actionDictionary = new Dictionary<Tuple<int, int>, Action>();
public ActionGen()
{
_actionDictionary.Add(Tuple.Create(1, 1), () => Console.WriteLine("Action 1, 1"));
_actionDictionary.Add(Tuple.Create(1, 2), () => Console.WriteLine("Action 1, 2"));
_actionDictionary.Add(Tuple.Create(2, 1), () => Console.WriteLine("Action 2, 1"));
_actionDictionary.Add(Tuple.Create(2, 2), () => Console.WriteLine("Action 2, 2"));
}
public void ExecuteAction(Tuple<int,int> inputForAction)
{
if (_actionDictionary.ContainsKey(inputForAction))
_actionDictionary[inputForAction]();
else Console.WriteLine("Invalid action");
}
}
测试一下
static void Main(string[] args)
{
var actionGen = new ActionGen();
actionGen.ExecuteAction(Tuple.Create(1, 1));
actionGen.ExecuteAction(Tuple.Create(1, 2));
actionGen.ExecuteAction(Tuple.Create(2, 1));
actionGen.ExecuteAction(Tuple.Create(2, 2));
actionGen.ExecuteAction(Tuple.Create(3, 1));
Console.ReadLine();
}
编辑>输出是
行动 1,1 行动 1,2 行动 2,1 行动 2,2 无效操作
这样可以节省一些代码并避免所有这些切换。您甚至可以在其他类(class)中进行操作
希望对您有所帮助!
关于c# - C# 中的组合生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41780029/