İçindekiler:

Dünyanın En Zor Oyununu Arduino'da Yeniden Yaratmak: 7 Adım
Dünyanın En Zor Oyununu Arduino'da Yeniden Yaratmak: 7 Adım

Video: Dünyanın En Zor Oyununu Arduino'da Yeniden Yaratmak: 7 Adım

Video: Dünyanın En Zor Oyununu Arduino'da Yeniden Yaratmak: 7 Adım
Video: En İyi 7 Arduino Projesi - Robotistan'da En Beğendiğiniz Arduino Projeleri 2024, Kasım
Anonim
Image
Image

Bu proje, çevrimiçi bulabileceğiniz bir bilgisayar oyununa dayanmaktadır. Adı "Dünyanın En Zor Oyunu". Dört modüllü bir LED Matrix kullanarak Arduino'da yeniden oluşturabildim. Bu talimatta size onu nasıl inşa edeceğinizi öğretiyorum. Çok fazla ayrıntıya girmeden önce, bu oyunu oluşturmak için attığım adımlara hızlı bir genel bakış vermek istiyorum.

  1. Gerekli tüm parçaları topladım.
  2. Parçaları birbirine bağladım.
  3. Oyuncuların LED'lerini tüm modüller arasında hareket ettirmek için joystick'i kullanan bir çizim yazdım.
  4. İlk engelleri tasarladım ve onları taslağa ekledim, böylece Dünyanın En Zor Oyununu taklit ettiler.
  5. Daha sonra, oyunu yeniden başlatacak olan engellerle çarpışmayı algılamak için kod ekledim.
  6. Sonra iki seviye daha engel tasarladım.

Adım 1: Tüm Parçalar

Tüm Parçalar
Tüm Parçalar
Tüm Parçalar
Tüm Parçalar

İşte ihtiyacınız olan tüm parçaların bir listesi:

  1. Bir Arduino UNO ve usb konektörü:
  2. Dört modül 8x8: LED matris
  3. Bir Joystick:
  4. 10 erkekten dişiye kablo:

Adım 2: Parçaları Arduino'ya Bağlama

Parçaları Arduino'ya Bağlama
Parçaları Arduino'ya Bağlama

LED Matrisi Arduino'ya Nasıl Bağlanır

  1. GND, GND'ye gidiyor
  2. VCC 5V'a gidiyor
  3. DataIn dijital pin 12'ye gider
  4. CLK dijital pin 11'e gider
  5. CS veya LOAD, dijital pin 10'a gider

Joystick nasıl bağlanır

  1. GND, GND'ye gidiyor
  2. 5V, 5V'a gidiyor
  3. VRx analog pin A0'a gider
  4. VRy analog pin A1'e gider
  5. SW kullanılmaz

Pil, Arduino'ya güç vermek için 9v jakına bağlanır

Adım 3: Programın Akış Şeması

Programın Akış Şeması
Programın Akış Şeması

Oval, programın başladığını gösterir.

İlk adım, tüm engelleri tanımlamaktır.

Sonraki iki adım, değişkenlerin ayarlanmasını ve tüm modüllerin açılmasını gösterir.

Bir sonraki adım, LED'leri birinci seviyeye ve diğer değişkenlere ayarlamaktır.

Ardından, oynatıcının şu anda bulunduğu seviyeyi görüntüleyin.

Eşkenar dörtgen, hangi yöne itildiğini görmek için Joystick'in okunduğunu gösterir.

Ardından oynatıcıyı Joystick'in itildiği yöne doğru hareket ettirin.

Oyuncunun bir engelle çarpışıp çarpışmadığını kontrol edin ve görün.

Oyuncu bir engele çarparsa, ilk seviyeye geri dönün. Değilse, oyuncunun seviyenin sonuna ulaşıp ulaşmadığını kontrol edin.

Oyuncu seviyenin sonundaysa, bir sonraki seviyeye ayarlayın ve ardından "Geçerli Seviyeyi Görüntüle"ye geri dönün. Sonda değilse, engelleri kaldırın ve "Okuma Joystick'i" bölümüne geri dönün.

