簡體   English   中英

C#中的組合生成器

[英]Combination generator in C#

我正在創建一個基於組合系統的戰斗游戲。 您必須從5個隨機生成的動作(例如弱攻擊,格擋或躲閃等)中選擇2個。您選擇的這2個動作會生成具有不同結果的組合。

我正在研究執行這些操作的算法,我想知道是否有比使用切換用例更好的方法了。

現在,我得到了這樣的東西:

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無效行動

這樣可以節省一些代碼並避免所有這些切換。 您甚至可以在其他課程中進行動作

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM