İçindekiler:

Arduino Touch Tic Tac Toe Oyunu: 6 Adım (Resimli)
Arduino Touch Tic Tac Toe Oyunu: 6 Adım (Resimli)

Video: Arduino Touch Tic Tac Toe Oyunu: 6 Adım (Resimli)

Video: Arduino Touch Tic Tac Toe Oyunu: 6 Adım (Resimli)
Video: ChatGPT with Arduino Nano #arduino #chatgpt #technology #openAI #electronic 2024, Haziran
Anonim
Image
Image
Arduino Dokunmatik Tic Tac Toe Oyunu
Arduino Dokunmatik Tic Tac Toe Oyunu
Arduino Dokunmatik Tic Tac Toe Oyunu
Arduino Dokunmatik Tic Tac Toe Oyunu
Arduino Dokunmatik Tic Tac Toe Oyunu
Arduino Dokunmatik Tic Tac Toe Oyunu

Sevgili dostlar, başka bir Arduino eğitimine hoş geldiniz! Bu ayrıntılı öğreticide bir Arduino Tic Tac Toe oyunu oluşturacağız. Gördüğünüz gibi dokunmatik ekran kullanıyoruz ve bilgisayara karşı oynuyoruz. Tic Tac Toe gibi basit bir oyun, oyun programlama ve Yapay Zeka için harika bir giriştir. Bu oyunda Yapay Zeka Algoritmaları kullanmayacak olsak da, daha karmaşık oyunlarda Yapay Zeka Algoritmalarının neden gerekli olduğunu anlayacağız.

Arduino için oyun geliştirmek kolay değildir ve çok zaman gerektirir. Ama Arduino için bazı basit oyunlar yapabiliriz çünkü eğlencelidir ve Yapay zeka gibi bazı daha gelişmiş programlama konularını keşfetmemize izin verir. Bu harika bir öğrenme deneyimi ve sonunda çocuklar için güzel bir oyun olacak!

Şimdi bu projeyi oluşturalım.

Adım 1: Tüm Parçaları Alın

Image
Image
2.8
2.8

Bu projeyi inşa etmek için gereken parçalar şunlardır:

Arduino Uno ▶

2,8” Dokunmatik Ekran ▶

Projenin maliyeti çok düşük. Sadece 15$

Bu projeyi yapmaya başlamadan önce dokunmatik ekran ile ilgili hazırladığım videoyu izleyiniz. Bu talimata ekledim. Kodu anlamanıza ve dokunmatik ekranı kalibre etmenize yardımcı olacaktır.

Adım 2: Arduino için 2.8" Dokunmatik Renkli Ekran

Image
Image
2.8
2.8
2.8
2.8

Bu dokunmatik ekranı banggood.com'da keşfettim ve bazı projelerimde kullanmayı denemek için satın almaya karar verdim. Gördüğünüz gibi ekran ucuz, fiyatı 11 dolar civarında.

Buradan alın ▶

Ekran 320x240 piksel çözünürlük sunuyor ve Arduino ile bağlantıyı son derece kolaylaştıran bir kalkan olarak geliyor. Gördüğünüz gibi, ekran Arduino Uno'nun neredeyse tüm dijital ve analog pinlerini kullanıyor. Bu kalkanı kullanırken projelerimiz için sadece 2 dijital pin ve 1 analog pin kalıyor. Neyse ki, ekran Arduino Mega ile de iyi çalışıyor, bu yüzden daha fazla pime ihtiyacımız olduğunda Arduino Uno yerine Arduino Mega'yı kullanabiliriz. Maalesef bu ekran Arduino Due veya Wemos D1 ESP8266 kartı ile çalışmıyor. Shield'ın bir diğer avantajı da kullanımı çok kolay olan bir micro SD slotu sunmasıdır.

Adım 3: Projeyi Oluşturma ve Test Etme

Projeyi Oluşturma ve Test Etme
Projeyi Oluşturma ve Test Etme
Projeyi Oluşturma ve Test Etme
Projeyi Oluşturma ve Test Etme
Projeyi Oluşturma ve Test Etme
Projeyi Oluşturma ve Test Etme

Ekranı Arduino Uno'ya bağladıktan sonra kodu yükleyebiliriz ve oynamaya hazırız.

İlk olarak “Start Game” butonuna basıyoruz ve oyun başlıyor. Önce Arduino oynar. Daha sonra sadece ekrana dokunarak hamlemizi oynayabiliriz. Arduino daha sonra hareketini oynar vb. İşaretlerinden üçünü yatay, dikey veya çapraz sıraya yerleştirmeyi başaran oyuncu oyunu kazanır. Oyun bittiğinde Game Over ekranı belirir. Ardından oyunu tekrar başlatmak için tekrar oynat düğmesine basabiliriz.

Arduino bu oyunda çok iyidir. Oyunların çoğunu kazanır veya çok iyi bir oyuncuysanız oyun berabere biter. İnsan oyuncuya kazanma şansı vermek için bu algoritmayı kasıtlı olarak bazı hatalar yapacak şekilde tasarladım. Oyunun koduna iki satır daha ekleyerek Arduino'nun oyunu kaybetmesini imkansız hale getirebiliriz. Fakat 2$'lık bir çip olan Arduino CPU, insan beynini nasıl yenebilir? Geliştirdiğimiz program insan beyninden daha mı akıllı?

Adım 4: Oyun Algoritması

Oyun Algoritması
Oyun Algoritması
Oyun Algoritması
Oyun Algoritması

