فهرست مطالب:

بازی Arduino Touch Tic Tac Toe: 6 مرحله (همراه با تصاویر)
بازی Arduino Touch Tic Tac Toe: 6 مرحله (همراه با تصاویر)

تصویری: بازی Arduino Touch Tic Tac Toe: 6 مرحله (همراه با تصاویر)

تصویری: بازی Arduino Touch Tic Tac Toe: 6 مرحله (همراه با تصاویر)
تصویری: CS50 2015 - Week 10 2024, دسامبر
Anonim
Image
Image
بازی Arduino Touch Tic Tac Toe
بازی Arduino Touch Tic Tac Toe
بازی Arduino Touch Tic Tac Toe
بازی Arduino Touch Tic Tac Toe
بازی Arduino Touch Tic Tac Toe
بازی Arduino Touch Tic Tac Toe

دوستان عزیز به آموزش دیگر آردوینو خوش آمدید! در این آموزش مفصل ما قصد داریم یک بازی Arduino Tic Tac Toe بسازیم. همانطور که می بینید ، ما از صفحه لمسی استفاده می کنیم و در مقابل کامپیوتر بازی می کنیم. یک بازی ساده مانند Tic Tac Toe یک معرفی عالی برای برنامه نویسی بازی و هوش مصنوعی است. حتی اگر از هیچ الگوریتم هوش مصنوعی در این بازی استفاده نمی کنیم ، خواهیم فهمید که چرا الگوریتم های هوش مصنوعی در بازی های پیچیده تر مورد نیاز است.

توسعه بازی برای آردوینو آسان نیست و به زمان زیادی نیاز دارد. اما ما می توانیم چند بازی ساده برای Arduino بسازیم زیرا سرگرم کننده است و به ما اجازه می دهد تا موضوعات برنامه نویسی پیشرفته تری مانند هوش مصنوعی را کشف کنیم. این یک تجربه یادگیری عالی است و در پایان شما یک بازی خوب برای بچه ها خواهید داشت!

اکنون بیایید این پروژه را بسازیم.

مرحله 1: تمام قطعات را دریافت کنید

Image
Image
2.8
2.8

قطعات مورد نیاز برای ساخت این پروژه به شرح زیر است:

Arduino Uno ▶

صفحه لمسی 2.8 اینچی ▶

هزینه پروژه بسیار کم است. فقط 15 دلار است

لطفاً قبل از تلاش برای ساخت این پروژه ، ویدئویی را که در مورد صفحه نمایش لمسی تهیه کرده ام ، مشاهده کنید. من آن را در این دستورالعمل ضمیمه کرده ام. این به شما کمک می کند کد را درک کرده و صفحه لمسی را کالیبره کنید.

مرحله 2: صفحه نمایش لمسی رنگی 2.8 اینچی برای آردوینو

Image
Image
2.8
2.8
2.8
2.8

من این صفحه لمسی را در banggood.com کشف کردم و تصمیم گرفتم آن را بخرم تا در برخی از پروژه هایم از آن استفاده کنم. همانطور که می بینید صفحه نمایش ارزان قیمت است ، حدود 11 دلار قیمت دارد.

آن را از اینجا دریافت کنید ▶

صفحه نمایش رزولوشن 320x240 پیکسل را ارائه می دهد و به عنوان یک سپر ارائه می شود که ارتباط با آردوینو را بسیار آسان می کند. همانطور که مشاهده می کنید ، صفحه نمایش تقریباً از تمام پین های دیجیتالی و آنالوگ Arduino Uno استفاده می کند. هنگام استفاده از این سپر ، ما فقط 2 پین دیجیتال و 1 پین آنالوگ برای پروژه های خود داریم. خوشبختانه ، صفحه نمایش با Arduino Mega نیز خوب کار می کند ، بنابراین ما وقتی به پین های بیشتری نیاز داریم می توانیم از Arduino Mega به جای Arduino Uno استفاده کنیم. متأسفانه این صفحه نمایش با برد Arduino Due یا برد Wemos D1 ESP8266 کار نمی کند. یکی دیگر از مزایای این سپر این است که یک اسلات micro SD ارائه می دهد که استفاده از آن بسیار آسان است.

مرحله 3: ساخت پروژه و آزمایش آن

ساخت پروژه و آزمایش آن
ساخت پروژه و آزمایش آن
ساخت پروژه و آزمایش آن
ساخت پروژه و آزمایش آن
ساخت پروژه و آزمایش آن
ساخت پروژه و آزمایش آن

پس از اتصال صفحه به Arduino Uno ، می توانیم کد را بارگذاری کنیم و آماده بازی هستیم.

در ابتدا ، دکمه "شروع بازی" را فشار می دهیم و بازی شروع می شود. آردوینو ابتدا بازی می کند. سپس می توانیم حرکت خود را به سادگی با لمس صفحه نمایش انجام دهیم. سپس آردوینو حرکت خود را انجام می دهد و غیره. بازیکنی که موفق شود سه علامت خود را در یک ردیف افقی ، عمودی یا مورب قرار دهد برنده بازی است. وقتی بازی تمام شد ، صفحه Game Over ظاهر می شود. سپس می توانیم دکمه play again را فشار دهیم تا بازی دوباره شروع شود.

آردوینو در این بازی بسیار خوب عمل می کند. در بیشتر بازی ها برنده خواهد شد ، یا اگر بازیکن بسیار خوبی هستید بازی با تساوی به پایان می رسد. من عمداً این الگوریتم را طوری طراحی کردم که برخی اشتباهات را مرتکب شود تا به بازیکن انسانی شانس برنده شدن بدهم. با افزودن دو خط دیگر به کد بازی ، می توانیم آردوینو را از دست بدهیم. اما چگونه می توان یک تراشه 2 دلاری ، CPU آردوینو ، مغز انسان را شکست داد؟ آیا برنامه ای که توسعه دادیم هوشمندتر از مغز انسان است؟

مرحله 4: الگوریتم بازی

الگوریتم بازی
الگوریتم بازی
الگوریتم بازی
الگوریتم بازی

برای پاسخ به این س letال ، بیایید به الگوریتمی که پیاده کرده ام نگاهی بیندازیم.

کامپیوتر همیشه اول بازی می کند. این تصمیم به تنهایی ، برد بازی را برای آردوینو بسیار آسان می کند. اولین حرکت همیشه گوشه ای است. دومین حرکت برای آردوینو نیز یک گوشه تصادفی از باقی مانده است و اصلاً به حرکت بازیکن اهمیتی نمی دهد. از این به بعد ، آردوینو ابتدا بررسی می کند که آیا بازیکن می تواند در حرکت بعدی برنده شود یا خیر و حرکت را مسدود می کند. اگر بازیکن نتواند در یک حرکت برنده شود ، در صورت موجود بودن حرکت کرنر یا در صورت حرکت تصادفی از باقیمانده انجام می دهد. تمام ، این الگوریتم ساده می تواند هر بار بازیکن انسانی را شکست دهد یا در بدترین حالت ، بازی به تساوی منجر شود. این بهترین الگوریتم بازی tic tac toe نیست ، بلکه یکی از ساده ترین آنهاست.

این الگوریتم را می توان به راحتی در آردوینو پیاده کرد ، زیرا بازی Tic Tac Toe بسیار ساده است و ما به راحتی می توانیم آن را تحلیل کرده و حل کنیم. اگر درخت بازی را طراحی کنیم ، می توانیم برخی از استراتژی های برنده را کشف کرده و آنها را به راحتی در کد پیاده سازی کنیم ، یا می توانیم به CPU اجازه دهیم درخت بازی را در زمان واقعی محاسبه کرده و به تنهایی بهترین حرکت را انتخاب کند. البته الگوریتم مورد استفاده ما در این بازی بسیار ساده است ، زیرا بازی بسیار ساده است. اگر ما سعی کنیم یک الگوریتم برنده برای شطرنج طراحی کنیم ، حتی اگر از سریع ترین کامپیوتر استفاده کنیم ، نمی توانیم درخت بازی را در هزار سال محاسبه کنیم! برای بازی هایی مانند این ، ما به رویکرد دیگری نیاز داریم ، به برخی الگوریتم های هوش مصنوعی و البته قدرت پردازشی عظیم نیاز داریم. توضیحات بیشتر در این مورد در ویدیوی آینده.

مرحله 5: کد پروژه

کد پروژه
کد پروژه

