如何创建基于网格的地图?

时间:2016-12-15 14:08:58

标签: c# mud

我正试图在C#中制作这样的地图:

extern

包含 0 1 0 [ ]---[ ] | | | | 1 [ ]---[ ] (0,0)(1,0)(0,1)

的会议室的简单网格

我尝试过这样做并在此处举例https://dotnetfiddle.net/3qzBhy

但我的输出是:     (1,1)

我不明白为什么并且不确定在StringBuilder上调用[ ]|||| [ ]是否会丢失其格式,例如新行。

我也很难找到存储坐标的方法

.ToString()

Public SortedList<int, int> Rooms () { var roomList = new SortedList<int, int>(); roomList.Add(0,0); roomList.Add(1,0); //roomList.Add(0,1); //roomList.Add(1,1); return roomList; } roomList.Add(0,1)是重复的,因为已经使用了密钥roomList.Add(1,1)0。如何存储坐标列表?

2 个答案:

答案 0 :(得分:1)

不是通过评论传播我的意见,而是将所有人都放在这里作为答案:

  

我也很难找到存储坐标的方法

SortedListsDictionaries等无法工作。最好只使用常规List填充TuplesPoints或您自己的类,直到找到更好的解决方案。

由于这些房间可能不会空着,你可以写自己的课程,例如:

class Tile
{
    public int X { get; set; }
    public int Y { get; set; }

    public virtual void Draw(StringBuilder map)
    {
        map.Append("   ");
    }
}

class Room : Tile
{ 
    public int EnemyType { get; set; }
    public int Reward { get; set; }

    public override void Draw(StringBuilder map)
    {
        map.Append("[ ]");
    }
}

// etc.
  

我不明白为什么并且不确定在StringBuilder上调用.ToString()是否会丢失其格式,例如新行。

它没有。您的示例中没有任何换行符,因为所有会议室都在Y = 0

如果您一次绘制多条线并将它们串在一起,那么当前的尝试将无法工作。相反,你可以使用类似&#34;半步&#34;网格。

enter image description here

您可以找到一个小的(丑陋的,非优化的,临时的)示例here as a fiddle

答案 1 :(得分:0)

除了文本格式和控制台的问题,以及Manfred已经提到的选项,这里有一个使用数组而不是列表的示例。房间是true - 在任何给定索引处的值,“{room}”表示“没有房间”。

您的false方法如下所示:

Rooms()

这使您需要将public bool[,] Rooms () { var roomList = new bool[,]{{true,false},{true,true}}; return roomList; } 更改为如下所示:

IsRoom(int, int)

还缺少换行符,导致与下一个房间在同一行上有一个垂直连接器。我把它改成了

public bool IsRoom(int x, int y)
{
    var rooms = Rooms();

    if(x<rooms.GetLength(0) && y<rooms.GetLength(1))
    {
        return (rooms[x,y]);
    }
    return false;
}