بازی Snake با آردوینو یک بازی تک نفره می‌باشد. برای چرخاندن به چپ و راست از دو دکمه استفاده می‌کند.

ساخت باز با آردوینو

درست مانند بازی اصلی نوکیا 3310، شما قرار است موجودات موجود در بورد را برای خوردن مواردی که به صورت تصادفی در صفحه نمایش داده می‌شود، هدایت کنید در این صورت به طول مار افزوده می‌شود و رفته رفته مانور و حرکت آن را به طور فزاینده‌ای دشوار می‌کند. اگر مار به خود یا مرزهای صفحه لمس شود، بازی تمام می‌شود و وقتی تمام مواد غذایی مصرف می‌شوند، تکمیل می‌شود.

بازی Snake با آردوینو

سخت افزار بازی Snake با آردوینو

تجهیزات این پروژه از Arduino تشکیل شده است، ما در اینجا Pro Mini را می‌خواهیم، همچنین صفحه نمایش (LCD)5110 با مقاومت محدود‌کننده 330 اهم، دو مقاومت pull-up KOhm10 و دو میکرو‌سوئیچ برای دکمه‌ها. بردبورد کاربردی نخواهد داشت مگر اینکه بخواهید تمام قسمت‌ها را لحیم کنید.

سخت‌افزار بازی Snake با آردوینو

توجه داشته باشید که اتصالات نمایش در تصویر بالا کمی متفاوت است، بنابراین مطمئن باشید که تغییرات مربوطه را در کد ایجاد می‌کنید.

دکمه‌ها از Vcc به GND دو ورودی آنالوگ در حال جابه‌جایی هستند. ما می‌دانیم که می‌توانیم از یک ورودی دیجیتالی استفاده کنیم، این نیز به هدف کمک می‌کند، اما چرا؟ برای این پروژه نمایشگر را در وسط بردبورد قرار داده‌ایم که آردوینو در یک طرف و میکرو‌سوئیچ‌ها به سمت لبه‌های چپ و راست قرار دارند. دکمه تنظیم مجدد بازی دکمه تنظیم مجدد (reset) Arduino است.

کد بازی Snake با آردوینو

به طور عمده به دو کلاس متکی است: مار و غذا. مار از بلوک‌های مختلفی تشکیل شده است. اشیاء مار و غذا توسط کلاس چهارم به نام Game اداره می‌شوند.

الگوبرداری از حرکت خزیدن (slithering) مار تقریباً بهترین قسمت کد برنامه است. این موضوع با زیاد شدن هر بلوک در جهت خاص خود با استفاده از ماژول سرعت مار به دست می‌آید. برای کنترل چرخش، هر بلوک جهت بلوک قبلی را می‌گیرد و اولین بلوک از طریق دستورات چپ و راست کنترل می‌شود. در زیر قطعه کد آمده است.

 

void Execute(byte dt = 1) {
      //
      byte dx, dy;
      for (byte i = 0; i < m_Size; i ++) {
        //
        GetDirection(dx, dy, m_Blocks[i]->m_d);
        m_Blocks[i]->m_x -= m_Speed * dt * dx * m_Weight;
        m_Blocks[i]->m_y -= m_Speed * dt * dy * m_Weight;
      }
      m_HeadX = m_Blocks[0]->m_x;
      m_HeadY = m_Blocks[0]->m_y;
      for (byte i = m_Size - 1; i > 0; i --) {
        // 
        m_Blocks[i]->m_d = m_Blocks[i - 1]->m_d;
        if ((m_HeadX == m_Blocks[i]->m_x) && (m_HeadY == m_Blocks[i]->m_y)) {
          // 
          m_bSelfTouch = true;
        }
      }
      m_Blocks[0]->m_d = m_Direction;
    };

بررسی بازی Snake ساخته شده با آردوینو

صفحه نمایش آن خوب است. عالی نیست، اما خوب است. آنچه را که باید انجام شود انجام می‌دهد و برای دستیابی به آن از خروجی‌های دیجیتال استفاده می‌کند. از یه سمت، اندازه آن کوچک می‌باشد و خیلی زیاد قابل مشاهده نیست و در هنگام استفاده از نور روز، یادآور تلفن نوکیا قدیمی می‌باشد. آزار‌دهنده‌ترین قسمت این است که با توجه به دما، کنتراست تصویر تغییر می‌کند. در شرایط کنتراست کم، نویز بیشتر شده و تبدیل به خطوط افقی لرزان قابل مشاهده بر روی صفحه نمایش می‌شود. اما این به طور کلی برای ال‌سی‌دی‌ها طبیعی می‌باشد.