Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台游戏角色放置_C#_Console Application_Ascii - Fatal编程技术网

C# 控制台游戏角色放置

C# 控制台游戏角色放置,c#,console-application,ascii,C#,Console Application,Ascii,所以我仍然在做我的游戏,从第一天起我就一直在努力调整角色的位置。我想在我的地图上放置一个“@”符号,表示玩家所在的位置。一旦“@”符号移动,应在其后面重新绘制地图分幅。这里的问题是地图是用ASCII(在控制台中)绘制的,特定的地图字符有特定的颜色(例如使用console.Foregroundcolor=ConsoleColor.DarkYellow) 地图存储在.txt文件中,使用streamreader逐个字符读取。然后将其存储在一个称为“数据”的二维数组中,用于将颜色应用于此平铺,程序检查它

所以我仍然在做我的游戏,从第一天起我就一直在努力调整角色的位置。我想在我的地图上放置一个“@”符号,表示玩家所在的位置。一旦“@”符号移动,应在其后面重新绘制地图分幅。这里的问题是地图是用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行使播放器与它所在的第一个平铺颜色相同


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

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

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

  • 用正确的颜色重新绘制移动前玩家所在的互动程序。只需执行以下操作:

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