Mündəricat:

Makecode Arcade ilə GameGo -da Sonsuz Səviyyələri olan Platformer: 5 Addım (Şəkillərlə)
Makecode Arcade ilə GameGo -da Sonsuz Səviyyələri olan Platformer: 5 Addım (Şəkillərlə)

Video: Makecode Arcade ilə GameGo -da Sonsuz Səviyyələri olan Platformer: 5 Addım (Şəkillərlə)

Video: Makecode Arcade ilə GameGo -da Sonsuz Səviyyələri olan Platformer: 5 Addım (Şəkillərlə)
Video: Getting Started with Microsoft MakeCode Arcade 2024, Iyul
Anonim
Image
Image

GameGo, TinkerGen STEM təhsili tərəfindən hazırlanmış Microsoft Makecode uyğun retro oyun portativ konsoludur. STM32F401RET6 ARM Cortex M4 çipinə əsaslanır və STEM müəllimləri və ya retro video oyunları yaratmaqdan zövq alan insanlar üçün hazırlanmışdır. Bu təlimatı izləyib oyunu Makecode Arcade simulyatorunda sınayaraq GameGo -da işlədə bilərsiniz.

Bu yazıda, təsadüfi olaraq yaradılan sonsuz səviyyələri olan bir platformer oyunu hazırlayacağıq. Bir platformerdə, idarə olunan oyunçu maneələrdən qaçarkən dayandırılmış platformalar arasında tullanmalı və tırmanmalıdır. Ətraflar tez -tez keçilməli olan müxtəlif yüksəklikdəki qeyri -bərabər əraziyə malikdir. Oyunçu tez -tez xarakterlərinin ölümünə və ya zəruri atlamaları qaçırmamaq üçün atlamaların hündürlüyü və məsafəsinə nəzarət edir. Bütün bu əsas elementləri tətbiq edəcəyik və sonuncunun sonuna çatanda yeni səviyyələr yaradacaq xüsusi bir funksiya əlavə edəcəyik. Başlayaq!

Təchizat

GameGo

Addım 1: Qəhrəman

Qəhrəman
Qəhrəman

İlk addım olaraq alter-eqomuzu yaradacağıq. Rəsm bacarıqlarım olduqca pisdir, buna görə də Qalereyadan birini istifadə etmək qərarına gəldim;) Əvvəlki etdiyimiz oyundan fərqli olaraq, bu platformerdə oynanabilir xarakterimiz yalnız sola və sağa hərəkət edə bilər, həm də tullana bilər. Beləliklə, əsas xarakter üçün iki fərqli sprite sahib olmaq əvəzinə, bu dəfə biri kifayətdir - istiqaməti dəyişdiyimiz zaman sadəcə sprite obrazını çevirə bilərik.

Ediləcək ilk şey arxa plan və kafel xəritəsi əlavə etməkdir. 32x8 uzunluğunda kafel xəritəsini seçdim - birinci səviyyə üçün ekran görüntüsü 2 -də olduğu kimi əl ilə çəkəcəyik. Sonra mySprite dəsti ilə oynanıla bilən xarakterimizi bir növ Oyunçu blokuna əlavə edirik və kafelin üstünə 0-5 qoyuruq.. Kameranı da oynanılabilir bir xarakterlə hərəkət etməsini və sol və sağ hərəkətini idarə etməsini təyin etdik - vy hərəkət sürətini 0 olaraq təyin edəcəyik, çünki xarakterimiz xəritədə y istiqaməti boyunca sərbəst üzə bilməməlidir. Onlara iki düyməni əlavə edin: biri sol düymə, biri sağ üçün. Sol düymə basıldıqda, düyməni basmadan əvvəl istiqamətimizin "sola" olub olmadığını yoxlayırıq. Əgər belə olsaydı, sola getməyə davam edərdik. Bu olmasaydı, xarakterimizin sprite imicini çevirmək lazımdır. Sağ hərəkət üçün oxşar məntiq.

