Оглавление:

Игра Arduino Space Rocks: 3 шага
Игра Arduino Space Rocks: 3 шага

Видео: Игра Arduino Space Rocks: 3 шага

Видео: Игра Arduino Space Rocks: 3 шага
Видео: Стоны левой Близняшки из Atomic Heart #atomicheart #атомикхарт #близняшки #robottwins #стоны #асмр 2024, Июль
Anonim
Игра Arduino Space Rocks
Игра Arduino Space Rocks

Вне зависимости от того, играют ли они на компьютере, в телефоне, на игровой консоли или на отдельном устройстве, многие видеоигры включают в себя элемент избегания препятствий. Конечно, вам могут начисляться очки за сбор жетонов или прохождение лабиринта, но будьте уверены, что в игре, вероятно, есть что-то, единственная цель которого - помешать вам сделать это. Первой видеоигрой был Pong, но после этого самыми популярными играми были такие, как «Asteroids» или «Pac-Man». Более свежая вариация - это простая, но захватывающая игра «Flappy Birds».

Недавно я увидел, что кто-то сделал простую двухуровневую версию «Flappy Bird», которую проигрывали на обычном ЖК-экране 1602. Я подумал, что это может понравиться внукам, поэтому решил сделать свою вариацию с нуля. Версия 1602 имеет только два уровня, поэтому я решил вместо этого использовать ЖК-дисплей 2004 года (20x4), чтобы немного увеличить сложность игры. Я также решил сделать его больше похожим на «Астероиды», попросив игрока провести «корабль» через лабиринт «космических камней». Даже если вы не заинтересованы в создании игры, некоторые элементы программного обеспечения могут быть использованы в одном из ваших собственных проектов.

Шаг 1. Аппаратное обеспечение

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

Аппаратное обеспечение может быть основано практически на любой версии Arduino. Я сделал прототип с помощью Nano, а затем записал код в чип ATMega328. Это тот же самый чип, который используется в Nano, но его использование само по себе позволяет получить более компактную конструкцию и меньшее энергопотребление. Как видите, я построил схему на небольшой макетной плате, которая устанавливается на ЖК-модуль. Другой аспект, который отличается, заключается в том, что Nano работает на частоте 16 МГц с использованием внешнего кристалла, но я решил использовать встроенный осциллятор на 8 МГц для чипа ATMega328. Это экономит детали и энергию.

ЖК-дисплей 2004 года подключается к Arduino так же, как ЖК-дисплей 1602. Интересное отличие заключается в адресации расположения дисплеев. Очевидно, есть разница, потому что здесь четыре строки вместо двух, но в 2004 году третья строка является продолжением первой строки, а четвертая строка является продолжением второй строки. Другими словами, если у вас была тестовая программа, которая просто отправляла строку символов на ЖК-дисплей, 21-й символ отображался бы в начале третьей строки, а 41-й символ переносился бы обратно в начало первой строки. Я использую эту характеристику в программе, чтобы удвоить длину лабиринта.

Я решил сделать свою версию с питанием от батареи, поэтому я использовал обычную литий-ионную батарею 18650, 3,6 вольта. Для этого мне потребовалось добавить небольшую плату для подзарядки через USB и еще одну небольшую плату для повышения напряжения батареи до 5 вольт для ЖК-дисплея и микросхемы ATMega. На рисунках показаны модули, которые я использовал, но есть также универсальные модули, которые выполняют обе функции.

Шаг 2: Программное обеспечение

Программное обеспечение одинаково для чипа Nano и ATMega328. Единственная разница в способе программирования. Я использую свою собственную версию 1602 LCD, и программное обеспечение LCD в этом проекте основано на этом. Мне действительно нужно было добавить возможности для работы с дополнительными строками дисплея 2004 года, а также добавить процедуры для смещения дисплея. Сдвиг дисплея обеспечивает эффект движения «камней» мимо «корабля».

Как упоминалось ранее, строки 1 и 3 образуют круговую очередь, а также строки 2 и 4. Это означает, что после 20 смен строки 1 и 3 меняются местами, а строки 2 и 4 меняются местами. После 40 смен линии возвращаются в исходное положение. Из-за такого поведения исходный 20-символьный лабиринт становится совершенно другим, когда строки меняются местами. Это сделало жизнь интересной, когда я попытался составить лабиринт. Наконец, я просто открыл электронную таблицу Excel, чтобы наметить путь без необходимости постоянно менять программное обеспечение. Представленное здесь программное обеспечение имеет две версии лабиринта (одна закомментирована), поэтому вы можете выбрать, какую из них хотите, или создать свою собственную.

Изначально я хотел, чтобы это было достаточно просто, чтобы в нее могли играть молодые внуки, но я также хотел, чтобы в ней была дополнительная проблема, если они (или кто-то другой) слишком хорошо в ней разбираются. Игра начинается со скоростью сдвига, равной 1 секунде. Внутренняя частота тиков составляет 50 мс, это означает, что есть 20 интервалов, в течение которых можно нажимать кнопки вверх / вниз. На самом деле нажатая кнопка потребляет 2 тика, потому что интервал 50 мс используется для обнаружения нажатия, а другой интервал 50 мс используется для ожидания отпускания. В лабиринте по умолчанию максимальное количество нажатий до следующей смены равно трем. Самый простой способ повысить сложность игры - сократить время между сменами, чтобы пара строк кода делала именно это по мере увеличения счета. Скорость сдвига настроена так, чтобы увеличиваться на 50 мс каждые 20 смен, при этом минимальная скорость ограничена до 500 мс. Эти параметры легко изменить.

Помимо изменения скорости сдвига, основная логика программного обеспечения состоит в том, чтобы переместить «корабль» и определить, столкнулся ли «корабль» с «камнем». Эти функции используют определенный массив «камень / пространство», а также массив, который определяет ячейки памяти на дисплее. Счетчик сдвига соответствует длине строки ЖК-дисплея (0-19) и используется в качестве индекса в этих массивах. Логика несколько усложняется тем фактом, что строки меняются местами каждые 20 отсчетов смен. Аналогичная логика используется для определения положения «корабля», который может находиться на любой из четырех линий.

Оценка для каждого воспроизведения - это просто подсчет количества произошедших сдвигов, и рекорд сохраняется во внутренней EEROM микроконтроллера. Библиотека EEPROM используется для чтения и записи в эту память. Доступные процедуры позволяют выполнять однобайтовое чтение / запись и чтение / запись значений с плавающей запятой. Значение 0xA5 сохраняется в первой ячейке EEROM, чтобы указать, что был сохранен высокий балл. Если это значение присутствует при включении питания, то считывается и отображается значение с плавающей запятой для рекорда. Если значение 0xA5 отсутствует, то вызывается процедура для инициализации высокой оценки значением 1. Та же самая процедура вызывается, если требуется сброс высокой оценки. Рекорд возвращается к значению 1, удерживая одну из кнопок вверх / вниз, а затем кратковременно нажимая кнопку сброса.

Шаг 3. Игра в игру

Игра в игру
Игра в игру
Игра в игру
Игра в игру

При подаче питания отображается текущий рекорд. После отображения рекорда отображается лабиринт из «камней» и «корабль», затем игра начинается через несколько секунд. Когда «корабль» ударяется о «камень», сообщение «CRASH AND BURN» мигает несколько раз перед отображением счета игры. Если установлен новый рекорд, то это сообщение также отображается. Новая игра запускается нажатием кнопки сброса.

Рекомендуемые: