Orodha ya maudhui:
Video: Mchezo wa Nyoka wa Arduino OLED: Hatua 3
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:51
Halo na karibu, kwa mafunzo yetu ya jinsi ya kutengeneza na mchezo wa OLED wa arduino, mradi huu ulitokea wakati tulikuwa tunajaribu kufanya mchezo wetu wa kwanza kabisa na arduino, soooo, tulifikiri ni wapi bora kuanza kuliko Nyoka wa nokia classic (vizuri angalau mwamba wa nyoka:)).
Nini Utahitaji
Vifaa
Arduino UNO au Clone
OLED Onyesho
4 Diode
Kinzani ya 500-1k
Vifungo 4 vya mtawala
Puzzzo ya Piezo isiyo na maana
hiari
Bodi ya Mkate isiyo na Solder
Tafadhali kumbuka viungo hivi ni kwa mfano tu
Hatua ya 1: Mzunguko
Katika picha hapo juu unaweza kuona mzunguko wetu, tunatumia pini d3 kwenye arduino kama pini ya ombi la kusumbua ili arduino itoe kipaumbele kwa kusoma pembejeo za mtawala ambazo ni d4 d5 d6 d7. Misingi ya mzunguko ni kwamba kitufe cha mwelekeo kinabanwa ambacho huenda juu 5v hii inamsha pini ya ombi la kukatiza (waya wa zambarau ya d3) na pini ya mwelekeo inayolingana, kazi ya kukatiza inaita kazi ya mwelekeo wa sasisho na nambari hiyo inamwongoza nyoka ipasavyo. Pini 9 hutumiwa kama pini ya sauti kwani ni PWM (~ mpigo wa mpigo wa mpigo) ambayo imeunganishwa moja kwa moja na piezo ya 5v kwenye pini + na - inarudi kwa 0v / chini.
(FYI kwenye arduino uno na clones tu d2 na d3 zinaweza kufanya kama pini za ombi za kukatiza).
Pini za mwelekeo:
d4 Juu ORANGE
d5 Chini PINK
d6 kushoto BLUE
d7 Kulia hudhurungi
d9 sauti KIJIVU
Kila kitufe kina unganisho la unganisho la 5v na pato ambalo limeunganishwa kwanza kwa pembejeo zao za dijiti kwenye arduino, pato hili hilo la kila kitufe linaunganishwa na diode yake mwenyewe, tunatumia diode kukomesha usambazaji wa voltage kurudi kwa vifungo vingine na kuziwasha. Kwenye mwisho wa cathode (-) ya diode zote 4 tunajiunga pamoja ili kuunda makutano ya pato ambayo huunganisha kwa d3 na kisha kupitia kipinga hadi 0v / ardhi kuvuta pini za arduino chini ili usiondoke pini zinazoelea wakati hazipo imeamilishwa.
(FYI pini inayoelea inaweza kupokea voltage ya phantom na kusababisha tabia isiyo ya kawaida)
Pini 2 za Analog hutumiwa kuendesha onyesho, hizi ni pini za vifaa vya arduino i2c.
A5 imeunganishwa na SCL NJANO
A4 imeunganishwa na SDA KIJANI
Pato la + 5v na 0v (ardhi) kutoka kwa arduino hutumiwa kama chanzo cha nguvu kwa mzunguko mzima ambao unaweza kutumiwa na usb au chaja ya simu.
Hatua ya 2: Kanuni
// ------------------------ Michezo ya NYOKA YA ANJAWARE Kwa msaada kutoka kwa watu wavu -------
# pamoja
# pamoja na // https://github.com/adafruit/Adafruit-GFX-Library # pamoja # https://github.com/adafruit/Adafruit-GFX-Library // set set (upana, urefu) Adafruit_SSD1306 onyesho (128, 64); // fafanua pini za kuingiza hizi ni pini kwenye arduino ambazo hazibadiliki hivyo #fafanua #fafanua INTPIN 3 // pini 2 na 3 tu zinaweza kuwa pini za kuingiliana kwenye UNO #fafanua UPPIN 4 // hizi ni pini zilizounganishwa tp switch husika #fafanua DWNPIN 5 #fafanua LFTPIN 6 #fafanua RHTPIN 7 #fafanua SND 9 // fafanua mwelekeo #fafanua DIRUP 1 // maadili haya ndio "nyoka" anaangalia kuamua- #fafanua DIRDOWN 2 // mwelekeo ambao nyoka atasafiri # fafanua DIRLEFT 3 #fafanua KIWANGO 4
// kuweka vigezo vya kifungo
// volitile cos tunahitaji kuisasisha na kuingiliana ili iweze kuwa na thamani yoyote ya mzunguko
// haijawahi kuwa juu kuliko 4 kwa hivyo unahitaji tu 8bit int kuokoa rasilimali zenye uint8_t zilizobanwa = 0; bool butup = 0; kupungua kwa bool = 0; // tunatumia hii kuweka ukweli wa "kugundua" ni mwelekeo upi ulibonyeza bool butleft = 0; bool butright = 0;
// nyoka ints
byte nyokaPosX [30]; // safu ya kutengeneza mwili wa nyoka bytePosY [30];
int nyokaX = 30; // nafasi ya kichwa cha nyoka
int nyokaY = 30; int nyokaSize = 1; // hesabu ya ukubwa wa nyoka imepunguzwa kwa saizi ya safu
// ints ya ulimwengu
uint8_t duniaMinX = 0; // hizi zinaweka mipaka ya eneo la kucheza
uint8_t ulimwenguMaxX = 128; uint8_t worldMinY = 10; uint8_t ulimwenguMaxY = 63;
// kukusanya scran (chakula) na nafasi ya scran
scrol ya boolAte = 0; uint8_t scranPosX = 0; uint8_t scranPosY = 0;
// alama tofauti
playcore ndefu = 0; alama ya juu ndefu = 30; // weka alama ya juu hadi 3 kukusanya kama mahali pa kuanzia
// ------------------ -------------
batili iliyokatizwa () {kucheleweshwa (150); // kuchelewa kidogo kwa kiboreshaji cha ulinzi cha "bounce" (); } // ------------------ sasisha thamani ya mwelekeo kutoka kwa bonyeza kitufe // Serial.println ("uppdatering mwelekeo"); butup = kusoma kwa dijiti (UPPIN); // angalia ni pembejeo gani iliyoenda juu na weka bool husika kweli butdown = digitalRead (DWNPIN); taratibuft = digitalRead (LFTPIN); sawa = digitalRead (RHTPIN); // hizi ikiwa kanuni zinaangalia ni pembejeo gani iliyoenda juu na inaingiza thamani inayofaa katika "kushinikiza kifungo" // kutofautisha, kutofautisha huku kunaelekeza mwelekeo wa harakati ikiwa (butup == true) {buttonpressed = DIRUP; // Serial.println ("UP imeshinikizwa"); // Serial.println (kifungo kilichopigwa); butup = uwongo; toni (SND, 1500, 10); } ikiwa (butdown == kweli) {buttonpressed = DIRDOWN; // Serial.println ("imesisitizwa chini"); // Serial.println (kifungo kilichopigwa); butdown = uwongo; toni (SND, 1500, 10); }
ikiwa (polepole == ni kweli)
{imebanwa = BIDHAA; // Serial.println ("imesisitizwa LEFT"); // Serial.println (kifungo kilichopigwa); taratibuft = uongo; toni (SND, 1500, 10); } ikiwa (butright == true) {buttonpressed = DIRRIGHT; // Serial.println ("HAKI imesisitizwa"); // Serial.println (kifungo kilichopigwa); butright = uongo; toni (SND, 1500, 10); }}
// -------------------------- chora njia za kuonyesha ------------------ -----------------
sasisha batiliDisplay () // chora alama na muhtasari
{// Serial.println ("Sasisha Uonyesho");
onyesha.fillRect (0, 0, onyesha upeo () - 1, 8, NYEUSI);
onyesha.setTextSize (0); onyesha.setTextColor (NYEUPE); // alama za kuchora onyesho.setCursor (2, 1); onyesho.print ("Alama:"); onyesho.print (Kamba (playcore, DEC)); Kuweka Mshale (66, 1); onyesho.print ("Juu:"); onyesho.print (String (highscore, DEC)); // eneo la kucheza // pos 1x, 1y, 2x, 2y, onyesho la rangi. Mchoro (0, 0, 127, 0, NYEUPE); // onyesho la juu sana la mpaka.drawLine (63, 0, 63, 9, WHITE); // alama ya kuonyesha seperator.drawLine (0, 9, 127, 9, NYEUPE); // chini ya onyesho la mpaka wa maandishi.drawLine (0, 63, 127, 63, WHITE); // onyesho la mpaka wa chini.drawLine (0, 0, 0, 63, WHITE); // onyesho la mpaka wa kushoto.drawLine (127, 0, 127, 63, WHITE); // mpaka wa kulia
}
// ----------------------------------- sasisha eneo la kucheza ---------- --------------------
tupu updateGame () // hii inasasisha onyesho la eneo la mchezo
{onyesha. UsafiDisplay ();
onyesha.drawPixel (scranPosX, scranPosY, WHITE);
scranAte = scranFood ();
// kuangalia taratibu za nyoka
ikiwa (outOfArea () || kujibadilisha mwenyewe)
{ shindano limekwisha(); }
// nyoka ya kuonyesha
kwa (int i = 0; i0; i--) {snakePosX = nyokaPosX [i-1]; nyokaPosY = nyokaPosY [i-1]; } // // ongeza pikseli ya ziada kwa nyoka ikiwa (scranAte) {snakeSize + = 1; nyokaPosX [nyokaSize-1] = nyokaX; nyokaPosY [nyokaSize-1] = nyokaY; }
kubadili (kushinikiza kifungo) // ilikuwa nyokaDirection
{kesi DIRUP: nyokaY- = 1; kuvunja; kesi DIRDOWN: nyokaY + = 1; kuvunja; kesi DIRLEFT: nyokaX- = 1; kuvunja; kesi DIRRIGHT: nyokaX + = 1; kuvunja; } nyokaPosX [0] = nyokaX; nyokaPosY [0] = nyokaY; sasishaDisplay (); onyesha.display (); // --------------------- weka skanati -------------------
mahali patupuScran ()
{scranPosX = bila mpangilio (worldMinX + 1, worldMaxX-1); scranPosY = bila mpangilio (worldMinY + 1, worldMaxY-1); } // ------------------------ SCRAN ATE POINT UP ------ {{(snakeX == scranPosX && nyokaY == scranPosY) toni (SND, 2000, 10); sasishaDisplay (); mahaliScran (); kurudi 1; } mwingine {kurudi 0; }} // --------------------- nje ya eneo ---------------------- bool outOfArea () {kurudi nyokaX = worldMaxX || nyokaY = worldMaxY; } //---------------------- shindano limekwisha----------------------- --- mchezo batiliOver () {uint8_t rectX1, rectY1, rectX2, rectY2; rectX1 = 38; rectY1 = 28; rectX2 = 58; rectY2 = 12; onyesha wazi Cleplay (); Kuweka Mshale (40, 30); onyesha.setTextSize (1); toni (SND, 2000, 50); onyesho.print ("MCHEZO"); toni (SND, 1000, 50); onyesho.print ("OVER"); ikiwa (playcore> = alama ya juu) // angalia ikiwa alama iko juu kuliko alama ya juu {highscore = playcore; // single ikiwa ni sheria ya kusasisha alama za juu} kwa (int i = 0; i <= 16; i ++) // hii ni kuchora rectanlges karibu na mchezo juu ya {display.drawRect (rectX1, rectY1, rectX2, rectY2, WHITE); Serial.println ("ikiwa kitanzi"); onyesha.display (); rectX1- = 2; // kuhama juu na saizi 2 rectY1- = 2; rectX2 + = 4; // kuhama juu ya saizi 2 kutoka hatua ya mwisho rectY2 + = 4; toni (SND, i * 200, 3); } onyesha. onyesha (); // Screen Futa baada ya umaarufu juu ya rectX1 = 0; // kuweka nafasi ya kuanza kwa laini rectY1 = 0; rectX2 = 0; rectY2 = 63; kwa (int i = 0; i <= 127; i ++) {uint8_t cnt = 0; kuonyesha.drawLine (rectX1, rectY1, rectX2, rectY2, BLACK); rectX1 ++; rectX2 ++; onyesha.display (); } onyesha. Onyesha wazi (); playcore = 0; // kuweka upya nyoka na maelezo ya mchezaji nyokaSize = 1; nyokaX = onyesha upana () / 2; nyokaY = onyesha. urefu () / 2; subiri kwa habari (); // subiri mchezaji aanze mchezo} // ------------------------- subiri kitanzi cha waandishi ---------- --------------- batili ya kusubiriForPress () {bool waiting = 0; // kitanzi kinamalizika whjen hii ni kweli onyesho. waziDisplay (); wakati (kusubiri == 0) {drawALineForMe (NYEUPE); // chora sare nyeupe ya laini nyeupeALineForMe (NYEUSI); // chora laini nyeusi bila mpangilio ili skrini isijaze kabisa onyesho jeupe. JazaRect (19, 20, 90, 32, NYEUSI); // msingi wazi wa onyesho la maandishi.setTextColor (NYEUPE); Kuweka Mshale (35, 25); onyesha.setTextSize (2); // kubwa ya kuonyesha font.println ("NYOKA"); // x y w h r kol onyesha.drawRoundRect (33, 22, 62, 20, 4, NYEUPE); // onyesho la Nyoka mpaka. RrawRect (19, 20, 90, 32, WHITE); // kisanduku cha mpaka - onyesho 3. Seti Mshale (28, 42); onyesha.setTextSize (0); // font kurudi kwenye onyesho la kawaida.println ("bonyeza kitufe chochote"); onyesha.display (); kusubiri = digitalRead (INTPIN); // angalia kuona ikiwa kitufe cha kusubiri kilichobadilishwa kitabadilika hadi kuishia 1 wakati kifungo kimefungwa = 0; // kitufe cha kuweka upya bonyeza}} // -------------------- - CHORA rangi ya kuingiza laini ya uint8_t -------------- ----- utupu wa kutekaALineForMe (uint8_t clr) {uint8_t line1X, line1Y, line2X, line2Y = 0; // weka uratibu wa nasibu kwa laini kisha uichora // kutofautisha sio chini tena line1X = random (worldMinX + 1, worldMaxX-1); line1Y = nasibu (worldMinY + 1, worldMaxY-1); line2X = bila mpangilio (worldMinX + 1, worldMaxX-1); line2Y = nasibu (worldMinY + 1, worldMaxY-1); onyesha.drawLine (line1X, line1Y, line2X, line2Y, clr); } // ------------------------------------- mgongano wa mgongano ---- -----------------------
kwa (byte i = 4; i <snakeSize; i ++) {if (snakeX == snakePosX && snakeY == snakePosy ) {kurudi 1; toni (SND, 2000, 20); toni (SND, 1000, 20); } kurudi 0; }
// --------------------------------- KUWEKA -------------- -------------------------------
kuanzisha batili () {kuchelewesha (100); // tu toa vitu nafasi ya "boot" // Serial.begin (9600); // ondoa alama hii ikiwa unataka kuona onyesho la matokeo ya serial. anza (SSD1306_SWITCHCAPVCC, 0x3C); onyesha wazi Cleplay (); // anza na onyesho safi la onyesho.setTextColor (NYEUPE); // weka saizi ya mzunguko wa rangi ya maandishi n.k kuonyesha. onyesha.setTextWrap (uwongo); onyesha.dim (0); // kuweka pinMode ya kuonyesha ukali (INTPIN, INPUT); // weka bandari sahihi kwa pembejeo za pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT); // hii ndio amri ya kuingiliana hii "inasimamisha" arduino kusoma pembejeo // amri- kazi- pini-kazi kutekeleza hali ya pini ambatishaInterrupt (digitalPinToInterrupt (INTPIN), kukatizwa, KUPANDA); // Serial.println ("Usanidi Umepita"); subiri kwa habari (); // onyesha mahali pa skrini ya kuanzisha nyokaScran (); // weka chakula cha kwanza} // --------------------- MTANDAO KUU ---- ---------------------- kitanzi batili () {updateGame (); // kazi hii ndiyo inayobeba nambari kuu}
Hatua ya 3:
Ilipendekeza:
Mchezo wa Mkasi wa Mkamba wa Arduino wa Mkononi Kutumia Mchezo wa 20x4 LCD Onyesha na I2C: Hatua 7
Mchezo wa Mkasi wa Mwamba wa Arduino wa Mkononi Kutumia Uonyesho wa LCD 20x4 na I2C: Halo kila mtu au labda niseme " Hello World! Huu ni mchezo wa Mikasi ya Mwamba wa Arduino wa Mkononi kwa kutumia onyesho la LCD la I2C 20x4. Mimi
Matrix ya NeoPixels: Mchezo wa Nyoka: Hatua 4
Matrix ya NeoPixels: Mchezo wa Nyoka: Je! Bado unakumbuka mchezo wa nyoka ambao tulicheza kwenye sanduku la mchezo wetu au rununu wakati wa utoto wetu? Leo tutajifunza jinsi ya kutengeneza mchezo wa nyoka na Matrix 8 * 8 ya NeoPixels. Tunachagua Arduino uno kama kituo cha kudhibiti na moduli ya kuzuka kwa Joystick ili kushirikiana
Kidhibiti cha Mchezo wa Arduino Kulingana na DIY - Arduino PS2 Mdhibiti wa Mchezo - Kucheza Tekken na DIY Arduino Gamepad: Hatua 7
Kidhibiti cha Mchezo wa Arduino Kulingana na DIY | Arduino PS2 Mdhibiti wa Mchezo | Kucheza Tekken na DIY Arduino Gamepad: Halo jamani, kucheza michezo kila wakati ni raha lakini kucheza na Mdhibiti wako wa mchezo wa dhana ya DIY ni ya kufurahisha zaidi. Kwa hivyo tutafanya Mdhibiti wa mchezo kutumia arduino pro micro katika mafundisho haya
Mchezo wa Nyoka: Hatua 4
Mchezo wa Nyoka: Hello Guys, Leo nitakuonyesha jinsi ya kutengeneza mchezo wa msingi wa nyoka huko Python na kushangaza marafiki katika likizo hii. Hii ni rahisi sana unahitaji tu ni chatu 3 na usakinishaji wa pygame. Katika mafunzo haya nimeongeza video juu ya jinsi ya kusanikisha pygame. Baada ya
Mchezo wa Nyoka katika C: Hatua 8
Mchezo wa Nyoka katika C: Mchezo wa nyoka ulikuwa maarufu katika simu za zamani za rununu ambazo zinaweza kutolewa kwa urahisi kwa kutumia mpango wa c. Ili kujenga mradi huu unahitaji uelewa wa kimsingi wa syntax ya c. Mfano: kwa kitanzi, wakati kitanzi, nk Kwa kujenga mradi wa mchezo huu programu yako