Hələlik hər şey yaxşıdır, yeganə problem qəhrəmanımızın heç bir maneəni aşa bilməyəcəyi görünür. Buna görə atlama əlavə etməliyik. Yuxarıdakı düyməni basmaq üçün nəzarətləri izləyəcəyik və aşkar edildikdə, dəyişən atlamanı 1 olaraq təyin edəcəyik, başladığı vaxt atlama hərəkətlərini qeyd edəcəyik və xarakterin sprite sürətini -200 (yuxarıya doğru) olaraq təyin edəcəyik. Sonra müəyyən bir müddətdən sonra sürəti 200 (aşağıya doğru) olaraq təyin edəcəyik, buna görə də qəhrəmanımız raket kimi göyə uçmayacaq.

Düşünürəm ki, biz indi sınağa layiq bir qəhrəman yaratdıq! Yaxşı, problem haradadır?

Addım 2: Düşmənlər

Düşmənlər
Düşmənlər

Düşmənlərin spritesini saxlamaq üçün bir sıra quruluşdan istifadə edəcəyik. Düşmən tipləri üçün bir az qısa yol götürüb yarasalar istifadə edəcəyik:) koronavirusa istinad deyil, sadəcə yarasalar uça bilər, buna görə də oynana bilən xarakterimizdə olduğu kimi onlar üçün cazibə qüvvəsini "simulyasiya" etməyimizə ehtiyac olmayacaq. Yaradılmış yarasaları təsadüfi kürü kafelinə yerləşdirmək (bir az ağ işarəsi ilə işarələnmiş) və yaradılan vites sürətini -10 (yavaş -yavaş sağa sürüşmək) üçün Enemy blokunun yaradılmış sprite növündən istifadə edin. Sonra oyun yeniləməsində hər 2000 ms blokda düşmən siyahısının hər bir elementini təkrarlayırıq və istiqamətini təsadüfi olaraq dəyişirik, eyni zamanda zəruri hallarda yarasaların spritesini çeviririk (hərəkət istiqamətindəki dəyişikliyi əks etdirmək üçün). Nəhayət, bir növ oyunçunun digər növün Düşmən bloku ilə üst -üstə düşməsini əlavə edirik, burada oyunçunun artıq vurulub -vurulmadığını sadə bir şəkildə yoxlayırıq. Bir həyat kəsilməsəydi, hit bayrağını 1 (vuruldu) olaraq təyin edin və taymeri işə salın. Son vuruş vaxtından 500 ms sonra bayrağı sıfıra dəyişirik. Bunu oyunçunun düşmənlə toqquşduqdan sonra çox dəyərli həyatını itirməməsi üçün edirik.

Necə olduğumuzu yoxlayaq. Əlbətdə ki, bütün yarasalar ətrafında uçaraq oyunçumuzu dişlədikcə səhnə daha canlı görünür. İndi qəhrəmanlıqlarımızı yerinə yetirmək üçün silaha ehtiyacımız var!

Addım 3: Silah

Silah
Silah

Silah üçün köhnə Nintendo oyunundan iki ildırım qardaşı haqqında ilham alırdım:) Düşmənləri əlavə edərkən etdiyimiz bənzər şəkildə sandıq spritesini əlavə edək. Ayrıca, has_crate dəyişənini -1 olaraq işə salırıq ki, bu da xarakterimizin sandıq daşımadığını göstərir. Bir növ Oyunçunun digər növ Qida bloku ilə üst -üstə düşdüyündə, artıq bir sandıq tutduğumuzu yoxlayırıq və yoxsa has_crate dəyişənini siyahıdakı sandıq sprite indeksinə təyin edirik. Sonra oyun yeniləmə blokunda oyunçunun spriti ilə birlikdə hərəkət edirik və A düyməsinə basıldıqda sandığın vx sürətini 1200 və ya -1200 (xarakterin hərəkət istiqamətindən asılı olaraq) olaraq dəyişdiririk. Has_crate dəyişənini yenidən -1 -ə qoyduq və indi havaya atılan sandığın sprite növünü Projectile olaraq dəyişdirdik.

Nəhayət, sandıqların işə salındıqda əslində düşmənləri məhv etməsinə ehtiyacımız var (ancaq düşmənlər təsadüfən bir sandıqda təsadüfən yerə yıxıldıqda deyil! Bu səbəbdən Yemək yazmaq və yalnız işə salındıqda onu mərmi olaraq dəyişdirmək üçün sandıqları təyin etdik) və vurarkən özünü məhv etməliyik. divar. Bunun üçün digər növdən bir növ mərmi ilə üst -üstə düşən bir növ Düşmən bloku istifadə edirik - bu halda hər iki spriti məhv edirik və bir xal artırırıq. Əgər mərmi divara çırpılırsa, onun spritini məhv edirik.

Demək olar ki, bitdi! Oyun indi oynanılır, amma çətinliklə də olsa - yalnız bir səviyyə və kifayət qədər sadədir. Əllə daha çox səviyyə düzəldə bilərik və ya bu səviyyələri bizim üçün avtomatik olaraq yaradan bir alqoritm yaza bilərik - baxmayaraq ki, onlar insan istehsalı səviyyələri qədər gözəl olmayacaq.

Addım 4: Sonsuz Macəralar

Sonsuz Macəralar
Sonsuz Macəralar
Sonsuz Macəralar
Sonsuz Macəralar
Sonsuz Macəralar
Sonsuz Macəralar

Təsadüfi səviyyəli nəsil üçün funksiya əvvəlcə bir az qorxunc görünür, amma yeni bir səviyyənin oynanılabilir xarakter üçün keçə biləcəyi şəkildə alqoritmik olaraq yeni bir səviyyə yaratmaq üçün sadə bir addımlar seriyasıdır. Birincisi, xarakterimizi yeni səviyyəyə qaldırmağın qayğısına qalırıq - bir növ oyunçunun üst -üstə düşməsini istifadə edərək … yerində - portal qapı kafelini yeni bir səviyyəyə tətik olaraq istifadə edirik. Generate_level funksiyasında satır, col və şans dəyişənlərini işə salırıq. Həm də əvvəlki ölçüdə eyni olan, lakin boş olan yeni bir kafel xəritəsi yaradırıq. Burada kiçik bir xəbərdarlıq var - dəsti istifadə etmək üçün… dilemap satırında… col… blokda, dilemapın bu xüsusi plitələrə sahib olması lazımdır - bu bir az əksinə intuitivdir və bəlkə də Makecode -da bir səhvdir. Beləliklə, etməniz lazım olan şey bir dil xəritəsi yaratmaq, istifadə etmək istədiyiniz bütün kafel növlərini təsadüfi nəsillərə qoymaq və sonra silməkdir.

Əl ilə ilk kafel (0x6) və oyunçunu üstünə qoyduq. Sonra növbəti addımı 30 dəfə təkrarlayırıq - növbəti addım, növbəti sütun kafelinin 1) əvvəlki ilə eyni səviyyədə 2) bir yuxarı və ya 3) bir aşağı olacağımıza qərar verən True -False yoxlamaların sadə seriyasıdır. Növbəti kafelin lava kafel olması ehtimalı da çox azdır - bunların çox olmasını istəmirik! Yaranan hər bir kafelin altındakı boşluğu lava ilə doldururuq - sadəcə gözəllik üçün. Son addım olaraq düşmənləri və sandıqları əlavə edib təsadüfi kürü plitələrinin üstünə qoyuruq.

Addım 5: Macəra başlayır

Macəra başlayır
Macəra başlayır

Voila! Platformerimizi bitirdik və qəhrəmanımız yarasaları məğlub edərək sandıqları məhv edərək sonsuz bir macəraya davam edə bilər. Problemlərlə qarşılaşsanız, kodu GitHub depomuzdan yükləyə bilərsiniz.

Bu, sadəcə bir layihədir və bəzi dəyişikliklər edilə bilər, məsələn, müxtəlif növ düşmənlər, bonuslar, daha yaxşı səviyyəli nəsil və s. Oyunun təkmilləşdirilmiş bir versiyasını edirsinizsə, aşağıdakı şərhlərdə paylaşın! GameGo və istehsalçılar və STEM müəllimləri üçün digər avadanlıqlar haqqında daha çox məlumat üçün https://tinkergen.com/ saytımızı ziyarət edin və bülletenimizə abunə olun.

TinkerGen, kodlaşdırma, robototexnika, AI öyrətmək üçün bir robot dəsti olan MARK (Make a Robot Kit) üçün bir Kickstarter kampaniyası hazırladı!

Tövsiyə: