用C#代表运动

时间:2015-12-07 00:16:47

标签: c#

任何人都可以向我解释这是在// TBD中提出的问题,或许可以举一些例子说明这是如何工作的?我理解了一些,但我仍然遇到任何问题。

  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这些动作,但我在这里不知所以任何帮助都会是很棒的家伙。

1 个答案:

答案 0 :(得分:0)

这是一堂课的作业吗?如果是这样,你一定要跟你的老师跟进,让他们更详细地解释你为什么要接受这项任务,你希望如何完成这项任务,并确保你从练习中得到你的老师想要的你到。在此期间......


在我看来,根据评论中提供的示例语法(例如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();
}