主机游戏角色的放置



所以我仍然在玩我的游戏,从第一天起我就一直在为角色的位置而挣扎。我想在我的地图上放一个"@"符号,你就是玩家。一旦"@"符号移动,就应该在其后面重新绘制地图块。这里的问题是,地图是用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;线会使播放器的颜色与它所在的第一个磁贴相同。

所以我的问题是:我如何让游戏用白色书写"@"字符,同时用正确的颜色重新绘制它后面的地图?

您可以做以下两件事之一:

  1. 每次玩家移动时,都要完全重新绘制地图这有点未优化,因为画得好的东西会在不改变任何东西的情况下重新画出来。

  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;
    }
    

最新更新