C#中的组合发生器

时间:2017-01-21 13:37:41

标签: c# algorithm combinations

我正在创建一个基于组合系统的战斗游戏。你必须挑选5个随机生成的动作中的2个,如弱攻击,阻挡或闪避等。 您选择的这两个操作会生成具有不同结果的组合。

我正在研究执行这些操作的algorythm,我想知道,除了使用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
}

1 个答案:

答案 0 :(得分:1)

你可以做这样的事情

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();
    }

编辑&gt;输出是

行动1,1 行动1,2 行动2,1 行动2,2 行动无效

这样可以节省一些代码并避免所有这些切换。你甚至可以在其他课程中采取行动

希望它有所帮助!