Simon Hafıza Oyunu

Arduino Nano 33 BLE üzerinde klasik Simon oyununu yapın: her turda bir rastgele renk büyüyen bir renk dizisi, üç LED'de tam zamanlamayla oynatılır, sıçrama filtreli buton basışlarıyla kontrol edilir; zaman aşımı ve skor da vardır.

Kart
Nano 33 BLE · Arduino
Zorluk
Zor
Konu
Data Handling & Algorithms
Erişim
Ücretsiz

Görev

Simon Hafıza Oyunu

Klasik hafıza oyuncağı: oyun bir renk dizisini yakıp söndürür, oyuncu bunu butonlarda tekrar eder. Her turda dizi bir renk uzar. Tek bir hata ya da fazla uzun bir duraklama oyunu bitirir.

Donanım

  • Arduino Nano 33 BLE (nRF52840, 3,3 V lojik). Seri konsol Serial1 (D0/D1), 115200 baud. Serial USB'dir ve testlerde görülmez.
  • Seri dirençle GND'ye bağlı LED'ler, HIGH = yanık: D2 kırmızı, D3 yeşil, D4 mavi.
  • GND'ye bağlı butonlar (dahili pull-up kullanın, LOW = basılı): D8 kırmızı, D9 yeşil, D10 mavi.

Gereksinimler

Kodu sketch/sketch.ino dosyasına (setup() ve loop()) yazın. Renkler 0 = kırmızı, 1 = yeşil, 2 = mavi olarak numaralandırılmıştır (pin tabloları başlangıç dosyasında).

  1. Açılış. Serial1'i 115200 baud ile açın, LED'ler sönük, butonlar pull-up'lı; READY yazın ve bir oyun başlatın.
  2. Turlar. Oyun boş bir diziyle başlar. Her tur, önceki tur bittikten (ya da oyun başladıktan) 500 ms sonra başlar: dizinin sonuna bir rastgele renk ekleyin (önceki renkler aynı kalır) ve PLAY <n> yazın; <n> dizinin uzunluğudur.
  3. Oynatma. PLAY satırından itibaren diziyi gösterin: k numaralı renk (0'dan başlar) 600k ms'den 600k + 400 ms'ye kadar yanar; yalnızca o rengin LED'i yanık olur, aralarda tüm LED'ler sönüktür. Son yanışın 200 ms'lik boşluğundan hemen sonra YOUR TURN yazın.
  4. Oyuncunun sırası. Bir basış 20 ms kesintisiz LOW'dan sonra sayılır (sıçrama yok sayılır). Her basış dizinin sıradaki rengiyle eşleşmelidir.
    • Tüm renkler doğru: ROUND <n> OK yazın ve bir sonraki turu başlatın (500 ms sonra).
    • Yanlış bir renk: GAME OVER <skor> yazın; skor tamamlanan tur sayısıdır (4. turdaki bir hata 3 puan verir).
    • YOUR TURN'den ya da son basıştan beri 3000 ms basış yok: oyun aynı şekilde biter.
  5. Yeni oyun. Oyun bittikten 2000 ms sonra yeni bir oyun başlatın (yeniden 1. tur).
  6. delay() ile akışı durdurmayın.

Örnek konsol çıktısı:

READY
PLAY 1
YOUR TURN
ROUND 1 OK
PLAY 2
YOUR TURN
GAME OVER 1
PLAY 1
delay() olmadan oynatma

Oynatmanın ne zaman başladığını saklayın. t = millis() - başlangıç ile yanış numarası t / 600'dür ve LED t % 600 < 400 iken yanıktır. Yanış numarası dizinin uzunluğuna ulaştığında oynatma biter.

Kablolama

Wiring sekmesinde devreyi kurun: D2, D3, D4'te seri dirençleriyle üç LED, D8 / D9 / D10 ile GND arasında üç buton.

Başarı ölçütleri

  1. Sketch derlenir.
  2. Her tur, diziyi baştan (bir öncekinden bir renk daha uzun) her renk için tam 400 ms yanık / 200 ms sönük olarak oynatır.
  3. Doğru cevaplar turu geçirir; yanlış bir renk ya da 3 s'lik bir duraklama oyunu tamamlanan tur sayısıyla bitirir.
  4. Oyun bittikten 2 s sonra yeni bir oyun başlar ve sıçrayan butonlar bir kez sayılır.

Neler var

  • Firmware'in emüle edilmiş bir kartta derlenip çalıştırılır ve donanım seviyesindeki testlerle kontrol edilir.
  • Geliştirme kartı veya yerel kurulum gerekmez.

Gömülüye yeni misin? Yol haritasıyla başla: Gömülü sistemler nasıl öğrenilir