【发布时间】:2016-11-24 14:42:22
【问题描述】:
我需要一种将Dictionary<int,int> 绘制到控制台应用程序中的方法,例如
Dictionary<int, int> chartList = new Dictionary<int, int>()
{
{50,31}, // x = 50, y = 31
{71,87},
{25,66},
{94,15},
{33,94}
};
DrawChart(chartList);
应该会产生类似的结果
我已经走了这么远,但我被IsHit 方法困住了,该方法确定是否应在当前坐标处设置一个点。有人可以在这一点上帮助我吗?它总是返回 true。
public static void DrawChart(Dictionary<int, int> dict)
{
int consoleWidth = 78;
int consoleHeight = 20;
Console.WriteLine(dict.Max(x => x.Key).ToString());
Func<int, int, bool> IsHit = (hx, hy) => dict.Any(dct => dct.Key / dict.Max(x => x.Key) == hx / dict.Max(x => x.Key) && dct.Value / dict.Max(x => x.Value) == hy / dict.Max(x => x.Value));
for (int i = 0; i < consoleHeight; i++)
{
Console.Write(i == 0 ? '┌' : '│');
for (int j = 0; j < consoleWidth; j++)
{
int actualheight = i * 2;
if (IsHit(j, actualheight) && IsHit(j, actualheight + 1))
{
Console.ForegroundColor = ConsoleColor.Red;
Console.BackgroundColor = ConsoleColor.Black;
Console.Write('█');
}
else if (IsHit(j, actualheight))
{
Console.ForegroundColor = ConsoleColor.Red;
Console.BackgroundColor = ConsoleColor.Black;
Console.Write('▀');
}
else if (IsHit(j, actualheight + 1))
{
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.Red;
Console.Write('▀');
}
}
Console.ResetColor();
Console.WriteLine();
}
Console.WriteLine('└' + new string('─', (consoleWidth / 2) - 1) + '┴' + new string('─', (consoleWidth / 2) - 1) + '┘');
Console.Write((dict.Min(x => x.Key) + "/" + dict.Min(x => x.Value)).PadRight(consoleWidth / 3));
Console.Write((dict.Max(x => x.Value) / 2).ToString().PadLeft(consoleWidth / 3 / 2).PadRight(consoleWidth / 3));
Console.WriteLine(dict.Max(x => x.Value).ToString().PadLeft(consoleWidth / 3));
}
【问题讨论】:
-
为什么不写一个函数 setpoint(row, col, char, color) ?毕竟你可以轻松set the cursor to any coordinate..
-
你不能简单地遍历字典并只绘制生命值吗?
-
当然,我只是想保留来自stackoverflow.com/a/33604540/1315444的批准方法