
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:48


Ez a projekt egy online játékon alapuló számítógépes játékon alapul. A neve: "A világ legnehezebb játéka". Újra tudtam létrehozni az Arduino-n egy négy modulos LED-mátrix segítségével. Ebben az utasításban megtanítom, hogyan kell saját maga konstruálni. Mielőtt túl sok részletbe ütközünk, szeretnék egy gyors áttekintést adni a játék létrehozásának lépéseiről.
- Összeszedtem az összes szükséges alkatrészt.
- Összekötöttem az alkatrészeket.
- Írtam egy vázlatot, amely a joystick segítségével mozgatta a játékosok LED -jét az összes modulon.
- Megterveztem az első akadályokat, és hozzáadtam őket a vázlathoz, így azok utánozták a világ legnehezebb játékát.
- Ezután hozzáadtam egy kódot, hogy észleljem az ütközést az akadályokkal, ami újraindítja a játékot.
- Aztán megterveztem még két akadályszintet.
1. lépés: Minden alkatrész


Itt található az összes szükséges alkatrész listája:
- Arduino UNO és usb csatlakozó:
- Négy modul 8x8: LED mátrix
- Joystick:
- 10 db férfi-női vezeték:
2. lépés: Az alkatrészek csatlakoztatása az Arduino -hoz

A LED -mátrix csatlakoztatása az Arduino -hoz
- A GND a GND -hez megy
- A VCC 5V -ra megy
- A DataIn a 12 -es digitális tűre megy
- A CLK a 11 -es digitális csaphoz megy
- A CS vagy a LOAD a 10 -es digitális tűre megy
A joystick csatlakoztatása
- A GND a GND -hez megy
- 5V megy 5V -ra
- A VRx az A0 analóg érintkezőre megy
- A VRy az A1 analóg érintkezőhöz megy
- Az SW -t nem használják
Az akkumulátor csatlakozik a 9V -os aljzathoz, hogy áramot adjon az Arduino -nak
3. lépés: A program folyamatábrája

Az ovális jelzi a program kezdetét.
Az első lépés az összes akadály meghatározása.
A következő két lépés a változók beállítását és az összes modul bekapcsolását jelzi.
A következő lépés a LED -ek első szintre állítása és minden egyéb változó.
Ezután jelenítse meg a lejátszó aktuális szintjét.
A rombusz jelzi a joystick olvasását, hogy lássa, milyen irányba tolja.
Ezután mozgassa a lejátszót a botkormány bármely irányába.
Ellenőrizze, hogy a játékos nem ütközött -e akadályba.
Ha a játékos ütközik egy akadályba, menjen vissza az első szintre. Ha nem, ellenőrizze, hogy a játékos elérte -e a szint végét.
Ha a játékos a szint végén van, állítsa a következő szintre, majd térjen vissza az "Aktuális szint megjelenítése" szakaszhoz. Ha nincsenek a végén, mozgassa az akadályokat, és térjen vissza a "Joystick olvasása" szakaszhoz.
4. lépés: A joystick programozása
Természetesen ahhoz, hogy elmozdítsuk a kis pontot, ami a játékos, szükségünk van egy joystickra. és ahhoz, hogy a joystick valóban mozgassa a lejátszót, kódolnunk kell az Arduino IDE -ben. Meg kell adnia a LedControl könyvtárat, amelyet a vázlat menü> Könyvtárak beillesztése> könyvtárak kezelése és LedControl keresésével talál. Így néz ki a joystick kódja.
#include "LedControl.h"
int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Objektumot hoz létre négy modulhoz int delaytime = 50; // a játék futásának sebessége int joystick_RtLt, joystick_UpDn; int játékosok_x = 0; // a játékosok vízszintes helyzete 0 -tól 31 -ig int játékosok_y = 3; // játékosok függőleges helyzete 0 -tól 7 -ig int sor, oszlop, modul; void setup () {initialize_modules (); // mind a négy led modul bekapcsolása és beállítása} void loop () {move_player (); // indítsa el a ciklust annak ellenőrzésével, hogy a játékos mozog -e késleltetést (delaytime); } void initialize_modules () {lc.shutdown (0, false); // elindítja a 0 modult lc.setIntensity (0, 1); lc.sutdown (1, false); // elindítja az 1. modult lc.setIntensity (1, 1); lc.sutdown (2, false); // elindítja a 2. modult lc.setIntensity (2, 1); lc.sutdown (3, false); // elindítja a 3. modult lc.setIntensity (3, 1); lc.clearDisplay (0); // törli a 0 -ás modult} void move_player () {module = players_x/8; // meghatározza, hogy a lejátszó melyik modulon található oszlopban = players_x%8; // meghatározza azt az oszlopot, ahol a játékos a modul sorában található = players_y; lc.setLed (modul, sor, oszlop, hamis); // kapcsolja ki a ledet a játékos jelenlegi helyzetében joystick_RtLt = analogRead (A0)/204 - 2; // olvassa az X -joystickot és a térképtartományt 2 -től -2 -ig, ha (joystick_RtLt> 0) // amikor a joystick a megfelelő játékosok felé van_x ++; // menj jobbra, ha if (joystick_RtLt 0) // ha a joystick balra van és nem az elején player_x--; // balra mozgatás joystick_UpDn = analogRead (A1)/204 - 2; // olvassa az Y-joystickot és a térképtartományt 2-től -2-ig, ha (joystick_UpDn 0) // ha a joystick le van állítva, és a játékos nincs az alsó játékosoknál_y--; // lépj lejjebb, ha (joystick_UpDn> 0 && players_y <7) // ha a joystick fent van, és a játékos nincs a legjobb játékosoknál_y ++; // felmenő modul = player_x/8; // a modul beállítása játékosokra új pozíció oszlop = players_x%8; // az oszlop beállítása a játékosokra új pozíció sor = játékosok_y; // sor beállítása játékosoknak új pozíció lc.setLed (modul, sor, oszlop, igaz); // kapcsolja be a ledet a játékos új pozíciójában}
Most, hogy hozzáadta a joystickot, dolgozzunk az első akadályon!
5. lépés: Az első szint
Rendben, akkor most itt az ideje, hogy belevágjunk a program fő részébe, az akadályokba! Az akadályok teszik igazán ezt a "világ legnehezebb játékává". Tehát ha valóban játszani szeretne a játékkal, akkor ezt hozzá kell adnia a kódjához:
bájt akadály [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// három szint, 8 jelenet, 8 collums, 8 sor
{{{1, 1, 1, 1, 1, 1, 0, 0}, // első szint, első jelenet {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}, { 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, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // első szint, második jelenet {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, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // első szint, harmadik jelenet {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}, {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}, // első szint, negyedik jelenet {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}, {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}, // első szint, ötödik jelenet {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}, // első szint, hatodik jelenet {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, 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}, // első szint, hetedik jelenet {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}}, {{0, 1, 1, 1, 1, 1, 1, 1, 1}, // első szint, nyolcadik jelenet {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, 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 (); // kapcsolja be és állítsa be mind a négy led modult start_level (0); void loop () {move_player (); // indítsa el a ciklust annak ellenőrzésével, hogy a játékos mozog -e, ha (ütközés ()) {// ellenőrizze az ütközési szintet = 0; // ha az ütközés igaz, reset level start_level (level); // játék újraindítása} else if (delay_count == akadály_késleltetés) {// ha nincs ütközésmozgás akadály minden más késleltetés moveobstacle (); delay_count = 0; } else delay_count ++; késleltetés (késleltetési idő); // késés a játék gyorsasága miatt}
És ez az első akadály! Ha ezt unod első szintként, akkor mindig megváltoztathatod a bájtokat, ne feledd, hogy nyolc különböző jelenet kell! Folytassuk a következő lépéssel, az ütközésérzékeléssel!
6. lépés: Ütközésérzékelés
Ez a lépés a játék másik fontos része, anélkül nem lenne nagy kihívás! csak átszövi az utat az akadályokon, minden következmény nélkül! nem lenne túl szórakoztató ugye? így tegyük a játékot kihívóbbá (és sokkal szórakoztatóbbá!) a program ezen részének hozzáadásával:
void loop () {
move_player (); // indítsa el a ciklust annak ellenőrzésével, hogy a játékos mozog -e, ha (ütközés ()) {// ellenőrizze az ütközési szintet = 0; // ha az ütközés igaz, reset level start_level (level); // játék újraindítása} else if (delay_count == akadály_késleltetés) {// ha nincs ütközésmozgás akadály minden más késleltetés moveobstacle (); delay_count = 0; } else delay_count ++; késleltetés (késleltetési idő); // késleltetés a játék sebességével} int collision () {// ellenőrizze, hogy a játékos ütközik -e akadályba a jelenetmodulban = players_x/8; oszlop = játékosok_x%8; sor = játékosok_y; if (modul> 0) if (akadály [szint] [jelenet] [oszlop] [sor] == 1) // ha a játékos helyzete megegyezik az akadály visszatérésével (1); // ütközés észlelt return true return (0); // nincs ütközés visszatérési hamis}
És tessék! most sokkal jobban élvezheti a játékot! Most megmutatom, hogyan kell programozni a játék utolsó két szintjét! majdnem kész vagy ezzel az oktatási lehetőséggel, és biztos vagyok benne, hogy készen állsz arra, hogy kipróbáld!
7. lépés: Az utolsó két szint
Az oktatható végéhez közeledve ez az utolsó két szint elegendő a játék befejezéséhez. Akkor kipróbálhatod magad! itt a kód:
bájt akadály [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// második és harmadik szint, 8 jelenet, 8 oszlop, 8 sor
{{{1, 0, 0, 0, 0, 0, 0, 1}, // második szint, első jelenet {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}, // második szint, második jelenet {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}, // második szint, harmadik jelenet {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}, // második szint negyedik jelenete {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}, // második szint, ötödik th jelenet {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}, // második szint, hatodik jelenet {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}, // második szint, hetedik jelenet {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}, // második szint nyolcadik jelenete {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}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // harmadik szint, első jelenet {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}, // harmadik szint, második jelenet {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}, // harmadik szint, harmadik jelenet {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}, // harmadik szint, negyedik jelenet {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {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}, // harmadik szint, ötödik jelenet {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}, // harmadik szint, hatodik jelenet {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}, // harmadik szint, hetedik jelenet {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}, // harmadik szint, nyolcadik jelenet { 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}}}};
És ez az! készen áll a világ legnehezebb játékának befejezésére. Az alábbiakban a teljes Arduino kódot is csatoljuk.
Ajánlott:
A világ leghatékonyabb, hálózaton kívüli napelemes invertere: 3 lépés (képekkel)

A világ leghatékonyabb hálózaton kívüli napelemes invertere: a napenergia a jövő. A panelek sok évtizedig tarthatnak. Tegyük fel, hogy van egy hálózaton kívüli naprendszere. Van egy hűtőszekrény/fagyasztó, és egy csomó egyéb cucc, amellyel a gyönyörű távoli kabinban futhat. Nem engedheti meg magának, hogy kidobja az energiát
A világ irányítása a Google AIY segítségével: 8 lépés

A világ irányítása a Google AIY segítségével: A Google AIY Projects Voice készlet ingyenes, a The MagPi 2017. májusi nyomtatási számával együtt, és mostantól számos elektronikai beszállítótól is megvásárolhatja. Kit Hogyan lehet információkat kinyerni a hangból
Fényes világ (LED Globe): 4 lépés

Fényes világ (LED Globe): Ez volt a kezdeti elképzelés. Egy köbös földgömb, amely LED -es lámpatestet tartalmazna. Ez pusztán dekoráció, vagy egy dohányzóasztal középpontja (ha van ilyen, nekem nincs)
Greentent - A világ első mini hordozható zöldháza Arduino hőmérséklet és páratartalom méréssel: 3 lépés

Greentent - A világ első mini hordozható zöldháza Arduino hőmérséklet- és páratartalom -méréssel: Először eszembe jutott egy hordozható üvegház, amellyel éjszaka mozoghat, amikor meg akartam teremteni a módot arra, hogy egy kis kertet alakítsunk ki egy dobozban, ahol a hőmérséklet ellenőrzött és a páratartalom. Szóval késő este van, és el akarok menni egy boltba, hogy beszerezzem ezeket a
Irányítsd a világ minden tájáról az internetet az Arduino használatával: 4 lépés

Irányítás az egész világon az internet használatával Arduino használatával: Szia, Rithik vagyok. Internetes vezérlésű ledet készítünk a telefon használatával. Olyan szoftvereket fogunk használni, mint az Arduino IDE és a Blynk. Ez egyszerű, és ha sikerült, annyi elektronikus komponenst irányíthat, amennyit csak akar