亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino UNO 的 16×16 LED 矩阵贪吃蛇游戏

组件与物料

Arduino UNO ×1
RGB LED 像素矩阵 (NeoPixel NeoMatrix) 购买链接 ×1
跳线 (通用) ×1
模拟摇杆 (通用) ×1
面包板 (通用) ×1

项目简介

大家好!我正在探索 Arduino 的可能性,决定复刻诺基亚经典贪吃蛇游戏。使用 16×16 LED 矩阵、摇杆和 Arduino UNO。由于每个 LED 串联连接,移动逻辑略显棘手。

你可以控制蛇移动、吃食物、变长、挑战最高分。代码结构清晰,易于扩展新功能。

快来玩吧!喜欢请订阅我的 YouTube 和 Instagram (目前为俄语,近期将添加字幕)。

基于 Arduino UNO 的 16×16 LED 矩阵贪吃蛇游戏
基于 Arduino UNO 的 16×16 LED 矩阵贪吃蛇游戏
基于 Arduino UNO 的 16×16 LED 矩阵贪吃蛇游戏

完整代码


#include  
// 矩阵设置
#define NUM_LEDS 256
#define DATA_PIN 3
#define BRIGHTNESS 8
// 摇杆设置
#define pinX A2 // X 轴
#define pinY A1 // Y 轴
#define swPin 2 // 摇杆按键

int snake[256];       // 蛇身数组
int snakeSize = 2;    // 实际蛇长
int snakeSpeed = 500; // 移动间隔 (ms)
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_PULLUP);
  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, 1023, -1, 1);
  dY = map(dY, 0, 1023, -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 = 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 的 16×16 LED 矩阵贪吃蛇游戏

制造工艺

  1. DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
  2. 用 Arduino Nano 与 MAX7219 制作 24×16 LED Pong 游戏机
  3. 自制 16×8 LED 矩阵俄罗斯方块游戏机:Arduino Nano + 74HC595 驱动
  4. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  5. 互动 LED 矩阵门显:PIR 触发节日问候 + 待机特效
  6. 从零构建智能 Arduino 四足机器人:完整指南
  7. Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
  8. Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
  9. Arduino RGB LED调色器:三电位器混色入门项目
  10. Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
  11. Arduino Nano 与 WS2812 灯带打造 1D 乒乓球游戏——分步 DIY 教程
  12. 户外DMX控制RGB投光灯:低成本高性能舞台灯光DIY方案