Cov txheej txheem:
Video: Arduino OLED Snake Game: 3 Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:26
Nyob zoo thiab txais tos, rau peb cov lus qhia yuav ua li cas thiab arduino OLED Game, txoj haujlwm no tau los txog thaum peb tau sim ua peb thawj qhov kev ua si nrog arduino, soooo, peb xav tias qhov twg zoo dua los pib dua nokia classic Snake (zoo ntawm tsawg kawg yog tus nab clone:)).
Koj Yuav Tsum Tau Dab Tsi
Khoom siv
Arduino UNO lossis clone
OLED Zaub
4 Cov diode
500-1k resistor
4 cov nyees khawm
Passive Piezo buzzer
yeem
Solderless BreadBoard
Thov nco ntsoov cov kev txuas no yog piv txwv nkaus xwb
Kauj ruam 1: Circuit Court
Hauv daim duab saum toj no koj tuaj yeem pom peb lub voj voog, peb siv tus pin d3 ntawm arduino ua qhov cuam tshuam thov tus pin kom cov arduino yuav muab qhov tseem ceeb rau kev nyeem cov khoom siv uas yog d4 d5 d6 d7. Cov hauv paus ntawm Circuit yog tias lub khawm taw qhia tau nyem uas mus rau siab 5v qhov no ua rau cuam tshuam cuam tshuam thov tus pin (d3 ntshav xaim) thiab tus pin coj mus, qhov cuam tshuam kev ua haujlwm hu ua hloov tshiab kev ua haujlwm thiab tus lej ntawd txav tus nab raws. Tus pin 9 tau siv ua tus pin zoo li nws yog PWM (~ mem tes dav tes taws los piav) uas txuas ncaj qha rau 5v piezo ntawm + tus pin thiab - rov qab mus rau 0v/hauv av.
(FYI ntawm arduino uno thiab clones tsuas yog d2 thiab d3 tuaj yeem ua raws li cuam tshuam thov pins).
Kev taw qhia pins:
d4 nce ORANGE
d5 Down PINK
d6 Sab laug BLUE
d7 Txoj cai xim av
d9 suab zoo
Txhua lub pob muaj 5v kev txuas txuas thiab cov zis uas txuas nrog ua ntej rau lawv cov lej digital ntawm arduino, tib qhov txiaj ntsig ntawm txhua lub pob yog tom qab txuas nrog nws tus kheej diode, peb siv lub diodes kom nres qhov hluav taws xob rov qab mus rau lwm cov nyees khawm thiab qhib lawv. Ntawm cov cathode (-) kawg ntawm tag nrho 4 diodes peb koom ua ke los tsim cov khoom sib txuas uas txuas rau d3 thiab tom qab ntawd dhau los ntawm tus tiv thaiv mus rau 0v/lub ntiaj teb los rub cov arduino pins qis kom tsis txhob tawm ntawm cov pins ntab thaum tsis yog qhib
(FYI tus pin ntab tuaj yeem tau txais phantom voltage thiab ua rau tus cwj pwm txawv txawv)
2 analog pins tau siv los tsav cov zaub, cov no yog cov khoom kho vajtse arduino i2c pins.
A5 txuas nrog SCL YELLOW
A4 txuas nrog SDA GREEN
Qhov +5v thiab 0v (lub ntiaj teb) tso tawm los ntawm arduino tau siv los ua lub hauv paus ntawm lub zog rau tag nrho cov hluav taws xob uas tuaj yeem siv tau los ntawm usb lossis them lub xov tooj.
Kauj ruam 2: Txoj Cai
// ------------------------ ANJAWARE SNAKE Games Nrog kev pab los ntawm cov neeg net --------------- -------
#suav nrog
#include // https://github.com/adafruit/Adafruit-GFX-Library #include // https://github.com/adafruit/Adafruit-GFX-Library // zaub teeb (dav, siab) Adafruit_SSD1306 zaub (128, 64); // txhais tus lej nkag cov no yog cov pins ntawm arduino lawv tsis hloov pauv li #define #define INTPIN 3 // tsuas yog tus pin 2 thiab 3 tuaj yeem cuam tshuam tus pin ntawm UNO #define UPPIN 4 // cov no yog cov pins txuas nrog tp cuam tshuam hloov #define DWNPIN 5 #define LFTPIN 6 #define RHTPIN 7 #define SND 9 // txhais cov lus qhia #define DIRUP 1 // cov txiaj ntsig no yog dab tsi "nab" zoo li txiav txim siab- #define DIRDOWN 2 // kev coj ua tus nab yuav mus # txhais DIRLEFT 3 #define DIRRIGHT 4
// teeb khawm hloov pauv
// volitile cos peb xav tau nws hloov kho nrog kev cuam tshuam yog li tuaj yeem yog ib qho me ntsis ntawm cov voj voog
// yeej tsis siab dua 4 yog li tsuas yog xav tau 8bit int kom txuag tau cov peev txheej hloov pauv uint8_t khawm = 0; bool tab = 0; bool tab = 0; // peb siv qhov no los teeb tsa qhov tseeb kom "txheeb xyuas" qhov kev taw qhia nias bool butleft = 0; bool butright = 0;
// nab ints
byte snakePosX [30]; // array ua lub cev ntawm nab byte snakePosY [30];
int nabX = 30; // nab lub taub hau txoj haujlwm
int nabY = 30; int nabSize = 1; // nab loj suav suav rau qhov loj ntawm cov kab
// ntiaj teb ints
uint8_t worldMinX = 0; // cov no teev cov kev txwv ntawm thaj chaw ua si
uint8_t worldMaxX = 128; uint8_t worldMinY = 10; uint8_t worldMaxY = 63;
// sau scran (zaub mov) thiab txoj haujlwm ntawm scran
bool scranAte = 0; uint8_t scranPosX = 0; uint8_t scranPosY = 0;
// qhab nia sib txawv
ntev playscore = 0; highscore ntev = 30; // teeb tsa cov qhab nia siab rau 3 sau ua qhov pib
// --------------------------- qhov no yog qhov kev cuam tshuam cuam tshuam ntawm kev nce hluav taws xob ------------ ---------------
tsis muaj dabtsis cuam tshuam () {ncua sijhawm (150); // qeeb me ntsis ntxiv rau "thaws" tiv thaiv kev hloov kho tshiab (); } // ------------------ hloov kho tus nqi taw qhia los ntawm khawm nias ----------------- tsis muaj qhov hloov kho tshiab () { // Serial.println ("kev hloov kho tshiab"); butup = digitalRead (UPPIN); // txheeb xyuas cov tswv yim twg tau nce siab thiab teeb tsa cov ntsiab lus tseem ceeb bool tseeb butdown = digitalRead (DWNPIN); butleft = digitalRead (LFTPIN); butright = digitalRead (RHTPIN); // cov no yog cov neeg saib xyuas saib qhov twg nkag mus siab thiab nkag mus rau tus nqi cuam tshuam hauv "khawm" // sib txawv, qhov sib txawv no hais qhia qhov kev taw qhia ntawm kev txav mus yog (tab sis == muaj tseeb) {buttonpressed = DIRUP; // Serial.println ("UP nias"); // Serial.println (khawm); butup = tsis tseeb; suab (SND, 1500, 10); } yog (butdown == muaj tseeb) {khawm = DIRDOWN; // Serial.println ("DOWN nias"); // Serial.println (khawm); butdown = tsis tseeb; suab (SND, 1500, 10); }
yog tias (butleft == muaj tseeb)
{buttonpressed = DIRLEFT; // Serial.println ("LEFT nias"); // Serial.println (khawm); butleft = tsis tseeb; suab (SND, 1500, 10); } yog (tab sis == muaj tseeb) {khawm = DIRRIGHT; // Serial.println ("RIGHT pressed"); // Serial.println (khawm); butright = tsis tseeb; suab (SND, 1500, 10); }}
// -------------------------- kos cov duab niaj hnub ------------------ -----------------
void updateDisplay () // kos cov qhab nia thiab cov qauv
{// Serial.println ("Hloov Kho Zaub");
display.fillRect (0, 0, display.width ()-1, 8, BLACK);
display.setTextSize (0); display.setTextColor (WHITE); // kos cov qhab nia display.setCursor (2, 1); display.print ("Cov qhab nia:"); display.print (Txoj hlua (playscore, DEC)); display.setCursor (66, 1); display.print ("Siab:"); display.print (Txoj hlua (qhab nia siab, DEC)); // kos thaj chaw ua si // pos 1x, 1y, 2x, 2y, xim tso tawm.drawLine (0, 0, 127, 0, WHITE); // heev ciam teb sab saum toj display.drawLine (63, 0, 63, 9, DAWB); // qhab nia sib cais display.drawLine (0, 9, 127, 9, WHITE); // hauv qab cov ntawv ciam teb display.drawLine (0, 63, 127, 63, WHITE); // hauv qab ciam teb tso tawm.drawLine (0, 0, 0, 63, WHITE); // sab laug ciam teb display.drawLine (127, 0, 127, 63, WHITE); // txoj cai ciam teb
}
// ----------------------------------- hloov chaw ua si ---------- ----------------------- Ua Tsaug Ntau
tsis muaj dabtsis updateGame () // qhov no hloov kho thaj chaw ua si
{display.clearDisplay ();
display.drawPixel (scranPosX, scranPosY, WHITE);
scranAte = scranFood ();
// txheeb xyuas cov txheej txheem nab
yog (outOfArea () || selfCollision ())
{gameOver (); }
// tso saib nab
rau (int i = 0; i0; i--) {snakePosX = snakePosX [i-1]; snakePosY = snakePosY [i-1]; } // ntxiv pixel ntxiv rau tus nab yog (scranAte) {snakeSize+= 1; snakePosX [snakeSize-1] = snakeX; snakePosY [snakeSize-1] = snakeY; }
hloov (khawm khawm) // yog nabDirection
{case DIRUP: snakeY- = 1; tawg; case DIRDOWN: snakeY+= 1; tawg; case DIRLEFT: snakeX- = 1; tawg; rooj plaub DIRRIGHT: snakeX+= 1; tawg; } snakePosX [0] = nabX; snakePosY [0] = snakeY; updateDisplay (); display.display (); // --------------------- tso lub suab --------------------------
tsis muaj qhov chawScran ()
{scranPosX = random (worldMinX+1, worldMaxX-1); scranPosY = random (worldMinY+1, worldMaxY-1); } // ------------------------ SCRAN ATE POINT UP ---------------- bool scranFood () {yog (snakeX == scranPosX && snakeY == scranPosY) {playscore = playscore+10; suab (SND, 2000, 10); updateDisplay (); qhov chawScran (); rov 1; } lwm {xa rov qab 0; }} // --------------------- tawm ntawm thaj chaw ---------------------- bool outOfArea () {return snakeX = worldMaxX || snakeY = worldMaxY; } // ---------------------- game dhau ----------------------- --- void gameOver () {uint8_t rectX1, rectY1, rectX2, rectY2; rect1 = 38; rect1 = 28; rectX2 = 58; rectY2 = 12; display.clearDisplay (); display.setCursor (40, 30); display.setTextSize (1); suab (SND, 2000, 50); display.print ("GAME"); suab (SND, 1000, 50); display.print ("QHOV"); yog (playscore> = highscore) // txheeb xyuas seb puas tau qhab nia siab dua li cov qhab nia siab {highscore = playscore; // ib leeg yog hais txog qhov hloov kho cov qhab nia siab} rau (int i = 0; i <= 16; i ++) // qhov no yog txhawm rau kho cov teeb tsa ib puag ncig kev ua si dhau {display.drawRect (rectX1, rectY1, rectX2, rectY2, WHITE); Serial.println ("yog lub voj"); display.display (); rectX1- = 2; // hloov dua los ntawm 2 pixels rectY1- = 2; rectX2+= 4; // hloov dua 2 pixels los ntawm qhov kawg rectY2+= 4; suab (SND, i*200, 3); } display.display (); // Screen So tom qab lub koob meej dhau rectX1 = 0; // teeb tsa txoj haujlwm pib ntawm kab rectY1 = 0; rectX2 = 0; rectY2 = 63; rau (int kuv = 0; kuv <= 127; kuv ++) {uint8_t cnt = 0; display.drawLine (rectX1, rectY1, rectX2, rectY2, BLACK); rectX1 ++; rectX2 ++; display.display (); } display.clearDisplay (); playscore = 0; // rov pib nab thiab cov ntsiab lus neeg ua si snakeSize = 1; snakeX = display.width ()/2; nabY = display.height ()/2; tosForPress (); // tos rau tus neeg ua si pib game} // ------------------------- tos rau nias lub voj ---------- --------------- tsis muaj dab tsi waitForPress () {bool tos = 0; // loop xaus whjen qhov no yog qhov tseeb display.clearDisplay (); thaum (tos == 0) {drawALineForMe (WHITE); // kos kab kab dawb uas tsis raug kos drawALineForMe (BLACK); // kos kab kab dub dub kom lub vijtsam tsis tiav cov duab dawb.fillRect (19, 20, 90, 32, BLACK); // khoob tom qab rau cov ntawv nyeem display.setTextColor (WHITE); display.setCursor (35, 25); display.setTextSize (2); // loj dua font display.println ("SNAKE"); // x y w h r col display.drawRoundRect (33, 22, 62, 20, 4, DAWB); // ciam Snake display.drawRect (19, 20, 90, 32, DAWB); // ciam teb lub thawv - 3 display.setCursor (28, 42); display.setTextSize (0); // font rov mus rau qhov qub display.println ("nias ib qho yuam sij"); display.display (); tos = digitalRead (INTPIN); // txheeb xyuas seb puas tseem ceeb nias tos yuav hloov mus rau 1 qhov xaus thaum khawm khawm = 0; // pib dua khawm nias}} // -------------------- Kos ib kab ntawv nkag xim xim uint8_t -------------- ----- void drawALineForMe (uint8_t clr) {uint8_t line1X, line1Y, line2X, line2Y = 0; // teeb tsa kev sib koom ua ke tsis raug rau kab ces kos nws // sib txawv tsis muaj tsawg dua tsis muaj kab1X = random (worldMinX+1, worldMaxX-1); line1Y = random (worldMinY+1, worldMaxY-1); line2X = random (worldMinX+1, worldMaxX-1); line2Y = random (worldMinY+1, worldMaxY-1); display.drawLine (kab 1X, kab 1Y, kab 2X, kab 2Y, clr); } // ------------------------------------- kev sib tsoo sib tsoo -------- ---------------------------- Ua tsaug
rau (byte i = 4; i <snakeSize; i ++) {if (snakeX == snakePosX && snakeY == snakePosy ) {return 1; suab (SND, 2000, 20); suab (SND, 1000, 20); } rov qab 0; }
// -------------------------------- SETUP --------------- ---------------------- -----------------------
void teeb () {ncua (100); // tsuas yog muab sijhawm rau "khau raj" // Serial.begin (9600); // uncheck qhov no yog tias koj xav pom cov ntawv tso tawm tso tawm display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); // pib nrog cov zaub huv huv display.setTextColor (WHITE); // teeb tsa cov ntawv xim sib hloov me me thiab lwm yam display.setRotation (0); display.setTextWrap (tsis tseeb); display.dim (0); // teeb tsa cov zaub brighness pinMode (INTPIN, INPUT); // teeb tsa cov chaw nres nkoj kom raug rau kev nkag mus pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT); // qhov no yog cov lus txib cuam tshuam qhov no "nres" arduino los nyeem cov ntawv nkag // hais kom ua-ua haujlwm-tus lej-ua haujlwm kom ua tiav-mob ntawm tus pin txuasInterrupt (digitalPinToInterrupt (INTPIN), cuam tshuam, RISING); // Serial.println ("Teeb Dhau"); tosForPress (); // tso saib tus nab pib qhov screen screenScran (); // tso thawj qhov khoom noj} // --------------------- MAIN LOOP ----------------- ---------------------- tsis muaj dab tsi voj () {updateGame (); // txoj haujlwm no yog dab tsi nqa tus lej tseem ceeb}
Kauj ruam 3:
Pom zoo:
NeoPixels Matrix Game Snake Game: 4 Cov Kauj Ruam
NeoPixels Matrix Game Snake Game: Koj puas tseem nco tau game nab uas peb tau ua ntawm peb lub npov game lossis mobile thaum peb tseem me? Hnub no peb yuav kawm paub yuav ua li cas ua si nab nrog 8*8 NeoPixels Matrix. Peb xaiv Arduino uno ua lub chaw tswj hwm thiab Joystick breakout module los ua ke
Arduino Raws DIY Game Controller - Arduino PS2 Game Controller - Ua Si Tekken Nrog DIY Arduino Gamepad: 7 Kauj Ruam
Arduino Raws DIY Game Controller | Arduino PS2 Game Controller | Ua Si Tekken Nrog DIY Arduino Gamepad: Nyob zoo cov neeg, ua si game yog ib txwm lom zem tab sis ua si nrog koj tus kheej DIY kev cai game Controller yog kev lom zem dua.Yog li peb yuav ua tus tswj kev ua si siv arduino pro micro hauv cov lus qhia no
Snake Game: 4 Kauj Ruam
Snake Game: Nyob Zoo Cov Phooj Ywg, Hnub no kuv yuav qhia koj yuav ua li cas thiaj ua tau qhov kev ua si nab nyob hauv Python thiab ua rau cov phooj ywg xav tsis thoob nyob rau lub caij so no. Nov yog qhov yooj yim heev koj tsuas xav tau yog nab nab 3 thiab pygame nruab. Hauv cov lus qhia no kuv tau ntxiv cov vis dis aus yuav ua li cas rau nruab pygame. Tom qab
Game of Snake in C: 8 Kauj Ruam
Game of Snake in C: Snake game tau nrov nyob hauv cov xov tooj qub uas tuaj yeem siv tau yooj yim heev devolped siv c program. Txhawm rau tsim txoj haujlwm no koj xav tau kev nkag siab yooj yim ntawm c syntax. Piv txwv: rau lub voj, thaum lub voj, thiab lwm yam Nrog kev tsim hom kev ua si no koj qhov programmin
Arduino Snake ntawm VGA Saib: 5 Kauj Ruam
Arduino Snake ntawm VGA Saib: Zoo … Kuv yuav Arduino. Thaum pib, kev nqis peev tau txhawb siab nrog qee yam uas yuav ua rau kuv tus ntxhais nyiam ua haujlwm. Txawm li cas los xij, raws li nws muab tawm, qhov no yog qhov lom zem dua los ua si rau kuv Tom qab ua si ib puag ncig nrog ua LED's