主机游戏角色放置

时间:2019-01-14 16:06:21

标签: c# console-application ascii

因此,我仍然在从事游戏工作,从第一天开始我就一直在努力解决角色放置问题。我想在地图上放置一个“ @”符号,您就是玩家所在的位置。一旦“ @”符号移动,应在其后面重绘地图图块。这里的问题是该地图以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;行会使播放器与其上的第一个图块具有相同的颜色。

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

1 个答案:

答案 0 :(得分:2)

您可以执行以下两项操作之一:

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