Obsah:
- Krok 1: Všetky diely
- Krok 2: Ako pripojiť diely k Arduinu
- Krok 3: Vývojová schéma programu
- Krok 4: Programovanie joysticku
- Krok 5: Prvá úroveň
- Krok 6: Detekcia kolízií
- Krok 7: Posledné dve úrovne
Video: Obnovenie najťažšej hry na svete na Arduine: 7 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
Tento projekt je založený na počítačovej hre, ktorú môžete nájsť online. Jeho názov je „Najťažšia hra na svete“. Podarilo sa mi ho znova vytvoriť na Arduine pomocou štvormodulovej LED matice. V tomto návode vás naučím, ako si ho postaviť sami. Predtým, ako sa dostaneme k príliš mnohým podrobnostiam, chcem poskytnúť rýchly prehľad o krokoch, ktorými som prešiel pri vytváraní tejto hry.
- Pozbieral som všetky potrebné diely.
- Spojil som diely dohromady.
- Napísal som skicu, ktorá pomocou joysticku posúvala LED diódy hráčov cez všetky moduly.
- Navrhol som prvé prekážky a pridal ich do náčrtu, aby napodobňovali najťažšiu hru na svete.
- Potom som pridal kód na detekciu kolízie s prekážkami, ktorý hru reštartuje.
- A potom som navrhol ďalšie dve úrovne prekážok.
Krok 1: Všetky diely
Tu je zoznam všetkých potrebných častí:
- Konektor Arduino UNO a USB:
- Štyri moduly 8x8: matica LED https://www.banggood.com/MAX7219-Dot-Matrix-Module..
- Joystick:
- 10 drôtov mužského až ženského pohlavia:
Krok 2: Ako pripojiť diely k Arduinu
Ako pripojiť maticu LED k Arduinu
- GND ide na GND
- VCC ide na 5V
- DataIn ide na digitálny pin 12
- CLK prechádza na digitálny pin 11
- CS alebo LOAD prejde na digitálny pin 10
Ako pripojiť joystick
- GND ide na GND
- 5V ide na 5V
- VRx ide na analógový pin A0
- VRy ide na analógový pin A1
- SW sa nepoužíva
Batéria sa pripája k 9 V konektoru, aby poskytla napájanie Arduino
Krok 3: Vývojová schéma programu
Ovál označuje začiatok programu.
Prvým krokom je definovať všetky prekážky.
Nasledujúce dva kroky naznačujú nastavenie premenných a zapnutie všetkých modulov.
Ďalším krokom je nastavenie LED na prvú úroveň a ďalšie premenné.
Ďalej zobrazte úroveň, na ktorej je prehrávač aktuálne.
Kosoštvorec označuje čítanie joysticku, aby zistil, akým smerom sa tlačí.
Potom posuňte prehrávač v ľubovoľnom smere, v ktorom bol stlačený joystick.
Skontrolujte, či hráč nenarazil do prekážky.
Ak hráč narazí na prekážku, vráťte sa na prvú úroveň. Ak nie, skontrolujte, či hráč dosiahol koniec úrovne.
Ak je prehrávač na konci úrovne, nastavte ju na ďalšiu úroveň a potom sa vráťte k časti „Zobraziť aktuálnu úroveň“. Ak nie sú na konci, presuňte prekážky a vráťte sa k „Prečítajte si joystick“.
Krok 4: Programovanie joysticku
Samozrejme, aby sme posunuli malú bodku, ktorou je hráč, potrebujeme joystick. a aby mohol joystick skutočne pohybovať prehrávačom, musíme ho kódovať v Arduino IDE. Musíte zahrnúť knižnicu LedControl, ktorú nájdete v ponuke skici> Zahrnúť knižnice> spravovať knižnice a vyhľadať LedControl. Takto vyzerá kód joysticku.
#include "LedControl.h"
int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Vytvorí objekt pre štyri moduly int delaytime = 50; // rýchlosť, akou hra beží joystick_RtLt, joystick_UpDn; int hráči_x = 0; // hráči horizontálna poloha od 0 do 31 int hráči_y = 3; // hráči vertikálna pozícia od 0 do 7 v riadku, stĺpci, module; void setup () {initialize_modules (); // zapnite a nastavte všetky štyri LED moduly} void loop () {move_player (); // spustenie cyklu kontrolou, či sa hráč pohybuje s oneskorením (oneskorenie); } void initialize_modules () {lc.shutdown (0, false); // spustenie modulu 0 lc.setIntensity (0, 1); lc.shutdown (1, false); // spustenie modulu 1 lc.setIntensity (1, 1); lc.shutdown (2, false); // spustenie modulu 2 lc.setIntensity (2, 1); lc.shutdown (3, false); // spustenie modulu 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // vymaže modul 0} neplatný move_player () {modul = players_x/8; // definuje, v ktorom module je hráč v stĺpci = players_x%8; // definuje stĺpec, kde sa hráč nachádza v riadku modulu = players_y; lc.setLed (modul, riadok, stĺpček, nepravda); // vypnutie LED na aktuálnej pozícii hráča joystick_RtLt = analogRead (A0)/204 - 2; // čítanie X -joysticku a rozsahu mapy od 2 do -2 if (joystick_RtLt> 0) // keď je joystick vpravo hráči_x ++; // choďte doprava inak, ak (joystick_RtLt 0) // ak je joystick vľavo a nie na začiatku hráči_x--; // pohyb vľavo joystick_UpDn = analogRead (A1)/204 - 2; // čítanie Y-joysticku a rozsahu mapy od 2 do -2 if (joystick_UpDn 0) // ak je joystick dole a hráč nie je dole hráči_y--; // posun nadol, ak (joystick_UpDn> 0 && players_y <7) // ak je joystick hore a hráč nie je na vrchole players_y ++; // ísť hore modul = players_x/8; // stĺpec modulu pre hráčov nová pozícia stĺpec = hráči_x%8; // nastavenie stĺpca pre hráčov nová pozícia riadok = players_y; // nastavenie riadka pre hráčov nová pozícia lc.setLed (modul, riadok, stĺpček, true); // zapnite LED na novej pozícii hráča}
Teraz, keď ste pridali joystick, začnime pracovať na prvej prekážke!
Krok 5: Prvá úroveň
Dobre, tak teraz je čas sa dostať k hlavnej časti programu, k prekážkam! Práve prekážky robia z tejto „najťažšej hry na svete“. Ak teda chcete hru skutočne hrať, musíte do kódu pridať toto:
bajtová prekážka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// tri úrovne, 8 scén, 8 stĺpcov, 8 riadkov
{{{1, 1, 1, 1, 1, 1, 0, 0}, // prvá úroveň, prvá scéna {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}, { 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, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // prvá úroveň, druhá scéna {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}, {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}, // prvá úroveň, tretia scéna {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, 0}, // prvý úroveň, štvrtá scéna {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, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, // prvá úroveň, piata scéna {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, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // prvá úroveň, šiesta scéna {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, 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}, // prvá úroveň, siedma scéna {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, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // prvá úroveň, ôsma scéna {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} 0}}}, neplatné nastavenie () {initialize_modules (); // zapnite a nastavte všetky štyri LED moduly start_level (0); void loop () {move_player (); // spustenie slučky kontrolou, či sa hráč pohybuje, ak (Collision ()) {// kontrola úrovne kolízie = 0; // ak je kolízia pravdivá, resetujte úroveň start_level (úroveň); // reštart hry} else if (delay_count == prekážka_delay) {// ak nedôjde ku kolízii presun prekážky každé druhé zdržanie moveobstacle (); delay_count = 0; } else delay_count ++; oneskorenie (čas oneskorenia); // oneskorenie podľa rýchlosti hry}
A to je prvá prekážka! Ak vás to začne nudiť ako prvá úroveň, bajty môžete kedykoľvek zmeniť, nezabúdajte, že musíte mať osem rôznych scén! Pokračujme k ďalšiemu kroku, detekcii kolízií!
Krok 6: Detekcia kolízií
Tento krok je ďalšou dôležitou súčasťou hry, bez ktorej by nebola veľká výzva! mohli by ste sa jednoducho prepletať cez prekážky bez akýchkoľvek následkov! to by nebola veľká zábava, však? urobme preto hru náročnejšou (a oveľa zábavnejšou!) pridaním tejto sekcie programu:
prázdna slučka () {
move_player (); // spustenie slučky kontrolou, či sa hráč pohybuje, ak (Collision ()) {// kontrola úrovne kolízie = 0; // ak je kolízia pravdivá, resetujte úroveň start_level (úroveň); // reštart hry} else if (delay_count == prekážka_delay) {// ak nedôjde ku kolízii presun prekážky každé druhé zdržanie moveobstacle (); delay_count = 0; } else delay_count ++; oneskorenie (čas oneskorenia); // oneskorenie podľa rýchlosti hry} int Collision () {// kontrola, či hráč narazil na prekážku v scénickom module = players_x/8; stĺpec = hráči_x%8; riadok = players_y; if (modul> 0) if (prekážka [úroveň] [scéna] [stĺpec] [riadok] == 1) // ak je pozícia hráča rovnaká ako návrat prekážky (1); // zistená kolízia return true return (0); // žiadna kolízia return false}
A ideš na to! teraz si môžete hru užiť oveľa viac! Teraz vám ukážem, ako naprogramovať posledné dve úrovne hry! S týmto návodom ste takmer hotoví a som si istý, že ste pripravení to vyskúšať!
Krok 7: Posledné dve úrovne
Blížili sa ku koncu pokynov a tieto dve posledné úrovne sú všetko, čo potrebujete na dokončenie tejto hry. Potom si to môžete vyskúšať sami! tu je kód:
bajtová prekážka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// druhá a tretia úroveň, 8 scén, 8 stĺpcov, 8 riadkov
{{{1, 0, 0, 0, 0, 0, 0, 1}, // druhá úroveň, prvá scéna {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, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // druhá úroveň, druhá scéna {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, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // druhá úroveň, tretia scéna {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, 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} 0, // štvrtá scéna druhej úrovne {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} 0, // druhá úroveň, päť scéna {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}, // druhá úroveň, šiesta scéna {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, 0, 0, 1, 0, 0}, // druhá úroveň, siedma scéna {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, 0, 0, 1, 0}, // ôsma scéna druhej úrovne {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}, // tretia úroveň, prvá scéna {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}, // tretia úroveň, druhá scéna {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}, // tretia úroveň, tretia scéna {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}, // tretia úroveň, štvrtá scéna {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 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}, // tretia úroveň, piata scéna {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}, // tretia úroveň, šiesta scéna {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, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // tretia úroveň, siedma scéna {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}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // tretia úroveň, ôsma scéna { 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}}}};
A je to! ste pripravení pokúsiť sa dokončiť najťažšiu hru na svete. Nižšie je priložený aj úplný kód Arduino.
Odporúča:
Obnovenie prevádzky multimetra z 2. svetovej vojny: 3 kroky
Obnovenie funkčného stavu multimetra z 2. svetovej vojny: Pred niekoľkými rokmi som do svojej zbierky získal tento raný multimetr Simpson Electric. Prišlo v čiernom koženkovom puzdre, ktoré bolo vzhľadom na svoj vek vo výbornom stave. Patentový dátum amerického patentového úradu na pohyb meradla je 1936
Telefón založený na Arduine (prototyp): 7 krokov
Telefón na báze Arduino (prototyp): Ahoj všetci, dnes sa v tomto návode pozrieme na telefón založený na arduino. Tento telefón je prototypom, ktorý je stále vo vývoji. Zdrojový kód je opensource, ktokoľvek môže kód upraviť. Funkcie v telefóne: 1. Hudba 2. Videá 3.
Obnovenie počítača: 3 kroky
Obnovenie počítača: Ak je váš počítač so systémom Windows zaseknutý tak, že ho musíte reštartovať, alebo sa Windows/Prieskumník súborov načítava alebo nezobrazuje správne, skúste použiť tieto nápady na reštartovanie programu Prieskumník, čím sa počítač v zásade obnoví. Urobil som to v roku 2017 a ešte som to nezverejnil
Obnovenie slnečného svetla zo záhradného napájania zo siete: 7 krokov
Obnovenie slnečného svetla napájaného zo siete: To skutočne nadväzuje na niektoré z mojich predchádzajúcich projektov napájaných zo siete, ale úzko súvisí s predtým zdokumentovaným LED Teardown. Teraz sme všetci vyšli von a kúpili sme ich v lete, tie malé kvetinové hraničné svetlá, ktoré sú solárne napájanie
Obnovenie prenosného počítača: 4 kroky
Obnovenie prenosného počítača: Nedávno som dostal powerbook poslednej generácie, môj prvý notebook. Aj keď zálohujem svoje údaje, aj tak by som ich radšej neukradol. Alebo ak mi ho niekto ukradne, rád by som ho získal späť. Keď som hľadal online bezplatné riešenie, našiel som LoJa