🐍 درس 97: بازی مار روی ماتریس LED
جویاستیک + MAX7219: آرایه مثل صف، غذا و پایان بازی.
سطح: پیشرفته · زمان: حدود 24 دقیقه · مفاهیم: بازی، آرایه، 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();
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