所以我仍然在玩我的游戏,从第一天起我就一直在为角色的位置而挣扎。我想在我的地图上放一个"@"符号,你就是玩家。一旦"@"符号移动,就应该在其后面重新绘制地图块。这里的问题是,地图是用ASCII(在控制台中)绘制的,特定的地图字符有特定的颜色(例如,#使用Console.Foregroundcolor = ConsoleColor.DarkYellow
)。
地图存储在.txt文件中,并使用streamreader逐字符读取。然后,它被存储在一个名为"data"的二维数组中。为了将颜色应用于该瓦片,程序会检查它在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;
线会使播放器的颜色与它所在的第一个磁贴相同。
所以我的问题是:我如何让游戏用白色书写"@"字符,同时用正确的颜色重新绘制它后面的地图?
您可以做以下两件事之一:
-
每次玩家移动时,都要完全重新绘制地图这有点未优化,因为画得好的东西会在不改变任何东西的情况下重新画出来。
-
用正确的颜色重新绘制玩家在移动前上的瓷砖只需执行以下操作:
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; }