İçindekiler:

Arduino Uzay Kayaları Oyunu: 3 Adım
Arduino Uzay Kayaları Oyunu: 3 Adım

Video: Arduino Uzay Kayaları Oyunu: 3 Adım

Video: Arduino Uzay Kayaları Oyunu: 3 Adım
Video: Elimi kestim. Demir kanaması deneyi #kimya #shorts 2024, Kasım
Anonim
Arduino Uzay Kayaları Oyunu
Arduino Uzay Kayaları Oyunu

Bilgisayarda, telefonda, oyun konsolunda veya bağımsız bir kutuda oynansınlar, birçok video oyunu bir engelden kaçınma unsuru içerir. Elbette, jeton toplamak veya bir labirentte yolunuzu bulmak için verilen puanlar olabilir, ancak oyunda muhtemelen tek amacı bunu yapmanızı engellemek olan bir şey olduğundan emin olun. İlk video oyunu Pong'du, ancak ondan sonra en popüler oyunlar “Asteroids” veya “Pac-Man” gibi oyunlardı. Daha yeni bir varyasyon, basit ama bağımlılık yapan “Flappy Birds” oyunu olacaktır.

Geçenlerde birinin ortak bir 1602 LCD'de oynatılan "Flappy Bird"ün iki seviyeli basit bir versiyonunu yaptığını gördüm. Bunun torunların seveceği bir şey olacağını düşündüm, bu yüzden kendi varyasyonumu sıfırdan yapmaya karar verdim. 1602 versiyonunda sadece iki seviye var, bu yüzden oyunun zorluğunu biraz arttırmak için 2004 LCD (20x4) kullanmaya karar verdim. Ayrıca oyuncunun bir "gemiyi" bir "uzay kayaları" labirentinde yönlendirmesini sağlayarak daha çok "Asteroidler" gibi yapmayı seçtim. Oyunu oluşturmakla ilgilenmeseniz bile, kendi projelerinizden birinde kullanabileceğiniz yazılımın bazı unsurları olabilir.

Adım 1: Donanım

Donanım
Donanım
Donanım
Donanım
Donanım
Donanım

Donanım, hemen hemen her Arduino sürümünü temel alabilir. Prototiplemeyi bir Nano kullanarak yaptım ve ardından kodu bir ATMega328 çipine yazdım. Bu, Nano'da kullanılan çipin aynısıdır, ancak bunu tek başına kullanmak daha kompakt bir yapı ve daha az güç tüketimi sağlar. Gördüğünüz gibi devreyi LCD modülüne binen küçük bir devre tahtası üzerine kurdum. Farklı olan diğer bir özellik ise Nano'nun harici bir kristal kullanarak 16 MHz'de çalışması ama ben ATMega328 yongası için yerleşik 8 MHz osilatörü kullanmayı seçtim. Bu, parça ve güç tasarrufu sağlar.

2004 LCD, Arduino'ya 1602 LCD ile aynı şekilde arayüz oluşturur. İlginç bir fark, görüntüleme konumlarının adreslenmesindedir. Açıkçası bir fark var çünkü iki yerine dört satır var ama 2004'te üçüncü satır birinci satırın uzantısı ve dördüncü satır ikinci satırın uzantısı. Başka bir deyişle, LCD'ye bir dizi karakter gönderen bir test programınız varsa, 21. karakter üçüncü satırın başında görünür ve 41. karakter ilk satırın başına geri döner. Labirentin uzunluğunu etkili bir şekilde ikiye katlamak için yazılımda bu özelliği kullanıyorum.

Sürümümü pille çalıştırmaya karar verdim, bu yüzden ortak bir 18650 Li-ion, 3,6 volt pil kullandım. Bu, USB şarjına izin vermek için küçük bir pano ve LCD ve ATMega yongası için pil voltajını 5 volta yükseltmek için başka bir küçük pano eklememi gerektirdi. Resimler kullandığım modülleri gösteriyor ancak her iki işlevi de yapan hepsi bir arada modüller de var.

2. Adım: Yazılım

Yazılım, hem Nano hem de ATMega328 yongası için aynıdır. Tek fark programlama yöntemindedir. 1602 LCD yazılımının kendi barebone versiyonunu kullanıyorum ve bu projedeki LCD yazılımı da buna dayanıyor. 2004 ekranının ekstra satırlarını ele almak için yetenekler eklemem gerekiyordu ve ayrıca ekranı kaydırmak için rutinler ekledim. Ekran kayması, “gemiyi” geçen “kayaların” hareket efektini sağlar.

Daha önce de belirtildiği gibi, 1. ve 3. satırlar dairesel bir kuyruk oluşturur ve 2. ve 4. satırlar da aynısını yapar. Bu, 20 vardiyadan sonra 1. ve 3. satırların ve 2. ve 4. satırların yer değiştirdiği anlamına gelir. 40 vardiyadan sonra hatlar orijinal konumlarına geri döner. Bu davranış nedeniyle, satırlar değiştiğinde orijinal 20 karakterlik labirent tamamen farklı hale gelir. Bir labirent oluşturmaya çalıştığımda bu, hayatı ilginç kıldı. Sonunda, yazılımı sürekli değiştirmek zorunda kalmadan yolu çizebilmek için bir Excel elektronik tablosu açtım. Burada sağlanan yazılım, labirentin iki versiyonuna sahiptir (biri yorumlanmıştır), böylece hangisini istediğinizi seçebilir veya kendinizinkini oluşturabilirsiniz.

Başlangıçta bunun genç torunların oynayabileceği kadar basit olmasını istedim, ama aynı zamanda onlar (veya bir başkası) çok iyi olursa ekstra bir meydan okuma olmasını da istedim. Oyun, 1 saniyeye ayarlanmış vardiya hızı ile başlar. Dahili tik hızı 50ms'dir, yani yukarı/aşağı düğmelerine basılabilecek 20 aralık vardır. Gerçekte, basılan bir düğme 2 tik tüketir, çünkü basmayı algılamak için 50 ms'lik bir aralık kullanılır ve serbest bırakılmasını beklemek için başka bir 50 ms'lik aralık kullanılır. Varsayılan labirentte, bir sonraki vardiyadan önce gereken maksimum pres sayısı üçtür. Oyun zorluğunu artırmanın basit yolu, vardiyalar arasındaki süreyi kısaltmak, böylece puan arttıkça birkaç satır kod yapmaktır. Vites değiştirme hızı, minimum hız 500 ms ile sınırlı olmak üzere her 20 vardiyada 50 ms hızlanacak şekilde ayarlanmıştır. Bu parametreleri değiştirmek kolaydır.

Vardiya oranını değiştirmek dışında, yazılımdaki birincil mantık “gemi”yi hareket ettirmek ve “gemi”nin bir “kaya” ile çarpışıp çarpışmadığını belirlemektir. Bu işlevler, tanımlanmış "rock/space" dizisinden ve ayrıca ekrandaki bellek konumlarını tanımlayan diziden yararlanır. Kaydırma sayısı, LCD'nin (0-19) satır uzunluğuna karşılık gelir ve bu dizilerde bir indeks olarak kullanılır. Mantık, hatların her 20 vardiyada bir yer değiştirmesi gerçeğiyle biraz karmaşıktır. Dört hattan herhangi biri üzerinde olabilecek “gemi”nin konumunu belirlemek için benzer bir mantık kullanılır.

Her oyun için puan basitçe meydana gelen vardiyaların sayısıdır ve yüksek puan mikrodenetleyici dahili EEROM'a kaydedilir. EEPROM kütüphanesi bu belleğe okuma ve yazma işlemlerini yapmak için kullanılır. Mevcut rutinler, tek baytlık okuma/yazma ve kayan nokta değerlerinin okunması/yazılmasına izin verir. Yüksek bir puanın kaydedildiğini belirtmek için ilk EEROM konumunda 0xA5 değeri saklanır. Açılışta bu değer mevcutsa, yüksek puan için kayan nokta değeri okunur ve görüntülenir. 0xA5 değeri mevcut değilse, yüksek puanı 1 değerine başlatmak için bir rutin çağrılır. Yüksek puanın sıfırlanması isteniyorsa, aynı rutin çağrılır. Yukarı/aşağı düğmelerinden biri basılı tutularak ve ardından anlık olarak sıfırlama düğmesine basılarak yüksek puan 1 değerine geri ayarlanır.

3. Adım: Oyunu Oynamak

Oyun oynamak
Oyun oynamak
Oyun oynamak
Oyun oynamak

Güç uygulandığında, mevcut yüksek puan görüntülenir. Yüksek puan görüntülendikten sonra, “kayalar” labirenti ve “gemi” görüntülenir ve oyun birkaç saniye sonra başlar. "Gemi" bir "kayaya" çarptığında, oyunun skorunu göstermeden önce "CRASH AND BURN" mesajı birkaç kez yanıp söner. Yeni bir yüksek puan yapılırsa, o mesaj da görüntülenir. Reset butonuna basılarak yeni bir oyun başlatılır.

Önerilen: