c#使用数组作为映射

本文关键字:映射 数组 | 更新日期: 2023-09-27 18:11:32

我对c#比较陌生,我正在创建一个基本的老派地下城任务游戏,以帮助我掌握visual studio和windows窗体。

我想使用对象的数组作为一个地图,我可以然后移动之间(请让我知道如果有一个更好的方法)。(编辑清楚)如果我从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'变量来说明我在哪个房间。谁能告诉我最好的方法是什么,我哪里做错了?

c#使用数组作为映射

区域可以被认为是连通图中的节点。边由特定节点所连接的节点定义。

你可以像这样定义你的区域类。

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);
      }
}