اجازه دهید نگاهی گذرا به کد پروژه بیندازیم. ما به سه کتابخانه نیاز داریم تا کد کامپایل شود.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. صفحه لمسی:

همانطور که می بینید ، حتی یک بازی ساده مانند این ، به بیش از 600 خط کد نیاز دارد. کد پیچیده است ، بنابراین سعی نمی کنم آن را در یک آموزش کوتاه توضیح دهم. هرچند پیاده سازی الگوریتم حرکت Arduino را به شما نشان خواهم داد.

در ابتدا ، ما دو کرنر تصادفی انجام می دهیم.

<int firstMoves = {0 ، 2 ، 6 ، 8} ؛ // ابتدا از این موقعیت ها برای (شمارنده = 0 ؛ شمارنده <4 ؛ شمارنده ++) استفاده می کند // اولین حرکتهای انجام شده {if (تخته [firstMoves [counter]! = 0) // اولین حرکت توسط کسی انجام می شود {movesPlayed ++؛ }} {if (moves <= 2) {int randomMove = random (4)؛ int c = firstMoves [randomMove]؛ if (تخته [c] == 0) {تاخیر (1000) ؛ تخته [c] = 2 ؛ Serial.print (firstMoves [randomMove]) ؛ Serial.println ()؛ drawCpuMove (firstMoves [randomMove]) ؛ b = 1 ؛ }}

بعد ، در هر دور بررسی می کنیم که آیا بازیکن می تواند در حرکت بعدی برنده شود یا خیر.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2؛ در غیر این صورت (تخته [0] == 1 && تخته [1] == 0 && تخته [2] == 1) بازگشت 1 ؛ در غیر این صورت (تخته [1] == 1 && تخته [2] == 1 && تخته [0] == 0) بازگشت 0 ؛ در غیر این صورت (تخته [3] == 1 && تخته [4] == 1 && تخته [5] == 0) بازگشت 5 ؛ در غیر این صورت (تخته [4] == 1 && تخته [5] == 1 && تخته [3] == 0) بازگشت 3 ؛ در غیر این صورت (تخته [3] == 1 && تخته [4] == 0 && تخته [5] == 1) بازگشت 4 ؛ در غیر این صورت (تخته [1] == 0 && تخته [4] == 1 && تخته [7] == 1) بازگشت 1 ؛ در غیر این صورت 100 بازگردانید ؛ }

اگر بله ، این حرکت را در بیشتر مواقع مسدود می کنیم. ما همه حرکات را مسدود نمی کنیم تا به بازیکنان انسانی فرصت برنده شدن بدهیم. آیا می توانید پیدا کنید کدام حرکتها مسدود نشده اند؟ پس از مسدود کردن حرکت ، یک گوشه باقی مانده یا حرکت تصادفی را انجام می دهیم. می توانید کد را مطالعه کرده و الگوریتم بی نظیر خود را به راحتی پیاده سازی کنید. مثل همیشه می توانید کد پروژه را که در این قسمت ضمیمه شده است پیدا کنید.

توجه: از آنجا که Banggood صفحه نمایش یکسانی با دو درایور نمایشگر متفاوت ارائه می دهد ، اگر کد بالا کار نمی کند ، عملکرد initDisplay را به موارد زیر تغییر دهید:

void initDisplay ()

{tft.reset ()؛ tft.begin (0x9341) ؛ tft.setRotation (3) ؛ }

مرحله ششم: اندیشه ها و پیشرفت های نهایی

اندیشه ها و پیشرفت های نهایی
اندیشه ها و پیشرفت های نهایی

همانطور که می بینید ، حتی با Arduino Uno ، می توانیم یک الگوریتم بی نظیر برای بازی های ساده بسازیم. این پروژه بسیار عالی است ، زیرا ساخت آن آسان است و در عین حال مقدمه ای عالی برای هوش مصنوعی و برنامه نویسی بازی است. من سعی خواهم کرد در آینده پروژه های پیشرفته تری با هوش مصنوعی با استفاده از رزبری پای قوی تر بسازم ، بنابراین با ما همراه باشید! خوشحال می شوم نظر شما را در مورد این پروژه بشنوم.

لطفاً نظرات خود را در زیر بنویسید و اگر برای شما جالب بود ، مطالب آموزشی را فراموش نکنید. با تشکر!

توصیه شده: