INHOUDSOPGAWE:
- Stap 1: al die dele
- Stap 2: Hoe om die onderdele aan die Arduino te koppel
- Stap 3: vloeidiagram van die program
- Stap 4: Programmering van die joystick
- Stap 5: Die eerste vlak
- Stap 6: Botsingsopsporing
- Stap 7: Die laaste twee vlakke
Video: Herskep die moeilikste spel ter wêreld op die Arduino: 7 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Hierdie projek is gebaseer op 'n rekenaarspeletjie wat u aanlyn kan vind. Die naam is "Die wêreld se moeilikste spel." Ek kon dit op die Arduino herskep met behulp van 'n vier-module LED Matrix. In hierdie instruksies leer ek jou hoe om dit self te bou. Voordat ons te veel besonderhede bespreek, wil ek 'n vinnige oorsig gee van die stappe wat ek ondergaan het om hierdie speletjie te skep.
- Ek het al die nodige dele versamel.
- Ek het die dele met mekaar verbind.
- Ek het 'n skets geskryf wat die joystick gebruik het om die spelers se LED oor al die modules te beweeg.
- Ek het die eerste struikelblokke ontwerp en dit by die skets gevoeg sodat hulle die wêreld se moeilikste spel navolg.
- Ek voeg toe kode by om 'n botsing met die hindernisse op te spoor, wat die spel weer sal begin.
- En toe ontwerp ek nog twee vlakke van hindernisse.
Stap 1: al die dele
Hier is 'n lys van al die onderdele wat u benodig:
- 'N Arduino UNO en usb-aansluiting:
- 'N Viermodule 8x8: LED-matriks
- 'N Joystick:
- 10 manlike tot vroulike drade:
Stap 2: Hoe om die onderdele aan die Arduino te koppel
Hoe om die LED Matrix aan die Arduino te koppel
- GND gaan na GND
- VCC gaan na 5V
- DataIn gaan na digitale pen 12
- CLK gaan na digitale pen 11
- CS of LOAD gaan na digitale pen 10
Hoe om die joystick aan te sluit
- GND gaan na GND
- 5V gaan na 5V
- VRx gaan na analoog pin A0
- VRy gaan na analoog pen A1
- SW word nie gebruik nie
Die battery word gekoppel aan die 9v -aansluiting om die Arduino krag te gee
Stap 3: vloeidiagram van die program
Die ovaal dui die begin van die program aan.
Die eerste stap is om al die struikelblokke te definieer.
Die volgende twee stappe dui aan om die veranderlikes in te stel en al die modules aan te skakel.
Die volgende stap is om die LED's op die eerste vlak en enige ander veranderlikes te stel.
Vertoon vervolgens die vlak waarop die speler tans is.
Die ruit dui aan dat u die joystick lees om te sien in watter rigting dit gestoot word.
Beweeg die speler dan in die rigting waarin die joystick gedruk is.
Kyk of die speler met 'n hindernis gebots het.
As die speler 'n hindernis raak, gaan terug na die eerste vlak. Indien nie, kyk of die speler die einde van die vlak bereik het.
As die speler aan die einde van die vlak is, moet u na die volgende vlak gaan, en dan teruggaan na "Vertoon huidige vlak.". As hulle nie aan die einde is nie, beweeg die hindernisse en gaan terug na "Lees joystick."
Stap 4: Programmering van die joystick
Om die klein kolletjie wat die speler is, te skuif, het ons natuurlik 'n joystick nodig. en om die joystick in staat te stel om die speler eintlik te beweeg, moet ons dit in die Arduino IDE kodeer. U moet die LedControl -biblioteek insluit wat u kan vind deur na die sketsmenu> Biblioteke in te sluit> biblioteke te bestuur en na LedControl te soek. Hier is hoe die kode vir die joystick lyk.
#sluit "LedControl.h" in
int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Skep voorwerp vir vier modules int delaytime = 50; // spoed waarmee die spel int joystick_RtLt, joystick_UpDn loop; int spelers_x = 0; // spelers horisontale posisie van 0 tot 31 int spelers_y = 3; // spelers vertikale posisie van 0 tot 7 int ry, kolom, module; leemte opstelling () {initialize_modules (); // skakel aan en stel al vier LED -modules} leemte -lus () {move_player () in; // begin lus deur te kyk of die speler vertraging (vertragingstyd) beweeg; } ongeldig initialiseer_modules () {lc.stop (0, vals); // begin module 0 lc.setIntensity (0, 1); lc.stop (1, vals); // begin module 1 lc.setIntensity (1, 1); lc.stop (2, vals); // begin module 2 lc.setIntensity (2, 1); lc.stop (3, vals); // begin module 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // maak module 0} leeg move_player () {module = spelers_x/8 skoon; // definieer watter module die speler op kolom is = spelers_x%8; // definieer die kolom waar die speler op die module ry is = spelers_y; lc.setLed (module, ry, kolom, vals); // skakel led uit op die huidige posisie van die speler joystick_RtLt = analogRead (A0)/204 - 2; // lees X -joystick en kaart wissel van 2 tot -2 as (joystick_RtLt> 0) // wanneer joystick na die regte spelers_x ++ is; // gaan regs anders as (joystick_RtLt 0) // as joystick links is en nie aan die begin spelers_x--; // skuif links joystick_UpDn = analogRead (A1)/204 - 2; // lees Y-joystick en kaart wissel van 2 tot -2 as (joystick_UpDn 0) // as joystick af is en speler nie onder is nie spelers_y--; // skuif anders as (joystick_UpDn> 0 && spelers_y <7) // as joystick op is en speler nie bo -spelers is nie_y ++; // optrek module = spelers_x/8; // stel module aan spelers nuwe posisie kolom = spelers_x%8; // stel kolom vir spelers nuwe posisie ry = spelers_j; // stel ry vir spelers nuwe posisie lc.setLed (module, ry, kolom, waar); // skakel LED aan by die speler se nuwe posisie}
Noudat u die joystick bygevoeg het, laat ons aan die eerste hindernis werk!
Stap 5: Die eerste vlak
Goed, so nou is dit tyd om die hoofdeel van die program, die struikelblokke, in te gaan! Die struikelblokke is wat dit werklik die 'wêreld se moeilikste spel' maak. As u dus die spel wil speel, moet u dit by u kode voeg:
bytehindernis [VLAKKE] [SCENES] [COLUMNS] [ROWS] = {// drie vlakke, 8 tonele, 8 kollums, 8 rye
{{{1, 1, 1, 1, 1, 1, 0, 0}, // eerste vlak, eerste toneel {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}, // eerste vlak, tweede toneel {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}, // eerste vlak, derde toneel {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, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, // eers vlak, vierde toneel {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, 0}, // eerste vlak, vyfde toneel {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}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // eerste vlak, sesde toneel {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, 1, 1, 1, 1, 1, 1}, // eerste vlak, sewende toneel {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}, // eerste vlak, agtste toneel {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}}}, ongeldige opstelling () {initialize_modules (); // skakel aan en stel al vier LED -modules start_level (0) in; leemte -lus () {move_player (); // begin lus deur te kyk of speler beweeg as (botsing ()) {// kyk na botsingsvlak = 0; // as botsing waar is, stel vlak begin_vlak (vlak) terug; // herbegin spel} anders as (delay_count == obstakel_vertraging) {// as daar geen hindernis is nie, elke ander vertraging beweeg obstakel (); delay_count = 0; } anders delay_count ++; vertraging (vertragingstyd); // vertraging volgens spelspoed}
En dit is die eerste hindernis! As u dit as u eerste vlak verveeld, kan u die grepe altyd verander, onthou net dat u agt verskillende tonele moet hê! Kom ons gaan voort met die volgende stap, botsingsopsporing!
Stap 6: Botsingsopsporing
Hierdie stap is nog 'n belangrike deel van die spel, daarsonder sou daar nie veel uitdagings wees nie! jy kan net deur die hindernisse vleg sonder enige gevolge! dit sou tog nie lekker wees nie? so laat ons die spel meer uitdagend (en nog baie meer vermaakliker maak) deur hierdie afdeling van die program by te voeg:
leemte -lus () {
move_player (); // begin lus deur te kyk of speler beweeg as (botsing ()) {// kyk na botsingsvlak = 0; // as botsing waar is, stel vlak begin_vlak (vlak) terug; // herbegin spel} anders as (delay_count == obstakel_vertraging) {// as daar geen hindernis is nie, elke ander vertraging beweeg obstakel (); delay_count = 0; } anders delay_count ++; vertraging (vertragingstyd); // vertraging met spoed van spel} int botsing () {// kyk of speler 'n hindernis in toneelmodule getref het = spelers_x/8; kolom = spelers_x%8; ry = spelers_j; if (module> 0) if (hindernis [vlak] [toneel] [kolom] [ry] == 1) // as speler se posisie dieselfde is as hindernisretour (1); // botsing opgespoor terugkeer ware opbrengs (0); // geen botsingsopgawe vals nie}
En daar gaan jy! nou kan u die spel nog baie meer geniet! Nou gaan ek jou wys hoe om die laaste twee vlakke van die spel te programmeer! jy is amper klaar met hierdie instruksies, en ek is seker dat jy gereed is om dit te probeer!
Stap 7: Die laaste twee vlakke
Aan die einde van die instruksies, is hierdie laaste twee vlakke al wat u nodig het om hierdie speletjie te voltooi. Dan kan u dit self probeer! hier is die kode:
bytehindernis [VLAKKE] [SCENES] [COLUMNS] [ROWS] = {// tweede en derde vlak, 8 tonele, 8 kolomme, 8 rye
{{{1, 0, 0, 0, 0, 0, 0, 1}, // tweede vlak, eerste toneel {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}, // tweede vlak, tweede toneel {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}, // tweede vlak, derde toneel {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}, // tweede vlak vierde toneel {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}, // tweede vlak, fif toneel {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}, // tweede vlak, sesde toneel {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}, // tweede vlak, sewende toneel {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}, // tweede vlak agtste toneel {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}, // derde vlak, eerste toneel {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}, // derde vlak, tweede toneel {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}, // derde vlak, derde toneel {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}, // derde vlak, vierde toneel {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}, // derde vlak, vyfde toneel {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}, // derde vlak, sesde toneel {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}, // derde vlak, sewende toneel {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}, // derde vlak, agtste toneel { 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}}}};
En dit is dit! jy is gereed om die wêreld se moeilikste spel te voltooi. Hieronder is ook die volledige Arduino -kode aangeheg.
Aanbeveel:
Die doeltreffendste sonnet-omvormer ter wêreld: 3 stappe (met foto's)
Die doeltreffendste sonnet-omskakelaar ter wêreld: sonkrag is die toekoms. Panele kan dekades lank duur. Gestel u het 'n sonnestelsel wat nie van die netwerk af is nie. U het 'n yskas/vrieskas en 'n klomp ander goed om by u pragtige afgeleë kajuit te loop. Jy kan nie bekostig om energie weg te gooi nie
Maak die kleinste enkele gebalanseerde anker -koptelefoon ter wêreld: 7 stappe (met foto's)
Maak die kleinste enkele gebalanseerde anker -koptelefoon ter wêreld: dit is 'n projek om waarskynlik die kleinste enkele BA -oordopjes met oudiofiele klankgehalte te maak. Die ontwerp is geïnspireer deur Final F7200, 'n $ 400+ hoë resolusie IEM op Amazon. Terwyl DIY -komponente beskikbaar is op die ope mark, kan hulle dit in
Draai dit om! - die domste spel ter wêreld?: 7 stappe (met foto's)
Draai dit om! - die wêreld se domste spel?: Oorsprong: dit is 'n spel wat ek oor 'n paar jaar ontwikkel het 2018-2019 Dit was oorspronklik 'Stupid Flip' genoem. en het uit my belangstelling gekom om eenvoudige en prettige interaktiewe speletjies te skep wat ook gebruik kan word vir die onderrig van kodering. Dit is abo
DIY MusiLED, musiek gesinkroniseerde LED's met 'n klik Windows en Linux-toepassing (32-bis en 64-bis). Maklik om te herskep, maklik om te gebruik, maklik om te vervoer: 3 stappe
DIY MusiLED, musiek gesinkroniseerde LED's met 'n klik Windows en Linux-toepassing (32-bis en 64-bis). Maklik om te herskep, maklik om te gebruik, maklik om te vervoer: met hierdie projek kan u 18 LED's (6 rooi + 6 blou + 6 geel) aan u Arduino-bord koppel en die real-time seine van u rekenaar analiseer en dit na die LED's om hulle te verlig volgens die klopeffekte (Snare, High Hat, Kick)
Regstreeks monitor die waarde van u sensor vanaf enige plek ter wêreld: vier stappe
Live monitor die waarde van u sensor van oral in die wêreld: ek het 'n boodskap gekry oor die WhatsApp -nommer van techiesms oor hulp vir die maak van een projek. Die projek was om die druk wat op die druksensor uitgeoefen is, te meet en dit op 'n slimfoon te vertoon. Dus het ek gehelp om die projek te maak en besluit om 'n dosent te maak