因此,我仍然在从事游戏工作,从第一天开始我就一直在努力解决角色放置问题。我想在地图上放置一个“ @”符号,您就是玩家所在的位置。一旦“ @”符号移动,应在其后面重绘地图图块。这里的问题是该地图以ASCII格式绘制(在控制台中),并且特定的地图字符具有特定的颜色(例如,#使用Console.Foregroundcolor = ConsoleColor.DarkYellow
)。
该映射存储在.txt文件中,并使用streamreader逐字符读取该映射。然后将其存储在一个名为“数据”的二维数组中。为了向此图块添加颜色,程序将检查它在switch语句中的哪个字符并相应地应用颜色。
这是我最接近想要实现的正确字符放置的位置:
public static void DrawCharacter()
{
lastmapchar = data[oldy][oldx];
Console.SetCursorPosition(oldx, oldy);
Console.Write(lastmapchar);
Console.ForegroundColor = ConsoleColor.White;
Console.SetCursorPosition(x, y);
Console.Write("@");
Console.SetCursorPosition(x, y);
ClearKeyBuffer();
Randomnumber = 100;
}
这会以白色绘制“ @”字符,但也会以白色绘制“ lastmapchar”,这会导致玩家在自己身后留下一条白色的痕迹。
删除Console.ForegroundColor = ConsoleColor.White;
行会使播放器与其上的第一个图块具有相同的颜色。
所以我的问题是:我如何使游戏用白色书写“ @”字符,同时以正确的颜色重新绘制它后面的地图?
答案 0 :(得分:2)
您可以执行以下两项操作之一:
每次玩家移动时,都完全重新绘制地图。这有些没有优化,因为可以将绘制得很好的东西重新绘制而无需进行任何更改。
使用正确的颜色重新绘制玩家在之前上的瓷砖。只需执行以下操作:
public static void DrawCharacter()
{
lastmapchar = data[oldy][oldx];
Console.SetCursorPosition(oldx, oldy);
// Change foreground color here, like so:
switch (lastmapchar)
{
case "#":
Console.Foregroundcolor = ConsoleColor.DarkYellow;
break;
//.... etc
}
Console.Write(lastmapchar);
Console.ForegroundColor = ConsoleColor.White;
Console.SetCursorPosition(x, y);
Console.Write("@");
Console.SetCursorPosition(x, y);
ClearKeyBuffer();
Randomnumber = 100;
}