Skip to content
verusdevPublic

About

Код-Квест — обучающая игра для детей 7–9 лет: 10 мини-игр по 15 уровней и курс Python из 20 уроков (Flutter; Android + Web).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Код-Квест (code_kids) 🚀

Приложение на Flutter для обучения второклассников (7–9 лет) программированию и логике. Формат — короткие мини-игры с уровнями, звёздочками за прохождение и сохранением прогресса, плюс курс Python с реальным запуском кода.

Платформы: Android · iOS · Web (интерфейс на русском языке).

🌐 Играть онлайн

Веб-версия опубликована на GitHub Pages:

https://verusdev.github.io/code_kids/

Исходный код: https://github.com/verusdev/code_kids

Что внутри

Игра Чему учит Механика
🤖 Робот-Лабиринт Алгоритмы и последовательности Составь программу из команд «Вперёд / Налево / Направо», робот выполняет её пошагово
⭐ Собери звёзды Основы программирования (блоки) Сложи путь из стрелок так, чтобы персонаж собрал все звёзды
🔁 Найди закономерность Логика Выбери, что продолжит ряд фигур
🔍 Лишний элемент Логика Найди предмет, который не подходит к остальным
📋 Порядок действий Алгоритмы Расставь шаги алгоритма в правильном порядке
📦 Программируй блоками Циклы, условия и функции Собери программу из блоков: команды, «Повторить N раз», «Если впереди стена» и «Моя функция»
🎨 Пиксель-арт Координаты, циклы и цвет Нарисуй (в т.ч. цветную) картинку командами «Закрась / Вправо / Вниз…», «Цвет» и циклом «Повторить»
🐛 Поймай багу Отладка Программа робота с одной ошибкой: запусти, найди неверную команду и почини её
🔐 Секретный код Двоичные числа и шифры Разгадай код: лампочки, шифр Цезаря и цифровая азбука
🐍 Python-курс Настоящий код 30 уроков с объяснением, запускаемым примером и заданием с автопроверкой

🧩 Системное мышление

Отдельный раздел, который учит видеть мир как системы — из частей, связанных причинами и следствиями, где простые правила управляют поведением.

Игра Чему учит Механика
🧩 Части и целое Системы вокруг нас У системы (растение, круговорот воды, лес, фонарик…) пропала часть — найди её
🔗 Цепочка причин Причина и следствие Выбери, что будет дальше или что случилось раньше
⚙️ Умные правила Обратная связь, «что если…» У устройства правило «если — то»: выбери, что оно сделает по показанию датчика

В каждой игре от 15 до 45 уровней с постепенным усложнением и звёздами (1–3). Новые уровни вводят больше препятствий, длинных путей и сложных закономерностей, а в «Лабиринте» появляются ключи 🔑, двери 🚪 и телепорты 🌀. Новый уровень открывается после прохождения предыдущего. Всего в приложении — 375 уровней.

🐍 Python-курс

В приложении есть собственный интерпретатор подмножества Python на Dart — код ребёнка выполняется прямо в приложении (офлайн, без Pyodide, WASM и сервера). Поддерживаются: print() и input() (с заготовленными ответами), переменные (в т.ч. с русскими именами), числа и арифметика, строки и их методы (replace, count, split, join), срезы (слово[1:4], слово[-1]), if/elif/else, for/range, while, break/continue, списки и .append(), sorted(), словари ({'ключ': значение}, len, keys, values, get, in), функции def/return, and/or/not, try/except (с ошибками на русском), import random (randint, choice, random()), комментарии #, а также черепашья графика (turtle.forward/right/left/penup/pendown).

30 уроков: от первой команды print() до input(), срезов, словарей, списков, вложенных циклов, случайных чисел и рисования черепашкой. Каждый урок — «Объяснение» → «Пример» (можно запустить) → «Задание» с редактором кода, быстрыми кнопками ввода, консолью и автопроверкой результата. Уроки про черепашку показывают холст, на котором постепенно появляется рисунок.

🎨 Песочница (свободное программирование)

Для тех, кто хочет просто попробовать код без заданий, есть «🎨 Песочница» (карточка в разделе Python на главном экране). Здесь можно писать любую программу, запускать её и видеть вывод и рисунок черепашки. Есть крупные кнопки-заготовки («Привет», «Квадрат черепашкой», «Спираль», «Угадай число», «Список и цикл»). Понравившийся рисунок можно сохранить в галерею — коллекцию работ ребёнка с датой, которую можно листать и удалять (хранится локально, у каждого профиля своя).

🏅 Достижения и медали

За успехи ребёнок получает медали — их видно на экране «🏅 Достижения» (кнопка на главном экране показывает, сколько медалей уже открыто). Медали бывают разные: за первые шаги, за количество звёзд, за игру в разные игры, за успехи в конкретных разделах и за «три звезды» на уровнях. Закрытые медали показаны серыми с замком и подсказкой, как их получить. Когда открывается новая медаль, поверх экрана появляется праздничное окно «Новые медали! 🎉».

👤 Профили

Приложение поддерживает несколько профилей — удобно, если занимаются несколько детей. Профиль выбирается по кнопке-аватару в шапке главного экрана: можно добавить ребёнка, переименовать или удалить профиль. У каждого профиля свой прогресс, звёзды, медали, серия, рисунки и наряды; настройки звука и озвучки общие. В разделе «Родителям» есть экспорт и импорт прогресса через буфер обмена — чтобы перенести успехи на другое устройство или сохранить копию.

🛒 Наряды и 📖 Наклейки (коллекция)

Звёзды можно тратить на наряды для маскота-кота (кнопка «🛒 Наряды» внизу главного экрана): шляпы, очки, аксессуары — купленный наряд надевается на маскота, и он появляется в новом образе на экранах приложения. Не хватает звёзд — приложение мягко подскажет «Собери ещё звёздочки!». Ещё есть «📖 Наклейки» — альбом коллекционных картинок, которые открываются за успехи (звёзды, уровни, медали, серия). Открытые наклейки — цветные, закрытые — серые с замком и подсказкой.

🔥 Задание дня и серия

Чтобы заниматься регулярно, в приложении есть серия (сколько дней подряд ребёнок решал уровни) и задание дня — каждый день новое: пройди 3 уровня, собери 5 звёзд, получи уровень на 3 звезды или реши урок Python. Прогресс задания виден в карточке на главном экране; когда задание выполнено — появляется окно «Задание дня выполнено! 🎁», а серия растёт. Всё хранится локально и переживает перезапуск.

👨‍👩‍👧 Родителям

Для взрослых есть отдельный раздел (кнопка «Родителям» внизу главного экрана). Вход защищён простым примером на сложение — чтобы младший ребёнок не попал туда случайно, а родителю это не мешает. В разделе видно общую картину: сколько звёзд и уровней пройдено, сколько медалей открыто, текущая и лучшая серия, подробный прогресс по каждому разделу, а также советы родителям, как заниматься и помогать. Здесь же можно сбросить прогресс — с подтверждением.

🏆 Испытание (режим для смелых)

Для тех, кому обычные уровни уже легки, есть «🏆 Испытание» — кнопка внизу главного экрана. Приложение подряд выдаёт самый трудный уровень каждой игры (все 12 игр — и мини-игры, и тренажёры системного мышления), но без подсказок и на время: в шапке виден номер задания и бегущий таймер. Когда ребёнок решает уровень, появляется кнопка «Дальше» и начинается следующий. В конце — время, число пройденных заданий и звёзды, а лучшее время сохраняется как рекорд. Если выйти из уровня, испытание прерывается — можно начать заново. Испытание не мешает обычному прогрессу и рекорду дня.

🔊 Звук и озвучка

В приложении есть звуки (щелчки при нажатии и весёлый сигнал при победе) и озвучка — чтение заданий и подсказок голосом (системный синтез речи). Обе возможности включаются и выключаются в разделе «⚙️ Настройки» (кнопка внизу главного экрана) и сохраняются между запусками. В играх подсказку можно послушать кнопкой 🔊, а на экране урока — «Прочитать задание». Если на устройстве голос недоступен, всё остальное работает как обычно — приложение просто тихо пропускает озвучку.

Запуск

flutter pub get
# Телефон/планшет (Android/iOS)
flutter run

# Веб в браузере
flutter run -d chrome
# если браузер не запускается сам — поднять веб-сервер и открыть вручную:
flutter run -d web-server --web-port=8080

# Проверки
flutter analyze
flutter test

# Сборка веба
flutter build web --release
# раздать собранную версию:
python -m http.server 8080 --directory build/web

# Сборка для GitHub Pages (учитывает адрес /code_kids/)
flutter build web --release --base-href=/code_kids/
# обновить опубликованную версию: скопировать build/web → docs/ и запушить
# (Pages настроен на ветку main, папку /docs)

Публикация обновлений на GitHub Pages:

flutter build web --release --base-href=/code_kids/
# Windows: обновить docs/, сохранив .nojekyll (нужен, чтобы Pages не гонял Jekyll)
Remove-Item docs\* -Recurse -Force -Exclude .nojekyll
Copy-Item build\web\* docs\ -Recurse -Force
git add -A && git commit -m "Обновление веб-сборки" && git push

Зависимости: только shared_preferences (локальное сохранение прогресса). Прогресс хранится в SharedPreferences и переживает перезапуск приложения.

Структура

lib/
  main.dart                         # точка входа, загрузка прогресса
  theme/app_theme.dart              # детская палитра и тема
  models/game_models.dart           # GameInfo, Direction, реестр игр
  models/achievement.dart           # модель достижения + снимок прогресса
  achievements/achievements.dart    # список медалей и условия их получения
  services/progress_service.dart    # звёзды по уровням (SharedPreferences, по профилю)
  services/profile_service.dart     # несколько профилей детей и их настройки
  services/achievements_service.dart# какие медали уже вручены (SharedPreferences)
  services/daily_service.dart       # серия дней и задание дня (SharedPreferences)
  services/settings_service.dart    # звук и озвучка: вкл/выкл (SharedPreferences)
  services/sound_service.dart       # щелчки и сигналы победы/ошибки
  services/speech_service.dart      # озвучка заданий голосом (flutter_tts)
  services/challenge_service.dart   # режим «Испытание»: состояние и рекорд времени
  services/turtle_gallery_service.dart # галерея сохранённых рисунков черепашки
  services/mascot_service.dart      # наряды маскота: каталог, покупка, надевание
  stickers/stickers.dart            # альбом наклеек: условия открытия
  widgets/                          # кнопки, звёзды, маскот, конфетти, карточка игры,
                                    # холст черепашки, редактор кода, карточка дня, окна награды
  screens/                          # главный экран, выбор уровня, «как играть», «достижения»,
                                    # «родителям», «настройки», «испытание», профили, наряды, наклейки
  games/
    game_common.dart                # общая панель, оверлей победы, подсказки
    grid_board.dart                 # клетчатое поле со спрайтами, стенами, ключами, дверями
    game_definition.dart            # маршрутизация к нужной игре
    robot_maze/ collect_stars/ pattern/ odd_one_out/ steps_order/
    blocks/ pixel/ bug/ secret_code/
    parts/ causes/ rules/           # раздел «Системное мышление»
  blocks/block_model.dart           # модель блоков: команды, циклы, условия, функции
  python/
    python_lexer.dart               # токены + INDENT/DEDENT
    python_parser.dart              # разбор в дерево (AST)
    python_interpreter.dart         # исполнитель: окружения, встроенные функции
    python_runner.dart              # код → вывод/ошибка (безопасная песочница)
    lessons/python_course.dart      # тексты и задания 30 уроков
  screens/python/
    python_lessons_screen.dart      # список уроков курса
    python_lesson_screen.dart       # урок: теория, пример, редактор, консоль
    python_sandbox_screen.dart      # свободное программирование + сохранение рисунков
    turtle_gallery_screen.dart      # галерея рисунков черепашки

Игровой дизайн для детей

  • Крупные элементы, максимум эмодзи и иконок, минимум текста.
  • Ошибка — это мягкая подсказка, а не «проигрыш»; повтор без ограничений.
  • Звёзды: 3 — без ошибок, 2 — 1–2 ошибки, 1 — с подсказками.
  • В Python-курсе звёзды: 3 — задание решено с первой попытки, дальше меньше.
  • Тактильный отклик (HapticFeedback), никаких наказаний и таймеров.

Проверено

  • ✅ flutter analyze — без замечаний.
  • ✅ flutter test — 239 тестов проходят (10 игр + 2 новые игры «🐛 Поймай багу» и «🔐 Секретный код», 3 тренажёра системного мышления, интерпретатор Python (включая random, методы строк, sorted, try/except), профили и экспорт/импорт прогресса, курс из 30 уроков, галерея рисунков, наряды маскота, альбом наклеек, достижения, ежедневная серия, экран «Родителям», настройки звука/озвучки и режим «Испытание»). Для лабиринтов (в т.ч. с ключами/дверями/ телепортами), блоков (в т.ч. с функциями), звёзд и пиксель-арта (в т.ч. цветного) проверяется проходимость всех уровней обходом BFS и воспроизведением программ-решений. Отдельные скрипты tool/level_check.dart, tool/maze_ext_check.dart и tool/blocks_pixel_ext_check.dart проверяют все 375 уровней.
  • ✅ flutter build web --release — сборка успешна.
  • ✅ Ручной E2E в браузере: главный экран, выбор уровня, прохождение и победа в играх, разблокировка уровня, сохранение звёзд после перезагрузки.
  • ✅ Ручной E2E системного мышления: раздел «🧩 Системное мышление», прохождение первых уровней «Части и целое», «Цепочка причин» и «Умные правила», сохранение звёзд после перезагрузки (15/…, 0 ошибок в консоли).
  • ✅ Ручной E2E Python-курса: открытие курса, урок, запуск примера (вывод «Привет!»), решение заданий уроков 1–2 с автопроверкой, разблокировка следующего урока, сохранение прогресса после перезагрузки.
  • ✅ Ручной E2E новых уроков Python: срезы строк, словари (len, доступ по ключу), input() с заготовленным ответом и «черепашка», которая рисует фигуру в цикле (холст с постепенным появлением линий).
  • ✅ Ручной E2E достижений: на главном экране кнопка «Достижения (7/13)», экран со списком медалей (открытые — цветные с эмодзи, закрытые — серые с 🔒), а после решения уровня с улучшением звёзд появляется окно «Новые медали! 🎉»; список вручённых медалей сохраняется после перезагрузки.
  • ✅ Ручной E2E задания дня и серии: карточка «🔥 Серия …» и «Задание дня …» на главном экране, рост прогресса при решении уроков, окно «Задание дня выполнено! 🎁», увеличение серии до 1 дня и сохранение состояния после перезагрузки.
  • ✅ Ручной E2E раздела «Родителям»: кнопка внизу главного экрана, замок с примером (неверный ответ не пускает, верный — открывает), на экране — сводка (звёзды/уровни/медали/серия), прогресс по разделам, советы и кнопка сброса прогресса с подтверждением.
  • ✅ Ручной E2E настроек: кнопка «Настройки» на главном экране, экран с переключателями «Звуки» и «Озвучка», переключение и сохранение значения после перезагрузки страницы; корректная работа, когда голос на устройстве недоступен.
  • ✅ Ручной E2E режима «Испытание»: кнопка внизу главного экрана, экран с описанием («Заданий: 10»), старт — открывается самый трудный уровень игры с шапкой «🏆 Испытание / название игры», счётчиком «1/10» и бегущим таймером, при этом подсказки скрыты; выход из уровня прерывает испытание и показывает итог («Испытание прервано», «Заданий пройдено 0 из 10», время).
  • ✅ Опубликованная веб-версия на GitHub Pages (https://verusdev.github.io/code_kids/): главный экран, список уроков Python и запуск режима «Испытание» прямо из онлайна («🏆 Испытание / Робот-Лабиринт», «1/10», таймер, скрытые подсказки).
  • ✅ Ручной E2E новых игр: «🐛 Поймай багу» (запуск программы, робот врезается, выбор ошибочной команды, замена и победа с объяснением бага) и «🔐 Секретный код» (двоичные числа, шифр Цезаря, цифровая азбука с обучающими объяснениями).
  • ✅ Ручной E2E «🎨 Песочницы» и галереи: запуск заготовки «Квадрат черепашкой», вывод и холст, сохранение рисунка в галерею с именем и датой, просмотр и удаление.
  • ✅ Ручной E2E «🛒 Наряды» и «📖 Наклейки»: покупка наряда за звёзды (мягкая подсказка при нехватке), надевание на маскота, альбом наклеек «Открыто: X из 16» с замками и подсказками.
  • ✅ Ручной E2E профилей: выбор профиля в шапке, добавление/переключение, отдельный прогресс у каждого профиля.
  • ✅ Ручной E2E новых уровней: «Лабиринт» с ключами 🔑, дверями 🚪 и телепортами 🌀, «Блоки» с «моей функцией», «Пиксель-арт» с цветами.

About

Код-Квест — обучающая игра для детей 7–9 лет: 10 мини-игр по 15 уровней и курс Python из 20 уроков (Flutter; Android + Web).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages