Майнкрафт

Публикация № 1214867

Сообщество - Игры

игра майнкрафт minecraft формат NBT карт изображение карты

Не знаю, кто как расслабляется после работы, а я играю в Майнкрафт. Эта нелепая поначалу игра всё же затянула и меня полгода назад. И вот, результат игрищ программиста 1С в Майнкрафте.

Разбирался я в игре с нуля. Сначала я ютился на островке, куда попал после спавна. Отстроил домик, который постоянно сносили криперы, кое-как пережидал ночи, пока не обнаружил овец неподалёку на материке (для крафта кровати). Количество смертей шло на десятки...

Потом кое-как освоился, разработал сеть штреков, обнаружил пару каньонов. И стало мне тесновато на острове, решил посмотреть мир. Почитал про карты и пошёл по континенту, поплыл по морям-океанам. Повесил на стене составную карту мира, где флагами отмечал деревни. Много проблем было с вымиранием жителей в деревнях после их открытия. А деревни мне нравилось отстраивать, чтобы там куча жителей была, станков и живности. Стало проблематично учитывать, в какой деревне какие ресурсы, животные, где какие станки поставил, какие забыл. Начал на бумажке записывать. А, ещё давал деревням названия, правда, не сразу. И координаты стал записывать - ещё позже. Когда бумажек стало две и на них кроме точно обозначенных было с десяток анонимных деревень, я сказал "хватит это терпеть" и засел за конфигуратор.

Итак, предлагаемая вашему внимание серьёзная бизнес-разработка предназначена для ведения учёта деревень с их подробными характеристиками и всевозможной полезной игровой инфой. В частности, параметры деревни включают в себя:

  • Наименование
  • Координаты
  • Принадлежность к карте
  • Список станков
  • Список ресурсов
  • Список животных
  • Доп.реквизиты
  • Присоединяемые файлы

Конфигурация разработана на базе БСП 3.0.2 и включает в себя следующие подсистемы (не все, но что вспомню):

  • БазоваяФункциональность
  • Администрирование
  • ЗаметкиПользователя
  • Свойства
  • ВариантыОтчетов
  • Печать
  • ПодключаемыеКоманды
  • РаботаСФайлами

Хватит слов, сдёрнем уже покровы с шедевра:

Обращу внимание на принадлежность деревень картам. Карты идентифицируются по своему номеру и координатам. Это координаты от верхнего-левого угла составной карты мира. Зачем нужны координаты? Допустим, позвал нас дух приключений вверх (или влево) открывать новые миры. Присоединяем новые карты и что получается? Все номера остальных карт сдвинулись. Ну, тут или уходить в минусовые координаты относительно некоего центра, либо сделать функцию сдвига номеров всех карт вправо или вниз. Я выбрал второй вариант. Правда, я его ещё не реализовал. Ждите в следующих версиях.

Также, имеется отчёт с корректным расположением карт и списком деревень на них:

Проект выгодный и сулит массу дивидендов (нет), поэтому предлагаю всем неравнодушным присоединяться к нему на безвозмездной основе.

 
 Минутка серьёзности

Эта шутливая конфигурация распространяется без ограничений. Она может быть интересна учебным заведениям для демонстрации работы с БСП и применения механизмов платформы в понятной для детей/подростков форме (я надеюсь). После майского апдейта это пособие дополнилось целым спектром объектов и функций по работе с двоичными данными.
Высказывайте свои пожелания, я попробую их реализовать или готов смержить с вашими модификациями этой конфигурации.
Раздел "Администрирование" я не вычищал, там несколько битых ссылок на отсутствующую функциональность. Это поправлю в следующих версиях.

 

 
 Апдейт от 24.03.2020
 
 Апдейт от 26.03.2020
 
 Апдейт от 09.05.2020

Это будет эпичный рассказ!
У карт прошлого релиза было всего несколько реквизитов - код  и координаты на карте мира. Я задумался: наверняка карта, при открытии её в игре, не собирается по точкам по цвету чанков, а где-то хранится картинкой. Полез по папкам - нашёл в сетевой игре папку world\data и в ней кучу файлов с названиями вроде map_N.dat . Открыл - вроде бред внутри. Полез искать по интернетам "формат карт minecraft". Узнал, что карты хранятся в упакованном GZip виде. Изучил возможности платформы - на deflate они останавливались как лет 5 назад, так и до сих пор ситуация не улучшилась. Полез по публикациям Инфостарта, нашёл довольно древнюю публикацию, которую, внезапно оказалось, я уже скачивал когда-то. Скачал ещё раз, попробовал тестовой обработкой распаковать один из файлов - получил какие-то данные. Сохранил данные в файл и принялся рассматривать его HEX-редактором. Там встречались осмысленные строки - это были названия деревень (я в каждой деревне ставлю именованный флаг). Нашёл описание формата файла - NBT. Нашёл даже NBT Explorer, который натравил на карту и увидел дерево её данных.

