我正试图在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
。如何存储坐标列表?
答案 0 :(得分:1)
不是通过评论传播我的意见,而是将所有人都放在这里作为答案:
我也很难找到存储坐标的方法
SortedLists
,Dictionaries
等无法工作。最好只使用常规List
填充Tuples
,Points
或您自己的类,直到找到更好的解决方案。
由于这些房间可能不会空着,你可以写自己的课程,例如:
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;网格。
您可以找到一个小的(丑陋的,非优化的,临时的)示例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;
}