См. MineCraft. В этом случае «аналогичные функции» обрабатываются с помощью чего-то вроде динамического связанного 2D-списка трехмерных массивов «блоков» (то есть целочисленных идентификаторов для объектов местности)… или, как я мог бы подумать. Однажды я написал слабый клон системы, который выглядел примерно так:
struct block_chunk {
int[16][16][16] blocks;
block_chunk *above;
block_chunk *below;
block_chunk *north;
block_chunk *south;
block_chunk *east;
block_chunk *west;
entity_list *mobs;
};
//standard Linked List
struct entity_list {
entity_list *next;
entity *object;
};
struct entity {
//blah blah blah
};
Это, конечно, не единственный метод - я также написал реализацию, использующую деревья октанов, которая поразительно более экономична, учитывая большие смежные области идентичного вещества:
struct block_chunk {
boolean is_leaf;
block_chunk *TNE;
block_chunk *TSE;
block_chunk *TNW;
block_chunk *TSW;
block_chunk *BNE;
block_chunk *BSE;
block_chunk *BNW;
block_chunk *BSW;
//the node will either fill all contents with one block, or store a 3D array
int *block_fill;
int[][][] *blocks;
};
Вы, наверное, знали все это, но если вам интересно узнать, как Minecraft (который, в конце концов, был разработан Маркусом Перссоном, тем же парнем из Wurm) управляет своими серверными картами с такими подробностями, вы ' Я должен был получить в свои руки исходный код - поскольку существует активное сообщество моддингов, это не проблема. Конечно, есть и документация сообщества, которая все хорошо (кроме всех тех десятилетних троллей, которые населяют форумы ...)