Динамические Тайловые Карты
|
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 ] [ Юмор ]
|