Rambler's Top100

 GDsW - Game Developer's World    

.: Динамические Тайловые Карты :.


Динамические Тайловые Карты
copyright 1999 Lee French. All rights reserved.
Перевод - Aidamir Taimasukov aidamir@chat.ru


Я слышал много людей, спрашивающих как реализовать динамические массивы для карт любого размера. Здесь описана обучающая программа, которая поможет Вам начать.

Прежде всего, давайте рассмотрим то, что мы называем данными карты:
а) список ИДЕНТИФИКАТОРОВ тайлов, которые соответствуют расположению тайлов в пределах файла данных (ресурсов)
б) список типов тайлов (например, является ли тайл проходимым, анимированным и т.д).

Теперь мы можем определить структуру типа:

Type def struct
{
    unsigned char TileID; // The ID of this tile
    unsigned char Type; // What type of tile is this
} MAPTILE:

Мы создали новый тип называемый тайлом. Теперь мы должны знать, как объявить нашу карту тайлов. Если мы установили размеры карты, мы могли бы объявлять это следующим образом:

MAPTILE Map[MAPX][MAPY];

Но так как мы хотим карту переменного размера, мы должны думать немного более умно. Также, мы хотим включить разные слои в карту. Чтобы использовать переменные размеры, мы должны инициировать карту подобно этому:

MAPTILE ***Map;

Смотрится странно, но поверьте мне, я тоже думал так сначала. Что теперь надо делать - это динамически добавлять каждый элемент к указателю карты:

// Allocate memory for the maps Layers elements 
Map = malloc(sizeof(int**) * MapLayers);

// Allocate memory for the maps X elements 
for(lyr = 0; lyr < MapLayers; lyr++) 
{
    Map[lyr] = malloc(sizeof(int*) * MapWidth);

    // Allocate memory for the maps Y elements 
    for(x = 0; x < MapWidth; x++)
    {
        Map[lyr][x] = malloc(sizeof(int) * MapHeight); 
    }
 }

Вот так, просто. Проверок ошибок здесь нет, но это сейчас не столь важно.

Теперь мы можем обратиться к указателю карты, чтобы инициализировать переменные:

// Initialize the elements of the map
for(lyr = 0; lyr < MapLayers; lyr++)
{
    for(x = 0; x < MapWidth; x++)
    {
        for(y = 0; y < MapHeight; y++)
        {
            Map[lyr][x][y].TileID = NOTILE;
            Map[lyr][x][y].Walkable = WALKABLE;
        }
    }
}

Здесь был описан простой способ создавать динамический массив карты.


главная ] Общеигровые статьи на GDsW ] DirectX ] Статьи по графике ] Статьи по AI ] Юмор ]


.: Динамические Тайловые Карты :.

Rambler's Top100 Рейтинг@Mail.ru List.ru - каталог ресурсов интернет Белорусский каталог BelResource

Copyright IRsoft, web-master Keeper. All rights reserved!

Хостинг от uCoz