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

Arduino UNO와 16x16 LED 매트릭스로 만드는 스네이크 게임

부품 및 소모품

Arduino UNO1개
RGB LED 픽셀 매트릭스 (NeoPixel NeoMatrix)1개알리익스프레스 구매: 링크
점퍼 와이어1개
아날로그 조이스틱1개
브레드보드1개

프로젝트 소개

아두이노 학습 중 옛날 노키아 스네이크 게임을 16x16 LED 매트릭스로 재현했습니다. 각 LED가 직렬로 연결되어 있어 이동 로직이 조금 까다로웠습니다.

조이스틱으로 스네이크 조종, 먹이 먹으면 성장, 벽이나 자신과 부딪히면 게임 오버. 코드는 확장 가능하게 작성했습니다.

재미있게 즐기시고, 유튜브와 인스타그램 구독도 부탁드립니다(러시아어지만 곧 자막 추가 예정).

Arduino UNO와 16x16 LED 매트릭스로 만드는 스네이크 게임
Arduino UNO와 16x16 LED 매트릭스로 만드는 스네이크 게임
Arduino UNO와 16x16 LED 매트릭스로 만드는 스네이크 게임

코드

스네이크 게임 (C/C++)

#include 
// 매트릭스 설정
#define NUM_LEDS 256
#define DATA_PIN 3
#define BRIGHTNESS 8
// 조이스틱 설정
#define pinX A2
#define pinY A1
#define swPin 2

int snake[256];
int snakeSize = 2;
int snakeSpeed = 500;
int row, col;
int lastDirection = 135;
int i, newDirection, OlddX = 1, OlddY, f;
int red, green, blue, fred, fgreen, fblue;
CRGB leds[NUM_LEDS];

void setup() {
  red = random(0, 255); green = random(0, 255); blue = random(0, 255);
  fred = random(127, 255); fgreen = random(127, 255); fblue = random(127, 255);
  Serial.begin(9600);
  pinMode(pinX, INPUT); pinMode(pinY, INPUT); pinMode(swPin, INPUT);
  digitalWrite(swPin, HIGH);
  FastLED.addLeds(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  for (i = 0; i <= 255; i++) snake[i] = 0;
  for (i = 0; i <= snakeSize; i++) snake[i] = lastDirection + i;
  f = random(0, 255);
  FastLED.show();
}

int Snakedirection(int last, int dX, int dY) {
  dX = map(dX, 0, 1000, -1, 1);
  dY = map(dY, 0, 1000, -1, 1);
  if (dX == 0 && dY == 0 && OlddX != dX) dX = OlddX;
  if (dY == 0 && dX == 0 && OlddY != dY) dY = OlddY;
  int newDirection = last;
  if (dX != 0) { // X 방향 이동
    if (row & 1) { // 홀수 행
      if (col == 0 && dX == 1) newDirection = last - 15;
      else if (col == 15 && dX == -1) newDirection = last + 15;
      else newDirection = last + dX;
    } else { // 짝수 행
      if (col == 0 && dX == 1) newDirection = last + 15;
      else if (col == 15 && dX == -1) newDirection = last - 15;
      else newDirection = last - dX;
    }
  }
  if (dY < 0) { // Y 아래 방향
    if (row == 15 && dY == -1) newDirection = col;
    else if (row & 1) newDirection = last + (col * 2) + 1;
    else newDirection = last + (16 - col - 1) + (16 - col);
  }
  if (dY > 0) { // Y 위 방향
    if (row == 0 && dY == 1) newDirection = 255 - col;
    else if (row & 1) newDirection = last - (last - 16 * row) - (16 - col);
    else newDirection = last - (col * 2) - 1;
  }
  OlddX = dX; OlddY = dY;
  return newDirection;
}

int snakeMove(int snakeDirection) {
  for (i = 0; i <= 255; i++) if (snake[i] == snakeDirection) death();
  FastLED.clear();
  for (i = snakeSize; i >= 1; i--) snake[i] = snake[i - 1];
  snake[0] = snakeDirection;
  for (i = 0; i <= 255; i++) if (snake[i]) leds[snake[i]].setRGB(red, green, blue);
  FastLED.show();
  row = (int)(snakeDirection / 16);
  if (row & 1) col = (row + 1) * 16 - snakeDirection - 1;
  else col = snakeDirection - row * 16;
  return snakeDirection;
}

void food(int eaten) {
  if (eaten == f) {
    snakeSize++;
    f = random(0, 255);
    red = fred; green = fgreen; blue = fblue;
    fred = random(0, 255); fgreen = random(0, 255); fblue = random(0, 255);
    snakeSpeed = snakeSpeed / 1.1;
  } else {
    leds[f].setRGB(fred, fgreen, fblue);
    FastLED.show();
  }
}

void death() {
  snakeSize = 2; snakeSpeed = 500;
  red = 255; green = 0; blue = 0;
}

void color(boolean sw) { if (!sw) { red = random(0, 255); green = random(0, 255); blue = random(0, 255); } }

void loop() {
  color(digitalRead(swPin));
  newDirection = Snakedirection(lastDirection, analogRead(pinX), analogRead(pinY));
  lastDirection = snakeMove(newDirection);
  food(newDirection);
  delay(snakeSpeed);
}

회로도

Arduino UNO와 16x16 LED 매트릭스로 만드는 스네이크 게임

제조공정

  1. DIY 아두이노 USB 게임 컨트롤러 - 나만의 고성능 게임패드 만들기
  2. 아두이노 나노와 MAX7219로 만드는 24x16 LED 퐁 게임 콘솔
  3. 아두이노 나노로 테트리스 게임 만들기: DIY 16×8 LED 매트릭스
  4. 아두이노 블루투스로 LED 제어하기 - HC-05 & MIT App Inventor 입문 가이드
  5. PIR 모션 센서 연동 인터랙티브 LED 매트릭스 도어 디스플레이 - 아두이노 홀리데이 인사
  6. 스마트 아두이노 4족 보행 로봇 제작: 단계별 완벽 가이드
  7. 픽셀 체이서: 아두이노 나노로 만든 인터랙티브 원탭 LED 게임
  8. 아두이노 8×8 LED 매트릭스 플립 시계 – DIY 실시간 시계 프로젝트
  9. 아두이노 RGB LED 컬러 믹서: 입문자 친화적 DIY 프로젝트
  10. 아두이노 우노로 8×8 LED 매트릭스 마스터하기: 단계별 가이드