2015-12-07 4 views
-1

Может ли кто-нибудь объяснить мне, что это спрашивает в // TBD, и, возможно, дать мне несколько примеров того, как это будет работать? Я понимаю некоторые, если это немного, но все еще есть проблемы с чем-либо, что я пытаюсь.Движение делегатов в C#

namespace DelgateKeypress 
{ 
class Program 
{ 
    private static int x=20; 
    private static int y=20; 

    //TBD: You will need to define a data structure to store the association 
    //between the KeyPress and the Action the key should perform 


    private static void Main(string[] args) 
    { 
     //TBD: Set up your control scheme here. It should look something like this: 
     // myControls.Add(ConsoleKey.W, Up) 
     // myControls.Add(ConsoleKey.S, Down) 
     //or you can ask the user which keys they want to use 
     //etc 





     while (true) 
     { 
      Console.SetCursorPosition(x, y); 
      Console.Write("O"); 

      var key = Console.ReadKey(true); 


      int oldX = x; 
      int oldY = y; 


      //TBD: Replace the following 4 lines by looking up the key press in the data structure 
      //and then performing the correct action 
      if (key.Key == ConsoleKey.W) Up(); 
      if (key.Key == ConsoleKey.S) Down(); 
      if (key.Key == ConsoleKey.A) Left(); 
      if (key.Key == ConsoleKey.D) Right(); 

      Console.SetCursorPosition(oldX, oldY); 
      Console.Write("."); 


     } 
    } 

    private static void Right() 
    { 
     x++; 
    } 

    private static void Left() 
    { 
     x--; 
    } 

    private static void Down() 
    { 
     y++; 
    } 

    private static void Up() 
    { 
     y--; 
    } 
} 

}

Я отчасти понимаю, что это немного, но у меня возникают проблемы при попытке получить пользователь, чтобы иметь возможность ввести какое значение они хотели бы добавить для каждого из основных движений для вверх, вниз, влево и вправо. Мне не нужно было, чтобы это могло быть просто W, S, A, D для этих движений, но я нахожусь в убытке здесь, поэтому любая помощь будет фантастическими парнями.

+0

Провести поиск документации по словарю '. Это поможет. – Enigmativity

ответ

0

Это домашнее задание для класса? Если это так, вы должны обязательно следить за своим учителем, чтобы они объяснили более подробно, почему вам дали это задание, как вы должны были его завершить, и чтобы убедиться, что вы получили от упражнения то, что ваш учитель хотел, чтобы вы , Тем временем & hellip;


Мне кажется, что на основе синтаксиса выборки, представленной в комментариях (например myControls.Add(ConsoleKey.W, Up)), что автор этих замечаний ждет вас, чтобы объявить Dictionary<ConsoleKey, Action>, заполнить его, а затем использовать его в качестве клавиши нажаты ,

Декларация будет выглядеть следующим образом:

static Dictionary<ConsoleKey, Action> myControls; 

инициализации будет выглядеть следующим образом:

myControls = new Dictionary<ConsoleKey, Action> 
{ 
    { ConsoleKey.W, Up }, 
    { ConsoleKey.S, Down }, 
    { ConsoleKey.A, Left }, 
    { ConsoleKey.D, Right }, 
}; 

И вы бы использовать его как это:

myControls[key.Key](); 

или если возможно для ключевого значения, отсутствующего в структуре данных (как кажется в вашем примере):

Action action; 

if (myControls.TryGetValue(key.Key, out action)) 
{ 
    action(); 
} 
Смежные вопросы