산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 우노 & MAX7219로 만드는 UFO 어택 게임 – 직접 만드는 레트로 아케이드

부품 및 소모품

부품수량
Arduino UNO1
MAX7219 도트 매트릭스 모듈 4-in-1 디스플레이1
DB9 9핀 터미널 브레이크아웃 보드 (조이스틱 연결용)1
범용 NPN 트랜지스터1
브레드보드1
Adafruit 패시브 피에조 부저1
암/수 점퍼 와이어5
점퍼 와이어10
저항 1kΩ1
아타리 호환 9핀 조이스틱1

프로젝트 소개

아두이노 우노, "4-in-1" MAX7219 매트릭스 세트, 아두이노 스타터 키트 부품으로 만든 레트로 슈팅 게임입니다.

코드는 직접 작성했으며 Max72xxPanel, Adafruit GFX, SPI 라이브러리를 사용했습니다.

직접 만들어 UFO를 격추해보세요! :-)

코드

UFO Attack 코드 (C/C++)

/* UFO ATTACK! - Anthony Clarke 작성 */
/* 일부 코드는 오픈소스 예제에서 가져옴. 주석으로 표시함. */
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const int pinCS = 10; // CS 핀, DIN=MOSI, CLK=SCK (SPI 참고)
const int numberOfHorizontalDisplays = 4;
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

// 스프라이트 비트맵 데이터 (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 explosion[] PROGMEM = { 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char bouncer[] PROGMEM = { 0x60, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char boss[] PROGMEM = { 0x18, 0x24, 0x42, 0xff, 0x24, 0xff, 0x7e, 0x3c };
const unsigned char faller[] PROGMEM = { 0x80, 0xc0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char riser[] PROGMEM = { 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char LT[] PROGMEM = { 0x78, 0xfc, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char ufoLaser[] PROGMEM = { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char bossBoom1[] PROGMEM = { 0xaa, 0x55, 0xa2, 0x51, 0x8a, 0x45, 0xaa, 0x55 };
const unsigned char bossBoom2[] PROGMEM = { 0x55, 0xaa, 0x45, 0x8a, 0x51, 0xa2, 0x55, 0xaa };

// 게임 상태 변수들
bool gameStart = false;
int up = 2, down = 3, left = 4, right = 5, trigger = 6; // 조이스틱 핀
String tape = "UFO ATTACK! - Press fire to start ";
int wait = 40, spacer = 1, width = 5 + spacer;

// 플레이어 변수
int shipx = 0, shipy = 0, lasx, lasy;
int lives = 5;
bool lasExist = false;

// 적/레이저/보스 관련 변수 다수... (원본 참조)

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);
  matrix.setPosition(0, 3, 0); matrix.setPosition(1, 2, 0);
  matrix.setPosition(2, 1, 0); matrix.setPosition(3, 0, 0);
  matrix.setRotation(0, 3); matrix.setRotation(1, 3);
  matrix.setRotation(2, 3); matrix.setRotation(3, 3);
  matrix.fillScreen(LOW);
}

void loop() {
  if (!gameStart) Ticker(true);
  SpawnTimer(); JoystickControl(); UfoControl(); BouncerControl();
  LaserControl(); ScreenLimit(); BossBattle(); BossControl();
  UFOLaserControl(); LTControl(); FallerControl(); RiserControl();
  ShipCollision();
  matrix.write(); delay(50); matrix.fillScreen(LOW);
}

// 레벨별 설정 함수 (Level 1~10)
void Level(int level) { ... }

// 타이틀/점수/게임오버 티커
void Ticker(bool resetKills) { ... }

// 조이스틱 입력 처리
void JoystickControl() { ... }

// 플레이어 레이저 발사
void ShootLaser() { ... }

// 레이저 제어 및 충돌 감지 (매우 긴 함수)
void LaserControl() { ... }

// 폭발 효과 및 점수 추가
void Boom(int x, int y, bool addKill, int scoreType) { ... }

// 화면 경계 제한
void ScreenLimit() { ... }

// 적 스폰 타이머
void SpawnTimer() { ... }

// 각 적 타입별 스폰/제어 함수들
void SpawnUFO() { ... }
void UfoControl() { ... }
void SpawnBouncer() { ... }
void BouncerControl() { ... }
void SpawnFaller() { ... }
void FallerControl() { ... }
void SpawnRiser() { ... }
void RiserControl() { ... }
void SpawnLT() { ... }
void LTControl() { ... }

// 보스전 진입 및 제어
void BossBattle() { ... }
void BossControl() { ... }
void UFOLaserShoot(int selection) { ... }
void UFOLaserControl() { ... }

// 플레이어 충돌 감지
void ShipCollision() { ... }

// 게임 오버 처리
void GameOver(int gameStatus) { ... }

// 플레이어 피격 처리
void ShipHit() { ... }

전체 코드는 위와 같으며, 레벨 시스템, 다양한 적 타입(UFO, 바운서, 폴러, 라이저, 미니보스 LT, 최종 보스), 조이스틱 조작, 충돌 감지, 사운드 효과까지 완전한 아케이드 게임을 구현합니다.

회로도

UFO Attack 게임 배선 회로도:

아두이노 우노 & MAX7219로 만드는 UFO 어택 게임 – 직접 만드는 레트로 아케이드

제조공정

  1. 아두이노 디지털 주사위: LCD 기반 랜덤 넘버 제너레이터 만들기
  2. 물로 작동하는 불꽃 효과: 아두이노 우노 + 네오픽셀 스틱 프로젝트
  3. 3D RGB 아두클락(Arduclock) - 블루투스 제어 LED 타임피스 with RTC
  4. 강 건강 모니터: 아두이노 기반 수질 측정 시스템
  5. 아두이노 아이언맨 제작: 부품, 센서, 단계별 가이드
  6. 아두이노 조이스틱 인터랙티브 게임 - LED 피드백으로 방향 감지
  7. 아두이노와 블루투스로 만드는 스마트 물건 찾기 'Find Me'
  8. 아두이노 구동 3D 프린팅 로봇 팔 만들기: 단계별 가이드
  9. 휴대용 거리 감지기: HC-SR04, 18650 배터리, 3D 프린트 케이스의 아두이노 나노 DIY 키트
  10. 아두이노 릴레이 제어 가습기 자동화 – 고전압 안전 설계