Как сделать массив структур в C?

Я делаю игру в жанре roguelike. Я хочу представить карту в виде массива структур, например, имея 256 структур в массиве. Карта представляет собой сетку тайлов 16*16, и у каждого тайла есть атрибуты, например, есть ли на нем элемент.

Итак, скажите, что мне нужен массив из 256 структур tiles:

struct tiles {
        char type; /* e.g. dirt, door, wall, etc... */
        char item; /* item on top of it, if any */
        char enty; /* entity on top of it, e.g. player, orc if any */
}

Затем мне нужно получить доступ к массиву этих структур примерно так:

int main(void)
{
        unsigned short int i;
        struct tiles[256];

        for (i = 1; i <= 256; i++) {
                struct tiles[i].type = stuff;
                struct tiles[i].item = morestuff;
                struct tiles[i].enty = evenmorestuff;
        }
}

person sadljkfhalskdjfh    schedule 24.08.2015    source источник


Ответы (3)


Чтобы объявить массив struct tiles, просто поместите его перед переменной, как вы это делаете с другими типами. Для массива из 10 int

int arr[10];  

Точно так же, чтобы объявить массив из 256 struct tiles

struct tiles arr[256];  

Чтобы получить доступ к любому члену, скажем, type, элементов arr, вам нужен оператор . как arr[i].type

person haccks    schedule 24.08.2015

Вам нужно дать массиву имя. Если переменная int выглядит так:

int my_int

И массив ints выглядит так:

int my_ints[256]

Тогда массив struct tiles выглядит так:

struct tiles my_tiles[256]
person larsks    schedule 24.08.2015

Массив — это переменная, как и целое число, поэтому вам нужно дать ему имя, чтобы получить к нему доступ.

Примечание. Массив имеет самый низкий индекс 0 и самый высокий индекс 255, поэтому вместо этого цикл for должен быть: for (i = 0; i < 256; ++i).

int main(void)
{
        unsigned short int i;
        struct tiles t_array[256];

        for (i = 0; i < 256; ++i) {
                t_array[i].type = stuff;
                t_array[i].item = morestuff;
                t_array[i].enty = evenmorestuff;
        }
}
person Joe    schedule 24.08.2015