Membuat Game Tic-Tac-Toe Arduino di Layar Sentuh: Tutorial Langkah demi Langkah
Komponen dan Perlengkapan
Arduino UNO
×
1
Layar Sentuh 2.8 inci
×
1
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek Ini
Sobat semuanya, selamat datang kembali di tutorial Arduino lainnya! Dalam tutorial terperinci ini, kita akan membuat game Tic-Tac-Toe berbasis Arduino. Seperti yang Anda lihat, kami menggunakan layar sentuh dan bermain melawan komputer. Game sederhana seperti Tic-Tac-Toe adalah pengenalan yang bagus untuk pemrograman game dan kecerdasan buatan. Meski kita tidak akan menggunakan algoritma kecerdasan buatan dalam game ini, kita akan memahami mengapa algoritma kecerdasan buatan diperlukan dalam game yang lebih kompleks.
Mengembangkan game untuk Arduino tidaklah mudah dan membutuhkan banyak waktu. Namun, kita bisa membuat beberapa game sederhana untuk Arduino karena menyenangkan dan akan memungkinkan kita mengeksplorasi topik pemrograman yang lebih lanjut, seperti Kecerdasan Buatan. Ini adalah pengalaman belajar yang hebat, dan di akhirnya Anda akan memiliki game yang bagus untuk anak-anak!
Mari kita mulai membangun proyek ini.
Langkah 1: Kumpulkan Semua Komponen
Komponen yang diperlukan untuk membangun proyek ini adalah sebagai berikut:
Seorang Arduino Uno
Layar sentuh 2.8 inci
Biaya proyek ini sangat rendah. Hanya sekitar $15.
Sebelum mencoba membangun proyek ini, silakan tonton video yang telah saya siapkan tentang layar sentuh dengan mengklik kartu di sini. Video ini akan membantu Anda memahami kode dan melakukan kalibrasi layar sentuh.
Langkah 2: Layar Sentuh Warna 2.8 inci untuk Arduino
Saya menemukan layar sentuh ini di banggood.com dan memutuskan untuk membelinya untuk mencoba menggunakannya dalam beberapa proyek saya. Seperti yang Anda lihat, layar ini terjangkau, harganya sekitar $11.
Beli di sini.
Layar ini menawarkan resolusi 320x240 piksel dan hadir sebagai shield yang membuat koneksi dengan Arduino sangat mudah. Seperti yang Anda lihat, layar ini menggunakan hampir semua pin digital dan analog Arduino Uno. Saat menggunakan shield ini, kita tinggal hanya 2 pin digital dan 1 pin analog untuk proyek kita. Untungnya, layar ini juga berfungsi baik dengan Arduino Mega, jadi saat kita membutuhkan lebih banyak pin, kita bisa menggunakan Arduino Mega alih-alih Arduino Uno. Sayangnya, layar ini tidak berfungsi dengan Arduino Due atau papan Wemos D1 ESP8266. Keuntungan lain dari shield ini adalah tersedianya slot micro SD yang sangat mudah digunakan.
Langkah 3: Membangun Proyek dan Mengujinya
Setelah menghubungkan layar ke Arduino Uno, kita dapat memuat kode dan siap untuk bermain.
Pertama, kami menekan tombol “Start Game” dan game dimulai. Arduino bermain terlebih dahulu. Kemudian kita bisa melakukan langkah kita dengan mudah dengan menyentuh layar. Arduino kemudian melakukan langkahnya dan seterusnya. Pemain yang berhasil menempatkan tiga tanda mereka dalam baris horizontal, vertikal, atau diagonal menang dalam game. Setelah game selesai, layar Game Over akan muncul. Kita kemudian bisa menekan tombol play again untuk memulai ulang game.
Arduino sangat jitu dalam game ini. Ia akan menang dalam sebagian besar game, atau jika Anda adalah pemain yang sangat mahir, game akan berakhir imbang. Saja sengaja dirancang algoritma ini untuk melakukan beberapa kesalahan agar memberi pemain manusia kesempatan untuk menang. Dengan menambahkan dua baris kode pada game, kita bisa membuat tidak mungkin Arduino kalah dalam game. Namun, bagaimana sebuah chip $2, CPU Arduino, bisa mengalahkan otak manusia? Apakah program yang kami kembangkan lebih cerdas dari otak manusia?
Langkah 4: Algoritma Game
Untuk menjawab pertanyaan ini, mari kita lihat algoritma yang telah saya terapkan.
Komputer selalu bermain pertama. Keputusan ini sendirian membuat game jauh lebih mudah untuk Arduino untuk menang. Langkah pertama selalu sudut. Langkah kedua untuk Arduino juga sudut acak dari yang tersisa tanpa mempedulikan langkah pemain sama sekali. Dari titik ini, Arduino pertama memeriksa apakah pemain bisa menang dalam langkah berikutnya dan memblokir langkah tersebut. Jika pemain tidak bisa menang dalam satu langkah, ia melakukan langkah sudut jika tersisa atau langkah acak dari yang tersisa. Cukup segitu, algoritma sederhana ini bisa mengalahkan pemain manusia setiap kali atau dalam skenario terburik, game akan berakhir imbang. Ini bukan algoritma game tic-tac-toe terbaik, tetapi salah yang paling sederhana.
Algoritma ini dapat diimplementasikan di Arduino dengan mudah, karena game Tic-Tac-Toe sangat sederhana, dan kita dapat menganalisnya dan menyelesaikannya dengan mudah. Jika kita merancang pohon game, kita dapat menemukan beberapa strategi menang dan mengimplementasikannya dalam kode, atau kita dapat membiarkan CPU menghitung pohon game secara real-time dan memilih langkah terbaik sendiri. Tentu saja, algoritma yang kita gunakan dalam game ini sangat sederhana, karena game ini sangat sederhana. Jika kita mencoba merancang algoritma menang untuk catur, meskipun kita menggunakan komputer tercepat, kita tidak dapat menghitung pohon game dalam seribu tahun! Untuk game seperti ini, kita perlu pendekatan lain, kita perlu beberapa algoritma Kecerdasan Buatan dan tentu saja daya proses yang besar. Lebih banyak tentang ini dalam video mendatang.
Langkah 5: Kode Proyek
Mari kita lihat sekilas kode proyek. Kita memerlukan tiga library agar kode dapat dikompilasi.
Modified Adafruit TFTLCD
Adafruit GFX
Touchscreen
Seperti yang Anda lihat, bahkan game sederhana seperti ini membutuhkan lebih dari 600 baris kode. Kode cukup kompleks, jadi saya tidak akan mencoba menjelaskannya dalam tutorial singkat. Saya akan menunjukkan implementasi algoritma untuk langkah Arduino.
Pertama, kita bermain dua sudut acak.
int firstMoves[]={0,2,6,8}; // will use these positions first for(counter=0;counter<4;counter++) //Count first moves played { if(board[firstMoves[counter]]!=0) // First move is played by someone { movesPlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (board[c]==0) { delay(1000); board[c]=2; Serial.print(firstMoves[randomMove]); Serial.println(); drawCpuMove(firstMoves[randomMove]); b=1; } }
Selanjutnya, dalam setiap ronde kita memeriksa apakah pemain bisa menang dalam langkah berikutnya.
Iya, kita blokir langkah tersebut, sebagian besar waktu. Kita tidak memblokir semua langkah untuk memberi pemain manusia kesempatan menang. Bisakah Anda menemukan langkah mana yang tidak diblokir? Setelah memblokir langkah, kita bermain sudut yang tersisa, atau langkah acak. Anda dapat mempelajari kode dan mengimplementasikan algoritma tak terkalahkan Anda sendiri dengan mudah. Seperti biasa, Anda dapat menemukan kode proyek yang dilampirkan pada tutorial ini.
CATATAN: Karena Banggood menawarkan layar yang sama dengan dua driver layar yang berbeda, jika kode di atas tidak bekerja, ubah fungsi initDisplay menjadi berikut:
Seperti yang Anda lihat, bahkan dengan Arduino Uno, kita dapat membuat algoritma tak terkalahkan untuk game sederhana. Proyek ini hebat karena mudah dibangun, dan pada saat yang sama merupakan pengenalan yang bagus terhadap kecerdasan buatan dan pemrograman game. Saya akan mencoba membangun beberapa proyek yang lebih canggih dengan kecerdasan buatan di masa depan menggunakan Raspberry Pi yang lebih canggih, jadi tetaplah menyimak! Saya sangat ingin mendengar pendapat Anda tentang proyek ini.
Silakan posting komentar Anda di bawah ini dan jangan lupa untuk menyukai tutorial ini jika Anda menemukannya menarik. Terima kasih!
Kode
Cuplikan kode #1
Cuplikan kode #2
Cuplikan kode #1Plain text
<p>int firstMoves[]={0,2,6,8}; // will use these positions first</p><p> for(counter=0;counter<4;counter++) //Count first moves played { if(board[firstMoves[counter]]!=0) // First move is played by someone { movesPlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (board[c]==0) { delay(1000); board[c]=2; Serial.print(firstMoves[randomMove]); Serial.println(); drawCpuMove(firstMoves[randomMove]); b=1; } }</p>