
Агуулгын хүснэгт:
2025 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2025-01-23 15:00


Энэхүү гарын авлагад бид Adafruit_GFX.c номын санг ашиглан bitmap -ийг тоглоомын спрайт хэлбэрээр хэрхэн ашиглах талаар авч үзэх болно. Бидний бодож болох хамгийн энгийн тоглоом бол хажуу тийш гүйдэг эгнээгээр солигддог машины тоглоом юм, эцэст нь манай бета шалгагч ба туслах кодлогч "Reckless Racer" гэж нэрлэхээр шийдсэн бөгөөд энэ нь хурдны замаар буруу замаар явах нь маш болгоомжгүй юм.
Манай хэлхээний загварыг дээрх зургуудад оруулсан бөгөөд хэлхээ хэрхэн ажилладаг талаар тайлбарласан Могойн зааварчилгааны сүүлийн төсөл/зааварчилгаанд дэлгэрэнгүй бичсэн болно.
бид шаардах болно
Adafruit_GFX
Paint.net
Arduino IDE windowslinux
мөн бусад тоног төхөөрөмжийн талаархи Могойн хичээлийг үзнэ үү.
Хангамж
Могойн тоглоом
Алхам 1: Paint.net суулгах



Програм хангамж үнэгүй тул бид Paint. Net -ийг эндээс татаж авч болно.
Paint.net -ийг суулгахын тулд татаж авсан програмаа давхар товшоод дараа нь эерэгээр хариулна уу, тийм ээ, зөвшөөрч байна, дээрх зургууд танд заавар өгөх болно.
Алхам 2: Энгийн цацах дэлгэц зурах



Paint.net дээр байхдаа Файл, дараа нь шинэ товчлуурыг дарж шинэ зураг үүсгэн, зургийн хэмжээг 1260x620 болгож тохируулна уу (эхний зургийг үзнэ үү) Шинэ хуудас гарч ирэхэд хар дарагчаар зөвхөн цагаан, цагаан хоёр өнгийг ашиглан дэлгэцийг зурна уу. хэрэгсэл (зураг2), Дэлгэцийн дэлгэцэн дээрх зургаа зурах (эсвэл наах) зурган дээр дараад дараа нь хэмжээг нь өөрчилнө үү (image4), гарч ирэх цонхонд хэмжээг нь 1260x620 болгож 126x62 болгон өөрчилнө үү (зураг 5) OK дарна уу.
Дараа нь Файл цэс дээр дараад дараа нь хадгална уу (pic6).
Файлын төрөл цэснээс гарч ирэх үед BMP (bitmap) -ийг сонгоно уу.).
Алхам 3: BMP -ийг C Bitmap файл болгон хөрвүүлэх




Одоо бид өөрсдийн зургийг arduino ойлгох боломжтой формат руу хөрвүүлэх шаардлагатай байна, гэхдээ үүнийг хийх олон хэрэгсэл байгаа боловч миний marlin вэбсайтын битмап хөрвүүлэгч хэрэгсэл болох "очих" …
marlinfw.org/tools/u8glib/converter.html
Тиймээс бид энэ хэсгийг pic1 -д үзүүлсэн вэбсайтыг нээхийн тулд дээрх холбоосыг ашиглан эхлүүлж байна
Файл сонгох дээр дарж өмнө нь үүсгэсэн bitmap -ийг сонгоно уу (pic2)
marlin bitmap хөрвүүлэгч нь таны зургийг автоматаар c код болгон хөрвүүлэх бөгөөд кодыг тодруулах ёстой кодыг хоёр товшоод, хулганы баруун товчийг дараад хуулбарыг дарна уу (pic3)
Дараа нь бид хулганы баруун товчийг дараад шинэ текст баримт бичгийг үүсгэнэ (pic4)
шинэ баримт бичгийг хоёр удаа дарна уу, нээхэд хулганы баруун товчийг дараад кодыг буулгана уу (p5)
Дараа нь бид кодын дээд хэсгийн ойролцоох мөрийг оруулах ёстой #include энэ нь bitmap өгөгдлийг arduino дээрх флэш санах ойд хадгалах боломжийг олгодог бөгөөд дараа нь бид #define өргөн, өндөр, нэрийг өөрчилж ашиглахад хялбар болгож өөрчилдөг. Зураг 6 дээр
бид тэдгээрийг санамсаргүй байдлаар үүсгэсэн тэмдэгтүүдээс нэрсийг нь доорх доогуур зурсан жишээ болгон өөрчилдөг
#LOGOWIDTH -ийг тодорхойлох
#LOGOHEIGHT -ийг тодорхойлох
const unsigned char LOGOPIC PROGMEM
Дараагийн файлыг дараад дараа нь хадгалж, файлыг log.c хэлбэрээр хадгалж, тэмдэглэлийн дэвтэрийг хаагаад logo.c дээр хулганы баруун товчийг дараад хуулна уу.
Алхам 4: DrawBitmap ашиглан лого харуулах



Одоо бид arduino IDE -ийг ачаалж, шинэ ноорог үүсгэж logoexample.ino гэж нэрлээд хадгална, дараа нь arduino -д хууран мэхлэхийн тулд файлын цэсийг дараад хадгалаад, төслийн хавтсанд буцаж очоод.c файлд буулгана уу. (pic2), дараа нь цуцлах дээр дарна уу, энэ нь файлыг буулгахын тулд фолдерыг үзэх шаардлагатай болно.
Дараах кодыг arduino IDE руу оруулна уу эсвэл ino татаж аваарай.
(бид хуулж буулгахын оронд бичихийг зөвлөж байна, эсвэл доорх файлуудыг ашиглах нь хамгийн сайн арга юм)
#include /* энэ нь таны хаана хадгалахаас хамаарч өөр өөр байх болно
ino ихэвчлэн C: / Users / ~ хэрэглэгчийн нэр / Documents / Arduino / project ~ нэр хавтсанд байдаг
тэгээд л бид битийн зургаа ингэж холбож өгч байна */
#оруулах
#оруулах
uint8_t bmpX, bmpY = 0; /* 2 X 8 битийн бүхэл тоонд санах ой нөөцлөх, бидэнд ердөө 8 битийн инт хэрэгтэй
утга нь хэзээ ч 128 (пиксел) -ээс хэтрэхгүй тул бид 8 битийн инт ашиглан зай хэмнэх боломжтой (хамгийн их утга нь 255) */
хүчингүй тохиргоо ()
{саатал (100); // дэлгэц гэх мэтийг дэлгэц дээр асаахад цаг өгөх.begin (SSD1306_SWITCHCAPVCC, 0x3C); // энэ нь дэлгэцийн дэлгэцийг эхлүүлэхийн тулд юм.clearDisplay (); // хоосон дэлгэцээс эхэл}
/* Та эдгээр сэтгэгдлийг лавлах зорилгоор бичих шаардлагагүй гэдгийг анхаарна уу.
Бидний анхаарлаа төвлөрүүлэх гэж буй тушаал бол дэлгэц юм. (bmpX бол дэлгэцийн X тэнхлэгийн утга бөгөөд bitmap -ийн X бэхэлгээний цэг байх ба bmpX ба bmpY бол хөдөлгөөнийг бий болгох бидний сонирхож буй утга юм (bmpY бол Y тэнхлэгийн утга юм. bitmap -ийн цэг нь бид logo.c (LOGOPIC, #оруулсан файлын лого дахь зургийн нэр юм. Зангуу цэгээс авсан bitmap (LOGOHEIGHT) нь бэхэлгээний цэгээс зургийн цэгийг зурахдаа X ба Y пикселүүдийг гараар оруулах боломжтой боловч тэдгээрийг санахаас илүү урьдчилан тодорхойлсон зургийг ашиглахад хялбар байдаг (1, Хамгийн сүүлчийн утга нь дэлгэц нь моно 0 хар 1 цагаан өнгөтэй байна. За дараагийн мөрөөс бичиж эхлээрэй: ¬D lol*/ void loop () {display.clearDisplay (); // зүүн дээд, x, y, битийн зургийн нэр, өргөн X, өндөр Y, өнгөт дэлгэц.drawBitmap (bmpX, bmpY, LOGOPIC, LOGOWIDTH, LOGOHEIGHT, 1); display.display (); // энэ нь үнэндээ буферийг дэлгэцэн дээр хэзээ ч татдаггүй}
Arduino кодоо оруулаад ажиллаж байгааг нь баталгаажуулна уу (pic3).
Алхам 5: Bitmap Sprite -ийг шилжүүлэх




Өмнөх зааврыг ашиглан paint.net -ийг ашиглан 30х15 пиксел хэмжээтэй шинэ файл хийж, манай залуу дизайнер эхлээд салхины шилнээс эхэлдэг барзгар машин зурна (зураг 2 ба 3).
Үүнийг дахин Windows bmp файл болгон хадгална (2 -р алхам шиг), C bitmap (алхам 3) болгон хөрвүүлээд car.c файлыг (эсвэл таны шийдсэн зүйлийг) шинээр үүсгэсэн arduino ino (ноорог) -той ижил хавтсанд байрлуулна уу. файл.
(p.s. машинд #include гэсэн мөрийг нэмж оруулахаа мартуузай.
Эхлээд өөрийн эквивалент машинтай холбоно уу. C
#оруулах
#include #include Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library #include Adafruit_SSD1306 //
Adafruit_SSD1306 дэлгэц (128, 64); // дэлгэцийн нягтралыг тохируулна уу
/* bmpX/bmpY бидэнд эдгээр утгыг өөрчлөх, дахин зурах зэрэгт хувьсагч байх шаардлагатай
Дэлгэц бол хөдөлгөөнт анимацийн эффектийг хэрхэн бий болгох явдал юм. hitSide ба hitTop бол бид sprite -ийг дэлгэц дээр хэрхэн хадгалдаг вэ */ uint8_t bmpX, bmpY = 0; // 2 8 битийн (0-255) санах ойг нөөцлөхөд бидэнд илүү том 128 хэрэггүй, хамгийн их ашиглагддаг тоо bool hitSide = 0; bool hitTop = 0;
хүчингүй тохиргоо ()
{саатал (100); // дэлгэц гэх мэтийг дэлгэц дээр асаахад цаг өгөх.begin (SSD1306_SWITCHCAPVCC, 0x3C); // энэ нь дэлгэцийн дэлгэцийг эхлүүлэхийн тулд юм.clearDisplay (); // хоосон дэлгэцээс эхэл
}
хоосон давталт ()
{display.clearDisplay (); // дэлгэцийг хоосон болгох // зүүн дээд талаас зурсан bitmap, x, y, битийн зургийн нэр, өргөн X, өндөр Y, өнгөт дэлгэц.drawBitmap (bmpX, bmpY, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // дэлгэцийн дэлгэц (); // энэ нь яг үнэндээ буферыг дэлгэц рүү татдаг/ * ингэснээр бид дэлгэцийн ирмэгийг хянаж, пиксел нэмэх эсэхээ дээрээс доош нь шилжүүлэх) эсвэл пикселийг устгах (доороос дээш шилжүүлэх) */ шилжүүлэгч (hitSide) // энэ нь boole дээр үндэслэн машины чиглэлийг сонгоно {тохиолдолд 0: bmpX ++; завсарлага;
тохиолдол 1:
bmpX-; завсарлага; } // эдгээр 2 if мэдэгдэл нь boolыг үнэн эсвэл худал гэж тохируулдаг бол (bmpX == 0) {hitSide = 0; } if (bmpX == 96) // дэлгэцийн өргөнөөс хасах машин {hitSide = 1; } // Y тэнхлэгийн хувьд дээрхтэй ижил бол (bmpY == 0) {hitTop = 0; } if (bmpY == 49) // машины өндрийг хасах дэлгэцийн өндөр {hitTop = 1; } switch (hitTop) {тохиолдол 0: bmpY ++; завсарлага; тохиолдол 1: bmpY--; завсарлага; }
}
програмыг хэрхэн ажиллаж байгааг хавсаргасан видеоноос харж болно
Алхам 6: Жолоодлогын тоглоом хийх


Эхлээд бид 30x15 пиксел хийх хичээлийн өмнөх үе шиг хэд хэдэн өөр машин эсвэл саад тотгор зурж эхэлдэг. Дараа нь бид тэдгээрийг c bitmap болгон хөрвүүлж, кодыг холбоно.
#include // эдгээр замууд хамааралтайгаар өөрчлөгдөх шаардлагатай болно
// файлуудыг хаана хадгалдаг тухай // засварлах: хэрэв та // -г "" -ээр сольсон бол танд бүрэн замыг // өөрийн номын сангаар оруулах шаардлагагүй болохыг #дөнгөж сая мэдлээ.
#оруулах
#оруулах #оруулах
#оруулах
#оруулах // https://github.com/adafruit/Adafruit-GFX-Library #include <Adafruit_SSD1306 //
Adafruit_SSD1306 дэлгэц (128, 64); // дэлгэцийн параметрүүдийг тодорхойлох
хувьсагч ба тогтмол утгыг тодорхойлох
// оролтын зүүг тодорхойлох нь эдгээр нь хэзээ ч өөрчлөгддөггүй arduino дээрх зүү юм #тодорхойлох #INTPIN 3 -ийг тодорхойлох // зөвхөн 2, 3 -р зүү нь НҮБ -ын интерпепт зүү байж болно #UPPIN 4 -ийг тодорхойлох // эдгээр нь холбогдох түлхүүртэй холбогдох зүү юм DWNPIN 5 #тодорхойлох LFTPIN 6 #тодорхойлох RHTPIN 7 #тодорхойлох SND 9 // чиглэлийг тодорхойлох
#DIRUP 1-ийг тодорхойлох // эдгээр утгыг "могой" шийдэх гэж байгаа юм.
#DIRDOWN 2 -ийг тодорхойлох // могойн явах чиглэл #DIRLEFT 3 -ийг тодорхойлох #DIRRIGHT 4 -ийг тодорхойлох
uint8_t dirPressed = 0; // аль зүү өндөрт шилжих чиглэлийг бүртгэх утга
// booleans дэлгүүр аль зүү нь өндөрт гарсан болохыг хадгалдаг
bool BUTUP = 0; bool BUTDWN = 0; bool BUTLFT = 0; bool BUTRHT = 0; // машины албан тушаалын хувьд uint8_t carPosX = 1; uint8_t carPosY = {0, 16, 32, 48}; // массивыг хэмжихэд утга хэрэгтэй
uint8_t lanePosArr = {0, 16, 32, 48}; // эгнээ бүр хаана байгааг хадгалах массив
uint8_t carPosYCnt = 0; uint8_t carYTmp = 0; // замын шугамын хувьсагчид uint8_t roadLineX1 = 51; // эдгээрийг эхнээс нь урьдчилан тодорхойлсон бөгөөд дараа нь шугамууд үл үзэгдэх болно uint8_t roadLineX2 = 102; uint8_t roadLineX3 = 153; uint8_t roadLineX4 = 254; uint8_t roadLineX5 = 200;
// энэ бол тоглоомын талбар нэг удаа хичнээн пиксел хөдөлдөг вэ
uint8_t drawSpeed = 4;
// дайсандад зориулсан хувилбарууд0
uint8_t дайсан0PosX = 255; uint8_t дайсан0PosY = 0; uint8_t дайсан1PosX = 255; uint8_t дайсан1PosY = 0; uint8_t душман2PosX = 255; uint8_t душман2PosY = 0;
// varialble to санамсаргүй байдлаар саад бэрхшээлд эгнээний дугаар өгөх
uint8_t laneGen = 0;
uint8_t laneGen0 = 0; uint8_t laneGen1 = 0; uint8_t laneGen2 = 0;
// онооны тоолуур
урт оноо = 0; // энэ бол оноо:/ хэхэ урт харьцуулах = 0; // энэ нь оноог хамгийн дээд түвшинд хадгалж, урт оноотой харьцуулахад өндөр оноо = 25; uint8_t metreCnt = 0;
Эндээс бид функцийг эхлүүлж байна
// энэ нь тасалдал идэвхжсэн тохиолдолд командын багц юм void interruptressed () {delay (150); updateDirection (); } // DIR bools-ийг шалгаж var гэсэн чиглэлд байгаа утгыг шинэчилнэ үү ------------------------- хүчингүй updateDirection () {//Serial.println("updateDirection Called "); BUTUP = digitalRead (UPPIN); BUTDWN = digitalRead (DWNPIN); BUTLFT = digitalRead (LFTPIN); BUTRHT = digitalRead (RHTPIN); if (BUTUP == true) {dirPressed = DIRUP; } if (BUTDWN == true) {dirPressed = DIRDOWN; } if (BUTLFT == true) {dirPressed = DIRLEFT; } if (BUTRHT == true) {dirPressed = DIRRIGHT; }
}
// ------------------------------- МАШИН ХӨДӨЛГӨХ --------------- -------------------------
// энэ нь машины спрайт хөдөлгөгч дэлгэцийг шинэчлэх болно
void moveCar ()
{switch (dirPressed) {case DIRUP: carPosYCnt--; carPosY [carPosYCnt]; ая (SND, 100, 100); хэрэв (carPosYCnt == 255) {carPosYCnt = 0; } carYTmp = carPosY [carPosYCnt]; dirPressed = 0; // Serial.println ("carPosY дээшлэх"); // Serial.println (carPosYCnt); завсарлага; тохиолдолд DIRDOWN: carPosYCnt ++; ая (SND, 100, 100); хэрэв (carPosYCnt == 4) {carPosYCnt = 3; } // Serial.println ("carPosY"); // Serial.println (carPosYCnt); carYTmp = carPosY [carPosYCnt]; dirPressed = 0; завсарлага; // зүүн болон баруун мөргөлдөөнийг илрүүлэх чадвар муутай машиныг тайлбарласан /* тохиолдолд DIRLEFT: carPosX--; хэрэв (carPosX == 0) {carPosX = 1; } // Serial.println ("carPosX"); // Serial.println (carPosX); dirPressed = 0; завсарлага; */ тохиолдолд DIRRIGHT: // зүгээр л зугаагаа гаргахын тулд хэрэв та баруун товчийг дарвал тоглоом дуу чимээ гаргах болно (SND, 100, 50); // carPosX ++; // хэрэв (carPosX == 128) // {// carPosX = 127; //} // Serial.println ("carPosX"); // Serial.println (carPosX); // dirPressed = 0; завсарлага; } updateDisplay (); }
// -------------------------- RANDOM POS X ------------------- -----------
uint8_t randomPosX () // эдгээр 2 горим нь саад тотгорыг санамсаргүй байдлаар байрлуулдаг
{uint8_t posValTmp = 0; posValTmp = санамсаргүй (129, 230); //Serial.println("random x "); //Serial.println(posValTmp); буцах (posValTmp); }
// -------------------------- RANDOM POS Y ------------------ ------------------
uint8_t randomPosY ()
{uint8_t laneVal = 0; laneVal = санамсаргүй (0, 4); // санамсаргүй байдлаар нэмэлт эгнээ нэмж оруулах, өөрөөр хэлбэл тэр эгнээнд байх үед дэлгэц дээр ямар ч объект байхгүй болно //Serial.println("RandomY "); //Serial.println(lanePosArr[laneVal]); буцах (lanePosArr [laneVal]); }// ------------------------------- Тоглоомын хурдыг тохируулах -------------- -------------- хүчингүй setGameSpeed () // энэ нь түвшинг 20-оос дээш байлгахыг зогсоож, тоглоомыг тоглуулах боломжгүй болгож байна {if (drawSpeed <21) {drawSpeed = drawSpeed+2; }}// ------------------------------------ Сүйрлийг илрүүлэх ---------- ----------------------- хүчингүй илрүүлэхCrash () {
хэрэв (душман0PosX = 0 && dush0PosY == carYTmp)
{// Serial.println ("Тоглоом CRAASSSSHHHHHHEEEDDD -ээр дамжин өнгөрөх 0"); Тоглоом дууслаа(); } if (душман1PosX = 0 && dush1PosY == carYTmp) {//Serial.println("Тоглоомыг CRAASSSSHHHHHHHEEEDDD -ээр дамжуулж 1 "); Тоглоом дууслаа(); } if (душман2PosX = 0 && dushman2PosY == carYTmp) {//Serial.println("Game over CRAASSSSHHHHHHHEEEEDDD in traffic 2 "); Тоглоом дууслаа(); }}
Эдгээр нь дэлгэцийг зурах зуршил юм.
// ------------------------------- АВАХ ЗАМ --------------- --------------------- void drawRoad () // X, Y, урт, өргөн {display.fillRect (roadLineX1, 15, 30, 4, ЦАГААН); display.fillRect (roadLineX1, 30, 30, 4, ЦАГААН); display.fillRect (roadLineX1, 45, 30, 4, ЦАГААН); display.fillRect (roadLineX2, 15, 30, 4, ЦАГААН); display.fillRect (roadLineX2, 30, 30, 4, ЦАГААН); display.fillRect (roadLineX2, 45, 30, 4, ЦАГААН); display.fillRect (roadLineX3, 15, 30, 4, ЦАГААН); display.fillRect (roadLineX3, 30, 30, 4, ЦАГААН); display.fillRect (roadLineX3, 45, 30, 4, ЦАГААН); display.fillRect (roadLineX4, 15, 30, 4, ЦАГААН); display.fillRect (roadLineX4, 30, 30, 4, ЦАГААН); display.fillRect (roadLineX4, 45, 30, 4, ЦАГААН); display.fillRect (roadLineX5, 15, 30, 4, ЦАГААН); display.fillRect (roadLineX5, 30, 30, 4, ЦАГААН); display.fillRect (roadLineX5, 45, 30, 4, ЦАГААН);
roadLineX1 = roadLineX1-drawSpeed;
roadLineX2 = roadLineX2-drawSpeed; roadLineX3 = roadLineX3-drawSpeed; roadLineX4 = roadLineX4-drawSpeed; roadLineX5 = roadLineX5-drawSpeed; display.display (); } // ----------------------------------------- ДАЙЛАХ дайсан --------------------------------------- хүчингүй enemysDraw () {// X, Y, bmp нэр, өргөн, өндөр, өнгөний дэлгэц.drawBitmap (душман0PosX, душман0PosY, ДАЙСАН0, ДАЙСАН_ӨРГӨН, ДАЙСАН_ӨНДӨР, 1); душман0PosX = дайсан0PosX-drawSpeed; display.drawBitmap (душман1PosX, dush1PosY, ДАЙСАН1, ДАЙСАН1_ӨРГӨН, ДАЙСАН1_ӨНДӨР, 1); dushman1PosX = дайсан1PosX-drawSpeed; display.drawBitmap (душман2PosX, dushm2PosY, ДАЙСАН2, ДАЙСАН2_ӨРГӨН, ДАЙСАН2_ӨНДӨР, 1); душман2PosX = дайсан2PosX-drawSpeed; display.display (); if (душман0PosX> 231 && dushman0PosX231 && dushman1PosX <255) {dush1PosX = randomPosX (); дайсан1PosY = randomPosY (); checkDuplicate (); }
if (душман2PosX> 231 && dush2PosX <255) {dush2PosX = randomPosX (); дайсан2PosY = randomPosY (); }} // ------------------------------------ Дэлгэцийг шинэчлэх -------- ---------------------------------------- хүчингүй updateDisplay () {display.clearDisplay (); display.drawBitmap (carPosX, carPosY [carPosYCnt], CARSPRITE, 30, 15, 1); display.fillRect (100, 0, 28, 10, ХАР); display.setCursor (100, 0); display.setTextColor (ЦАГААН, ХАР); дэлгэц.хэвлэх (оноо); display.display ();
}
// ------------------------- даралтын гогцоо хүлээх ------------------- ------
// энэ бол үндсэн дэлгэцийн код хүчин төгөлдөр бус waitForPress () {splashScreen (); bool хүлээх = 0; // үнэн бол дэлгэц нь дуусна.clearDisplay (); байхад (хүлээх == 0) {
display.fillRect (19, 20, 90, 32, ХАР); // текстийн хоосон дэвсгэр
display.setTextColor (ЦАГААН); display.setCursor (23, 24); display.setTextSize (0); display.println ("Боломжгүй"); display.setCursor (36, 34); display.println ("Уралдаанч"); display.drawBitmap (74, 24, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // x y w h r col display.drawRoundRect (21, 21, 86, 23, 4, WHITE); // хил Могойн дэлгэц.drawRect (19, 20, 90, 33, ЦАГААН); // border box - 3 display.setCursor (25, 43); display.setTextSize (0); // фонтыг хэвийн дэлгэц рүү буцаана.println ("дурын товчийг дарна уу"); display.fillRect (0, 0, 127, 8, ХАР); display.setCursor (10, 0); display.print ("Өндөр оноо:"); // өндөр оноотой дэлгэцийг харуулах.хэвлэх (highScore); display.display (); хүлээх = digitalRead (INTPIN); // дарагдсан хүлээлт dirPressed = 0 байхад 1 төгсгөл болж өөрчлөгдөх эсэхийг шалгаарай. // дахин тохируулах товчийг ямар ч чиглэлд дарна уу}} // -------------------------------------- ----- Тоглоомыг шинэчлэх ---------------------------------------- хүчингүй updateGame () {moveCar (); drawRoad (); enemysDraw (); // душман1Draw (); // душман2Draw (); metreCnt ++; detectCrash (); if (metreCnt == 5) // оноо бүрт 10 оноо тутамд оноо нэмдэг {metreCnt = 0; оноо ++; } if (оноо == харьцуулах+5) // тоглоомыг 5 оноо тутамд дээд тал нь 20 хүртэл хурдасгадаг {харьцуулах = оноо; setGameSpeed (); } noTone (SND); updateDisplay ();
}
// ------------------------------ ТОГЛООМ ДУУСЛАА---------------- ------------------------------
// энэ журам нь үхсэн баатар машины эргэн тойрон дахь шугамыг зурж, тоглоомыг дэлгэцэн дээр харуулдаг
хүчингүй gameOver ()
{ая (SND, 200, 200); // дуу тоглуулах uint8_t linePosX, linePosY, pixwidth, pixheight = 0; // машины шугамын эргэн тойронд хайрцаг зурахын тулд vars тохируулна ууPosX = carPosY; linePosY = carYTmp; pixwidth = 30; pixheight = 15; display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); for (int i = 0; i <= 26; i ++) // энэ нь дэлбэрэлтийг дуурайсан тэгш өнцөгт хэлбэртэй машинаар хүрээлэгдсэн {linePosX = linePosX-2; linePosY = linePosY-2; pixwidth = pixwidth+4; pixheight = pixheight+4; display.drawRect (linePosX, linePosY, pixwidth, pixheight, BLACK); display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); ая (SND, i*20, 50); саатал (10); } display.setTextSize (2); display.setTextColor (ЦАГААН, ХАР); display.setCursor (10, 23); ая (SND, 50, 500); display.print ("GAME"); display.display (); саатал (500); ая (SND, 40, 500); display.print ("OVER"); display.setTextSize (0); display.display (); саатал (3000); тоглоомыг дахин эхлүүлэх (); waitForPress (); }
// ---------------------------------------- Тоглоомыг дахин эхлүүлэх ----- -------------------------------------------------- -----
void restartGame () // энэ нь өндөр оноог хуулж, бүх статистикийг дахин тохируулж, санамсаргүй байрлалыг бий болгодог
{if (score> = highScore) // өндөр онооноос өндөр оноо байгаа эсэхийг шалгах {highScore = оноо; // өндөр оноог шинэчлэх статмент бол ганц бие}
оноо = 0;
drawSpeed = 4; metreCnt = 0; carPosYCnt = 0; душман0PosX = randomPosX (); душман0PosY = randomPosY (); дайсан1PosX = randomPosX (); дайсан1PosY = randomPosY (); дайсан2PosX = randomPosX (); дайсан2PosY = randomPosY (); noTone (SND);
checkDuplicate ();
}
// ------------------------------------------------ -Давхардсан тоог шалгах ----------------------------------------------- ------ void checkDuplicate () // эдгээр саадууд нь тоглоомын ижил орон зайг эзэлж байгаа эсэхийг шалгадаг {// Serial.println ("давхардсан тоог шалгасан"); if (dushman2PosX> 230 && dush2PosX <255) {while (dushman2PosY == dushman1PosY || дайсан2ПосY == дайсан0ПосY) {дайсан2ПосY = санамсаргүй байдал (); }}
if (душман0PosX> 230 && душман0PosX230 && dushman2PosXenemy1PosX && dushman2PosX230 && dushman0PosXenemy1PosX && dushman0PosX
// ------------------------------------------- SPLASH SCREEN --- --------------------------------
void splashScreen ()
{display.clearDisplay (); display.drawBitmap (0, 0, CRASH, CRASHWIDTH, CRASHHIGHT, 1); display.display (); саатал (2000); } // ----------------------------------------------- ТОХИРУУЛАХ ------------------------------------------------- ----------- void setup () {delay (100); // бүх зүйлийг эхлүүлцгээе // Serial.begin (9600); // энэ болон бүх цувралыг тайлбарлахгүй. алдааны диаграмыг харуулах командууд.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.setTextColor (ЦАГААН, ХАР); display.setTextWrap (худал); дэлгэц.dim (0); pinMode (INTPIN, INPUT); pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT);
attachInterrupt (digitalPinToInterrupt (INTPIN), тасалдсан, RISING);
// санамсаргүй байдлаар саад тотгор учруулах душман0PosX = randomPosX (); душман0PosY = randomPosY (); дайсан1ПосХ = randomPosX (); дайсан1PosY = randomPosY (); дайсан2PosX = randomPosX (); дайсан2PosY = randomPosY (); checkDuplicate (); // давхардсан байршлыг шалгах // Serial.println ("тохиргоо дууссан"); splashScreen (); waitForPress (); } // ----------------------------------------------- ----- LOOP -------------------------------------------- ----------
хоосон давталт ()
{updateGame (); }
Энэ бол бараг ямар ч өөрчлөлт, санал хүсэлтийг хүлээж авах болно. Дэлгэцийн анивчсан байдлыг шийдвэрлэхэд тулгарч буй асуудлууд бол үүнийг хэрхэн багасгах, дайсны машинууд ижил орон зайг эзлэх чадвартай хэвээр байх ёстой.
Зөвлөмж болгож буй:
Энэхүү өндөр хүчдэлийн клик-тоглоом тоглоом: 11 алхам (зурагтай)

Энэхүү өндөр хүчдэлийн клик-тоглоом тоглоомын чулуу: 70-аад оны үед ахлах сургуулиудад түгээмэл хэрэглэгддэг чимэг Click-Clack тоглоомын хоёр цахилгаан статик хувилбарыг энд оруулав. Хувилбар 1.0 бол хэт төсвийн загвар юм. Эд анги (цахилгаан хангамжийг оруулаагүй) бараг юу ч биш юм. Илүү үнэтэй, илүү үнэтэй зүйлийн тайлбар
ESP32 VGA аркад тоглоом ба тоглоомын тоглоом: 6 алхам (зурагтай)

ESP32 VGA аркад тоглоом ба джойстик: Энэхүү зааварчилгаанд би VGA дэлгэцийн гаралттай ESP32 ашиглан дөрвөн тоглоомын тоглоом - Tetris - Snake - Breakout - Bomber - ийг хэрхэн яаж хуулбарлахыг үзүүлэх болно. Нарийвчлал нь 320 х 200 пиксел бөгөөд 8 өнгөөр хийгдсэн. Би өмнө нь хувилбарыг нь хийж байсан
MIT програм зохион бүтээгчийн тусламжтайгаар зөөлөн тоглоом бүхий Bluetooth шоо, Android тоглоом хөгжүүлэх: 22 алхам (зурагтай)

MIT App Inventor ашиглан зөөлөн тоглоом бүхий Bluetooth Dice болон Android тоглоом хөгжүүлэх: Шоо тоглох нь өөр өөр арга хэлбэртэй байдаг 1) Уламжлалт модон эсвэл гуулин шоогаар тоглодог.2) Гар утас эсвэл pc. -ийн гараар эсвэл pc. -ээр үүсгэсэн шоо утгыг гар утсан дээр эсвэл компьютер дээр тоглоорой. шоо биетэй тоглож, зоосыг гар утас эсвэл компьютер дээр зөөж болно
Саймон тоглоом - Хөгжилтэй тоглоом: 5 алхам

Саймон Тоглоом - Хөгжилтэй Тоглоом !: Лавлах: Энд Амралтын өдрүүд өнгөрсний дараа та хариуцсан бүх ажил, ажлаа дуусгахын тулд үнэхээр хичээх ёстой. Бид тархиа сургах цаг болсон, тийм үү? Эдгээр уйтгартай, утгагүй тоглоомуудаас гадна Simon Game нэртэй тоглоом байдаг
Arduino Uno болон OLED 0.96 SSD1306 дэлгэцээр PONG тоглоом тоглоорой: 6 алхам

Arduino Uno болон OLED 0.96 SSD1306 ашиглан PONG тоглоом тоглоорой Дэлгэц: Сайн байна уу залуусаа өнөөдөр бид Arduino -той PONG тоглоом хийх болно. Бид тоглоомыг харуулахын тулд adafruit -ийн 0.96 oled дэлгэцийг ашиглах болно. тоглоомыг хянахын тулд товчлууруудыг дарна уу