Obsah:
- Krok 1: Všechny části
- Krok 2: Jak připojit součásti k Arduinu
- Krok 3: Vývojový diagram programu
- Krok 4: Programování joysticku
- Krok 5: První úroveň
- Krok 6: Detekce kolize
- Krok 7: Poslední dvě úrovně
Video: Obnovení nejtěžší hry na světě na Arduinu: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Tento projekt je založen na počítačové hře, kterou můžete najít online. Jmenuje se „Nejtěžší hra na světě“. Byl jsem schopen jej znovu vytvořit na Arduinu pomocí čtyřmodulové LED matice. V tomto návodu vás naučím, jak si jej postavit sami. Než se dostaneme k příliš mnoha podrobnostem, chci poskytnout rychlý přehled o krocích, kterými jsem tuto hru vytvořil.
- Shromáždil jsem všechny potřebné díly.
- Spojil jsem díly dohromady.
- Napsal jsem skicu, která pomocí joysticku přesunula LED hráče přes všechny moduly.
- Navrhl jsem první překážky a přidal je do náčrtu, aby napodobovaly nejtěžší hru na světě.
- Poté jsem přidal kód pro detekci kolize s překážkami, což hru restartuje.
- A pak jsem navrhl další dvě úrovně překážek.
Krok 1: Všechny části
Zde je seznam všech potřebných dílů:
- Konektor Arduino UNO a USB:
- Čtyři moduly 8x8: LED matice
- Joystick:
- 10 kabelů samec-samice:
Krok 2: Jak připojit součásti k Arduinu
Jak připojit LED matici k Arduinu
- GND jde do GND
- VCC jde na 5V
- DataIn jde na digitální pin 12
- CLK přechází na digitální pin 11
- CS nebo LOAD přejde na digitální pin 10
Jak připojit joystick
- GND jde do GND
- 5V jde na 5V
- VRx jde na analogový pin A0
- VRy jde na analogový pin A1
- SW se nepoužívá
Baterie se připojuje ke konektoru 9 V a dodává energii Arduinu
Krok 3: Vývojový diagram programu
Ovál označuje začátek programu.
Prvním krokem je definovat všechny překážky.
Další dva kroky ukazují nastavení proměnných a zapnutí všech modulů.
Dalším krokem je nastavení LED na první úroveň a další proměnné.
Dále zobrazte úroveň, na které je hráč aktuálně.
Kosočtverec ukazuje čtení joysticku, aby zjistil, jakým směrem se tlačí.
Poté přesuňte přehrávač jakýmkoli směrem, na který byl joystick zatlačen.
Zkontrolujte, zda hráč nenarazil na překážku.
Pokud hráč narazí na překážku, vraťte se na první úroveň. Pokud ne, zkontrolujte, zda hráč dosáhl konce úrovně.
Pokud je hráč na konci úrovně, nastavte ji na další úroveň a pak se vraťte na „Zobrazit aktuální úroveň“. Pokud nejsou na konci, přesuňte překážky a vraťte se na „Číst joystick“.
Krok 4: Programování joysticku
Samozřejmě, abychom posunuli malou tečku, kterou je hráč, potřebujeme joystick. a abychom umožnili joysticku skutečně přesunout hráče, musíme jej kódovat v Arduino IDE. Musíte zahrnout knihovnu LedControl, kterou najdete v nabídce skici> Zahrnout knihovny> spravovat knihovny a vyhledat LedControl. Zde vypadá kód joysticku.
#include "LedControl.h"
int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Vytvoří objekt pro čtyři moduly int delaytime = 50; // rychlost, jakou hra běží int joystick_RtLt, joystick_UpDn; int hráči_x = 0; // hráči horizontální pozice od 0 do 31 int hráči_y = 3; // hráči vertikální pozice od 0 do 7 int řádek, sloupec, modul; void setup () {initialize_modules (); // zapněte a nastavte všechny čtyři LED moduly} void loop () {move_player (); // spusťte smyčku kontrolou, zda se hráč pohybuje se zpožděním (zpoždění); } void initialize_modules () {lc.shutdown (0, false); // spouští modul 0 lc.setIntensity (0, 1); lc.shutdown (1, false); // spouští modul 1 lc.setIntensity (1, 1); lc.shutdown (2, false); // spouští modul 2 lc.setIntensity (2, 1); lc.shutdown (3, false); // spouští modul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // vymaže modul 0} neplatný move_player () {modul = players_x/8; // definuje, ve kterém modulu se hráč nachází, sloupec = players_x%8; // definuje sloupec, kde je hráč na řádku modulu = players_y; lc.setLed (modul, řádek, sloupec, false); // vypnout LED na aktuální pozici hráče joystick_RtLt = analogRead (A0)/204 - 2; // čtení X -joysticku a rozsahu mapy od 2 do -2 if (joystick_RtLt> 0) // když je joystick vpravo players_x ++; // jděte doprava jinak if (joystick_RtLt 0) // pokud je joystick vlevo a ne na začátku players_x--; // pohyb doleva joystick_UpDn = analogRead (A1)/204 - 2; // čte Y-joystick a rozsah mapy od 2 do -2 if (joystick_UpDn 0) // pokud je joystick dole a hráč není dole hráči_y--; // pohyb dolů dolů if (joystick_UpDn> 0 && players_y <7) // pokud je joystick nahoře a hráč není na špičce players_y ++; // jít nahoru modul = players_x/8; // nastavení modulu na hráče nová pozice sloupec = players_x%8; // nastavení sloupce na hráče nová pozice řádek = players_y; // nastavení řádku hráčům nová pozice lc.setLed (modul, řádek, sloupec, true); // zapnout LED na nové pozici hráče}
Nyní, když jste přidali joystick, pojďme pracovat na první překážce!
Krok 5: První úroveň
Dobře, tak teď je čas se dostat k hlavní části programu, překážkám! Překážky jsou tím, co ve skutečnosti dělá tuto „nejtěžší hru světa“. Pokud tedy chcete hru skutečně hrát, musíte do kódu přidat toto:
bajtová překážka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// tři úrovně, 8 scén, 8 sloupců, 8 řádků
{{{1, 1, 1, 1, 1, 1, 0, 0}, // první úroveň, první 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}, // první ú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}, // první úroveň, třetí 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}, // první úroveň, čtvrtá scéna {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}, // první úroveň, pátá 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}, // první úroveň, šestá 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}, // první úroveň, sedmá 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}, // první úroveň, osmá 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é nastavení () {initialize_modules (); // zapněte a nastavte všechny čtyři LED moduly start_level (0); void loop () {move_player (); // spusťte smyčku kontrolou, zda se hráč pohybuje, pokud (kolize ()) {// kontrola úrovně kolize = 0; // pokud kolize true, resetovat úroveň start_level (úroveň); // restart hry} else if (delay_count == delay_count = 0; } else delay_count ++; zpoždění (doba zpoždění); // zpoždění podle rychlosti hry}
A to je první překážka! Pokud vás to začne nudit jako první úroveň, můžete vždy změnit bajty, ale pamatujte, že potřebujete osm různých scén! Pokračujme k dalšímu kroku, detekci kolizí!
Krok 6: Detekce kolize
Tento krok je další důležitou součástí hry, protože bez ní by nebyla velká výzva! mohli byste si jednoduše protnout překážky bez jakýchkoli následků! to by nebyla moc zábava ne? přidejme tedy tuto část programu:
prázdná smyčka () {
move_player (); // spusťte smyčku kontrolou, zda se hráč pohybuje, pokud (kolize ()) {// kontrola úrovně kolize = 0; // pokud kolize true, resetovat úroveň start_level (úroveň); // restart hry} else if (delay_count == delay_count = 0; } else delay_count ++; zpoždění (doba zpoždění); // zpoždění podle rychlosti hry} int kolize () {// zkontrolujte, zda hráč narazil na překážku v modulu scény = players_x/8; sloupec = hráči_x%8; řada = players_y; if (modul> 0) if (překážka [úroveň] [scéna] [sloupec] [řádek] == 1) // pokud je pozice hráče stejná jako návrat překážky (1); // detekována kolize return true return (0); // žádná kolize return false}
A je to! nyní si můžete hru užít mnohem více! Nyní vám ukážu, jak naprogramovat poslední dvě úrovně hry! s tímto návodem jste téměř hotovi a jsem si jist, že jste připraveni to vyzkoušet!
Krok 7: Poslední dvě úrovně
Blížili se ke konci instruktáže, tyto poslední dvě úrovně jsou vše, co potřebujete k dokončení této hry. Pak si to můžete sami vyzkoušet! zde je kód:
byte překážka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// druhá a třetí úroveň, 8 scén, 8 sloupců, 8 řádků
{{{1, 0, 0, 0, 0, 0, 0, 1}, // druhá úroveň, první 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, 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ň, třetí 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, 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}, // čtvrtá scéna druhé úrovně {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ň, pad 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ň, šestá 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, 1, 0, 0}, // druhá úroveň, sedmá 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}, // osmá scéna druhé úrovně {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, 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}, // třetí úroveň, první 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}, // třetí ú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}, // třetí úroveň, třetí 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}, // třetí ú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}, // třetí úroveň, pátá 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}, // třetí úroveň, šestá scéna {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 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}, // třetí úroveň, sedmá 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}, // třetí úroveň, osmá 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 to je vše! jste připraveni dokončit nejtěžší hru na světě. Níže je také připojen celý kód Arduino.
Doporučuje:
Obnovení starého napájecího zdroje pro PC: 12 kroků (s obrázky)
Obnova starého napájecího zdroje pro PC: Od devadesátých let 20. století vtrhly do světa počítače. Situace trvá dodnes. Starší počítače, do roku 2014 … 2015, jsou z velké části mimo provoz. Protože každý počítač má napájecí zdroj, velké množství z nich je opuštěno ve formě odpadu
Obnovení rozbité vázy pomocí Kintsugi: 8 kroků
Obnovení rozbité vázy pomocí Kintsugi: Tento malý smrad (vidět na dalším obrázku) mi rozbil vázu a místo abych ji odhodil, rozhodl jsem se ji obnovit pomocí kintsugi
Obnovení solárního zahradního světla ze sítě: 7 kroků
Obnovení solární zahradní světelné energie ze sítě: Toto opravdu navazuje na některé z mých předchozích projektů napájených ze sítě, ale úzce souvisí s dříve zdokumentovaným LED Teardown. Nyní jsme všichni vyšli a koupili je v létě, ty malé květinové hraniční světla, která jsou solární pohon
Obnovení/dobití nadměrně vybitých baterií LiPo (lithium polymer)!: 6 kroků
Obnova/dobíjení Přebité baterie LiPo (lithium polymer)!: Baterie LiPo by nikdy neměly být vybíjeny pod 3,0 V/článek, jinak by mohlo dojít k jejich trvalému poškození. Mnoho nabíječek vám nedovolí ani nabít LiPo baterii pod 2,5 V/článek. Pokud tedy omylem necháte letadlo/auto příliš dlouho, nemáte nízkou úroveň
Obnovení psacího stroje Olivetti: 6 kroků
Obnovení psacího stroje Olivetti: Vybral jsem si toto, protože jsem vždy chtěl používat psací stroj a možná ho používat ve škole pro eseje nebo něco podobného. Také jsem si vybral toto, protože tento psací stroj používal můj dědeček a můj táta. Chtěl jsem si nechat psací stroj a