Mündəricat:

Arduino -da dünyanın ən çətin oyununu yenidən yaratmaq: 7 addım
Arduino -da dünyanın ən çətin oyununu yenidən yaratmaq: 7 addım

Video: Arduino -da dünyanın ən çətin oyununu yenidən yaratmaq: 7 addım

Video: Arduino -da dünyanın ən çətin oyununu yenidən yaratmaq: 7 addım
Video: İDARƏ - 9-10-cu bölüm - ANONS 2024, Noyabr
Anonim
Image
Image

Bu layihə, İnternetdə tapa biləcəyiniz bir kompüter oyununa əsaslanır. Adı "Dünyanın Ən Zor Oyunu" dur. Dörd modullu LED Matrix istifadə edərək Arduino'da yenidən yarada bildim. Bu təlimatda sizə bunu özünüz necə qurmağı öyrədirəm. Çox detallara girməzdən əvvəl bu oyunu yaratmaq üçün keçdiyim addımlara qısa bir nəzər salmaq istəyirəm.

  1. Lazım olan bütün hissələri yığdım.
  2. Parçaları bir -birinə bağladım.
  3. Oyunçuların LED -lərini bütün modullarda hərəkət etdirmək üçün joystickdən istifadə edən bir eskiz yazdım.
  4. İlk maneələri hazırladım və eskizlərə əlavə etdim ki, onlar dünyanın ən çətin oyununu təqlid etsinlər.
  5. Daha sonra oyuna yenidən başlayacaq maneələrlə toqquşma aşkar etmək üçün kod əlavə etdim.
  6. Sonra daha iki maneə səviyyəsi hazırladım.

Addım 1: Bütün hissələr

Bütün hissələr
Bütün hissələr
Bütün hissələr
Bütün hissələr

İşdə sizə lazım olan bütün hissələrin siyahısı:

  1. Bir Arduino UNO və usb konnektoru: https://www.banggood.com/Wh Wholesale-Arduino-Compati.
  2. Dörd ədəd 8x8 modulu: LED matrisi
  3. Bir oyun çubuğu:
  4. 10 kişidən dişi tel:

Addım 2: Parçaları Arduinoya necə bağlamaq olar

Parçaları Arduinoya necə bağlamaq olar
Parçaları Arduinoya necə bağlamaq olar

LED matrisini Arduinoya necə bağlamaq olar

  1. GND GND -yə gedir
  2. VCC 5V -ə keçir
  3. DataIn rəqəmsal pin 12 -ə keçir
  4. CLK rəqəmsal pin 11 -ə keçir
  5. CS və ya LOAD rəqəmsal pin 10 -a keçir

Joystick'i necə bağlamaq olar

  1. GND GND -yə gedir
  2. 5V 5V -ə keçir
  3. VRx analog pin A0 -a keçir
  4. VRy analoq pin A1 -ə keçir
  5. SW istifadə olunmur

Batareya, Arduino gücünü təmin etmək üçün 9v jakına qoşulur

Addım 3: Proqramın axın cədvəli

Proqramın axın cədvəli
Proqramın axın cədvəli

Oval proqramın başladığını göstərir.

İlk addım bütün maneələri müəyyənləşdirməkdir.

Növbəti iki addım dəyişənlərin qurulmasını və bütün modulların işə salınmasını göstərir.

Növbəti addım, LED -ləri birinci səviyyəyə və digər dəyişənlərə təyin etməkdir.

Sonrakı oyunçunun hazırda olduğu səviyyəni göstərin.

Romb, hansı istiqamətə itildiyini görmək üçün Joystick oxuduğunu göstərir.

Sonra oyunçunu Joystick -in itələdiyi istiqamətə hərəkət etdirin.

Oyunçunun bir maneə ilə toqquşduğunu yoxlayın və baxın.

Oyunçu bir maneəni vurursa, birinci səviyyəyə qayıdın. Oyunçunun səviyyənin sonuna çatıb -çatmadığını yoxlayın.

Oyunçu səviyyənin sonundadırsa, növbəti səviyyəyə keçin və "Cari Səviyyə göstər" ə qayıdın. Sonda deyilsə, maneələri hərəkət etdirin və "Joystick oxuyun" a qayıdın.

Addım 4: Joystickin proqramlaşdırılması

Əlbəttə ki, oyunçu olan kiçik nöqtəni hərəkət etdirmək üçün bir joystickə ehtiyacımız var. və joystickin oyunçunu hərəkət etdirməsinə icazə vermək üçün onu Arduino IDE -də kodlaşdırmalıyıq. Eskiz menyusu> Kitabxanaları daxil et> kitabxanaları idarə etmək və LedControl axtararaq gedə biləcəyiniz LedControl kitabxanasını daxil etməlisiniz. Joystick kodunun göründüyü budur.

#"LedControl.h" daxil edin

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Dörd modul üçün obyekt yaradır int gecikmə vaxtı = 50; // oyunun int joystick_RtLt, joystick_UpDn işlədiyi sürət; int player_x = 0; // oyunçular 0 -dan 31 -ə qədər üfüqi mövqe int players_y = 3; // oyunçular 0 -dan 7 -ə qədər şaquli mövqe int satır, sütun, modul; void setup () {initialize_modules (); // bütün dörd modulu yandırın və quraşdırın} void loop () {move_player (); // oyunçunun gecikmə (gecikmə) hərəkət etdiyini yoxlayaraq döngəyə başlayın; } void initialize_modules () {lc.shutdown (0, false); // modulu işə salır 0 lc.setIntensity (0, 1); lc.shutdown (1, yalan); // 1 lc.setIntensity modulunu işə salır (1, 1); lc.shutdown (2, yalan); // 2 lc.setIntensity modulunu işə salır (2, 1); lc.shutdown (3, yalan); // 3 lc.setIntensity modulunu işə salır (3, 1); lc.clearDisplay (0); // modulu təmizləyir 0} void move_player () {module = players_x/8; // oyunçunun sütunda hansı modul olduğunu müəyyən edir = players_x%8; // oyunçunun modul satırında olduğu sütunu təyin edir = players_y; lc.setLed (modul, satır, sütun, yalan); // oyunçunun hazırkı mövqeyində led söndürmək joystick_RtLt = analogRead (A0)/204 - 2; // X -joystick və 2 -dən -2 -ə qədər olan xəritə aralığını oxuyun (joystick_RtLt> 0) // joystick düzgün oyunçulara xx ++ olduqda; // başqa sağa gedin, əgər (joystick_RtLt 0) // joystick sol tərəfdədirsə və başlanğıcda deyil oyunçular_x--; // sola hərəkət joystick_UpDn = analogRead (A1)/204 - 2; // Y-joystick və xəritəni 2 ilə -2 arasında oxuyun (joystick_UpDn 0) // joystick aşağı olarsa və oyunçu alt oyunçular_y-- deyilsə; // başqa yerə keçin, əgər (joystick_UpDn> 0 && player_y <7) // joystick yuxarıdırsa və oyunçu üst oyunçular_y ++ deyilsə; // yuxarıya getmək modulu = player_x/8; // modulu oyunçulara təyin edin yeni mövqe sütunu = players_x%8; // sütunu oyunçuların yeni mövqeyinə qoyun sıra = players_y; // oyunçuları yeni mövqeyə qoyun lc.setLed (modul, satır, sütun, doğru); // oyunçunun yeni mövqeyində led'i yandırın}

Joystick əlavə etdikdən sonra ilk maneə üzərində işləyək!

Addım 5: Birinci Səviyyə

Tamam, indi proqramın əsas hissəsinə, maneələrə girməyin vaxtı gəldi! Maneələr əslində bunu "Dünyanın Ən Çətin Oyunu" halına gətirir. Oyunu həqiqətən oynamaq istəyirsinizsə, bunu kodunuza əlavə etməlisiniz:

bayt maneəsi [SƏVİYYƏLƏR] [SƏHNƏLƏR] [SÜTÜNLƏR] [ROWS] = {// üç səviyyə, 8 səhnə, 8 kollum, 8 sıra

{{{1, 1, 1, 1, 1, 1, 0, 0}, // birinci səviyyə, ilk səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // birinci səviyyə, ikinci səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // birinci səviyyə, üçüncü səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // ilk səviyyə, dördüncü səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // birinci səviyyə, beşinci səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // birinci səviyyə, altıncı səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, // birinci səviyyə, yeddinci səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // birinci səviyyə, səkkizinci səhnə {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, void setup () {initialize_modules (); // açmaq və dörd led modulunun hamısını qurmaq start_level (0); boşluq döngəsi () {move_player (); // oyunçunun hərəkət etməsini yoxlayaraq dövrə başlayın (toqquşma ()) {// toqquşma səviyyəsini yoxlayın = 0; // toqquşma doğru olarsa, başlanğıc səviyyəsini sıfırlayın (səviyyə); // oyunu yenidən başladın} else if if (delay_count == maneə_delay) {// heç bir toqquşma maneə olmadıqda hər bir gecikmə hərəkət maneəsi (); delay_count = 0; } başqa gecikmə sayı ++; gecikmə (gecikmə vaxtı); // oyunun sürətinə görə gecikmə}

Və ilk maneə budur! İlk səviyyəniz kimi bundan cansıxırsınızsa, baytları dəyişə bilərsiniz, yalnız səkkiz fərqli səhnənin olması lazım olduğunu unutmayın! Növbəti mərhələyə, toqquşma aşkarlamağa davam edək!

Addım 6: Toqquşma Algılama

Bu addım oyunun başqa bir vacib hissəsidir, buna baxmayaraq çətin olmayacaq! hər hansı bir nəticəni çıxarmaqla maneələri aşa bilərsən! bu çox əyləncəli olmazdı, elə deyilmi? proqramın bu hissəsini əlavə edərək oyunu daha çətin (və daha çox əyləncəli!) edək:

boşluq döngəsi () {

move_player (); // oyunçunun hərəkət etməsini yoxlayaraq dövrə başlayın (toqquşma ()) {// toqquşma səviyyəsini yoxlayın = 0; // toqquşma doğru olarsa, başlanğıc səviyyəsini sıfırlayın (səviyyə); // oyunu yenidən başladın} else if if (delay_count == maneə_delay) {// heç bir toqquşma maneə törətmirsə, hər digər gecikmə hərəkət maneəsi (); delay_count = 0; } başqa gecikmə_sayı ++; gecikmə (gecikmə vaxtı); // oyunun sürəti ilə gecikmə} int toqquşması () {// oyunçunun səhnə modulunda bir maneə vurub vurmadığını yoxla = players_x/8; sütun = oyunçular_x%8; sıra = oyunçular_y; if (modul> 0) if (maneə [səviyyə] [səhnə] [sütun] [sıra] == 1) // oyunçunun mövqeyi maneə qayıtması ilə eynidirsə (1); // toqquşma qayıdıb həqiqi qaytarma (0); // heç bir toqquşma yoxdur yalan}

Və ora gedirsən! indi oyundan daha çox zövq ala bilərsiniz! İndi sizə oyunun son iki səviyyəsini necə proqramlaşdıracağınızı göstərəcəyəm! demək olar ki, bu təlimatlandırmanı tamamladınız və əminəm ki, sınamağa hazırsınız!

Addım 7: Son İki Səviyyə

Təlimat verilənlərin sonuna yaxınlaşırdıq, bu oyunu bitirmək üçün lazım olan bu son iki səviyyədir. Sonra özünüz üçün sınaya bilərsiniz! kod budur:

bayt maneə [SƏVİYYƏLƏR] [SƏHNƏLƏR] [SÜTÜNLƏR] [ROWS] = {// ikinci və üçüncü səviyyə, 8 səhnə, 8 sütun, 8 satır

{{{1, 0, 0, 0, 0, 0, 0, 1}, // ikinci səviyyə, birinci səhnə {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // ikinci səviyyə, ikinci səhnə {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // ikinci səviyyə, üçüncü səhnə {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // ikinci səviyyə dördüncü səhnə {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, // ikinci səviyyə, beş səhnə {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // ikinci səviyyə, altıncı səhnə {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, // ikinci səviyyə, yeddinci səhnə {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // ikinci səkkizinci səhnə {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // üçüncü səviyyə, birinci səhnə {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // üçüncü səviyyə, ikinci səhnə {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // üçüncü səviyyə, üçüncü səhnə {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // üçüncü səviyyə, dördüncü səhnə {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // üçüncü səviyyə, beşinci səhnə {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // üçüncü səviyyə, altıncı səhnə {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // üçüncü səviyyə, yeddinci səhnə {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // üçüncü səviyyə, səkkizinci səhnə { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}}};

Və bu qədər! Dünyanın ən çətin oyununu başa vurmağa hazırsınız. Tam Arduino kodu aşağıda əlavə edilmişdir.

Tövsiyə: