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

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

Что мы делаем и почему?

Прежде чем углубиться в справочную часть этой статьи, имеет смысл изучить, что мы делаем и почему мы выбрали это для этого проекта. При создании игр для таких устройств, как Arduino, возникает несколько проблем.

  • Место для хранения: Большинство Платы Ардуино поставляются с очень небольшим объемом оперативной памяти или флэш-памяти. Это не только накладывает ограничение на объем кода, который они могут запускать, но также создает проблемы при работе с переменными.
  • Вычислительная мощность: Arduino, которую мы использовали, имеет маломощный процессор, поэтому для него невозможно создавать ресурсоемкие приложения.
  • Ограниченное количество компонентов: Arduino имеет много доступных контактов, но многим компонентам требуется более одного. Это ограничивает нас, когда речь идет об элементах управления и выводах на дисплей.

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

Сама игра очень проста. На экране появляются три блока, два выделенных и один заполненный, каждый с соответствующей физической кнопкой внизу. Игрок должен нажимать правильную кнопку в каждом раунде, чтобы продолжить игру, и если он нажмет неправильную кнопку или истечет время, игра окончена. Каждое успешное нажатие кнопки приносит очки. Игра медленно повышает сложность за счет сокращения доступного времени реакции.

Подключение OLED-дисплея, Arduino и кнопок

Подключение портативной игры — первый шаг в этом процессе. Как вы можете видеть на принципиальной схеме выше, вам не нужно делать много соединений, чтобы начать работу, и вы даже можете использовать макетную плату для этого проекта.

Мы уже опубликовали руководство, которое поможет вам подключить кнопки к ардуино. Наш Проект аквариумного монитора Arduino показывает, как использовать OLED-дисплей с таким микроконтроллером. Таким образом, мы сосредоточимся на коде для этого проекта до конца этой статьи.

Портативный игровой код Arduino

Правильное форматирование и аккуратная файловая структура очень важны как для новичков, так и для опытных программистов. Вы поблагодарите себя за то, что нашли время аккуратно организовать свой код, если вам когда-нибудь придется вернуться к нему.

Код использует основной файл INO, чтобы сформировать основу нашего проекта. Также есть файл C++ для управления нашим дисплеем, файл C++ для запуска основного игрового кода и файл библиотеки Arduino для соединения всего этого вместе.

Мы углубимся в этот код ниже, но мы рекомендуем вам просмотреть закомментированный код в нашем Проект Arduino Handheld Game на GitHub. Это поможет вам обратиться к нему вместе с этой статьей.

Файл библиотеки (library.h)

Наш файл библиотеки играет решающую роль, соединяя другие файлы нашего проекта вместе, чтобы они могли работать как единое приложение. Этот файл содержит объявления для включения библиотеки Arduino.h и всех функций в коде нашей игры, которые должны работать между нашими файлами. Без этого наш код просто не работал бы.

Основной файл INO (main.ino)

Как и многие проекты Arduino, этот начался с шаблона по умолчанию, предоставленного Arduino IDE. Этот шаблон дает это настраивать и петля функции, которые мы используем для вызова функций в других наших файлах. В этом файле также есть объявление о включении файла library.h.

Функция настройки идеально подходит для инициализации нашего дисплея и кнопок, поскольку она запускается только один раз при сбросе или включении Arduino. Для этого мы вызываем функцию disSetup() в нашем файле отображения и функцию butSetup() в нашем игровом файле.

Наша функция loop() еще проще, чем функция setup(), с единственным вызовом функции gameState(), найденной в нашем игровом файле. Мы рассмотрим это более подробно позже в статье.

Файл кода дисплея (display.cpp)

В этом проекте мы используем OLED-дисплей SSD1306, хотя вы можете использовать другой тип дисплея, если соответствующим образом отредактируете код. Этот файл начинается с включения файла библиотеки, библиотека.h. Затем он включает объявления для библиотек SPI, Wire, Adafruit_GX и Adafruit_SSD1306. После этого он определяет некоторые константы для настройки дисплея.

Первая функция, disSetup, инициализирует дисплей и отображает заставку с логотипом. Затем он очищает дисплей после ожидания приблизительно 2 секунды. Наш основной файл, main.ino, вызывает disSetup в своем настраивать функция.

Остальные функции в этом файле, за исключением timerBar(), формируют различные экраны, видимые на протяжении всей игры. Файл игры, игра.cpp, вызывает каждую из этих функций.

  • startGame(): Эта функция управляет первым экраном, который видит игрок. Он просто спрашивает, готовы ли они при вызове switchInstance Функция находится в файле игры.
  • startGame(): как только игрок начинает игру, на этом экране отображается короткий обратный отсчет. Затем он изменяет состояние игры, чтобы соответствовать.
  • inGame(): это самая сложная из наших функций отображения, использующая три переменные для загрузки каждого раунда игры. Он начинается с оператора if, который определяет, какую из трех плиток заполнить, после чего отображаются плитки, а также уровень и счет игрока.
  • timerBar(): эта функция использует переменную для отображения полосы таймера в нижней части экрана. Он показывает игроку, сколько времени у него есть на каждый раунд.
  • successScreen(): это простая функция, которая отображает сообщение каждый раз, когда игрок успешно завершает раунд.
  • endGame(): эта последняя функция отображает экран завершения игры со счетом игрока и возможностью начать игру снова.

Файл кода игры (game.cpp)

Наконец, в качестве последнего файла для изучения пришло время взглянуть на код игры. Этот файл, как и другие, начинается с включения файла library.h. Он также содержит длинный список различных целочисленных переменных, которые мы используем во время игры.

Вы найдете функцию butSetup() прежде всего. Функция setup() в нашем основном файле вызывает butSetup. Эта функция использует переменные для настройки наших кнопок в качестве входных данных, которые мы можем прочитать позже.

  • switchInstance(): Эта функция переключает экземпляры игры, от начального экрана к экранам игры и завершения игры. Он получает переменную, которая сообщает ему, в какое игровое состояние переключиться. Оператор if ожидает нажатия кнопки для запуска игры из состояния startGame(). Другой оператор if снова запускает игру из состояния endGame().
  • gameState(): эта функция устанавливает сложность игры на основе очков игрока и вызывает правильную функцию в зависимости от состояния игры. Он начинается с серии операторов if, которые устанавливают переменные на основе счета игрока, за которыми следуют дополнительные операторы if для проверки текущего экземпляра.
  • tileSelector(): эта функция генерирует случайное число от 0 до 2, которое сообщает игре, какую из трех плиток заполнять в любой момент времени.
  • theGame(): эта функция, пожалуй, самая важная из всех. Он называет плиткаселектор и в игре функций, выбирая новую плитку и отображая ее на экране. После этого вы найдете цикл for, который действует как таймер для каждого раунда. Он содержит набор операторов if, которые улавливают нажатия кнопок и определяют их правильность.

Создание собственной портативной игры на Arduino

Эта статья является дополнением к коду проекта, который можно найти на GitHub. Вы можете найти больше информации о конкретных строках кода, которые мы использовали, в комментариях к этим файлам. Но вы также можете просто загрузить его на свой Arduino и наслаждаться весельем.

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

10 лучших радиопроектов Arduino

Читать дальше

ДелитьсяТвитнутьДелитьсяЭл. адрес

Похожие темы

  • Программирование
  • сделай сам
  • Идеи проекта «сделай сам»
  • Руководства по проектам «сделай сам»
  • Ардуино
  • Программирование

Об авторе

Сэмюэл Л. Гарбетт (опубликовано 41 статья)

Сэмюэл — британский писатель, который обожает все, что можно сделать своими руками. Начав бизнес в области веб-разработки и 3D-печати, а также много лет работая писателем, Сэмюэл предлагает уникальное понимание мира технологий. Сосредоточившись в основном на технических проектах DIY, он любит делиться забавными и захватывающими идеями, которые вы можете попробовать дома. Вне работы Сэмюэля обычно можно встретить на велосипеде, за компьютерными видеоиграми или отчаянно пытающимся общаться со своим домашним крабом.

Другие работы Сэмюэля Л. Гарбетт

Подпишитесь на нашу рассылку

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

Нажмите здесь, чтобы подписаться