Индексы осей X и Y в списке‹string› для Roguelike

После анализа фрагмента кода из этой ссылки ( часть C#), я попытался сделать это самостоятельно для некоторой практики.
Однако я не понимаю, как приведенная ниже часть преобразуется в индексы X, Y в списке строк и почему оператор if() имеет индекс Y перед X.

if (Map[playerY][playerX] == ' ')

Вот как выглядит список:

List<string> Map = new List<string>()
        {
            "##########",
            "#        #",
            "#   >    #",
            "#   >    #",
            "#        #",
            "##########"
        };

Будем признательны за любую помощь, заранее спасибо!


person kmartmvp    schedule 01.07.2013    source источник
comment
если это поможет объяснить ниже ответы (Map[playerY]) [playerX], должен признать, что это очень умный способ использовать список строк   -  person Sayse    schedule 01.07.2013
comment
Мне это нравится и сейчас, потому что я понимаю это, ха-ха.   -  person kmartmvp    schedule 01.07.2013


Ответы (3)


Поскольку строки сами по себе являются массивами, вызов функции индексатора, такой как: string[n], получит символ в позиции n.

Поэтому, когда вы пытаетесь получить символ, на котором находится игрок, вы получаете координату Y, индексируя массив строк, потому что первая строка в массиве — это верхняя строка карты.

 Y |
------------------
 0 | ##########
 1 | #        #
 2 | #   >    #
 3 | #   >    #
 4 | #        #
 5 | ##########

Затем мы выбираем X, сопоставляя его с символом в позиции X в строке:

 X | 0123456789
------------------
   | ##########
   | #        #
   | #   >    #
   | #   >    #
   | #        #
   | ##########

Таким образом, [Y,X] получит соответствующий символ.

person Blam    schedule 01.07.2013

Первый [ ] выбирает одну строку из массива. Второй [ ] выбирает символ из строки.

person redtuna    schedule 01.07.2013

Индекс Y выбирает строку, как и следовало ожидать от List. Индекс X фактически выбирает символ из этой строки. Это не сработает для List, скажем, ints, потому что в этом примере оператор [] фактически используется для List, а затем снова используется для String, возвращаемого List.

person Mike Precup    schedule 01.07.2013