Оглавление:

Воссоздание самой сложной игры в мире на Arduino: 7 шагов
Воссоздание самой сложной игры в мире на Arduino: 7 шагов

Видео: Воссоздание самой сложной игры в мире на Arduino: 7 шагов

Видео: Воссоздание самой сложной игры в мире на Arduino: 7 шагов
Видео: 7 ПОЛЕЗНЫХ устройств на АРДУИНО, которые можно собрать за 15 минут. 2024, Ноябрь
Anonim
Image
Image

Этот проект основан на компьютерной игре, которую вы можете найти в Интернете. Его название - «Самая сложная игра в мире». Мне удалось воссоздать его на Arduino, используя четырехмодульную светодиодную матрицу. В этом руководстве я научу вас, как построить его самостоятельно. Прежде чем мы углубимся в подробности, я хочу дать краткий обзор шагов, которые я прошел, чтобы создать эту игру.

  1. Собрал все необходимые детали.
  2. Я соединил части вместе.
  3. Я написал скетч, который использовал джойстик для перемещения светодиода игроков по всем модулям.
  4. Я разработал первые препятствия и добавил их в набросок, чтобы они имитировали сложнейшую игру в мире.
  5. Затем я добавил код для обнаружения столкновения с препятствиями, который перезапустил игру.
  6. А потом спроектировал еще два уровня препятствий.

Шаг 1: все части

Все части
Все части
Все части
Все части

Вот список всех необходимых деталей:

  1. Разъем Arduino UNO и usb:
  2. Четыре модуля 8x8: светодиодная матрица
  3. Джойстик:
  4. 10 проводов папа-мама:

Шаг 2: Как подключить детали к Arduino

Как подключить детали к Arduino
Как подключить детали к Arduino

Как подключить светодиодную матрицу к Arduino

  1. GND переходит в GND
  2. VCC переходит на 5 В
  3. DataIn идет на цифровой контакт 12
  4. CLK переходит на цифровой контакт 11
  5. CS или LOAD переходит на цифровой контакт 10

Как подключить джойстик

  1. GND переходит в GND
  2. 5 В переходит в 5 В
  3. VRx идет на аналоговый вывод A0
  4. VRy идет на аналоговый вывод A1
  5. ПО не используется

Аккумулятор подключается к разъему 9 В, чтобы обеспечить питание Arduino.

Шаг 3: Блок-схема программы

Схема программы
Схема программы

Овал указывает на начало программы.

Первый шаг - определить все препятствия.

Следующие два шага указывают на установку переменных и включение всех модулей.

Следующий шаг - установить светодиоды на первый уровень и любые другие переменные.

Затем отобразите уровень, на котором в данный момент находится игрок.

Ромб указывает на то, что джойстик считывается, чтобы увидеть, в каком направлении он толкается.

Затем переместите игрока в любом направлении, в котором был нажат джойстик.

Проверьте, не столкнулся ли игрок с препятствием.

Если игрок наткнулся на препятствие, вернитесь на первый уровень. Если нет, проверьте, достиг ли игрок конца уровня.

Если игрок находится в конце уровня, перейдите на следующий уровень, затем вернитесь к «Показать текущий уровень». Если они не в конце, переместите препятствия и вернитесь к «Прочитать джойстик».

Шаг 4: Программирование джойстика

Конечно, чтобы переместить маленькую точку, которая является игроком, нам понадобится джойстик. и чтобы позволить джойстику действительно перемещать игрока, нам нужно закодировать его в Arduino IDE. Вам необходимо включить библиотеку LedControl, которую вы можете найти, перейдя в меню эскиза> Включить библиотеки> Управление библиотеками и найдите LedControl. Вот как выглядит код джойстика.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Создает объект для четырех модулей int delaytime = 50; // скорость, с которой работает игра int joystick_RtLt, joystick_UpDn; int player_x = 0; // горизонтальное положение игроков от 0 до 31 int player_y = 3; // вертикальное положение игроков от 0 до 7 int row, column, module; void setup () {initialize_modules (); // включаем и устанавливаем все четыре светодиодных модуля} void loop () {move_player (); // запускаем цикл, проверяя, движется ли игрок delay (delaytime); } void initialize_modules () {lc.shutdown (0, ложь); // запускаем модуль 0 lc.setIntensity (0, 1); lc.shutdown (1, ложь); // запускаем модуль 1 lc.setIntensity (1, 1); lc.shutdown (2, ложь); // запускаем модуль 2 lc.setIntensity (2, 1); lc.shutdown (3, ложь); // запускаем модуль 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // очищает модуль 0} void move_player () {module = player_x / 8; // определяет, в каком модуле находится игрок column = player_x% 8; // определяет столбец, в котором находится игрок, в модуле row = player_y; lc.setLed (модуль, строка, столбец, ложь); // выключить светодиод в текущей позиции игрока joystick_RtLt = analogRead (A0) / 204 - 2; // считываем X-джойстик и диапазон карты от 2 до -2 if (joystick_RtLt> 0) // когда джойстик справа player_x ++; // идем вправо else if (joystick_RtLt 0) // если джойстик находится слева, а не в начале player_x--; // перемещаемся влево joystick_UpDn = analogRead (A1) / 204 - 2; // считываем диапазон Y-джойстика и карты от 2 до -2 if (joystick_UpDn 0) // если джойстик опущен, а игрок не внизу player_y--; // двигаться вниз else if (joystick_UpDn> 0 && Players_y <7) // если джойстик поднят, а игрок не наверху player_y ++; // поднимаемся module = player_x / 8; // устанавливаем модуль для игроков new position column = Players_x% 8; // устанавливаем столбец для игроков новая позиция row = player_y; // установить строку для новой позиции игроков lc.setLed (module, row, column, true); // включаем светодиод на новой позиции игрока}

Теперь, когда вы добавили джойстик, давайте поработаем над первым препятствием!

Шаг 5: Первый уровень

Хорошо, теперь пора перейти к основной части программы - препятствиям! Препятствия - вот что действительно делает эту игру «самой сложной игрой в мире». Поэтому, если вы действительно хотите играть в игру, вам нужно добавить это в свой код:

байтовое препятствие [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// три уровня, 8 сцен, 8 колонн, 8 строк

{{{1, 1, 1, 1, 1, 1, 0, 0}, // первый уровень, первая сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // первый уровень, вторая сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // первый уровень, третий сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // сначала уровень, четвертая сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // первый уровень, пятая сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // первый уровень, шестая сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, // первый уровень, седьмая сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // первый уровень, восьмой сцена {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, void setup () {initialize_modules (); // включаем и устанавливаем все четыре светодиодных модуля start_level (0); недействительный цикл () {move_player (); // запускаем цикл, проверяя, движется ли игрок if (collision ()) {// проверяем уровень столкновения = 0; // если коллизия истинна, сбросить уровень start_level (level); // перезапуск игры} else if (delay_count == преподносить_delay) {// если нет столкновения, переместить препятствие через каждое второе задержка moveobstacle (); delay_count = 0; } else delay_count ++; delay (время задержки); // задержка по скорости игры}

И это первое препятствие! Если вам надоест это в качестве первого уровня, вы всегда можете изменить байты, просто помните, что вам нужно иметь восемь разных сцен! Перейдем к следующему шагу - обнаружению столкновений!

Шаг 6: Обнаружение столкновения

Этот шаг - еще одна важная часть игры, без него не было бы особых проблем! Вы могли просто преодолевать препятствия без каких-либо последствий! это было бы не очень весело, правда? так что давайте сделаем игру более сложной (и намного более интересной!), добавив в программу следующий раздел:

void loop () {

move_player (); // запускаем цикл, проверяя, движется ли игрок if (collision ()) {// проверяем уровень столкновения = 0; // если коллизия истинна, сбросить уровень start_level (level); // перезапуск игры} else if (delay_count == преподносить_delay) {// если нет столкновения, переместить препятствие через каждое второе задержка moveobstacle (); delay_count = 0; } else delay_count ++; delay (время задержки); // задержка по скорости игры} int collision () {// проверяем, попал ли игрок в препятствие в сцене module = player_x / 8; столбец = player_x% 8; row = player_y; if (модуль> 0) if (препятствие [уровень] [сцена] [столбец] [строка] == 1) // если позиция игрока такая же, как у препятствия return (1); // обнаружена коллизия return true return (0); // без коллизии возвращает false}

И вот так! теперь вы можете получать больше удовольствия от игры! Теперь я покажу вам, как программировать последние два уровня игры! Вы почти закончили с этой инструкцией, и я уверен, что вы готовы ее попробовать!

Шаг 7: Последние два уровня

Ближе к концу инструкции, эти последние два уровня - все, что вам нужно, чтобы закончить эту игру. Тогда вы можете попробовать это сами! вот код:

байтовое препятствие [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// второй и третий уровень, 8 сцен, 8 столбцов, 8 строк

{{{1, 0, 0, 0, 0, 0, 0, 1}, // второй уровень, первая сцена {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // второй уровень, вторая сцена {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // второй уровень, третья сцена {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // четвертая сцена второго уровня {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, // второй уровень, fif -я сцена {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // второй уровень, шестая сцена {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, // второй уровень, седьмая сцена {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // восьмая сцена второго уровня {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // третий уровень, первая сцена {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // третий уровень, вторая сцена {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // третий уровень, третья сцена {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // третий уровень, четвертая сцена {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // третий уровень, пятая сцена {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // третий уровень, шестая сцена {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // третий уровень, седьмая сцена {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // третий уровень, восьмая сцена { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}}};

Вот и все! вы готовы к завершению самой сложной игры в мире. Также ниже прилагается полный код Arduino.

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