2016-10-04 2 views
0

Я относительно новичок в C#, и я создаю базовую игру квеста для подземелий старой школы, чтобы помочь мне справиться с визуальной студией и окнами.C# использование массивов в качестве карты

Я хотел бы использовать массив объектов в качестве карты, которую я могу перемещать между (пожалуйста, дайте мне знать, если есть лучший способ). (редактирование для ясности) Так что, если я начал в currentroom = maparray [0,1], нажав левую бы изменить его currentroom = maparray [0,0]

Вот мой код массива:

 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]; 

я тогда хотел, чтобы обратиться к комнате, я был в настоящее время, как это (я знаю, что это неправильно):

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-пространстве? Моя причина использования массива заключается в том, что строки и столбцы сортируются как основная карта. Если ваш текущий номер был maparray [0,1], нажатие левой кнопки приведет вас к 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

Блестящий! Большое спасибо Феликс, вы сделали очень любительского разработчика очень счастливым. – Retro

+0

мое удовольствие, рад, что это помогло. –

Смежные вопросы