![](https://duino4projects.com/wp-content/uploads/2019/09/Creating-a-Physical-Game-Controller.jpg)
هنگامی که Nintendo Wii راه اندازی شد، بازیکنان تشویق شدند که مبل را ترک کنند و بپرند، برقصند و تکان بخورند تا در بازی انتخابی خود امتیاز کسب کنند. در حالی که منحنی یادگیری شیبداری در ساخت Wii وجود دارد، ساختن یک دستگاه سفارشی که به شما امکان میدهد با پرش فیزیکی روی پدهای فشار در زمان مناسب، بازی را کنترل کنید، آسان است.
این دستورالعمل نشان میدهد که چگونه من بازی «Space Bounce» (قابل پخش زنده در https://marquisdegeek.com/spacebounce/ با منبع https://github.com/MarquisdeGeek/SpaceBounce) را برای استفاده از یک کنترلکننده فیزیکی اقتباس کردم.
تدارکات:
- آردوینو
- دو تشک فشار (مال من از Maplin بود
- دو مقاومت، برای تشک فشار (100 K، اما اکثر آنها خوب هستند)
- دو عدد LED (اختیاری)
- دو مقاومت، برای LED ها (100 K، اما اکثر آنها خوب هستند. همچنین اختیاری)
- لپ تاپ
مرحله 1: پرش به اطراف!
![](https://duino4projects.com/wp-content/uploads/2019/09/Jump-Around.jpg)
من با طراحی رابط پرش شروع کردم و با بررسی بازی متوجه شدم که داشتن دو تشک ایده اصلی آن را به بهترین شکل بیان می کند. یعنی روی تشک سمت چپ میایستید تا احساس چسبیدن به دیوار سمت چپ را شبیهسازی کنید و در لحظه مناسب به سمت تشک سمت راست بپرید و کاراکتر روی صفحه نمایش شما نیز همین کار را میکند.
مرحله 2: اتصال پدها
![](https://duino4projects.com/wp-content/uploads/2019/09/Connecting-the-Pads.jpg)
بنابراین دو تشک خریدم و دست به کار شدم. تشک های فشار نشان داده شده در اینجا ساده ترین (و ارزان ترین!) هستند که من پیدا کردم، هر کدام 10 پوند. آنها چهار سیم دارند که دو تای آنها مانند یک کلید ساده عمل می کنند: وقتی روی تشک می ایستید، یک اتصال ایجاد می شود و وقتی به بالا می پرید خراب می شود. من این را به یک آردوینو با این مدار اولیه تغذیه کردم.
مرحله 3: Tripping the Light Fantastic
![](https://duino4projects.com/wp-content/uploads/2019/09/Tripping-the-Light-Fantastic.jpg)
کار کرد، اما خیلی الهام بخش نبود. بنابراین، من تعدادی LED برای نشان دادن وضعیت هر تشک فشار اضافه کردم.
برای اجرای بازی نیازی به ال ای دی نیست، اما با افزودن آنها به مدار به راحتی می توانم وضعیت فعلی مدار را ببینم. بنابراین، اگر بازی به درستی واکنش نشان نمی داد، می توانستم بررسی کنم که آیا مشکل از مدار، نرم افزار آردوینو یا منطق بازی است.
مرحله 4: شروع به کدنویسی
با توجه به اینکه بازی اصلی در جاوا اسکریپت بود، تصمیم گرفتم یک برنامه NodeJS بنویسم که به تغییرات در حالت تشت فشار گوش می دهد و داده ها را از طریق وب سوکت ها برای کلاینت بازی ارسال می کند.
ابتدا فریماتای استاندارد را روی آردوینو خود نصب کنید تا بتوانیم یک سرور Node را روی رایانه شخصی اجرا کنیم و از کتابخانه جانی فایو برای گوش دادن به تغییرات وضعیت آردوینو استفاده کنیم. سپس Express را برای ارائه محتوای بازی اضافه کنید.
کل کد سرور به شکل زیر است:
const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const io = require('socket.io').listen(server); const arduino = require('arduino-controller'); server.listen(3000, function() { console.log('Express server listening...'); }); app.use('/', express.static('app')); const five = require("johnny-five"); const board = new five.Board({ repl: false }); board.on("ready", function() { let green = new five.Led(5); let red = new five.Led(6); let left = new five.Pin(2); let right = new five.Pin(3); io.on('connect', function(socket) { console.log('We are connected!'); let lastLeft = false; let lastRight = false; five.Pin.read(left, (err, val) => { if (val) { green.on(); } else { green.off(); } if (val !== lastLeft) { lastLeft = val; let state = { side: 'left', state: val ? 'down' : 'up' } socket.emit('arduino::state', JSON.stringify(state), { for: 'everyone' }); } }) five.Pin.read(right, (err, val) => { if (val) { red.on(); } else { red.off(); } // if (val !== lastRight) { lastRight = val; let state = { side: 'right', state: val ? 'down' : 'up' } socket.emit('arduino::state', JSON.stringify(state), { for: 'everyone' }); } }) }); });
و با:
node server.js
مرحله 5: تطبیق بازی
اولین مشکل رابط کاربری بود. چگونه روی دکمه پخش کلیک می کنید در حالی که تنها کاری که می توانید انجام دهید پرش است؟ من این را با حذف تمام دکمه های دیگر حل کردم! سپس میتوانم هر زمان که بازیکن میپرد، دکمه باقیمانده را با گوش دادن به یکی از رویدادهای «بالا» فعال کنم.