Требуется разработать игру "Тетрис" для микроконтроллера Arduino, используя платформу Wowki. Игра должна быть адаптирована под ограниченные ресурсы микроконтроллера и должна иметь минимальное потребление памяти и процессорного времени. Игра должна включать в себя основные элементы классического "Тетриса": падающие фигуры, возможность поворота и перемещения фигур, заполнение горизонтальных линий, подсчёт очков и отображение текущего состояния игры на дисплее 128х128.
Структура программы
Инициализация: Настройка пинов Arduino, инициализация дисплея и кнопок.
Генерация фигур: Создание массивов для хранения форм тетрамино и функции для случайного выбора фигуры.
Управление фигурами: Функции для перемещения и поворота фигур с учетом столкновений.
Обнаружение столкновений: Функция для проверки столкновений с границами поля и другими фигурами.
Удаление заполненных рядов: Функция для проверки заполненных рядов, их удаления и начисления очков.
Отображение: Функции для отображения игрового поля и информации на дисплее.
Главный цикл: Цикл, который обрабатывает падение фигур, управление, обнаружение столкновений, удаление рядов и обновление дисплея.
Алгоритмы
- Генерация фигур
- Управление фигурами
- Обнаружение столкновений
- Удаление заполненных рядов
- Создать массив структур, где каждая структура представляет собой тетрамино и содержит информацию о ее форме и цвете.
- Написать функцию, которая случайным образом выбирает одну из структур из массива.
- Написать функции для перемещения фигуры влево/вправо, проверяя столкновения с границами поля.
- Написать функцию для поворота фигуры, проверяя столкновения с границами поля и другими фигурами.
- Написать функцию для ускорения падения фигуры.
- Написать функцию, которая проверяет, находятся ли блоки фигуры за пределами игрового поля.
- Написать функцию, которая проверяет, пересекаются ли блоки фигуры с блоками, которые уже находятся на игровом поле.
- Написать функцию, которая проверяет, заполнен ли какой-либо ряд блоками.
- Если ряд заполнен, удалить его, сдвинуть все блоки над ним вниз и начислить очки.