Создание игры для iOS. Часть 4

Привет всем!

В этой части мы поговорим о JSON и добавим несколько вариантов ландшафта. Если у вас есть вопросы по предыдущем частям или этой, оставляйте в комментариях в блогу. Ну, поехали!

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

Заголовок намекает, что все это должен уметь JSON, собственно, так это и есть. По сути, это текстовый файл, поэтому человеку легко его читать и редактировать, переносить между носителями, но главное, что большинство языков программирования умеют с ним работать либо “из коробки”, либо с помощью библиотек, которые написал какой-нибудь добрый энтузиаст.

Вот пример JSON файла:

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

Структура у него крайне простая, есть несколько уровней, регулируются они скобками, это как многомерный массив, есть ключ и, собственно, сама информация. В нашем примере ключом является “value”, а информацией по этому ключу “File”.

Если все максимально упростить, то JSON выглядит так:

{
     “ключ_1” : информация_1,
     “ключ_2” : информация_2,
     …
     “ключ_i” : информация_i
}

Осталось разобраться со вложенностью, тут все просто: информацией может быть сам JSON, поэтому по какому-то ключу мы получим не строку или число, а JSON, например:

{
     “ключ_1” : {
         “ключ_2.1” : информация_2.1,
         “ключ_2.2” : информация_2.2,
         …
         “ключ_2.i” : информация_2.i
     },
     “ключ_2” : информация_2,
     …
     “ключ_i” : информация_i
}

Ключом, кстати, может быть не только строка, но и, например, число.

С теорией разобрались, ну а на практике мы будем использовать JSON для разных целей, сегодня разберем пример с его использованием в качестве генератора карты. Как известно, наше поле состоит из клеточек, между ними могут быть дороги, а также каждая клеточка может иметь свой ландшафт. В дальнейшем структура будет гораздо сложнее, но в качестве демонстрации мощи JSON пойдет и это поле.

Итак, создадим где-нибудь в проекте файл tmp.JSON (потом его удалим, он нужен только для демонстрации), наполнять содержимым будем по следующему алгоритму:

Так как у нас есть 6 рядов по 4 клеточки, то для каждого ряда сделаем JSON с ключом - номером столбца, информацией - JSON с единственным ключом “type”, он будет задавать тип ландшафта (лес, пустыня и тд), для удобства пуска будет только лес или обычный ландшафты. Обычный у нас уже есть, для леса сделаем зеленое изображение клеточки по мануалу прошлой части.

{
  "0": {
    "0": {
      "type": 1
    },
    "1": {
      "type": 1
    },
    …
    "5": {
      "type": 0
    }
  },
  …
  "3": {
    "0": {
      "type": 0
    },
    …
    "5": {
      "type": 1
    }
  }
}
// Типы поставим рандомно для чистоты эксперимента

Здесь мы первой строчкой ищем директорию, в которой лежит наш JSON, а дальше поэтапно его распаковываем, так как он вложенный, а потом, собственно, присваиваем клеточкам маски в соответствии с их типом. Если мы все это запустим, выглядеть будет так:

А что если я скажу, что есть куда более удобный способ работать с JSON и вообще многими вещами, которые “из коробки” языка программирования не удобны? Или, например, в языке программирования какой-то функционал не реализован?

Собственно, для этого и были созданы Библиотеки, про которые я уже упоминал в прошлых частях, но об этом мы поговорим в следующий раз, так как тема большая и без ее знания разрабатывать приложения очень трудоемко. Не забывайте подписываться, до следующей недели!

Подписаться на обновления