2016-10-04 1 views
0

저는 C#에 익숙하지 않습니다. 그리고 저는 시각적 인 스튜디오와 윈도우 폼에 대한 이해를 돕기 위해 기본적인 구식 던전 탐구 게임을 만들고 있습니다.C# 맵을 배열로 사용하기

개체 배열을지도로 사용하고 싶습니다. 더 나은 방법이 있으면 알려주세요.

 public object area_init() 
    {Area hall = new Area("Hall", "big hall", "null", false, 1, 2, false); 
     Area room = new Area("Room", "room", "null", false, 1, 2, false); 

     Area[,] maparray = { { hall, room, hall }, 
      { hall,hall,room}, 
      { hall,room,room} 
     }; 
object[,] maparray = new object[3,3]; 
: (선명도 편집) 그래서 내가 시작하는 경우는 currentroom = maparray [0,1], currentroom = maparray [0,0]

다음

로 변경 것 왼쪽을 누르면 내 배열 코드

txtbox_ticker.AppendText("You are in a " + maparray[0,1]); 

그리고 그때에있어 어느 방 말을 'currentroom'변수를 업데이트 할 수 없습니다 : 그때 내가 그렇게 같은 현재이었다 방을 참조하고자했다

(나는이 잘못 알고). 아무도 나에게이 일을하는 가장 좋은 방법을 알려주고 내가 잘못 가고있는 곳이 어디 있니?

+0

A는 [사전 (https://msdn.microsoft.com/en-us/library/xfhwa508 (V = vs.110) .ASPX) 여기에서 잘 작동한다. '사전 myDungeon'. –

+0

사전으로 2D 공간에서 이동할 수 없습니까? 배열을 사용하는 이유 중 하나는 행과 열이 기본 맵으로 작동한다는 것입니다. currentroom이 maparray [0,1]이면 left를 누르면 maparray [0,0]로 이동합니다. – Retro

+0

각 영역은'string left = "왼쪽의 속성 이름을 속성으로 가질 수 있습니다. 그런 다음'myDungeon [currentArea.left]'를 호출하여 새 영역을 가져올 수 있습니다. 당신이 정말로 필요로하는 것은 더 많은 연결된 그래프 구조입니다. –

답변

1

영역은 연결된 그래프에서 노드로 간주 될 수 있습니다. 가장자리는 특정 노드가 연결된 노드로 정의됩니다.

지역 클래스를 다음과 같이 정의 할 수 있습니다.

public class Area 
{ 
    public string Name {get;set;} 
    public string Left {get;set;} 
    public string Right {get;set;} 
    public string Up {get;set;} 
    public string Down {get;set;} 

    // if you really need an x-y location put it here. 
} 

그런 다음 백그라운드에서 관련 정보에 액세스 할 수있는 사전이 있어야합니다. 사전은 방의 이름을 색인이 아닌 속성에 액세스 할 수 있기 때문에 유용합니다.

Dictionary<string,Area> MyDungeon = new Dictionary<string,Area>(); 

// define two areas that are linked. 

Area hall = new Area(); 
hall.Name = "hall" 
hall.Left = "room"; // go left from here to get to the room 

Area room = new Area(); 
room.Name = "room"; 
room.Right = "hall"; // go right to get to the hall 

MyDungeon.Add(hall.Name,hall); 
MyDungeon.Add(room.Name,room); 

홀에서 사용자를 시작합시다.

Area CurrentArea = MyDungeon["hall"]; 

이제 사용자가 왼쪽 화살표 키를 눌러서 처리해야한다고 가정 해보십시오. 당신은 다음과 같이 할 수 있습니다.

private void Move_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if(e.Key == Key.Left) 
     { 
      CurrentArea = MyDungeon[CurrentArea.Left]; 
      txtbox_ticker.AppendText("You are now in " + CurrentArea.Name); 
     } 

    else if(e.Key == Key.Right) 
     { 
      CurrentArea = MyDungeon[CurrentArea.Right]; 
      txtbox_ticker.AppendText("You are now in " + CurrentArea.Name); 
     } 

} 
+0

Brilliant! 고맙습니다. Felix - 정말 아마추어 개발자를 매우 행복하게 만들었습니다. – Retro

+0

내 기쁨, 다행히 도왔습니다. –

관련 문제