Pocket Code не содержит встроенной полноценной базы данных — запрос «pocket code db» обычно означает, что пользователю нужно сохранять данные между запусками проекта или обмениваться ими между устройствами, а штатных инструментов визуального программирования для этого кажется недостаточно. Вместо классической СУБД приложение предлагает переменные, списки и облачные переменные, из которых при правильном подходе можно собрать вполне рабочее хранилище.
В этой статье разберём, какие механизмы хранения данных реально доступны в Pocket Code, чем они отличаются, где их пределы и как организовать структуру данных в проекте, чтобы не потерять информацию при перезапуске. Материал ориентирован на тех, кто уже знаком с базовым интерфейсом приложения и хочет выйти за рамки простых игр.
Что Pocket Code умеет из коробки
Pocket Code — среда визуального программирования от проекта Catrobat, где логика собирается из блоков. Поскольку блоков SQL-запросов или подключения к внешним БД в приложении нет, роль хранилища выполняют три механизма:
- 📦 Переменные — хранят одно значение (число или текст) в рамках объекта или всего проекта.
- 📋 Списки — упорядоченные наборы значений, аналог простого массива или таблицы из одного столбца.
- ☁️ Облачные переменные — переменные, значения которых сохраняются на сервере проекта и доступны между сессиями и устройствами при наличии аккаунта.
Из этих примитивов складывается вся «база данных» проекта. Например, таблицу рекордов можно представить двумя параллельными списками: один хранит имена игроков, второй — их очки с теми же индексами. Это не так удобно, как SQL-таблица, но для учебных и игровых проектов возможностей хватает.
Ключевое ограничение: обычные переменные и списки сбрасываются при завершении проекта, постоянным хранилищем являются только облачные переменные. Поэтому всё, что должно пережить перезапуск, нужно проектировать вокруг них.
Локальные переменные и списки как временное хранилище
Локальные данные живут только во время выполнения программы. Это подходит для игрового состояния: текущий счёт, здоровье персонажа, содержимое инвентаря. При выходе из проекта всё обнуляется — и это нормальное поведение, а не ошибка.
Списки позволяют имитировать структуры посложнее. Типовой приём — хранение «записей» через разделитель: в одну строку списка записывается значение вида имя;очки;уровень, а при чтении строка разбирается по разделителю. Это громоздко, но работает без внешних зависимостей.
Проверить, сохраняются ли данные, просто: запустите проект, измените значения, остановите и запустите снова. Если значения вернулись к начальным — вы работаете с локальными переменными, и для постоянного хранения нужен другой механизм.
Облачные переменные — ближайший аналог базы данных
Облачные переменные — единственный штатный способ сохранять данные между запусками. Они привязаны к загруженному на сервер Catrobat проекту и к аккаунту пользователя. Локальный проект на устройстве без публикации этот механизм не использует.
Что важно учитывать при проектировании:
- 🔑 Для работы облачных переменных проект должен быть загружен на сервер, а пользователь — авторизован в приложении.
- 📶 Требуется подключение к интернету; офлайн-режим с облачным хранилищем не работает.
- 🔢 Количество и назначение облачных переменных задаётся на этапе создания проекта, поэтому структуру «базы» лучше продумать заранее.
- 👥 Облачные переменные могут быть общими для всех игроков проекта — это основа таблиц рекордов и совместных механик.
⚠️ Внимание: поведение облачных переменных зависит от версии приложения и текущих правил сервера Catrobat. Перед тем как строить на них важную механику, проверьте актуальную документацию проекта и протестируйте сохранение на своём устройстве.
Проектируем структуру данных: практический подход
Прежде чем расставлять блоки, ответьте на три вопроса: какие данные должны переживать перезапуск, какие — нет, и нужен ли обмен данными между разными игроками. От ответов зависит, что отправить в облако, а что оставить локальным.
Типовое распределение выглядит так:
| Тип данных | Где хранить | Пример |
|---|---|---|
| Временное состояние | Локальные переменные | Текущий счёт в раунде |
| Коллекции в сессии | Списки | Собранные предметы |
| Долгоживущий прогресс | Облачные переменные | Лучший результат игрока |
| Общие данные игроков | Облачные переменные | Глобальная таблица рекордов |
☑️ Подготовка хранилища данных в проекте
Для таблицы рекордов на несколько записей одной облачной переменной недостаточно — понадобится несколько, либо упаковка данных в строку с разделителями. Второй способ гибче, но требует аккуратной логики разбора и увеличивает риск ошибок при редактировании.
Типичные проблемы и их диагностика
Самая частая жалоба — «данные не сохраняются». Диагностику стоит вести по шагам, от простого к сложному. Сначала убедитесь, что проект опубликован на сервере: облачные переменные локальной копии не работают. Затем проверьте авторизацию в приложении и наличие интернета в момент запуска.
Вторая типичная ситуация — данные сохраняются, но «чужие»: игрок видит значения другого пользователя. Это признак того, что переменная спроектирована как общая для всех, а не как индивидуальная. Нужно пересмотреть логику: например, сохранять результат вместе с идентификатором игрока.
⚠️ Внимание: не храните в облачных переменных пароли, личные данные или любую чувствительную информацию. Это учебная среда, а не защищённое хранилище, и данные проекта могут быть доступны шире, чем вы ожидаете.
Третья проблема — порча данных при упаковке в строку. Если разбор даёт сдвинутые значения, почти всегда виноват разделитель, встретившийся внутри самих данных, либо ошибка в порядке чтения элементов списка. Помогает вывод промежуточных значений на экран для отладки.
Почему нельзя подключить внешнюю базу данных
Pocket Code — закрытая визуальная среда без блоков сетевых запросов к произвольным серверам в базовой поставке. Подключить MySQL, Firebase или другую внешнюю СУБД штатными средствами нельзя. Если проекту действительно нужна полноценная БД, рассмотрите переход на текстовые среды программирования, где сетевые библиотеки доступны.
Когда возможностей Pocket Code уже не хватает
Есть честная граница применимости. Pocket Code отлично подходит для обучения логике и прототипирования игр, но если проекту нужны сложные выборки, связи между таблицами, поиск по данным или надёжное хранение больших объёмов — визуальная среда станет узким местом.
Признаки того, что пора двигаться дальше: логика разбора строк занимает больше блоков, чем сама игровая механика; таблица рекордов «ломается» при росте числа записей; требуется одновременная работа нескольких пользователей с общими данными. В таких случаях разумный шаг — перенести идею в среду с поддержкой настоящих баз данных, сохранив накопленную в Pocket Code логику как прототип.
Частые вопросы
Есть ли в Pocket Code встроенная база данных?
Нет, полноценной СУБД в приложении нет. Роль хранилища выполняют переменные, списки и облачные переменные, из которых можно собрать простые структуры данных.
Почему данные пропадают после закрытия проекта?
Обычные переменные и списки существуют только во время выполнения программы. Для сохранения между запусками используйте облачные переменные — они требуют опубликованного проекта и авторизации.
Можно ли сделать таблицу рекордов для всех игроков?
Да, через облачные переменные, общие для проекта. Обычно используют несколько переменных или упаковку записей в строки с разделителем. Протестируйте механику на своём устройстве, так как поведение зависит от версии приложения.
Работают ли облачные переменные без интернета?
Нет, для чтения и записи облачных переменных нужно подключение к сети. Офлайн-проекту доступны только локальные переменные и списки.
Можно ли подключить Pocket Code к MySQL или Firebase?
Штатными средствами — нет, в базовом наборе блоков нет произвольных сетевых запросов к внешним серверам. Если нужна внешняя БД, рассмотрите текстовые среды программирования.