размещение персонажей в консольной игре - PullRequest
0 голосов
/ 14 января 2019

Так что я все еще работаю над своей игрой, и я борюсь с размещением персонажей с первого дня. Я хочу разместить символ "@" на моей карте, где вы, игрок, находитесь. Как только этот символ "@" переместится, плитка карты должна быть перерисована за ним. Проблема здесь в том, что карта рисуется в ASCII (в консоли), а определенные символы карты имеют определенные цвета (например, # использует Console.Foregroundcolor = ConsoleColor.DarkYellow).

Карта хранится в файле .txt и читается символ за символом с помощью потокового ридера. Затем он сохраняется в двумерном массиве, который называется «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 Ответ

0 голосов
/ 14 января 2019

Вы можете сделать одну из двух вещей:

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