İçindekiler:
- Gereçler
- Adım 1: Ana Döngü
- 2. Adım: Oyun çubuğu
- 3. Adım: Arabelleği Görüntüle
- Adım 4: İstilacılar, Mermiler ve Oyuncu
- Adım 5: Kendiniz Yapın
Video: Micropython'daki Space Invaders on Micro:bit: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Önceki yazılarımızda TinkerGen eğitimi tarafından geliştirilen taşınabilir bir retro oyun konsolu olan GameGo'da oyun yapımını araştırmıştık. Yaptığımız oyunlar eski Nintendo oyunlarını andırıyordu. Bugünün makalesinde, atari oyunlarının altın çağına bir adım geri atacağız. Space Invaders oyununu Micro:bit mikrodenetleyici üzerinde Micropython'da yeniden oluşturacağız - ve bir bükülme olarak, oyunu daha rahat oynamamızı sağlayan BitPlayer Micro:bit uzantısını da kullanacağız.
Bu eğitim, daha önce grafik programlama eğitimleri için kullandığımız geleneksel aşamalı sıralama yerine Micropython'da oyunu kodlamakla ilgili olduğundan, kod bloğunu blok blok gözden geçireceğiz - önemli işlevleri, sınıfları ve ana döngü. Kodun tamamını bu projenin GitHub deposundan indirebilirsiniz. Kemerlerinizi bağlayın ve başlayalım!
Gereçler
TinkerGen BitPlayer
BBC Mikro: bit
Adım 1: Ana Döngü
Bu derste "yöntem" kelimesini oldukça sık kullanacağım. Python'daki bir yöntem, nesne/sınıflarla ilişkilendirilmesi dışında bir işleve biraz benzer. Bu nedenle, sadeleştirme için "sınıf içinde bir işlev" olarak okuyabilirsiniz. Yöntemler hakkında daha fazla bilgiyi buradan okuyabilirsiniz.
ile ana döngüye giriyoruz.
game_over değilken:
şart. İçeride, seviyeler sözlüğünden istilacıların sayısını, ortaya çıkma şanslarını ve bir sonraki seviyeye geçmek için gereken sayıları alıyoruz. Daha sonra, JoyStick sınıf örneğinin Listen_Dir örnek yöntemleriyle sol-sağ hareketi kontrol ederiz. Koşullardan biri True olarak değerlendirilirse, oynanabilir karakterimizin x değerini artırır/azaltırız. Bunu iki if koşuluyla [-2, 2] ile sınırlıyoruz. Ardından DisplayBuffer sınıfının bir örneğini başlatıyoruz ve "kalkan" veya "ateş mermisi" düğmesine basıldığını kontrol ediyoruz. Nesneleri daha sonra işlemek üzere ayarlamak için DisplayBuffer.set() yöntemini kullanırız. Kalkanı oluşturmak için doğrudan DisplayBuffer.set() kullanıyoruz, ancak mermiler ve istilacılar için onları ilgili listelerine ekliyoruz ve daha sonra DispBuffer.render() ile oluşturmak için aşağıdaki kodla birer birer for döngüsünde set() yapıyoruz:
madde işaretleri içinde b için: vaders içinde v için b.render(dispBuf): v.render(dispBuf)
Tüm istilacılar, mermiler ve kalkanlar, her ana döngü yinelemesinde bir kez görüntülenir.
dispBuf.render()
Ana döngü bitmeden önce işgalcilerin mermilerinden herhangi birinin ekranın sonuna ulaşıp ulaşmadığını kontrol ediyoruz ve varsa onları ilgili listelerinden siliyoruz.
2. Adım: Oyun çubuğu
BitPlayer'ı tutmak ve kullanmak kolaydır, Gameboy veya PSP denetleyicileri gibi 2 eksenli bir joystick ile ayrıca L, R, A, B, C ve D olarak etiketlenmiş 6 programlanabilir düğme daha içerir. Etkileyici ve etkileşimli bir deneyim için BitPlayer kendisinde bir zil, bir titreşim motoru ve bir OLED ekran gibi ek çevre birimlerini bağlamak için bir Grove I2C bağlantı noktası bulunur.
Bu oyun için joystick'in yalnızca sol-sağ rocker'ını kullanıyoruz, örneğin tüm BitPlayer düğmelerinin kullanımıyla ilgili olarak bu projenin GitHub deposundaki joystick_example.py dosyasına göz atabilirsiniz. JoyStick sınıfının örneğini oluştururken, X ekseni varsayılan okumasını kontrol ederiz ve bu değeri self. Read_X içinde saklarız. Ardından Listen_Dir işlevinde, bu varsayılan değerden sapmanın duyarlılık değişkeninden daha yüksek olup olmadığını kontrol ederiz (JoyStick'in çok hassas olduğunu düşünüyorsanız, kendiniz ayarlamayı deneyin) ve algılanan yöne göre True of False değerini döndürürüz.
Bunun nasıl çalıştığına dair somut bir örneğe bakalım:
Varsayılan X ekseni okumamızın 0 olduğunu varsayalım. Ardından Joystick'i sağa hareket ettirirsek:
New_X = JoyStick_X.read_analog() #New_X=200
Sağ = New_X - self. Read_X #Sağ = 200 Sol = self. Read_X - New_X #Sol = -200
Sonra yönü kontrol ettiğimizde:
Precision = 150if Right > Precision: #200 > 150 True Get_Rocker = DIR['R'] elif Left > Precision: #-200 > 150 False Get_Rocker = DIR['L'] else: Get_Rocker = DIR['NONE'] ise Dir == Get_Rocker: True döndür, yoksa False döndür
3. Adım: Arabelleği Görüntüle
DisplayBuf sınıfı, LED ekranın kontrolünden sorumludur. Set() ve render() olmak üzere iki yöntem kullanılarak yapılır. set() yöntemi, LED ekran piksellerine karşılık gelen değerleri değiştirir. Micro:bit LED ekranındaki piksellerin string veya liste olarak ifade edilebileceğini hatırlayabilirsiniz - "00000:00000:00000:00000:00000" boş bir ekrandır. "00000:00000:00000:00000:00100", alt sıranın ortasında loş ışıklı piksel bulunan bir ekrandır.
00000:
00000
:00000
:00000:
00100"
Bu gösterimin işlenmesi daha kolay olabilir:)
Yani, ana döngü sırasında yaptığımız şey, ekranda görüntülenmesi gereken tüm nesnelerimizi ayarlamak için DisplayBuf'un set() yöntemini çağırmaktır. Daha sonra hepsini aynı anda ekranda göstermek için render() yöntemini kullanırız.
Adım 4: İstilacılar, Mermiler ve Oyuncu
Mermiler ve İstilacılar Mover sınıfına aittir. Mover sınıfı örnekleri, parlaklıklarının yanı sıra x, y konumlarına ve hızlarına sahiptir. Mover sınıfının iki örnek yöntemi vardır, set() ve move(). set() yöntemi, LED matrisinde daha sonra işlemek üzere kaydetmek üzere güncellenmiş koordinatlarla DisplayBuf set() yöntemini çağırır. move() yöntemi, örnek hızına göre örnek koordinatını günceller - bu daha sonra, seviyeler ilerledikçe istilacıların hızını değiştirmemiz gerektiğinde kullanışlı olur.
Bullet sınıfı ve Invader sınıfı Mover sınıfının alt sınıflarıdır. Burada kalıtım denen bir şey kullanıyoruz. super() işlevi, kodu tekrarlamaya gerek kalmadan alt sınıftaki üst sınıfın yöntemlerini çağırmamızı sağlar.
Adım 5: Kendiniz Yapın
Tebrikler! Klasik Space Invaders oyununu Micro:bit'te harika bir oyun donanımıyla yeniden yarattınız. Tabii ki, buradan oyun kodunu geliştirebilirsiniz - örneğin, şu an itibariyle oyun sadece bir seviyeye sahip - daha zorlu olanları ekleyebilirsiniz. Ayrıca, hatırlayabileceğiniz gibi, orijinal oyunda, oyuncunun önünde yüzen kayalar var, bunları da ekleyebilirsiniz.
Oyunun geliştirilmiş bir versiyonunu yaparsanız, aşağıdaki yorumlarda paylaşın! Üreticiler ve STEM eğitimcileri için BitPlayer ve diğer donanımlar hakkında daha fazla bilgi için https://tinkergen.com/ web sitemizi ziyaret edin ve bültenimize abone olun.
TinkerGen kısa süre önce MARK(Make A Robot Kit) için bir Kickstarter kampanyası oluşturdu; kodlama, robotik ve yapay zeka öğretmek için bir robot kiti!
hexkcd/micro-vaders'ın orijinal Micropython kodu, TinkerGen BitPlayer ile çalışacak şekilde değiştirildi.
Önerilen:
Space Invaders ile Lego Taşınabilir Oyun Konsolu: 4 Adım
Space Invaders ile Lego Taşınabilir Oyun Konsolu: Bir oyun geliştiricisi olmayı ve hareket halindeyken oynayabileceğiniz kendi oyun konsolunuzu oluşturmayı hiç düşündünüz mü? Tek ihtiyacınız olan biraz zaman, donanımLego bricksa Mini-Calliope (bu web sitesinde https://calliope.cc/en sipariş edilebilir) ve biraz beceri
Micro Bit'te Space Invaders Nasıl Yapılır: 4 Adım
Micro Bit'te Space Invaders Nasıl Yapılır: Yani ilk adım gemimizi oluşturmak. "Temel" ve bir "Başlangıçta" engellemek. Ardından "Değişkenler" ve "SHIP" ve "Değişkenler"den bir blok seçin. sekme t
Micro:Bit Robot & Joystick:Bit Controller, MicroPython ile Programlama: 11 Adım
Micro:Bit Robot & Joystick:Bit Controller, MicroPython ile Programlama: Yaz robotik kampımız Robocamp 2019 için, 10-13 yaş arasındaki gençler lehimleme, programlama ve BBC micro:bit tabanlı bir 'karınca ağırlığı robotu' oluşturmanın yanı sıra programlama yapıyor uzaktan kumanda olarak kullanmak için bir mikro:bit.Şu anda Robocamp'taysanız, kayak
My Oneplus One'daki Süper Getto Güç Düğmesi (Her Şeyde Çalışmalı): 3 Adım
Oneplus One'ımdaki Süper Getto Güç Düğmesi (Her Şeyde Çalışmalı): Sorun: Telefonumdaki tüm düğmeler bozuk. Arka kapağım kırıldığı ve hiçbir yerde kullanılmış bir OPO'nun fiyatını aşmayan bir yedek bulamadığım için bunları değiştirmek yalnızca geçici bir çözümdür, ancak neden yükseltme yapmadığımı düşündüm
C#'daki İlk Programınız: 9 Adım
C#'daki İlk Programınız: Bir mesaj kutusu açan temel bir program yapın ve ardından onu kendinize ait hale getirmek için değiştirmeye başlayın! Bir bilgisayara ihtiyacınız olacak - Microsoft Visual C# Express sürümü (Buna sahip değilseniz buraya gidin, buna sahip misiniz? ücretsiz! http://www.micros