+7 996 640-64-40
+7 996 640-64-40
info@in-term.ru
info@in-term.ru
@interm72
@interm72
Прошивка для аппаратной игры на базе Arduino. Смысл игры – соединить точки одинакового цвета. Используемый язык – C++. Используемая среда – Arduino IDE.

Встроенное ПО для игры на базе Arduino

Квест «Линии»

08.2025
Разработать логическую игру на замену оригинального программного обеспечения.
Ограничения:
Физическая реализация игры предопределена и изменению не подлежит. Поле 6х6 точек. Аппаратное обеспечение состоит из двух чипов: первый отвечает за связь с управляющим ПК и запуск/остановку игры, второй чип отвечает за логику игры и управляет физическим интерфейсом. Переписать нужно только логику второго чипа, подстроившись под API первого.

Поставленная задача:

Разработана полноценная логическая игра со случайной генерацией уровней, и генерацией на основе шаблонов.

Предусмотрена система повышения сложности в процессе прохождения.
• Первые 2 уровня легкие, состоят из 2х линий. Генерируются полностью случайно.
• Следующие 3 уровня нормальной сложности состоят из 3х линий. Производится 1 попытка сгенерировать уровень случайным образом, если сгенерировался непроходимый уровень - игра берет уровень из заготовленных шаблонов и строит текущий уровень на его основе.
• Следующие 4 уровня состоят из 4х линий и иногда включают в себя ограничители. Эти уровни строятся строго из шаблонов.
• Все последующие уровни состоят из 5и линий и строятся так же на основе шаблонов.
Количество уровней каждой сложности можно настроить переменными в скетче перед загрузкой его на чип.
Предусмотрены функции очистки и пропуска уровня.
- Очистка производится 4х-кратным нажатием на правую нижнюю точку.
- Пропуск уровня производится последовательным нажатием на точки по углам игрового поля, начиная с верхней левой.

Результат:

  1. Изначальная версия игры строилась в виде консольного приложения в целях облегчения написания и тестирования сложной логики.
  2. Реализован базовый функционал – отображение игрового поля, объекты точек и линий, основной класс игры.
  3. Реализована генерация случайных уровней. Реализованы ограничения при генерации для исключения заведомо непроходимых уровней. Для двух линий ограничение всего одно. Для трех линий ограничений уже 3, при этом маловероятна, но возможна ситуация, когда уровень не удастся сгенерировать из-за этих ограничений. Для четырех и более линий случайная генерация бессмысленна в виду слабого процессора на чипах Arduino и малого размера поля. Как следствие необходимо большое количество попыток для генерации одного проходимого уровня, что даст нагрузку на процессор и может замедлить или «подвесить» физическую игру.
  4. Реализован функционал проверки целостности линии, определения состояния выигрыша и загрузка следующего уровня.
  5. Реализовано построение уровней на базе предопределённых шаблонов, в целях оптимизации включена генерация уровня из трех линий на основе шаблона, если не удалось сгенерировать случайный уровень с первой попытки. Наполнена библиотека шаблонов.
  6. Реализован функционал очистки уровня и пропуска уровня.
  7. Произведено тестирование консольной версии с участием игротехников, получено одобрение промежуточного результата.
  8. Подготовлена физическая часть игры, в коде подключены диоды и датчики, переход на разработку в Arduino IDE.
  9. Логика игры перенесена «на железо». Потребовалось дописать несколько базовых структур, которые не поддерживаются по-умолчанию целевым чипом.
  10. Произведено сращивание логической части с физической, тестирование и доработка функционала, необходимого для корректного игрового процесса.
  11. Дописан модуль для взаимодействия с первым чипом, процесса запуска и остановки игры посредством сигналов управления с головного ПК, передачи результатов.
  12. Записано новое звуковое оформление для игры
  13. Добавлен функционал озвучивания игрового процесса.
  14. Произведены финальное тестирование, боевой запуск и инструктаж игротехников.

Ход решения: