🐍 بازی مار روی ماتریس

جوی‌استیک جهت را می‌دهد و مار روی ماتریس ۸×۸ MAX7219 غذا می‌خورد.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سه‌بعدی + کد)

قطعات لازم

کد کامل پروژه

// بازی مار روی ماتریس ۸×۸ با جوی‌استیک
#include <LedControl.h>

LedControl lc = LedControl(12, 11, 10, 1);   // DIN, CLK, CS, 1 matrix
int sx[64];          // x of every body part, [0] = head
int sy[64];
int len = 3;
int dx = 1, dy = 0;  // direction
int fx = 5, fy = 2;  // food
bool over = false;
unsigned long last = 0;

void restart() {
  len = 3; dx = 1; dy = 0; over = false;
  for (int i = 0; i < 3; i++) { sx[i] = 2 - i; sy[i] = 4; }
  fx = random(8); fy = random(8);
}

void draw() {
  lc.clearDisplay(0);
  for (int i = 0; i < len; i++) lc.setLed(0, sy[i], sx[i], true);
  lc.setLed(0, fy, fx, true);
}

void setup() {
  lc.shutdown(0, false);       // MAX7219 starts asleep
  lc.setIntensity(0, 5);
  pinMode(2, INPUT_PULLUP);    // joystick switch = restart
  randomSeed(analogRead(A2));
  Serial.begin(9600);
  restart();
}

void loop() {
  int x = analogRead(A0), y = analogRead(A1);
  if (x < 300 && dx == 0) { dx = -1; dy = 0; }       // no instant U-turn
  else if (x > 700 && dx == 0) { dx = 1; dy = 0; }
  else if (y < 300 && dy == 0) { dx = 0; dy = -1; }
  else if (y > 700 && dy == 0) { dx = 0; dy = 1; }

  if (over) { if (digitalRead(2) == LOW) restart(); return; }
  if (millis() - last < 300) return;
  last = millis();

  int nx = sx[0] + dx, ny = sy[0] + dy;
  bool hit = nx < 0 || nx > 7 || ny < 0 || ny > 7;
  for (int i = 0; i < len; i++) if (sx[i] == nx && sy[i] == ny) hit = true;
  if (hit) { over = true; Serial.print("game over! emtiaz: "); Serial.println(len - 3); return; }

  bool ate = nx == fx && ny == fy;
  if (ate && len < 64) len++;
  for (int i = len - 1; i > 0; i--) { sx[i] = sx[i - 1]; sy[i] = sy[i - 1]; }
  sx[0] = nx; sy[0] = ny;          // the queue moves: new head in, tail out
  if (ate) { fx = random(8); fy = random(8); }
  draw();
}

چطور اجرایش کنم؟

  1. شبیه‌ساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
  2. از پنل «نمونه‌ها»، «بازی مار روی ماتریس» را بارگذاری کن — مدار و کد با هم می‌آیند.
  3. دکمه‌ی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
  4. حالا کد را تغییر بده — عددها، پین‌ها، ترتیب — و دوباره اجرا کن!
این پروژه را رایگان در شبیه‌ساز اجرا کن 🤖