2017-01-21 21 views
0

我正在創建一個基於組合系統的戰鬥遊戲。你必須從5個隨機生成的動作中選擇2個,比如弱攻擊,攔截或閃避等。 你選擇的這2個動作會產生不同結果的組合。C組合發生器#

我正在處理執行這些操作的algorythm,我想知道,如果除了使用開關情況以外還有其他更好的方法。

現在我有這樣的事情:

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 
} 
+0

'firstAction * 10000 + secondAction'然後'case 10001' – Slai

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

編輯>輸出是

行動1,1 行動1,2 行動2,1 行動2,2 操作無效

這種方式節省一些代碼,避免所有的開關。你甚至可以在其他類別的行動

希望它有幫助!

+0

現在切一個這個,謝謝你的時間! –