Про потоки в 1С я уже давно в теме, поэтому засел писать парсер. Разгадка формата не давала заснуть раньше пяти утра. Я получил иерархическую структуру содержимого файла и сделал функцию загрузки данных из файлов. У карт появилась увесистая пачка реквизитов, включая мир, координаты центра, масштаб и много прочего.

В процессе разработки удалось значительно расширить свои знания по возможностям платформы в области чтения данных, потоков и различных преобразований с двоичными данными. Выяснилось, что ЧтениеДанных не имеет возможности считывания знаковых (signed) чисел, а только беззнаковых (unsigned), однако это решилось небольшой хитростью с вычитанием старшего бита (см.код). Вдобавок, оказалось, представление платформы 1С об UTF разительно отличается от принятого стандартом RFC 3629: она читает даже алфавитные символы английского алфавита по два байта (с кодировкой), хотя по стандарту они идут по одному байту. В результате считывание строк из потока с помощью ЧтениеДанных.ПрочитатьСимволы() приводило к считыванию лишних байтов в тех случаях, когда строка содержала символы разных кодировок (eng+rus). Решил данную проблему созданием отдельного потока ограниченной длины и скармливал его этому же методу - всё равно больше положенного уже не прочитает.

Итак, после преодоления всех препон я получил данные по картам в справочнике "Карты". Оставался какой-то тег colors объёмом ровно 16Кб. Надо отметить, что к тому времени я ещё не обнаружил на просторах интернета описание формата карт Майнкрафт. Если бы оное событие произошло пораньше, эта история была бы намного короче. Я получил содержимое тега и сразу заподозрил неладное: значения байтов были ограничены, явно из какого-то набора. Я зашёл в игру, заскринил карту, вырезал её в редакторе, посчитал количество точек: 128х128. Перемножение даёт как раз 16Кб. Я обратил внимание, что точки карты с одинаковым цветом примерно совпадали с байтами с одинаковыми значениями. Значит, точно существует некая таблица цветов! Тут уже я начал искать именно "таблицу цветов карт Майнкрафт" и нашёл её на том же сайте.

Возиться с алгоритмами упаковки графических форматов я не хотел и сразу зацепился за формат BMP - со школы известно, он без сжатия. Обнаружил описание формата - вариант с таблицей цветов (8 или 16 бит на пиксель) мне как раз подходил, попытался создать заголовок. В процессе осенило, что все изображения карт будут 128х128 и таблица цветов у них будет одинаковая. Создал произвольное изображение указанного размера, сохранил, проверил соответствие формату и отрезал от него заголовок. Для создания таблицы цветов сделал обработку, идентичную примеру на Java. Единственное, в примере используется таблица цветов старой версии, надо перебить с сайта актуальную. Записал бинарник таблицы цветов. Склеил в 1С с заголовком BMP и полученный бинарник сохранил в макет. Осталось только объединять это с данными тега colors...

Изображение очень напоминало оригинальное, но всё же отличалось гаммой и рельефом. Первое решилось, когда вспомнил про big-endian и переставил байты в таблице цветов с RGB на GRB. А вот с ландшафтом пришлось подумать. В формате BMP подразумевается массив байтов сверху-слева и далее построчно. В описании формата карт же говорится, что там идут строки снизу вверх. Получается, мне данные картинки нужно разрезать на части по 128 байт и склеить от последней к первой. Разработчики очень порадовали методом ЧтениеДанных.РазделитьНаЧастиПо(), который в одну строку делал операцию разделения. Склеил полученные части, соединил с заголовком и таблицей цветов - вуаля! Оставалось только немного разобраться с программным интерфейсом подсистемы присоединённых файлов БСП и функция загрузки данных карт пополнилась и загрузкой изображения карты.

Теперь мне не нравилась реализация загрузки: я создавал таблицу значений, куда закидывал прочитанные данные с указанием уровня вложенности. Это было некрасиво, т.к. приходилось вставлять куски кода адаптации под загрузку конкретно карт. Механизм становился не универсальным. Выходит, мне нужна сущность, которая бы хранила данные в объектном виде. Выбор сразу пал на XDTO. Сделал отдельный пакет, сделал в нём объект map с детальным описанием всех реквизитов. Оставалось только сделать механизм по его заполнению. Взял за основу предыдущую реализацию: заполнял в процедуре реквизиты объекта, вызывал её рекурсивно в случае чтения объекта, а когда встречал список, вызывал отдельную процедуру загрузки списка. Таким образом я на входе передаю тип объекта XDTO, который мне надо заполнить, и ЧтениеДанных, а на выходе получаю заполненный объект XDTO, из которого удобно производить заполнение сущностей 1С.

