İçindekiler:

Makecode Arcade ile GameGo'da Battle City Remake: 4 Adım (Resimlerle)
Makecode Arcade ile GameGo'da Battle City Remake: 4 Adım (Resimlerle)

Video: Makecode Arcade ile GameGo'da Battle City Remake: 4 Adım (Resimlerle)

Video: Makecode Arcade ile GameGo'da Battle City Remake: 4 Adım (Resimlerle)
Video: I Created My Own Mobile Game For $20 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 çipini temel alır ve STEM eğitimcileri veya sadece retro video oyunları yaratmayı seven insanlar 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 makalede, orijinal olarak 1985'te Namco tarafından Nintendo Entertainment System (NES) için üretilen ve yayınlanan klasik bir Battle City tank nişancı oyununu yeniden yaratma konusunda elimizden geleni yapacağız. Orijinal oyunda oyuncu bir tankı kontrol eder ve düşman tanklarını yok etmek için mermiler atar. Düşman tankları, oyuncunun üssünün yanı sıra oyuncunun tankını da yok etmeye çalışır. GameGo ile blok programlama uygulamalarına daha iyi uyum sağlamak için oyunda bazı değişiklikler yapacağız, ancak yeniden yapımımız orijinal oyuna çok fazla benzerliği koruyacak. Hadi başlayalım!

Gereçler

GameGo

Adım 1: Alter-egomuz - Sarı Tank

Alter-egomuz - Sarı Tank
Alter-egomuz - Sarı Tank

arcade.makecode.com/ adresinde Makecode Arcade'i açın ve yeni projeye tıklayın. İkinci benliğimizi sarı tank yapmaya başlayacağız. MySprite'ı hareketli oyuncu bloğuna ayarla'yı seçin ve başlangıç hareketli grafiğimiz olarak yukarı bakan sarı bir tank çizin, o bloğu başlangıç bloğunun içine koyun. Düğmeler bloğu ile hareket mySprite ekleyin. Artık simülasyonda butonlarla hareket ettirebileceğimiz bir tankımız var! Harika, ama aşağı veya yana doğru hareket ettiğimizde bile her zaman aynı yöne bakıyor…

Bunu düzeltmek için, her yön düğmesi için bir tane olmak üzere dört blok daha ekleyelim. Yön adında yeni bir değişken oluşturun - tankımızın hareket yönünü buna kaydedeceğiz, 100 aşağı, -100 yukarı, Sağ için 200 ve sol için -200. Neden bu sayılar? Tankımızın ateşleyeceği mermileri eklediğimizde daha sonra göreceksiniz. Bu blokların her dördünün içindeki mantık çok basittir - yeni yönün (düğmeye basıldığında) önceki yönle aynı olup olmadığını kontrol ederiz. Eğer öyleyse, temelde herhangi bir değişiklik yapmıyoruz. Değilse, tankın hareketli grafiğini değiştiririz ve aşağı ve sol yönde olması durumunda, ek hareketli grafiklerin çizilmesini önlemek için hareketli grafiğin görüntüsünü çeviririz. Son olarak yönün başlangıç değerini -100'e (tank yukarı) atayalım, çünkü tankımız oyuna böyle başlıyor. Şimdi sarı tankı hareket ettirmeyi deneyin, sprite şimdi hareketin yönüne göre değişecektir! Harika, şimdi madde işaretleri ekleyelim.

MySprite'tan vx vy hızlarıyla mermileri mermiye ayarlanmış mermileri ateşleyeceğiz (o hareketli grafik için küçük gümüş kare çizin). Düğmenin içi Bir basılan blokta, sarı tankın sola/sağa yukarı/aşağı bakıp bakmadığını görmek için mutlak yön değerini kontrol etmemiz gerekiyor. Daha sonra yön değişkeninin hızıyla mermiyi ateşlemeye devam ediyoruz - bu yüzden yön değerleri için -100/100/-200/200 vardı.

Artık mermileri ateşleyebilen ve hareket edebilen sarı tankımız var. Sarı simüle edilmiş tanklar hissedebilseydi, bu boş boşlukta düşmanlar ve yapacak şeyler olmadan kesinlikle yalnız hissedeceklerdi. Öyleyse, bir sonraki adım için zaman geçirmesi için düşmanları ekleyelim.

2. Adım: Düşmanları Ortaya Çıkarın

Düşmanları Dışarı Çıkarın
Düşmanları Dışarı Çıkarın
Düşmanları Dışarı Çıkarın
Düşmanları Dışarı Çıkarın

Bu adıma bir dizi yeni değişken oluşturarak başlayacağız: iki dizi (biri düşman spritelarını tutmak için ve diğeri düşman yönlerini tutmak için), yumurtlamalar arasındaki süreyi depolamak için spawn zaman değişkeni, maksimum düşman sayısını depolamak için düşman sayısı aynı zamanda. Ayrıca başlangıç bloğuna ateş eden iki mermi (mermi ve düşman mermisi) ekleyeceğiz - bu daha sonra bir hatadan kaçınmamıza yardımcı olacak.

Sonra her … ms bloğunda oyun güncellemesi oluşturuyoruz, buraya spawn_time değişkeni ekleyin. Bloğun içindeki mantık basittir - savaş alanındaki toplam düşman sayısı izin verilen maksimum düşman sayısından azsa, düşman_sprite_listesine bir düşman ekleyin ve ekleyin Bu düşman için 200 (sağa gidiyor) yön.

Daha sonra, yaratılan tür Düşman bloğunda bazı grafik efektler ekliyoruz, onu rastgele boş bir döşemeye yerleştiriyoruz ve bu hareketli grafik için seçim_yön işlevini çağırıyoruz. Enemy'nin duvara çarptığı türden bir sprite'da, aynı işlevi, pick_direction olarak adlandırırız.

O fonksiyonda ne var? İşte burada işler biraz karmaşıklaşmaya başlıyor, o yüzden bekleyin. Yüzde 50 düşman tankının yükselme ve yüzde 50'sinin aşağı inme şansı var - hareketli grafiği buna göre değiştiriyoruz. Buradaki tek püf noktası, aynı zamanda düşman_yönleri_listesi'ndeki o belirli düşman tankına karşılık gelen değeri yeni yönüne değiştirmemiz gerektiğidir, böylece doğru yönde mermi atmasını sağlayabilirdik. Bunun için düşman karakterinin dizinini düşman_sprite_list'te buluyoruz ve o öğenin değerini düşman_yönleri listesinde değiştiriyoruz.

Son olarak atışları da ekleyelim. Her 500 ms'lik blokta bir başka oyun güncellemesi ekliyoruz ve düşman_sprite_list'e bir for öğesi koyuyoruz. %30 şansla bir düşman sprite düşman mermisini hareket yönünde ateşler.

Şimdi oyunu simulasyonda başlatırsak sarı tankımız ile düşman tanklarımızın aynı noktada belirip boş alana gittiğini görebiliriz. Biz ateş edebiliriz, onlar da bizim sarı tankımıza ateş edebilirler ama hiçbir şey olmaz. Hala anlamsız geliyor:) Son adım olarak süslemeleri ve oyun mekaniklerini ekleyelim.

3. Adım: Oyunun 42'si

Oyunun 42
Oyunun 42
Oyunun 42
Oyunun 42
Oyunun 42
Oyunun 42

Bu adıma, Bilgi sekmesinden can ve puanı ekleyerek ve ömrü 10'a ve puanı sıfıra ayarlayarak başlayacağız. Daha sonra blok set kiremit haritasını …'a ekliyoruz. Yukarıdaki ekran görüntüsünde gördüğünüz gibi görünmek için dosya haritasını çizin. Duvarları eklemeyi unutmayın!

Üstüne bir de tür sprite ekleyelim Mermi, otherSprite of tür Oyuncu ile çakışıyor - bu, düşmanın mermilerinin sarı tankımıza çarptığı andır. Bu mermilerin düşmanın mermileri olduğundan ve kendi mermilerimiz olmadığından emin olmamız gerekiyor, bu yüzden blok içinde koşul varsa ve Doğru olarak değerlendirilirse, yaşam sayısından bir tane çıkaracağız. Buna benzer olarak başka bir blokta da merminin otherSprite of type Enemy ile çakışması ile merminin sarı tanktan bir mermi olmasını sağlıyoruz ve bu durum True olarak değerlendirilirse otherSprite(düşman tankı) yok ediyor, listeden kaldırıyoruz. düşman_sprite_list ve puana bir tane ekleyin.

Son şey zafer ve yenilgi koşullarıdır - zafer için, sonsuza kadar blokta puanın daha yüksek veya 10'a eşit olup olmadığını kontrol edeceğiz. Eğer öyleyse, o zaman zafer ekranını gösteririz. Ve life zero bloğunda Game Over ekranını gösteriyoruz.

Şimdi oyunun beklendiği gibi çalışıp çalışmadığını görmek için simülasyonda deneyin. Ardından GameGo'ya yükleyin ve düşman tanklarını parçalamanın tadını çıkarın!

4. Adım: Sonsuz Oyun ve İyileştirmeler

Sonsuz Oyun ve İyileştirmeler
Sonsuz Oyun ve İyileştirmeler

GitHub depomuzda Makecode arcade için iki dosya indirebilirsiniz - biri bu talimatı izlerseniz alacağınızla tamamen aynıdır ve diğeri rastgele oluşturulmuş seviye ilerlemesi olan yükseltilmiş sürümdür. 10 seviyesi vardır, her biri art arda gelen her seviyede artan sayıda düşmanla rastgele oluşturulur.

Ve elbette, bunun üzerine sizin veya öğrencilerinizin oyuna ekleyebileceği daha çok şey var! Daha iyi müzik, kırılabilir duvarlar, farklı zafer koşulları ve daha fazlası var!

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 blogumuza abone olun.

TinkerGen, kodlama, robotik ve yapay zeka öğretmek için bir robot kiti olan MARK(Make A Robot Kit) için bir Kickstarter kampanyası başlattı!

Önerilen: