c# - C# 中的组合生成器

标签 c# algorithm combinations

我正在制作一款战斗基于组合系统的游戏。您必须从 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/

相关文章:

c# - WPF 在异步等待模式中使用 MVVM 和 WCF

c# - C# 中的正则表达式包含 "this"但不包含“that

c# - 类型 'System.Data.Common.DbTransaction' 在未引用的程序集中定义。您必须添加对程序集的引用

Python按钮算法

C++ 记住要做的工作(算法)

c# - 从可能性集中找出所有组合

c# - PBKDF2 在 .NET 中使用 SHA 256

algorithm - 计算列表列表中的元素数量

Java:成对组合数组中的元素

php - 如何在 PHP 中将两个字符串组合在一起?