Для пытливых умов оставил в справочнике "Карты" две формы - первая была менее приспособлена к заполнению из неё объектов 1С, поэтому актуальной является вторая.

Теперь в планах сделать карту мира из присоединённых файлов карт.

*Маленькая хитрость: карты сокровищ тоже можно загружать, а это значит, что станут известны координаты центра - точки, где лежит сокровище.

 

Скачать файлы

Наименование Файл Версия Размер
Майнкрафт:

.cf 11,28Mb
23.03.20
38
.cf 11,28Mb 38 Скачать бесплатно

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. DoctorRoza 24.03.20 09:57 Сейчас в теме
"Мсье знает толк в извращениях!" ))
Chiponk; ssfedkin; user865537; Drivingblind; user660224_laa; bykov.vsl; Yashazz; anosin; for_sale; RailMen; narutouzumaki_13; sogesti; Il; Vyacheslide; +14 Ответить
4. FreeArcher 96 25.03.20 08:28 Сейчас в теме
(1) собственно к создателю майнкрафта тоже можно было применить такую фразу, когда он сидел после работы и извращался. А в итоге как выстрелило.

Автору плюс за креативность.

И вопрос, а распространяется база с уже внесенными данными, или они индивидуальны в каждом мире?
Думаю показать сыну.
6. PLAstic 253 25.03.20 09:12 Сейчас в теме
(4) Они уникальны для каждого мира. Кстати, отсюда приходят на ум сразу две новые идеи:
1) Я могу выложить свою конфу как демо-базу, потому что сид моего мира всё равно никто не знает.
2) Можно ввести такую сущность как мир в конфигурацию для тех, у кого больше одного сервера.
12. s_vidyakin 62 25.03.20 12:55 Сейчас в теме
(4) поизвращался тот швед и потом не знал куда девать падающие на него миллионы долларов ) В итоге Microsoft выкупила права за 2.5 миллиарда
2. Vyacheslide 8 24.03.20 13:23 Сейчас в теме
Просто +. Прикольный подход к "делу". Идея ничего так )))
3. kab_krk 24.03.20 14:28 Сейчас в теме
Ну не плохо, осталось настроить API и в путь, потом партировать платформу 1С в Maincraft и начать работать в виртуальном мире. :)
user865537; narutouzumaki_13; Il; +3 Ответить
5. Fril 25.03.20 09:12 Сейчас в теме
(3) Зачем самому? Надо чтобы нпс\персонажи\боты за тебя код\программы писали. Зашел в игру взял программу и в реальный мир вынес, продал за бешенные деньги... Как в фильме "13 этаж" ...
7. CyberCerber 559 25.03.20 10:53 Сейчас в теме
Скажите, а зачем делали на базе БСП? По описанию конфы, там все очень просто, ничего не надо. Просто для саморазвития? Какие функции из нее используете?
8. PLAstic 253 25.03.20 10:58 Сейчас в теме
(7) Для мня намного проще сделать конфу на БСП, чем писать самому доп.реквизиты, фотки (присоединённые файлы) объектов, заметки.
А что использую, так я в тексте указал подсистемы.
9. CyberCerber 559 25.03.20 11:01 Сейчас в теме
(8) Наверное, правильный подход. Но у меня наоборот: намного проще самому все это сделать и до конца понимать, нежели заниматься объединением с БСП
10. Yashazz 3276 25.03.20 12:30 Сейчас в теме
(8) Ага, ага. Натащить кучу ненужного, неиспользуемого, ресурсоёмкого, громоздкого барахла вместо того, чтобы чуток напрячься и сделать простой, быстрый и лёгкий механизм. Характерная примета нынешнего подхода к разработке. Точнее, "разработке". А потом все удивляются, чего оно глючит, тормозит, и допиливать любую мелочь полгода надо.
user865537; Synoecium; +2 4 Ответить
11. PLAstic 253 25.03.20 12:32 Сейчас в теме
(10) Персонально тебе предлагаю не пустозвонить, как в других темах, а предложить что-нибудь по теме, чтобы убедиться, что оно "глючит, тормозит и допиливать полгода надо".
jaroslav.h; Neuroproton; Kolobash95; +3 Ответить
13. Yashazz 3276 25.03.20 13:05 Сейчас в теме
(11) Если "по теме" это про всякие компьютерные игрульки, то я этим детсадом не увлекаюсь, время жалко, и перерос давно.

