Obsah:

Obnovenie najťažšej hry na svete na Arduine: 7 krokov
Obnovenie najťažšej hry na svete na Arduine: 7 krokov

Video: Obnovenie najťažšej hry na svete na Arduine: 7 krokov

Video: Obnovenie najťažšej hry na svete na Arduine: 7 krokov
Video: Высокая плотность 2022 2024, Júl
Anonim
Image
Image

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.

  1. Pozbieral som všetky potrebné diely.
  2. Spojil som diely dohromady.
  3. Napísal som skicu, ktorá pomocou joysticku posúvala LED diódy hráčov cez všetky moduly.
  4. Navrhol som prvé prekážky a pridal ich do náčrtu, aby napodobňovali najťažšiu hru na svete.
  5. Potom som pridal kód na detekciu kolízie s prekážkami, ktorý hru reštartuje.
  6. A potom som navrhol ďalšie dve úrovne prekážok.

Krok 1: Všetky diely

Všetky diely
Všetky diely
Všetky diely
Všetky diely

Tu je zoznam všetkých potrebných častí:

  1. Konektor Arduino UNO a USB:
  2. Štyri moduly 8x8: matica LED https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. Joystick:
  4. 10 drôtov mužského až ženského pohlavia:

Krok 2: Ako pripojiť diely k Arduinu

Ako pripojiť diely k Arduinu
Ako pripojiť diely k Arduinu

Ako pripojiť maticu LED k Arduinu

  1. GND ide na GND
  2. VCC ide na 5V
  3. DataIn ide na digitálny pin 12
  4. CLK prechádza na digitálny pin 11
  5. CS alebo LOAD prejde na digitálny pin 10

Ako pripojiť joystick

  1. GND ide na GND
  2. 5V ide na 5V
  3. VRx ide na analógový pin A0
  4. VRy ide na analógový pin A1
  5. 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

Vývojový diagram programu
Vývojový diagram 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: