🎮 بازی سایمون — حافظه‌ات را با آردوینو بسنج

سایمون یک بازی حافظه‌ی کلاسیک است: دستگاه یک دنباله‌ی رنگ نشان می‌دهد و تو باید همان را تکرار کنی. هر دور یک رنگ به دنباله اضافه می‌شود.

این بهترین پروژه برای تمرین آرایه، حلقه و حالت بازی است.

قطعات

چهار LED با رنگ متفاوت، چهار دکمه، یک بازر، و مقاومت‌ها.

منطق بازی

  1. یک رنگ تصادفی به دنباله اضافه کن.
  2. کل دنباله را با نور و صدا پخش کن.
  3. منتظر بمان بازیکن همان تعداد دکمه بزند.
  4. اگر همه درست بود، به مرحله‌ی بعد؛ وگرنه باخت.

کد

const int leds[] = {2, 3, 4, 5};
const int btns[] = {8, 9, 10, 11};
const int tones[] = {262, 330, 392, 523};
const int buzzer = 12;

int sequence[50];
int level = 0;

void play(int i) {
  digitalWrite(leds[i], HIGH);
  tone(buzzer, tones[i]);
  delay(350);
  digitalWrite(leds[i], LOW);
  noTone(buzzer);
  delay(120);
}

int waitForPress() {
  while (true) {
    for (int i = 0; i < 4; i++) {
      if (digitalRead(btns[i]) == LOW) {
        play(i);
        while (digitalRead(btns[i]) == LOW) { }   // تا رها شود
        return i;
      }
    }
  }
}

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(leds[i], OUTPUT);
    pinMode(btns[i], INPUT_PULLUP);
  }
  randomSeed(analogRead(A0));
}

void loop() {
  sequence[level] = random(0, 4);      // رنگ جدید
  level++;

  for (int i = 0; i < level; i++) {    // پخش دنباله
    play(sequence[i]);
  }

  for (int i = 0; i < level; i++) {    // نوبت بازیکن
    if (waitForPress() != sequence[i]) {
      tone(buzzer, 120, 700);          // باخت
      delay(1500);
      level = 0;
      return;
    }
  }
  delay(700);
}

چرا منتظر رها شدن دکمه می‌مانیم؟

بدون آن حلقه، یک فشار طولانی مثل چند فشار پشت سر هم خوانده می‌شود و بازی بلافاصله می‌بازد. این همان مشکل «دیبانس» است با یک راه‌حل ساده.

قدم بعدی

سرعت پخش را با بالا رفتن مرحله کم کن تا بازی سخت‌تر شود، و رکورد بالاترین مرحله را در EEPROM ذخیره کن تا با قطع برق نپرد.

بازی سایمون را بساز 🎮

مقاله‌های دیگر

🤖

آردوینو چیست؟ راهنمای کامل برای شروع از صفر

بهترین شبیه‌ساز مدار آنلاین فارسی — چرا شبیه‌ساز، و چرا روبومیکر؟

💡

ساده‌ترین پروژه الکترونیک برای بچه‌ها: روشن‌کردن یک LED