Как я могу создать массив информации Cha, которая включает такие атрибуты, как цвет переднего плана? - PullRequest
2 голосов
/ 10 ноября 2010

В настоящее время я пишу игру в стиле roguelike для обучения / развлечения. Я пишу это в консоли, и у меня возникают проблемы с медленным обновлением карты. Я провел тонны онлайн-поиска и нашел возможное решение, но оно было написано на c ++ (я считаю).

Решением было использование WriteConsoleOutput, однако я не верю, что это доступно в C #. Дальнейший поиск привел к возможному решению C #. Передайте массив в метод Console.Write. Однако проблема этого метода заключается в том, что я не могу передать (насколько мне известно) атрибуты о персонаже, например цвет переднего плана.

Я бросил что-то вместе, чтобы проверить передачу массива в Console.Write. Приведенный ниже код будет отображать сетку чисел. Я хотел бы иметь возможность менять цвет переднего плана для каждого значения в сетке. Итак, 1 будет синим, а 2 красным, и т.д ...

static void Main(string[] args)
    {
        Console.SetWindowSize(80, 35);
        Console.BufferWidth = 80;
        Console.BufferHeight = 35;
        string temp = "";

        int[,] aryMap = new int[,] {
           {0,0,0,0,0},
           {1,1,1,1,1},
           {2,2,2,2,2},
           {3,3,3,3,3},
           {4,4,4,4,4},
           {5,5,5,5,5}
        };         

        for (int h = 0; h < 5; h++)
        {
            temp += "\n";
            for (int w = 0; w < 5; w++)
            {
                temp += aryMap[h, w];
            }
        }
        Console.SetCursorPosition(0, 0);
        Console.Write(temp);
        string test = Console.ReadLine();
   }

РЕШЕНИЕ

В итоге я использовал Malison, библиотеку для создания интерфейсов в стиле консоли в C #. Прекрасно работает, и теперь мне не нужно создавать собственную консоль.

http://bitbucket.org/munificent/malison/wiki/Home

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Этот код прекрасно работает: http://www.daniweb.com/code/snippet216395.html
Я уверен, что вы можете изменить его, чтобы соответствовать тому, что вам нужно.

1 голос
/ 10 ноября 2010

Вы можете либо вывести escape-последовательности ANSI, либо использовать свойства Control.ForegroundColor и Console.BackgroundColor, чтобы задать свойство перед написанием вашего символа.

Я бы предложил экранирующие последовательности ANSI, если вам нужнонаписать в один звонок.

...