问问题
1101 次
2 回答
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
如果您一次绘制多条线并将它们串在一起,则当前的尝试将不起作用。相反,您可以使用类似“半步”网格的东西。
您可以在这里找到一个小的(丑陋的、未优化的、临时的)示例作为小提琴。
于 2016-12-15T14:55:44.480 回答
0
除了文本格式和控制台的问题,还有 Manfred 已经提到的选项,这里有一个使用数组而不是列表的示例。房间是true
任何给定索引处的 - 值,“没有房间”由 表示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;
}
还缺少一个换行符,这导致在下一个房间的同一条线上有一个垂直连接器。我把它改成了
if (IsRoom(x, y + 1))
{
buildMap.Append("\r\n".PadLeft(4) + DrawVerticalConnector().PadRight(4));
buildMap.Append("\r\n".PadLeft(4) + DrawVerticalConnector().PadRight(4)+ "\r\n".PadLeft(4));
}
于 2016-12-15T14:35:39.853 回答