0

我有一个简单的 WinForms 游戏,玩家可以在表单上驾驶汽车。可以有更多的汽车,每辆汽车都由不同的玩家驾驶。

当一个键被按下时,Form1_KeyDown 被触发。现在我需要确定:

  1. 哪个玩家按下了键
  2. 钥匙代表什么(例如上,下,向左..)

我提出的唯一解决方案是为每个玩家创建一个 Keys 数组,其中每个索引都意味着不同的命令(例如,array[0] = go up,array[1] = go down,等等)

public Keys[] keyControls = new Keys[5]; // up, down, left, right and fire key codes!

然后我将不得不遍历每个 Player 和每个 Key 以找到正确的,例如:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    foreach (Car car in cars)
    {
        for (int i = 0; i < car.keyControls.length; i++)
        {
           if (car.keyControls[i] == e.KeyData)
           {
              // save car, index (for movement type) and double break the loops with flags
           }
        }
    }

    // do something with found car and movement index (movement type)
}

但我想拥有尽可能“好”和优化的代码,所以我正在考虑使用一些 Linq,比如:

Cars car = cars.First(t => t.keyControls.Any( m => m == e.KeyData));

但在那种情况下,我将无法获得运动的索引,因此我将无法确定如何处理汽车。

我应该将关键数据存储在一些不同的“对象”中吗?或者是否可以从 Linq 获取索引而无需再通过一次循环来查找索引代表什么?

4

1 回答 1

1

考虑使用字典或通用字典,您可以在其中存储用于快速查找的键和表示您需要知道以对该查找进行操作的任何其他数据的对象。字典将比迭代集合或使用 linq 快得多。

于 2013-05-24T16:00:13.177 回答