Майнкрафт

10.05.20

Задачи пользователя - Игры

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

Скачать исходный код

Наименование Файл Версия Размер
Майнкрафт:
.cf 11,28Mb
72
.cf 11,28Mb 72 Скачать бесплатно

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

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

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

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

Конфигурация разработана на базе БСП 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С, поэтому актуальной является вторая.

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

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

 

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

См. также

Пасьянс Паук

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Классическая игра пасьянс Паук, на платформе 1С.

15.04.2024    1090    67    user1693438    1    

17

Классическая игра "Змейка" на 1С (управляемые формы)

Игры Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Игра "Змейка" в классическом варианте на управляемых формах в 1С. Собирайте яблоки и ставьте рекорд!

09.02.2024    3355    193    emilyabochkova    14    

27

Ключворды в 1С

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Создавайте новые ключворды или разгадывайте существующие.

1 стартмани

05.02.2024    1792    1    alexpvs    0    

6

Игра "5 букв"

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Игра "5 Букв", сделанная на 1С. В игре загадано слово, существительное в единственном числе. Нужно отгадать загаданное слово.

1 стартмани

29.12.2023    1514    4    APTEM_SLV    9    

6

Пятнашки

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Цель - обучение хитростям нашей всеми любимой 1С.

28.11.2023    1000    40    user1834118    0    

6

Кар магедон

Игры Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Держись, российский геймдев, я уже еду. Бета тест, можно оформлять предзаказы, будет донатный магазин с модельками российского автопрома (по цене реальных авто).

01.11.2023    1921    42    user1834118    7    

11

Турнир по 1С. Танки на СКД

Игры Программист Платформа 1С v8.3 Абонемент ($m)

Предлагаю свою версию турнира. Особенность этого турнира в том, что тут нет правильных или неправильных решений. Есть твое решение и решение твоих соперников. У кого решение лучше тот и победит.

1 стартмани

09.10.2023    2015    2    opx    1    

13

Плоский "Кубик Рубика"

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вы можете собрать кубик Рубика? Я - только с помощью инструкции:). Попробуйте справиться с его плоским аналогом.

1 стартмани

29.05.2023    2253    7    Alxby    3    

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

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

И вопрос, а распространяется база с уже внесенными данными, или они индивидуальны в каждом мире?
Думаю показать сыну.
6. PLAstic 295 25.03.20 09:12 Сейчас в теме
(4) Они уникальны для каждого мира. Кстати, отсюда приходят на ум сразу две новые идеи:
1) Я могу выложить свою конфу как демо-базу, потому что сид моего мира всё равно никто не знает.
2) Можно ввести такую сущность как мир в конфигурацию для тех, у кого больше одного сервера.
12. s_vidyakin 63 25.03.20 12:55 Сейчас в теме
(4) поизвращался тот швед и потом не знал куда девать падающие на него миллионы долларов ) В итоге Microsoft выкупила права за 2.5 миллиарда
2. Vyacheslide 23 24.03.20 13:23 Сейчас в теме
Просто +. Прикольный подход к "делу". Идея ничего так )))
3. kab_krk 24.03.20 14:28 Сейчас в теме
Ну не плохо, осталось настроить API и в путь, потом партировать платформу 1С в Maincraft и начать работать в виртуальном мире. :)
user865537; mrChOP93; Il; +3 Ответить
5. Fril 25.03.20 09:12 Сейчас в теме
(3) Зачем самому? Надо чтобы нпс\персонажи\боты за тебя код\программы писали. Зашел в игру взял программу и в реальный мир вынес, продал за бешенные деньги... Как в фильме "13 этаж" ...
7. CyberCerber 861 25.03.20 10:53 Сейчас в теме
Скажите, а зачем делали на базе БСП? По описанию конфы, там все очень просто, ничего не надо. Просто для саморазвития? Какие функции из нее используете?
8. PLAstic 295 25.03.20 10:58 Сейчас в теме
(7) Для мня намного проще сделать конфу на БСП, чем писать самому доп.реквизиты, фотки (присоединённые файлы) объектов, заметки.
А что использую, так я в тексте указал подсистемы.
9. CyberCerber 861 25.03.20 11:01 Сейчас в теме
(8) Наверное, правильный подход. Но у меня наоборот: намного проще самому все это сделать и до конца понимать, нежели заниматься объединением с БСП
10. Yashazz 4751 25.03.20 12:30 Сейчас в теме
(8) Ага, ага. Натащить кучу ненужного, неиспользуемого, ресурсоёмкого, громоздкого барахла вместо того, чтобы чуток напрячься и сделать простой, быстрый и лёгкий механизм. Характерная примета нынешнего подхода к разработке. Точнее, "разработке". А потом все удивляются, чего оно глючит, тормозит, и допиливать любую мелочь полгода надо.
user865537; Synoecium; +2 5 Ответить
11. PLAstic 295 25.03.20 12:32 Сейчас в теме
(10) Персонально тебе предлагаю не пустозвонить, как в других темах, а предложить что-нибудь по теме, чтобы убедиться, что оно "глючит, тормозит и допиливать полгода надо".
jaroslav.h; Neuroproton; Kolobash95; +3 Ответить
13. Yashazz 4751 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 319 09.04.20 13:05 Сейчас в теме
Я человек простой, вижу прикольную штуку на любимой платформе - ставлю плюс. А Майнкрафт дочка на планшете показывала, да. Там вроде домики можно строить и есть лошади. Плюс, короче ).
16. herfis 505 09.04.20 13:10 Сейчас в теме
17. Sanario 27 08.06.21 12:17 Сейчас в теме
Ээээ. А конфигурация подключается к установленному Майнкрафту? Или как ее запустить-то?:)
18. пользователь 18.06.23 15:09
Сообщение было скрыто модератором.
...
Оставьте свое сообщение