Bu soruyu cevaplamak için uyguladığım algoritmaya bakalım.

Bilgisayar her zaman önce oynar. Tek başına bu karar bile Arduino'nun kazanması için oyunu çok daha kolay hale getiriyor. İlk hamle her zaman bir köşedir. Arduino için ikinci hamle, oyuncunun hareketini hiç umursamadan kalanlardan rastgele bir köşedir. Bu noktadan itibaren, Arduino önce oyuncunun bir sonraki hamlede kazanıp kazanamayacağını kontrol eder ve bu hareketi engeller. Oyuncu tek hamlede kazanamazsa, mevcutsa bir köşe hamlesi veya kalanlardan rastgele bir hamle oynar. İşte bu kadar, bu basit algoritma insan oyuncuyu her seferinde yenebilir veya en kötü senaryoda oyun berabere sonuçlanır. Bu, en iyi tic tac toe oyun algoritması değil, en basitlerinden biridir.

Bu algoritma Arduino'da kolayca uygulanabilir çünkü Tic Tac Toe oyunu çok basit ve kolayca analiz edip çözebiliriz. Oyun ağacını tasarlarsak, bazı kazanma stratejileri keşfedebilir ve bunları kodda kolayca uygulayabiliriz veya CPU'nun oyun ağacını gerçek zamanlı olarak hesaplamasına ve en iyi hamleyi kendi başına seçmesine izin verebiliriz. Elbette bu oyunda kullandığımız algoritma çok basit çünkü oyun çok basit. Satranç için kazanan bir algoritma tasarlamaya çalışırsak, en hızlı bilgisayarı kullansak bile bin yılda oyun ağacını hesaplayamayız! Bunun gibi oyunlar için başka bir yaklaşıma ihtiyacımız var, bazı Yapay Zeka algoritmalarına ve tabii ki devasa işlem gücüne ihtiyacımız var. Gelecekteki bir videoda bununla ilgili daha fazla bilgi.

Adım 5: Projenin Kodu

Proje Kodu
Proje Kodu

Hemen projenin koduna bir göz atalım. Kodun derlenmesi için üç kütüphaneye ihtiyacımız var.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Dokunmatik ekran:

Gördüğünüz gibi, bunun gibi basit bir oyun bile 600 satırdan fazla kod gerektiriyor. Kod karmaşık, bu yüzden kısa bir eğitimde açıklamaya çalışmayacağım. Yine de Arduino hareketleri için algoritmanın uygulanmasını göstereceğim.

İlk başta rastgele iki korner oynuyoruz.

<int firstMoves={0, 2, 6, 8}; // önce bu konumları kullanacak(counter=0;counter<4;counter++) // Oynanan ilk hamleleri say { if(board[firstMoves[counter]!=0) // İlk hamle biri tarafından oynanır { movePlayed++; } } do{ if(hareket<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (board[c]==0) { gecikme(1000); tahta[c]=2; Serial.print(firstMoves[randomMove]); Seri.println(); drawCpuMove(firstMoves[randomMove]); b=1; } }

Ardından, her turda oyuncunun bir sonraki hamlede kazanıp kazanamayacağını kontrol ederiz.

int checkOpponent()

{ if(board[0]==1 && board[1]==1 && board[2]==0) return 2; else if(board[0]==1 && board[1]==0 && board[2]==1) 1 döndür; else if (board[1]==1 && board [2]==1 && board[0]==0) 0 döndürür; else if (board[3]==1 && board[4]==1 && board[5]==0) 5 döndürür; else if (board[4]==1 && board[5]==1&& board[3]==0) 3 döndürür; else if (board[3]==1 && board[4]==0&& board[5]==1) 4 döndürür; else if (board[1]==0 && board[4]==1&& board[7]==1) 1 döndürür; yoksa 100 döndürür; }

Evet ise, çoğu zaman bu hareketi engelleriz. İnsan oyuncuya kazanma şansı vermek için tüm hareketleri engellemiyoruz. Hangi hareketlerin engellenmediğini bulabilir misin? Hamleyi bloke ettikten sonra kalan bir korner veya rastgele bir hamle oynarız. Kodu inceleyebilir ve kendi rakipsiz algoritmanızı kolayca uygulayabilirsiniz. Her zaman olduğu gibi, bu talimata ekli projenin kodunu bulabilirsiniz.

NOT: Banggood aynı ekranı iki farklı ekran sürücüsüyle sunduğundan, yukarıdaki kod çalışmazsa initDisplay işlevini aşağıdaki gibi değiştirin:

geçersiz initDisplay()

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

Adım 6: Son Düşünceler ve İyileştirmeler

Son Düşünceler ve İyileştirmeler
Son Düşünceler ve İyileştirmeler

Gördüğünüz gibi, bir Arduino Uno ile bile basit oyunlar için rakipsiz bir algoritma oluşturabiliriz. Bu proje harika çünkü inşa edilmesi kolay ve aynı zamanda Yapay zeka ve oyun programlamaya harika bir giriş. Gelecekte daha güçlü Raspberry Pi'yi kullanarak Yapay Zeka ile daha gelişmiş projeler inşa etmeye çalışacağım, bu yüzden bizi izlemeye devam edin! Bu proje hakkındaki görüşlerinizi duymak isterim.

Lütfen yorumlarınızı aşağıya gönderin ve ilginç bulursanız talimatı beğenmeyi unutmayın. Teşekkürler!

Önerilen: