برای کلاس محاسبات فیزیکی خود، یک پروژه با استفاده از SparkFun Redboard ایجاد کردم. من نام آن را Gameduino Snake گذاشتهام، زیرا اساساً یک ابزار دستی جمعوجور است که کاربران را قادر میسازد از بازی مار روی ماتریس LED لذت ببرند.
این بازی دارای یک ماتریس LED 8×8 است که میتواند هم خود بازی و هم امتیاز را پس از پایان بازی نمایش دهد. در مجاورت ماتریس LED، یک شتاب سنج سه محوره متصل به تخته نان وجود دارد. این شتاب سنج حرکت کل صفحه بازی را تشخیص می دهد و به مار اجازه می دهد در جهت مربوط به شیب دستگاه حرکت کند. به عنوان مثال، کج کردن آن به سمت جلو باعث می شود مار به سمت بالا حرکت کند. علاوه بر این، یک سپر اترنت در آردوینو ادغام شده است که به بازیکنان این امکان را میدهد تا پس از اتمام بازی، امتیازات خود را از طریق توییتر به اشتراک بگذارند.
علاوه بر این، Gameduino شامل سه دکمه مجزا است. دکمه آبی به عنوان دکمه پاور عمل می کند و با قرار دادن مار و هدف روی ماتریس LED بازی را آغاز می کند. دکمه سبز رنگ به عنوان یک دکمه تنظیم مجدد عمل می کند، که عمدتاً بعد از اینکه بازیکن با یک بازی روبرو می شود، بازی را تنظیم مجدد می کند و به صفحه شروع خالی اولیه باز می گردد. در نهایت، دکمه قرمز رنگ برای ارسال توییت حاوی امتیاز بازیکن استفاده میشود که پس از اتمام بازی در حافظه EEPROM RedBoard ذخیره میشود. برای جلوگیری از توئیت های تکراری، دکمه قرمز تعداد ثانیه های سپری شده از آخرین تنظیم مجدد را نیز شامل می شود. توجه به این نکته ضروری است که دکمه Tweet باید قبل از شروع بازی روی صفحه اصلی فشار داده شود، به عبارت دیگر، باید از قبل تنظیم مجدد شود.
لطفاً مشکلی که در بازی همزمان با فیلمبرداری وجود دارد را ببخشید، و این باعث میشود بازی چالشبرانگیزتر از آنچه هست به نظر برسد. علاوه بر این، از دید ضعیف صفحه نمایش رایانه در ویدیو عذرخواهی می کنم. "امتیاز مار" را نشان می دهد، به دنبال آن امتیاز من 3، و سپس "زمان از آخرین بازنشانی" به همراه زمان، که 14 ثانیه بود.
وقتی در ابتدای ترم شروع به ایده پردازی برای پروژه نهایی خود کردم، می دانستم که می خواهم یک بازی بسازم. پس از انجام برخی تحقیقات آنلاین، با شخصی مواجه شدم که Super Mario Bros را با استفاده از ماتریس LED و آردوینو بازسازی کرده بود. این به من انگیزه داد تا از ماتریس LED برای توسعه یک بازی در آردوینو استفاده کنم. با این حال، با توجه به مهارت های محدود خود در کدنویسی به عنوان یک مبتدی، متوجه شدم که باید یک بازی ساده تر از Super Mario Bros بسازم. پس از بررسی دقیق، تصمیم گرفتم بازی Snake را بسازم، زیرا معتقد بودم کدنویسی و پیاده سازی آن آسان تر است.
من همچنین این ایده را داشتم که یک محافظ اترنت را در مدار قرار دهم که به بازیکنان این امکان را می داد تا امتیازات خود را پس از پایان بازی در توییتر به اشتراک بگذارند. علاوه بر این، من فکر کردم جالب است که یک ماژول GPS را برای درج زمان و تاریخ در توییت ها قرار دهم. با این حال، پس از کار بر روی پروژه میانی خود، متوجه شدم که ماژول GPS مقدار قابل توجهی از حافظه را مصرف می کند. با توجه به محدودیت های پروژه نهایی من، مجبور شدم آن ویژگی را حذف کنم.
در ابتدا، من قصد داشتم با استفاده از چهار دکمه فشار، مار را کنترل کنم. با این حال، معلم من استفاده از شتاب سنج را برای جذاب تر کردن و فیزیکی کردن پروژه پیشنهاد کرد. تصمیم گرفتم از توصیه ها استفاده کنم و شتاب سنج را اجرا کردم، که معلوم شد یک راه سرگرم کننده و منحصر به فرد برای انجام بازی است.
علاوه بر این، من قصد داشتم یک زنگ پیزو را برای اضافه کردن یک آهنگ موسیقی به بازی اضافه کنم. متأسفانه، من نتوانستم روش مناسبی برای ادغام آن به درستی پیدا کنم. تنها راهی که من برای کدنویسی موسیقی با Piezo میدانستم استفاده از تاخیر بود، اما استفاده از زنگ در طول گیمپلی بازی را غیرقابل پخش میکرد. اگر از آن برای نمایش بازی روی نمایش استفاده میکردم، آهنگ را پخش میکرد، نمایشگر را نشان میداد، آهنگ را دوباره پخش میکرد و غیره، هرگز آنها را به طور همزمان نشان نمیداد. اگرچه ممکن است در نهایت راه حلی پیدا کرده باشم، تصمیم گرفتم محدودیت های زمانی را در اولویت قرار دهم و زنگ هشدار را حذف کنم، زیرا به طور قابل توجهی تجربه کلی را بهبود نمی بخشد.
در حین توسعه این پروژه، در این مسیر با چالش های متعددی مواجه شدم. یکی از مشکلات اصلی اولیه که با آن مواجه شدم، حرکت صحیح مار بود. در ابتدا، من RedBoard را طوری برنامه ریزی کرده بودم که مقادیر x و y خاص گرفته شده توسط شتاب سنج را نادیده بگیرد و به جای آن صرفاً روی جهت شتاب سنج تمرکز کردم. پس از تطبیق کدی که به صورت آنلاین پیدا کردم، بازی به خوبی کار کرد و مار همانطور که در نظر داشت حرکت کرد. با این حال، این بدان معنی بود که بازیکن باید تخته را به طور قابل توجهی کج می کرد تا مار پاسخ دهد. اگرچه کار می کرد، اما تنظیم بهینه برای گیم پلی مناسب نبود.
با درک این محدودیت، تصمیم گرفتم مقادیر را آزمایش کنم و کد را تغییر دهم تا زمانی که مقادیر x و y از آستانه های خاصی فراتر رفتند، موقعیت را در نظر گرفته و مار را بر اساس آن حرکت دهد. این تنظیم موفقیت آمیز بود، و به طور کلی، بازی به آرامی اجرا شد، به خصوص پس از دریافت راهنمایی از مربی من برای اطمینان از حرکت مداوم مار. با این حال، من با مشکل کوچک دیگری روبرو شدم که بر لذت و قابلیت بازی بازی تأثیر گذاشت. هنگامی که دستگاه در یک زاویه مورب، به ویژه در جهت پایین سمت راست، کج شد، باعث شد مار به صورت مورب حرکت کند. این یک نقص مخرب در عملکرد بازی بود.
برای رفع این مشکل، با استادم همکاری کردم و راه حلی ابداع کردم. اساساً، من مقادیر را زمانی که شتاب سنج در موقعیت مسطح قرار داشت شناسایی کردم و آن را به عنوان نقطه مرجع پایه تعیین کردم. سپس آستانه ای را در اطراف آن نقطه تعیین کردم. اگر مقادیر مربوطه از آن آستانه فراتر رود، مار در جهت کج مربوطه حرکت میکند. این تنظیم مشکل را برطرف کرد و حرکت صاف مار را تضمین کرد و در عین حال از حرکات مورب ناخواسته ناشی از شیب مورب جلوگیری کرد.