А если про БСП, то навскидку: получение сведений о клиенте через веб-сервис 1С, по ИНН. В БСП несколько модулей, куча процедур, вызов проходит через 20-30 разных блоков, некоторые ещё и с повторами (сначала "проверка возможности связи", потом "проверка связи", потом сама связь), прокси пересоздаётся, ws-определение пересоздаётся, и только в конце, погребённый этой грудой, вызов метода веб-сервиса. А потом ещё не менее адский разбор результата.
Притом, что пишется для 90% случаев это всё в 1-2 листинга за 10 минут.
14. Louxer 25.03.20 14:49 Сейчас в теме
Автору +

Делал похожее для EVE с помощью открытого API. Напилил отчет по динамике цен в торговых хабах, маршрут (в виде графика) прыжков по системам с указанием безопасности систем, список покупок, обработку для слежения за своими ордерами. Жаль недавно переустановил винду и забыл сохранить cf.

Спасибо, за мотивацию вернуться в еву...
user865537; PLAstic; +2 Ответить
15. sertak 236 09.04.20 13:05 Сейчас в теме
Я человек простой, вижу прикольную штуку на любимой платформе - ставлю плюс. А Майнкрафт дочка на планшете показывала, да. Там вроде домики можно строить и есть лошади. Плюс, короче ).
16. herfis 365 09.04.20 13:10 Сейчас в теме
Оставьте свое сообщение

См. также

Стриптиз II: Fruit dancing show Промо

Игры v8 1cv8.cf Россия Бесплатно (free)

... при непосредственном участии Svetlaya_ ;)

01.05.2009    22656    0    O-Planet    41    

Внешняя компонента для сжатия/распаковки файлов, двоичных данных и строк по алгоритму Zlib, Deflate и GZip

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя компонента для сжатия/распаковки файлов, двоичных данных и строк по алгоритму Zlib, Deflate и GZip.

1 стартмани

15.03.2016    30451    128    frkbvfnjh    101    

Игра «Кликомания»

Игры v8 1cv8.cf Россия Бесплатно (free)

В игру «Кликомания» от 1CV8GAMES сыграли уже больше 10 000 раз!!!

07.09.2011    12501    0    1CV8GAMES    5    

Игра «Переливания вина»

Игры v8 1cv8.cf Россия Бесплатно (free)

11 логических задач на переливания

09.02.2011    8511    0    1CV8GAMES    6    

Игра «Обход королевой»

Игры v8 1cv8.cf Россия Бесплатно (free)

За 15 ходов обойти ферзём все поля шахматной доски, посетив каждое из них ровно один раз.

07.12.2010    7485    0    1CV8GAMES    17    

Игра «Обход конём»

Игры v8 1cv8.cf Россия Бесплатно (free)

Обойти конём все поля шахматной доски, посетив каждое из них ровно один раз.

02.12.2010    7920    0    1CV8GAMES    2    

Классическая игра "Жизнь"

Игры v8 1cv8.cf Россия Бесплатно (free)

Клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 году (и моя первая проба пера на C#, поэтому прошу сильно не пинать за возможный быдлокод).

01.09.2010    16078    0    YVolohov    5    

Игра "Цифры"

Игры v8 1cv8.cf Россия Бесплатно (free)

Версия 1.2.

10.06.2010    15515    0    Cube_krsk    16    

Квадрат Пифагора

Игры v8 1cv8.cf Россия Бесплатно (free)

Если верить нумерологии, то путём нехитрых вычислений можно раскрыть характер человека. Для этого нужно знать только дату рождения. Однако не стоит относиться к результатам этого метода серьёзно - эмпирическим путём было установлено, что он даёт верный результат лишь в 50% случаев! :)

03.03.2010    10332    0    ОбнажЁнная_Маха    4    

Числовая головоломка «Треугольник»

Игры v8 1cv8.cf Россия Бесплатно (free)

Числовая головоломка из книги "Живая математика" Я.И.Перельмана

24.11.2009    13648    0    1CV8GAMES    1    

Игра «Завиток»

Игры v8 1cv8.cf Россия Бесплатно (free)

Несколько увлекательных минут в день с игрой «Завиток» помогут Вам скрасить серые рабочие будни! Такая простая игра, но как всё закручено! :)

30.10.2009    9316    0    1CV8GAMES    22    

1Сапер

Игры v8 1cv8.cf Россия Бесплатно (free)

