2013-05-24 6 views
0

나는 플레이어가 폼에서 차를 운전할 수있는 간단한 WinForms 게임을 가지고있다. 각기 다른 플레이어가 운전하는 차량이 더 많을 수 있습니다.간단한 게임에서 멀티 플레이어 키 설정을 저장하는 방법은 무엇입니까?

키를 누르면 Form1_KeyDown이 발생합니다. 지금은 결정해야합니다 :의 키 스탠드를 무엇을 키

  • 을 누르면 플레이어

    1. (예를 들어, 왼쪽으로 가서 .. 내려 가서, 가서) 내가 온

    유일한 해결책을 와는 각각 인덱스가 다른 명령을 의미 모든 플레이어를위한 키 배열을 생성 한 후, I는해야

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

    (예 어레이 [0] = 배열 ​​[1] = 등을 내려 가서) 모든 플레이어를 반복하다 모든 키는 같은 오른쪽에 하나, 이렇게 뭔가를 찾을 수 있습니다 :

    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에서 인덱스를 가져올 수 있습니까?

  • 답변

    1

    빠른 검색을위한 키를 저장할 수있는 사전 또는 일반적인 사전과 해당 조회를 처리하는 데 필요한 기타 데이터를 나타내는 개체를 사용하는 것이 좋습니다. 사전은 컬렉션을 반복하거나 linq를 사용하는 것보다 훨씬 빠릅니다.

    관련 문제