任何人都可以向我解释这是在// 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这些动作,但我在这里不知所以任何帮助都会是很棒的家伙。
答案 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();
}