İçindekiler:

Makecode Arcade ile GameGo'da Sonsuz Seviyeli Platform: 5 Adım (Resimlerle)
Makecode Arcade ile GameGo'da Sonsuz Seviyeli Platform: 5 Adım (Resimlerle)

Video: Makecode Arcade ile GameGo'da Sonsuz Seviyeli Platform: 5 Adım (Resimlerle)

Video: Makecode Arcade ile GameGo'da Sonsuz Seviyeli Platform: 5 Adım (Resimlerle)
Video: (Multiplayer)Fighting on GameGo With Makecode Arcade 2024, Kasım
Anonim
Image
Image

GameGo, TinkerGen STEM eğitimi tarafından geliştirilen, Microsoft Makecode uyumlu retro oyun taşınabilir konsoludur. STM32F401RET6 ARM Cortex M4 çipine dayanmaktadır ve STEM eğitimcileri veya sadece retro video oyunları yaratmayı sevenler için yapılmıştır. Bu öğreticiyi takip edebilir ve oyunu Makecode Arcade simülatöründe deneyebilir ve ardından GameGo'da çalıştırabilirsiniz.

Bu yazıda rastgele oluşturulmuş sonsuz seviyeli bir platform oyunu yapacağız. Bir platform oyununda, oyuncu kontrollü karakter engellerden kaçınırken asılı platformlar arasında atlamalı ve tırmanmalıdır. Ortamlar genellikle, geçilmesi gereken değişken yükseklikteki engebeli araziye sahiptir. Oyuncu, karakterinin ölümüne düşmesine veya gerekli atlamaları kaçırmasına izin vermemek için genellikle atlamaların yüksekliği ve mesafesi üzerinde bir miktar kontrole sahiptir. Tüm bu temel öğeleri uygulayacağız ve ayrıca sonuncunun sonuna ulaştığımızda yeni seviyeler oluşturacak özel bir işlev ekleyeceğiz. Hadi başlayalım!

Gereçler

GameGo

Adım 1: Kahraman

Kahraman
Kahraman

İlk adım olarak alt benliğimizi yaratacağız. Çizim becerilerim oldukça kötü, bu yüzden Galeri'den bir tane kullanmaya karar verdim;) Bir önceki yaptığımız oyunun aksine, bu platform oyununda oynanabilir karakterimiz sadece sola ve sağa hareket edebiliyor ve zıplayabiliyor. Yani ana karakter için iki farklı sprite kullanmak yerine, bu sefer bir tane yeterli - yön değiştirdiğimizde sadece sprite'ın görüntüsünü çevirebiliriz.

Yapılacak ilk şey, arka plan ve döşeme haritası eklemektir. 32x8 uzunluğunda karo haritayı seçtim - ilk seviye için ekran görüntüsü 2'deki gibi manuel olarak çizeceğiz. Ardından mySprite set ile oynanabilir karakterimizi sprite of type Player bloğuna ekliyoruz ve karo 0-5'in en üstüne yerleştiriyoruz.. Ayrıca kamerayı oynanabilir karakterle hareket edecek ve sol ve sağ hareketini kontrol edecek şekilde ayarladık - karakterimiz harita üzerinde y-yönünde serbestçe yüzememesi gerektiğinden hareketin vy hızını 0'a ayarlayacağız. Biri sol düğme için, biri sağ için olmak üzere iki adet … düğmesine basılmış blok ekleyin. Sol tuşa basıldığında, tuşa basmadan önce yönümüzün "sol" olup olmadığını kontrol ederiz. Öyle olsaydı, soldan devam ederiz. Değilse, karakterimizin hareketli görüntüsünü çevirmemiz gerekir. Doğru hareket için benzer bir mantık.

Şimdilik her şey yolunda, tek sorun kahramanımızın hiçbir engeli aşamamış gibi görünmesi. Bu yüzden atlama eklememiz gerekiyor. Yukarı tuşuna basmak için kontrolleri izleyeceğiz ve tespit edildiğinde, değişken zıplamayı 1'e ayarlayacağız, zıplama hareketlerinin başladığı zamanı not edeceğiz ve karakterin hareketli grafiğini vy'yi -200'e ayarlayacağız (yukarı çıkıyor). Ardından belirli bir süre sonra hızı 200'e ayarlayacağız(aşağı iniyor), böylece kahramanımız bir roket gibi gökyüzüne ateş etmesin.

Sanırım şimdi mücadeleye layık bir kahraman yarattık! Peki, meydan okuma nerede?

2. Adım: Düşmanlar

Düşmanlar
Düşmanlar

Düşmanların spritelarını saklamak için bir dizi yapısı kullanacağız. Düşman türleri için küçük bir kısayol alacağız ve yarasaları kullanacağız:) bir koronavirüs referansı değil, sadece yarasalar uçabilir, bu yüzden oynanabilir karakterimizde yaptığımız gibi onlar için yerçekimini "simüle etmemize" gerek kalmayacak. Yeni oluşturulan yarasaları rastgele yumurtlama döşemesine (küçük beyaz bir işaretle işaretlenmiştir) yerleştirmek ve vx hızlarını -10'a (yavaşça sağa doğru sürükleniyor) ayarlamak için oluşturulan tür Düşman bloğunda kullanın. Daha sonra oyun güncellemesinde her 2000 ms'lik blokta bir düşman_listesi öğesinin her bir öğesini yineliyoruz ve yönlerini rastgele değiştirirken, gerekirse yarasaların spritelarını da çeviririz (hareket yönündeki değişikliği yansıtmak için). Son olarak, Player'ın daha önce vurulup vurulmadığını basit bir kontrol yaptığımız diğerSprite of tür Enemy bloğuyla Player çakışmalarını ekleriz. Değilse, bir can düşersek, isabet bayrağını 1(vuruldu) olarak ayarlayın ve zamanlayıcıyı başlatın. Son vuruş süresinin üzerinden 500 ms geçtikten sonra, vuruşun bayrağını tekrar 0'a değiştiririz. Bunu, oyuncunun bir düşmanla çarpıştıktan sonra çok fazla değerli canını kaybetmemesi için yaparız.

Nasıl yaptığımızı kontrol edelim. Pekala, etrafta uçan ve oyuncumuzu ısıran tüm yarasalarla sahne kesinlikle daha canlı görünüyor. Şimdi kahramanca işlerimizi yapmak için bir silaha ihtiyacımız var!

3. Adım: Silah

Silah
Silah

Silah için, iki sincap kardeş hakkında eski bir Nintendo oyunundan ilham alıyordum:) Düşmanları eklerken yaptığımız gibi, kasa spritelarını da seviyeye ekleyelim. Ayrıca has_crate değişkenini -1 olarak başlatıyoruz, bu da karakterimizin sandık taşımadığını gösteriyor. On tür Sprite of tür Player'da otherSprite of tür Gıda bloğu ile çakışıyor, zaten bir sandık tutup tutmadığımızı kontrol ediyoruz ve yoksa has_crate değişkenini listedeki sandık hareketli grafiğinin dizinine ayarladık. Daha sonra oyun güncelleme bloğunda o sprite'ı oyuncunun sprite'ı ile birlikte hareket ettiririz ve eğer A düğmesine basılırsa, kasanın vx hızını 1200 veya -1200'e değiştiririz (karakterin hareket yönüne bağlı olarak). Ayrıca has_crate değişkenini tekrar -1 olarak ayarladık ve az önce havaya fırlatılan sandığın sprite tipini Projectile olarak değiştirdik.

Son olarak, kasaların fırlatıldıklarında düşmanları gerçekten yok etmelerine ihtiyacımız var (ancak düşmanlar rastgele bir kasaya rastladıklarında değil! bu yüzden sandıkları Yiyecek yazmaları için atadık ve yalnızca fırlatıldığında Mermi olarak değiştirdik) ve vururken kendi kendini yok etmelerine ihtiyacımız var. duvar. Bunun için otherSprite of tür Enemy bloğu ile başka bir tür sprite üzerinde başka bir Mermi çakışması kullanıyoruz - bu durumda her iki sprite'ı da yok ediyoruz ve puanı bir artırıyoruz. Mermi duvara çarparsa, onun perisini yok ederiz.

Neredeyse bitti! Oyun şu anda oynanabilir, ancak neredeyse hiç zorluk yok - sadece bir seviye ve bunda oldukça basit. El ile daha fazla seviye yapabilir veya bu seviyeleri bizim için otomatik olarak oluşturacak bir algoritma yazabiliriz - elbette insan yapımı seviyeler kadar güzel olmayacaklar.

4. Adım: Sonsuz Maceralar

Sonsuz Maceralar
Sonsuz Maceralar
Sonsuz Maceralar
Sonsuz Maceralar
Sonsuz Maceralar
Sonsuz Maceralar

Rastgele seviye oluşturma işlevi ilk başta biraz korkutucu görünebilir, ancak oynanabilir karakter için yeni bir seviyenin geçerli olacağı şekilde, algoritmik olarak yeni bir seviye oluşturmak için gerçekten basit bir dizi adımdır. İlk olarak, karakterimizi bu yeni seviyeye getirmeye özen gösteriyoruz - konumdaki sprite türünde Player örtüşmeleri… kullanarak - yeni bir seviyenin tetikleyicisi olarak portal kapı döşemesini kullanıyoruz. create_level işlevinde satır, sütun ve şans değişkenlerini başlatırız. Ayrıca, öncekiyle aynı boyutta, ancak boş yeni bir döşeme haritası oluşturuyoruz. Yine de küçük bir uyarı - set … tilemap satırında … col … bloğunu kullanmak için, karo haritasının bu özel karolara sahip olması gerekir --- bu biraz sezgiseldir ve belki de Makecode'da bir hatadır. Yani, yapmanız gereken bir tilemap oluşturmak, kullanmak istediğiniz tüm kiremit türlerini rastgele nesile koymak VE sonra silmek.

Üstüne ilk karoyu (0x6) ve oynatıcıyı manuel olarak koyuyoruz. Sonra sonraki adımı 30 kez tekrarlarız - sonraki adım, bir sonraki sütun döşemesinin 1) öncekiyle aynı seviye 2) bir yukarı veya 3) bir aşağı olacağına karar veren basit Doğru-Yanlış kontrolleri dizisidir. Ayrıca bir sonraki karonun lav karosu olma ihtimali çok düşük - bunlardan çok fazla istemiyoruz! Oluşturulan her karodan sonra, altındaki boşluğu lavla dolduruyoruz - sadece güzellik uğruna. Son bir adım olarak düşmanları ve sandıkları ekliyoruz ve onları rastgele ortaya çıkan karoların üzerine yerleştiriyoruz.

Adım 5: Macera Başlıyor

Macera Başlıyor
Macera Başlıyor

İşte! Platform oyunumuzu bitirdik ve kahramanımız sonsuz bir maceraya atılabilir, yarasaları yenebilir ve kasaları yok edebilir. sorun yaşıyorsanız kodu GitHub depomuzdan indirebilirsiniz.

Bu sadece bir taslak ve kesinlikle yapılabilecek bazı iyileştirmeler var, örneğin farklı türde düşmanlar, bonuslar, daha iyi seviye üretimi vb. Oyunun geliştirilmiş bir versiyonunu yaparsanız, aşağıdaki yorumlarda paylaşın! Yapımcılar ve STEM eğitimcileri için GameGo 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, MARK(Make A Robot Kit) için bir Kickstarter kampanyası oluşturdu; kodlama, robotik, yapay zeka öğretmek için bir robot kiti!

Önerilen: