Q:

Хранение 3d мира в файле

Я сейчас пишу небольшой клон Minecraft. Мир состоит только из кубов. Мне нужно хранить мир в файле. В 2d варианте это выглядит так:
1 1 1 0 
1 0 0 0
0 0 0 0
0 0 0 0

А как это делается в 3d?

A:

Нотч использовал NBT - архив с иерархической структорой, где каждый узел имеет один из одиннадцати типов (см. ссылку), что позволяет хранить любые данные: блоки, их метаданные, освещение, сущности, кастомные свойства кастомных объектов и вообще все что угодно.
Если вам это не надо, то простейший вариант - запилить все в бинарник. Нет необходимости хранить именно двух- или трехмерный массив. Разверните его в одномерный, напрмер:
chunkkSize = 16; // как "батько" учил :D
blocks[x, y, z] -> blocks[x  + y * chunkSize + z * chunkSize * chunkSize]

а при вычитке
int chunkSize = 16;
int chunkSizePow2 = chunkSize * chunkSize;
int chunkSizePow3 = chunkSizePow2 * chunkSize;
for (int i = 0; i < chunkSizePow3; i++)
{
    int x = i % chunkSize;
    int y = (i % chunkSizePow2) / chunkSize;
    int z = (i % chunkSizePow3) / chunkSizePow2;
}

Размер чанка подставьте свой, но как по мне 16 вполне удобен.
Дешево, надежно и практично, хотя ручками не поправить.
Чтобы править ручками используйте тот же подход, но пишите id блоков в txt-файл через любой удобный разделитель.