Adım 4: Joystick'i Programlama

Oyuncu olan küçük noktayı hareket ettirmek için elbette bir joystick'e ihtiyacımız var. ve joystick'in oynatıcıyı gerçekten hareket ettirmesine izin vermek için onu Arduino IDE'de kodlamamız gerekiyor. Kroki menüsü>Kütüphaneleri Dahil Et>kütüphaneleri yönet seçeneğine giderek bulabileceğiniz LedControl kitaplığını eklemeniz ve LedControl'ü aramanız gerekir. İşte joystick kodunun nasıl göründüğü.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc=LedControl(DataIn, CLK, DIN, 4); //Dört modül için nesne oluşturur int delaytime = 50; //oyunun çalıştığı hız int joystick_RtLt, joystick_UpDn; int oyuncular_x = 0; //oyuncular yatay konum 0'dan 31'e int oyuncular_y = 3; //oyuncular 0'dan 7'ye dikey pozisyon int satır, sütun, modül; geçersiz kurulum() { initialize_modules(); //dört led modülünü açın ve ayarlayın } void loop() { move_player(); //oyuncunun delay(delaytime) hareket edip etmediğini kontrol ederek döngüyü başlat; } void initialize_modules(){ lc.shutdown(0, false); // modül 0'ı başlatır lc.setIntensity(0, 1); lc.shutdown(1, yanlış); // modül 1'i başlatır lc.setIntensity(1, 1); lc.shutdown(2, yanlış); // modül 2'yi başlatır lc.setIntensity(2, 1); lc.shutdown(3, yanlış); // modül 3'ü başlatır lc.setIntensity(3, 1); lc.clearDisplay(0); // modül 0'ı temizler } void move_player(){ modül = oyuncular_x/8; //oynatıcının hangi modülde olduğunu tanımlar sütun =player_x%8; //oyuncunun modül satırında bulunduğu sütunu tanımlar satır = oyuncular_y; lc.setLed(modül, satır, sütun, yanlış); //oynatıcının mevcut konumunda led'i kapat joystick_RtLt = analogRead(A0)/204 - 2; //X-joystick'i okuyun ve 2'den -2'ye kadar olan harita aralığını if(joystick_RtLt > 0) //joystick sağdayken player_x++; //sağa git yoksa if(joystick_RtLt 0) // eğer joystick soldaysa ve başlangıçta değilse player_x--; // sola hareket joystick_UpDn = analogRead(A1)/204 - 2; //Y-joystick'i ve harita aralığını 2'den -2'ye kadar okuyun if(joystick_UpDn 0) //joystick çalışmıyorsa ve oyuncu altta değilse player_y--; //else if(joystick_UpDn > 0 &&player_y < 7) aşağı in //yukarı çık modülü = oyuncular_x/8; //modülü oyunculara ayarla yeni pozisyon sütunu =player_x%8; // sütunu oyunculara ayarla yeni pozisyon satır = oyuncular_y; // sırayı oyunculara ayarla yeni pozisyon lc.setLed(module, row, column, true); // oyuncunun yeni konumunda led'i aç }

Artık joystick'i eklediğinize göre, ilk engel üzerinde çalışalım!

Adım 5: Birinci Seviye

Pekala, şimdi programın ana kısmına, engellere girme zamanı! Bunu gerçekten "Dünyanın En Zor Oyunu" yapan engellerdir. Yani oyunu gerçekten oynamak istiyorsanız, bunu kodunuza eklemeniz gerekir:

bayt engeli[SEVİYELER][SAHNELER][SÜTÜNLER][SIRALAR] = { //üç seviye, 8 sahne, 8 sütun, 8 satır

{{{1, 1, 1, 1, 1, 1, 0, 0}, //birinci seviye, ilk sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //birinci seviye, ikinci sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //birinci seviye, üçüncü sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //ilk seviye, dördüncü sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //birinci seviye, beşinci sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //birinci seviye, altıncı sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, //birinci seviye, yedinci sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, //birinci seviye, sekizinci sahne {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, geçersiz kurulum() { initialize_modules(); // dört led modülünün hepsini açın ve ayarlayın start_level(0); boşluk döngüsü() { move_player(); //oyuncunun hareket edip etmediğini kontrol ederek döngüyü başlat if (çarpışma()){ //çarpışma seviyesini kontrol et = 0; //çarpışma doğruysa, seviyeyi sıfırla start_level(level); //oyunu yeniden başlat }else if(delay_count ==block_delay){ //çarpışma yoksa engeli diğer her gecikme hareket ettirin moveobstacle(); gecikme_sayısı = 0; }else delay_count++; gecikme (gecikme süresi); // oyunun hızına göre gecikme }

Ve bu ilk engel! İlk seviyeniz olarak bundan sıkılırsanız, her zaman baytları değiştirebilirsiniz, sadece sekiz farklı sahneye sahip olmanız gerektiğini unutmayın! Bir sonraki adıma, çarpışma algılamaya geçelim!

Adım 6: Çarpışma Algılama

Bu adım oyunun bir diğer önemli parçasıdır, o olmadan çok fazla zorluk olmazdı! Herhangi bir sonuç olmadan engellerin üzerinden yolunuzu örebilirsiniz! bu pek eğlenceli olmaz değil mi? bu yüzden programın bu bölümünü ekleyerek oyunu daha zorlu (ve çok daha eğlenceli!) yapalım:

boşluk döngüsü () {

Oyuncuyu taşı(); //oyuncunun hareket edip etmediğini kontrol ederek döngüyü başlat if (çarpışma()){ //çarpışma seviyesini kontrol et = 0; //çarpışma doğruysa, seviyeyi sıfırla start_level(level); //oyunu yeniden başlat }else if(delay_count ==block_delay){ //çarpışma yoksa engeli diğer her gecikme hareket ettirin moveobstacle(); gecikme_sayısı = 0; }else delay_count++; gecikme (gecikme süresi); //oyun hızına göre gecikme } int çarpışma(){ //oyuncunun sahne modülünde bir engele çarpıp çarpmadığını kontrol edin =player_x/8; sütun = oyuncular_x%8; satır = oyuncular_y; if(module > 0) if(engel[seviye][sahne][sütun][satır] == 1) //eğer oyuncunun konumu engel dönüşü ile aynıysa(1); //çarpışma algılandı return true return(0); //çarpışma yok false }

Ve işte gidiyorsun! şimdi oyunun tadını çok daha fazla çıkarabilirsiniz! Şimdi size oyunun son iki seviyesini nasıl programlayacağınızı göstereceğim! Bu talimatla neredeyse bitirdiniz ve eminim denemeye hazırsınız!

7. Adım: Son İki Seviye

Eğitilebilirliğin sonuna geliyorduk, bu son iki seviye, bu oyunu bitirmek için ihtiyacınız olan tek şey. O zaman kendiniz deneyebilirsiniz! işte kod:

bayt engeli[SEVİYELER][SAHNELER][SÜTÜNLER][SIRALAR] = { //ikinci ve üçüncü seviye, 8 sahne, 8 sütun, 8 satır

{{{1, 0, 0, 0, 0, 0, 0, 1}, //ikinci seviye, ilk sahne {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, //ikinci seviye, ikinci sahne {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, //ikinci seviye, üçüncü sahne {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, //ikinci seviye dördüncü sahne {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, //ikinci düzey, fif sahne {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // ikinci seviye, altıncı sahne {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, //ikinci düzey, yedinci sahne {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, //ikinci düzey sekizinci sahne {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, //üçüncü seviye, ilk sahne {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, //üçüncü seviye, ikinci sahne {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //üçüncü seviye, üçüncü sahne {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, //üçüncü seviye, dördüncü sahne {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //üçüncü seviye, beşinci sahne {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, //üçüncü seviye, altıncı sahne {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //üçüncü seviye, yedinci sahne {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, //üçüncü seviye, sekizinci sahne { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}} };

Ve bu kadar! Hepiniz Dünyanın En Zor Oyununu tamamlamaya hazırsınız. Ayrıca tam Arduino kodu aşağıda eklenmiştir.

Önerilen: