Mündəricat:

Arduino Space Rocks Oyunu: 3 addım
Arduino Space Rocks Oyunu: 3 addım

Video: Arduino Space Rocks Oyunu: 3 addım

Video: Arduino Space Rocks Oyunu: 3 addım
Video: Arduino ile Yarış Simülatörü Serisi - 900 Derece Direksiyon Yapımı (Potansiyometre ile) - Bölüm 3 2024, Iyul
Anonim
Arduino Space Rocks Oyunu
Arduino Space Rocks Oyunu

İstər kompüterdə, istər telefonda, istər oyun konsolunda, istərsə də müstəqil bir qutuda oynansalar da, bir çox video oyun maneələrin qarşısını almaq elementini ehtiva edir. Əlbəttə ki, ayələr toplamaq və ya bir labirentdən yol tapmaq üçün verilən ballar ola bilər, amma əmin olun ki, oyunda yeganə məqsədi bunu etməyə mane olmaqdır. İlk video oyunu Pong idi, amma bundan sonra ən populyar oyunlar "Asteroidlər" və ya "Pac-Man" kimi şeylər idi. Daha yeni bir dəyişiklik, "Flappy Birds" in sadə, lakin asılılıq oyunu olardı.

Bu yaxınlarda gördüm ki, kimsə ümumi 1602 LCD-də səsləndirilən "Flappy Bird" in sadə iki səviyyəli versiyasını hazırladı. Nəvələrin bəyənə biləcəyi bir şey olacağını düşündüm və sıfırdan öz varyasyonumu etməyə qərar verdim. 1602 versiyasının yalnız iki səviyyəsi var, buna görə oyunun çətinliyini bir qədər artırmaq üçün 2004 LCD (20x4) istifadə etməyə qərar verdim. Oyunçunun "kosmik qayalar" labirintindən keçərək "gəmiyə" rəhbərlik etməsini də "Asteroidlər" kimi daha çox etməyi seçdim. Oyunun qurulması ilə maraqlanmasanız da, öz layihələrinizdən birində istifadə edə biləcəyiniz proqramın bəzi elementləri ola bilər.

Addım 1: Avadanlıq

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Cihaz demək olar ki, hər hansı bir Arduino versiyasına əsaslana bilər. Nano istifadə edərək prototip hazırladım və sonra kodu ATMega328 çipinə yandırdım. Bu, Nano'da istifadə olunan eyni çipdir, ancaq öz -özünə istifadə etmək daha kompakt bir quruluşa və daha az enerji istehlakına imkan verir. Gördüyünüz kimi, dövrəni LCD modulunun üstündəki kiçik bir çörək taxtası üzərində qurdum. Fərqli olan digər cəhət Nanonun xarici bir kristal istifadə edərək 16 MHz-də işləməsidir, amma ATMega328 çipi üçün quraşdırılmış 8 MHz osilatordan istifadə etməyi seçdim. Bu hissələrə və gücə qənaət edir.

2004 LCD, Arduino üçün 1602 LCD ilə eyni şəkildə işləyir. Maraqlı bir fərq, nümayiş yerlərinin ünvanlanmasıdır. Aydındır ki, bir fərq var, çünki iki əvəzinə dörd xətt var, lakin 2004 -cü ildə üçüncü sətir birinci sətrin, dördüncü xətt isə ikinci sətrin uzantısıdır. Başqa sözlə, LCD -yə yeni bir simvol göndərən bir test proqramınız olsaydı, 21 -ci simvol üçüncü sətrin əvvəlində görünərdi və 41 -ci xarakter birinci sətrin əvvəlinə qayıdır. Bu xüsusiyyətdən labirentin uzunluğunu təsirli şəkildə iki qat artırmaq üçün proqramda istifadə edirəm.

Versiyamı batareya ilə təmin etmək qərarına gəldim, buna görə ümumi 18650 Li-ion, 3.6 voltluq bir batareya istifadə etdim. Bunun üçün USB şarj etməyə imkan verən kiçik bir lövhə və LCD və ATMega çipi üçün batareyanın gərginliyini 5 volta qədər artırmaq üçün başqa bir kiçik lövhə əlavə etməyim lazım idi. Şəkillər istifadə etdiyim modulları göstərir, lakin hər iki funksiyanı yerinə yetirən all-in-one modulları da var.

Addım 2: Proqram təminatı

Proqram həm Nano, həm də ATMega328 çipi üçün eynidir. Yeganə fərq proqramlaşdırma üsulundadır. 1602 LCD proqramının öz yalın sümük versiyamdan istifadə edirəm və bu layihədəki LCD proqramı buna əsaslanır. 2004 -cü il ekranın əlavə xətlərini həll etmək üçün qabiliyyətlər əlavə etməliyəm və ekranı dəyişdirmək üçün rutinlər də əlavə etməliyəm. Ekran dəyişməsi "qayaların" "gəminin" yanından keçən hərəkət effektini təmin edir.

Daha əvvəl də qeyd edildiyi kimi, 1 və 3 -cü sətirlər dairəvi növbə təşkil edir və 2 və 4 -cü sətirlər də bunu edir. Bu o deməkdir ki, 20 növbədən sonra 1 və 3 -cü xətlər dəyişdirilir və 2 və 4 -cü xətlər dəyişdirilir. 40 növbədən sonra xətlər əvvəlki vəziyyətlərinə qayıdır. Bu davranışdan ötəri, 20 simvoldan ibarət orijinal labirent, xətlər dəyişdirildikdə tamamilə fərqli olur. Bir labirent yaratmağa çalışdığımda həyatı maraqlı etdi. Proqramı daim dəyişdirmədən yolu qrafikə salmaq üçün nəhayət bir Excel cədvəli açdım. Burada təqdim olunan proqram, labirentin iki versiyasına malikdir (biri şərh olunur), buna görə istədiyinizi seçə və ya özünüz edə bilərsiniz.

Əvvəlcə bunun gənc nəvələrin oynaya biləcəyi qədər sadə olmasını istədim, amma onlar da (və ya başqası) çox yaxşı bacarırlarsa, əlavə bir problem yaşamasını istədim. Oyun 1 saniyəyə təyin olunan keçid dərəcəsi ilə başlayır. Daxili tic dərəcəsi 50ms -dir, yəni yuxarı/aşağı düymələrinin basıla biləcəyi 20 aralıq var. Əslində, basılan bir düymə 2 tikə istehlak edir, çünki mətbuatı aşkar etmək üçün 50 ms aralığında və buraxılmasını gözləmək üçün başqa 50 ms aralığında istifadə olunur. Varsayılan labirentlə, növbəti növbədən əvvəl tələb olunan maksimum pres sayı üçdür. Oyunun çətinliyini artırmağın sadə yolu, növbələr arasındakı vaxtı qısaltmaqdır, belə ki, bir neçə kod xətti hesab artdıqca bunu edir. Vəziyyət dərəcəsi, hər 20 növbədə 50ms sürətləndiriləcək, minimum sürət isə 500ms ilə məhdudlaşacaq. Bu parametrləri dəyişdirmək asandır.

Dəyişiklik dərəcəsini dəyişdirməkdən başqa, proqramdakı əsas məntiq "gəmini" hərəkət etdirmək və "gəminin" "qaya" ilə toqquşub -vuruşmadığını müəyyən etməkdir. Bu funksiyalar, müəyyən edilmiş "rok/kosmos" dizisindən və ekrandakı yaddaş yerlərini təyin edən dizidən faydalanır. Dəyişmə sayı, LCD-nin xətt uzunluğuna (0-19) uyğundur və bu seriallara indeks olaraq istifadə olunur. Məntiq, xətlərin hər 20 növbədə bir -birini əvəz etməsi ilə çətinləşir. Bənzər məntiq dörd sətirdən hər hansı birində ola biləcək "gəminin" mövqeyini təyin etmək üçün istifadə olunur.

Hər oyun üçün hesab sadəcə baş verən növbələrin sayını və yüksək bal daxili EEROM mikrokontrolöründə saxlanılır. EEPROM kitabxanası bu yaddaşı oxumaq və yazmaq üçün istifadə olunur. Mövcud rutinlər tək bayt oxumaq/yazmaq və üzən nöqtə dəyərlərini oxumaq/yazmaq imkanı verir. 0xA5 dəyəri, yüksək hesabın saxlandığını göstərmək üçün ilk EEROM yerində saxlanılır. Bu dəyər gücdə olduqda, yüksək bal üçün üzən nöqtə dəyəri oxunur və göstərilir. 0xA5 dəyəri yoxdursa, yüksək balı 1 -ə endirmək üçün bir prosedur çağırılır. Yuxarı/aşağı düymələrindən birini basıb saxlayın və sonra sıfırlama düyməsini bir anda basaraq yüksək bal 1 dəyərinə qaytarılır.

Addım 3: Oyunu oynamaq

Oyunun Oynanması
Oyunun Oynanması
Oyunun Oynanması
Oyunun Oynanması

Güc tətbiq edildikdə, mövcud yüksək bal göstərilir. Yüksək hesab göstərildikdən sonra "qayalar" və "gəmi" labirentləri göstərilir, sonra oyun bir neçə saniyə sonra başlayır. "Gəmi" "qaya" ya düşdükdə, oyunun hesabını göstərməzdən əvvəl bir neçə dəfə "ÇARP VƏ YAN" mesajı yanıb sönür. Yeni bir yüksək nəticə verildikdə, bu mesaj da göstərilir. Sıfırlama düyməsinə basaraq yeni bir oyun başlayır.

Tövsiyə: