Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Игра «UFO Attack» на Arduino UNO и матрице MAX7219 — Собираем аркаду с джойстиком Atari

Компоненты и материалы

Компонент Количество
Arduino UNO 1
Модуль матрицы MAX7219 «4 в 1» (4 каскадированных 8×8) 1
Разъем DB9 (9-pin) для джойстика Atari 1
Транзистор NPN (например, 2N2222) 1
Макетная плата (breadboard) 1
Пассивный пьезо-зуммер 1
Провода-перемычки (Male/Female) 5
Провода-перемычки (обычные) 10
Резистор 1 кОм 1
Джойстик Atari-совместимый (9-pin) 1

О проекте

Классическая аркада «UFO Attack» на Arduino UNO с дисплеем из четырех матриц 8×8 на драйвере MAX7219. Управление — старым джойстиком Atari (9-pin). Код написан с использованием библиотек Max72xxPanel, Adafruit GFX и SPI.

Геймплей: на каждом уровне нужно сбить заданное количество НЛО, после чего появляется босс. 10 уровней с нарастающей сложностью. В будущем планируется портативная версия.

Схема подключения

Схема в разделе Schematics. Основные соединения:

Код (основные моменты)

Полный скетч (~1300 строк) доступен в разделе Code. Здесь ключевые фрагменты:

Инициализация дисплея и спрайтов:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const int pinCS = 10;
const int numberOfHorizontalDisplays = 4;
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

// Спрайты 8x8 в PROGMEM
const unsigned char ship[] PROGMEM = { 0x80, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char ufo[] PROGMEM = { 0x40, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char boss[] PROGMEM = { 0x18, 0x24, 0x42, 0xff, 0x24, 0xff, 0x7e, 0x3c };
// ... explosion, bouncer, faller, riser, LT, ufoLaser, bossBoom1/2

Настройка матрицы (setup):

void setup() {
  pinMode(buzzerPin, OUTPUT);
  // Джойстик
  pinMode(up, INPUT_PULLUP); pinMode(down, INPUT_PULLUP);
  pinMode(left, INPUT_PULLUP); pinMode(right, INPUT_PULLUP);
  pinMode(trigger, INPUT_PULLUP);
  // Матрица: интенсивность, позиция, поворот
  matrix.setIntensity(0);
  for (int i = 0; i < 4; i++) {
    matrix.setPosition(i, 3-i, 0);
    matrix.setRotation(i, 3);
  }
  matrix.fillScreen(LOW);
}

Игровой цикл (loop):

void loop() {
  if (!gameStart) Ticker(true); // Бегущая строка «UFO ATTACK! - Press fire to start»
  SpawnTimer();       // Таймеры спавна врагов
  JoystickControl();  // Движение корабля и стрельба
  UfoControl();       // Движение НЛО
  BouncerControl();   // Движение баунсеров
  LaserControl();     // Лазер игрока + коллизии
  ScreenLimit();      // Границы экрана
  BossBattle();       // Сирена + спавн босса
  BossControl();      // Движение босса, стрельба, миньоны
  UFOLaserControl();  // Лазеры босса
  LTControl();        // Мини-босс LT
  FallerControl();    // Падающие враги (от лвл 4)
  RiserControl();     // Поднимающиеся враги (от лвл 5)
  ShipCollision();    // Проверка попаданий в корабль
  matrix.write();
  delay(50);
  matrix.fillScreen(LOW);
}

Уровни сложности (функция Level):

void Level(int level) {
  if (level == 1) { spawnTime=3000; spawnTime2=10000000; killsTarget=10; bossHealth=10; bossLaserTimer=1000; }
  if (level == 2) { spawnTime=3000; spawnTime2=8000; killsTarget=20; bossHealth=15; bossLaserTimer=900; }
  // ... до уровня 10: spawnTime=2000; spawnTime2=5000; killsTarget=100; bossHealth=55; bossLaserTimer=100;
}

Особенности реализации

Перспективы

Автор планирует сделать портативную версию (handheld) с встроенным джойстиком и батареей. Код открыт — можете форкать и добавлять новые типы врагов, бонусы, хайскоры в EEPROM и т.д.

Производственный процесс

  1. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  2. Эффект огня на воде: проект с Arduino UNO, NeoPixel и ультразвуковым увлажнителем
  3. 3D RGB Arduclock — Bluetooth-часы на адресных LED с RTC
  4. Мониторинг состояния реки: Arduino-система контроля качества воды
  5. Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
  6. Интерактивная игра с джойстиком и LED-обратной связью на Arduino
  7. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  8. Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
  9. Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
  10. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением