2017-01-21 7 views
0

Я создаю игру, в которой бой основан на комбинированной системе. Вы должны выбрать 2 из 5 случайных сгенерированных действий, таких как слабая атака, блокировка или уклонение и т. Д. Эти 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(); 
    } 

EDIT> Выход

Действие 1,1Действие 1,2 Действие 2,1 Действие 2,2 Invalid Действие

Этот способ сэкономить код и избежать всех этих переключатель. Вы даже могли бы иметь свои действия в других классах

Надеюсь, это поможет!

+0

Cheching this one прямо сейчас, спасибо за ваше время! –

 Смежные вопросы

  • Нет связанных вопросов^_^