Простенький сапер под 1С8

15.10.2009    13324    0    YVolohov    25    

Игра «Семь» (кости)

Игры v8 1cv8.cf Россия Бесплатно (free)

Немного внимания, немного стратегического мышления, немного устного счёта и немного удачи - это всё, что Вам потребуется, чтобы на несколько минут приятно отвлечься от работы с игрой «Семь»!

14.07.2009    7448    0    1CV8GAMES    3    

On-Line шахматы

Игры v8 1cv8.cf Россия Бесплатно (free)

Собственно шахматы они и в Африке шахматы, движок реализован исключительно штатными возможностями (исключение capicom.dll используется, если включить константу "Контролировать троекратное повторение позиций").

03.02.2009    18534    0    vde69    22    

Saper v1.01 beta

Игры v8 1cv8.cf Россия Бесплатно (free)

Моя первая игрушка, так что не пинайте сильно.

28.01.2009    7660    0    stig85    15    

Игра "Ход конем"

Игры v8 1cv8.cf Россия Бесплатно (free)

Всем известная игра "Ход конем". Развивает память, стратегическое мышление, и, возможно, позволит переключиться на приятное в середине трудового дня. Правила простые: обойти конем всю шахматную доску за минимальное число ходов.

20.01.2009    18566    0    O-Planet    12    

Stone Age (beta)

Игры v8 1cv8.cf Россия Бесплатно (free)

Классическая аркада "Stone Age".

28.12.2008    9294    0    Artem N    11    

Игра "Шпиль"

Игры v8 1cv8.cf Россия Бесплатно (free)

Аналог настольной игры, которая, почему-то, очень нравится девушкам:)

02.12.2008    11797    0    ASDF2    24    

Решалка судоку

Игры v8 1cv8.cf Россия Бесплатно (free)

Обработка позволяет находить решение для японских кроссвордов "Судоку". Это внешняя обработка, работает на платформе 8.1

20.11.2008    4656    0    mayson    4    

MUD для 1С

Игры v8 1cv8.cf Россия Бесплатно (free)

MUD-сервер и клиент для 1С с возможностью игры по локальной сети. Без ВК, написано исключительно средствами 1С.

15.10.2008    14784    0    Душелов    11    

Крестики-нолики (5х5)

Игры v8 1cv8.cf Россия Бесплатно (free)

Игра крестики-нолики наполе размером 5х5 ячеек. Может кому пригодится :)

12.10.2008    15073    0    Lars Ulrich    4    

Гадание по китайской книге перемен

Игры v8 1cv8.cf Россия Бесплатно (free)

Популярное гадание по китайской книге перемен.

26.09.2008    12203    0    FormatC    16    

Решалка Судоку на 8.0

Игры v8 1cv8.cf Россия Бесплатно (free)

Увидел Судоку на 7.7 http://infostart.ru/projects/2506/ и вспомнил, что я себе тоже писал решалку, только на 8.0

09.09.2008    15408    0    awa    5    

Цифровая империя

Игры v8 1cv8.cf Россия Бесплатно (free)

Реализация классической стратегии средствами 1С.

02.09.2008    9976    0    Sturm LS    12    

Игра "1001"

Игры v8 1cv8.cf Россия Бесплатно (free)

Простая игра в кости

26.04.2007    6412    0    yalex    1    

Увлекательная логическая игра "Moves"

Игры v8 1cv8.cf Россия Бесплатно (free)

"Moves" - увлекательная логическая игра с абсолютно оригинальной идеей! Подробнее: картинка "общий вид игры"

21.11.2006    10815    0    pho    5    

Настольная логическая игрушка "Квадратики"

Игры v8 1cv8.cf Россия Бесплатно (free)

Настольная логическая игрушка "Квадратики" для 1С v8.0 (внешняя обработка).

02.07.2006    10408    0    The gray Cardinal    1    

Настольная логическая игрушка "Пасьянс тысячелистник"

Игры v8 1cv8.cf Россия Бесплатно (free)

Настольная логическая игрушка "Пасьянс тысячелистник" для 1С v8.0 (внешняя обработка).

02.07.2006    12215    0    The gray Cardinal    3    

Игра "Пятнадцать"

Игры v8 1cv8.cf Россия Бесплатно (free)

Реализация очередной игры средствами 8.0. Я ее знаю, как \"Пятнадцать\"

27.05.2006    8717    0    Hitcher    2    

Игра "Быки и коровы"

Игры v8 1cv8.cf Россия Бесплатно (free)

Очередная реинкарнация логической игры "Быки и коровы"

24.05.2006    10956    0    Hitcher    4