DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya

"Waan ogahay in aanan waxba garanayn" Socrates

Kuye: loogu talagalay dadka IT-ga ee aan dan ka lahayn dhammaan horumarinta oo doonaya inay ciyaaraan ciyaarahooda!

Ku saabsan waxa: ku saabsan sida loo bilaabo qorista ciyaaraha C/C++, haddii aad si lama filaan ah ugu baahan tahay!

Maxaad u akhridaa tan: Horumarinta codsigu maaha aaggayga khibradda, laakiin waxaan isku dayaa inaan codeeyo toddobaad kasta. Sababtoo ah waxaan jeclahay ciyaaraha!

Hello Magacaygu waa Andrey Grankin, Waxaan ahay DevOps at Luxoft. Horumarinta codsigu maahan takhasuskayga, laakiin waxaan isku dayaa inaan codeeyo usbuuc kasta. Sababtoo ah waxaan jeclahay ciyaaraha!

Warshadaha ciyaaraha kombuyuutarku aad bay u weyn yihiin, waxaana lagu xamanayaa inay xataa ka weyn yihiin warshadaha filimada maanta. Ciyaaraha waxa la qoray tan iyo waagii kombayuutarrada, iyadoo la isticmaalayo, heerar casri ah, habab horumarineed oo adag iyo kuwa aasaasiga ah. Muddo ka dib, matoorada ciyaarta oo leh garaafyo, fiisigis, iyo dhawaaq hore loo qorsheeyay ayaa bilaabay inay soo baxaan. Waxay kuu oggolaanayaan inaad diirada saarto horumarinta ciyaarta lafteeda oo aadan ka welwelin aasaaskeeda. Laakiin iyaga oo ay la socdaan matoorada, horumariyayaashu "indho la'aan" oo hoos u dhigaan. Wax soo saarka ciyaaraha laftiisa ayaa lagu dhejiyaa suunka qaada. Iyo tirada alaabadu waxay bilaabataa inay ka adkaato tayadeeda.

Isla mar ahaantaana, marka aan ciyaareyno ciyaaraha dadka kale, waxaan si joogto ah u xaddidnaa goobaha, goobta, jilayaasha, iyo makaanikada ciyaarta ee dadka kale ay la yimaadeen. Markaa waxaan gartay in...

... waxaa la gaaray waqtigii aan abuuri lahaa adduunyo aniga ii gaar ah, oo aniga kaliya ii hoggaansan. Aduunyada meesha aan ahay Aabbaha, Wiilka, iyo Ruuxa Quduuska ah!

Waxaan si dhab ah u aaminsanahay inaad qorto mashiinka ciyaartaada oo aad ku ciyaarto, waxaad awoodi doontaa inaad kabahaaga iska saarto, tirtirto daaqadaha oo aad cusboonaysiiso qolkaaga, aad noqoto barnaamij khibrad iyo dhammaystiran.

Maqaalkan waxaan isku dayi doonaa inaan kuu sheego sida aan ku bilaabay qorista ciyaaraha yar yar ee C/C++, habka horumarku waa sida uu yahay, iyo halka aan waqti u helo hiwaayad jawi mashquul ah. Waa shakhsi ahaaneed oo qeexaya habka bilawga shakhsi ahaaneed. Waxyaabaha ku saabsan jaahilnimada iyo iimaanka, oo ku saabsan sawirka shakhsi ahaaneed ee adduunka xilligan. Si kale haddii loo dhigo, "Maamulka mas'uul kama aha maskaxdaada gaarka ah!"

Tababarka

"Aqoon la'aanteed waxba ma tarto, aqoon la'aantuna waa khatar" Confucius

Buugaygu waa noloshayda!


Marka, ficil ahaan, waxaan dhihi karaa aniga wax walba waxay ku bilowdaan warqad qoraal ah. Ma aha oo kaliya in aan ku qoro hawlaheyga maalinlaha ah halkaas, sidoo kale waxaan sawiraa, barnaamijka, naqshadeeyaa jaantusyada socodka iyo xalinta dhibaatooyinka, oo ay ku jiraan kuwa xisaabta. Had iyo jeer isticmaal xaashida qoraalka oo ku qor qalin kaliya. Waa nadiif, ku habboon oo la isku halayn karo, IMHO.

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Buugeyga (horey uga buuxsamay) buug-yaraha. Tani waa sida uu u eg yahay. Waxay ka kooban tahay hawl-maalmeed, fikrado, sawirro, jaantusyo, xalal, xisaabin madow, koodh iyo wixii la mid ah

Marxaladdan, waxaan ku guuleystey inaan dhamaystiro saddex mashruuc (tani waxay ku jirtaa fahamkayga "dhammaystirka", sababtoo ah badeecad kasta ayaa lagu horumarin karaa si aan dhammaad lahayn).

  • Mashruuca 0: Kani waa goobta 3D Architect Demo oo ku qoran C # iyadoo la adeegsanayo mishiinka ciyaarta Unity. Loogu talagalay macOS iyo aaladaha Windows.
  • Ciyaarta 1: ciyaarta console ee Maska fudud (qof walba loo yaqaan "Snake") ee Windows. Waxaa lagu qoray C.
  • Ciyaarta 2: ciyaarta konsole ee haamaha waalan (qof kastaa loo yaqaan "Taangiyada"), oo ku qoran C++ (adoo isticmaalaya fasalo) iyo waliba Windows.

Mashruuca 0. Demo naqshadeeye

  • Madal: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Language: C#
  • Matoorka ciyaarta: Midnimada
  • Waxyi Darrin Lile
  • Kaydka: GitHub

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
3D Muuqaal naqshadeeye Demo

Mashruucii ugu horeeyay laguma hirgelin C/C++, balse waxaa lagu fuliyay C # iyadoo la adeegsanayo mashiinka ciyaarta Midnimada. Matoorkani ma ahayn mid u baahan qalabka sida Engine dhalanteed, oo waliba u muuqatay mid fudud in la rakibo oo la isticmaalo. Maan ka fiirsan matoorada kale.

Hadafka aan ka leeyahay Midnimada ma ahayn inaan horumariyo ciyaar. Waxaan rabay inaan abuuro muuqaal 3D leh dabeecad qaar ka mid ah. Isaga, ama halkii ay iyadu (waxaan u qaabeeyey gabadha aan jeclaa =) waxay ahayd inay guurto oo la falgasho adduunka ku xeeran. Waxa kaliya oo muhiim ahayd in la fahmo Midnimadu waxa ay tahay, habka horumarku waxa uu yahay iyo inta dadaal loo baahan yahay in wax la abuuro. Tani waa sida uu ku dhashay mashruuca Demo Architect (magaca wuxuu ku dhawaaday in la allifo meel aan jirin). Barnaamij-samaynta, qaabaynta, animation, qoraal-qorista waxay igu qaadatay malaha laba bilood oo shaqo maalmeed ah.

Waxaan ku bilaabay fiidiyowyo casharro ah oo ku saabsan YouTube-ka abuurista moodooyinka 3D gudaha days. Blender waa qalab bilaash ah oo heer sare ah oo loogu talagalay qaabaynta 3D (iyo in ka badan) oo aan u baahnayn rakibid. Oo halkan naxdin ayaa i sugaysay... Waxaa soo baxday in qaabaynta, animation, texturing ay yihiin mowduucyo aad u kala duwan oo aad buugaag ku qori karto. Tani waxay si gaar ah run ugu tahay jilayaasha. Si aad mooddo faraha, ilkaha, indhaha iyo xubnaha kale ee jirka, waxaad u baahan doontaa aqoonta anatomy. Sidee loo qaabeeyey murqaha wajiga? Sidee dadku u guuraan? Waxaan ku qasbanahay in aan "geliyo" lafaha gacan kasta, lug kasta, farta, faraha faraha!

Model lafaha-collar iyo lafaha kabaalka dheeraadka ah si aad animation-ku u ekaato mid dabiici ah. Casharradan oo kale ka dib, waxaad ogaanaysaa inta shaqo ee abuurayaasha filimaanta firfircooni ay sameeyaan kaliya inay abuuraan 30 ilbiriqsi oo muuqaal ah. Laakiin filimada 3D waxay socdaan saacado! Ka dibna waannu ka tagnay shaleemooyinka oo waxaan nidhaahnaa wax u eg: "Taasi waa kartoon/filim aan caadi ahayn! Wax ka sii wanagsan ayay samayn lahaayeen...” Nacasyo!

Iyo hal shay oo kale oo ku saabsan barnaamijyada mashruucan. Siday ii soo baxday, qaybta iigu xiisaha badnayd waxay ahayd xisaabta. Haddii aad socodsiiso goobta (isku xidhka bakhaarka ku jira sharaxaadda mashruuca), waxaad ogaan doontaa in kamaradu ay ku wareegeyso dabeecadda gabadha ee goob. Si aad u diyaariso wareegtada kamarada, marka hore waa inaan xisaabiyaa isku-duwayaasha barta booska ee goobada (2D), ka dibna dhinaca (3D). Arrinta qosolka leh ayaa ah inaan xisaabta ku necbahay dugsiga oo aan ku aqaanay C-minus. Qayb ahaan, malaha, sababtoo ah dugsiga si fudud kuma sharxaan sida cadaabta xisaabtan loogu dabaqo nolosha. Laakiin marka aad ku mashquusho hadafkaaga, riyadaada, maskaxdaadu way nadiiftaa oo furtaa! Oo waxaad bilaabaysaa inaad u aragto hawlo adag inay yihiin tacabur xiiso leh. Kadibna waxaad u maleyneysaa: "Hagaag, muxuu *xisaabta aad ugu jeceshahay* kuugu sheegi waayay sida caadiga ah halka qaacidooyinkan lagu dabaqi karo?"

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Xisaabinta qaababka xisaabinta isku-duwayaasha dhibcaha goobada iyo goobada (laga bilaabo buugayga xusuus qorka)

Ciyaarta 1. Mas Fudud

  • Madal: Daaqadaha (waxaa lagu tijaabiyay Windows 7, 10)
  • Language: Waxaan filayaa in aan ku qoray saafi C
  • Matoorka ciyaarta: Qalabka daaqadaha
  • Waxyi javidx9
  • Kaydka: GitHub

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Ciyaarta Maska fudud

Muuqaalka 3D maaha ciyaar. Intaa waxaa dheer, qaabaynta iyo dhaqdhaqaaqa walxaha 3D (gaar ahaan jilayaasha) waa waqti-qaadasho iyo dhib badan. Ka dib markii aan la ciyaaray Unity, xaqiiqadu waxay ii timid inaan u baahanahay inaan sii wado, ama halkii aan ka bilaabo, aasaaska. Wax fudud oo degdeg ah, laakiin isla mar ahaantaana caalami ah, si loo fahmo qaab-dhismeedka aadka u ciyaaraha.

Maxaa fudud oo degdeg ah? Taasi waa sax, console iyo 2D. Si sax ah, xitaa console-ka iyo calaamadaha. Mar labaad waxaan raadiyey waxyi xagga internetka ah (guud ahaan, waxaan filayaa in internetku yahay kii ugu kacdoonka iyo khatarta badnaa qarniga XNUMXaad). Waxaan qoday muuqaal barnaamij-sameeyaha sameeyay console Tetris. Oo u eg ciyaartiisa waxaan go'aansaday inaan sameeyo "abeeso". Fiidiyowga waxaan ka bartay laba shay oo aasaasi ah - ciyaarta loop (oo leh saddex hawlood / qaybo aasaasi ah) iyo wax soo saarka kaydiyaha.

Loop-ka ciyaarta wuxuu u ekaan karaa sidan:

int main()
   {
      Setup();
      // a game loop
      while (!quit)
      {
          Input();
          Logic();
          Draw();
          Sleep(gameSpeed);  // game timing
      }
      return 0;
   }

Koodhku wuxuu soo bandhigayaa dhammaan shaqada ugu muhiimsan () hal mar. Iyo wareegga ciyaarta ayaa bilaabmaya ka dib faallooyinka ku habboon. Waxaa jira saddex hawlood oo aasaasi ah oo loop-ka ku jira: Input(), Logic(), Draw(). Marka hore, Gelida xogta Input (inta badan kantaroolka furayaasha furayaasha), ka dibna la socodsiiyo xogta la geliyey Logic, ka dibna soo saarida shaashadda - Sawir. Oo sidaas daraaddeed on jir kasta. Tani waa sida animation loo abuuray. Waa sida kartoonnada. Caadi ahaan, habaynta xogta la galiyay waxay qaadataa wakhtiga ugu badan, inta aan ogahay, waxay go'aamisaa heerka jir ee ciyaarta. Laakiin halkan shaqada Logic() waxay u fulisaa si degdeg ah. Sidaa darteed, waa inaad xakameysaa heerka qaabeynta adoo adeegsanaya shaqada Hurdada () oo leh cabbirka xawaaraha ciyaarta, kaas oo go'aamiya xawaarahan.

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Wareega ciyaarta. Ku barnaamijka "snake" ee warqad xusuus qor ah

Haddii aad horumarinayso ciyaarta konsole-ku-salaysan, ma awoodid inaad xogta ku soo saarto shaashadda adoo isticmaalaya soo-saarka qulqulka 'cout' ee caadiga ah - aad ayay u gaabis tahay. Sidaa darteed, wax soo saarka waa in loo diraa shaashadda. Tani aad ayey u dhakhso badan tahay waxayna ciyaartu socon doontaa cillad la'aan. Run ahaantii, si fiican uma fahmin waxa shaashadu tahay iyo sida ay u shaqeyso. Laakiin waxaan ku siin doonaa tusaale kood ah halkan, laga yaabee in qof uu ku caddeeyo xaaladda faallooyinka.

Helitaanka shaashad daboolaysa (si loo hadlo):

// create screen buffer for drawings
   HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
 							   NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
   DWORD dwBytesWritten = 0;
   SetConsoleActiveScreenBuffer(hConsole);

Muujinta tooska ah ee dhibcaha xarkaha qaarkood (khadka bandhigga dhibcaha):

// draw the score
   WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);

Aragti ahaan, ma jiraan wax adag ciyaartan; Waxaan u maleynayaa inay tahay tusaale heer-gelis oo wanaagsan. Nambarku wuxuu ku qoran yahay hal fayl waxaana loo qaabeeyey dhowr hawlood. No fasalo, ma dhaxal. Waxaad ku arki kartaa wax walba oo ku jira koodhka isha ciyaarta adoo aadaya kaydka GitHub.

Ciyaarta 2. Haamaha Waalan

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Ciyaarta Haamaha Waalan

Daabacaadda jilayaasha console-ka waxay u badan tahay inay tahay waxa ugu fudud ee aad u beddeli karto ciyaar. Laakiin markaas hal dhibaato ayaa soo baxda: calaamaduhu waxay leeyihiin dherer iyo ballacyo kala duwan (dhererku wuu ka weyn yahay ballaca). Sidan, wax walbaa waxay u eegi doonaan si ka baxsan saamiga, hoos iyo kor u kaca waxay u muuqan doonaan si ka dhaqso badan u dhaqaaqista bidix ama midig. Saamayntan ayaa ah mid aad looga dareemayo Maska (Ciyaarta 1). "Taangiyada" (Ciyaarta 2) ma laha dib-u-dhacan, maaddaama wax-soo-saarka halkaas lagu habeeyo rinjiyeynta pixels-ka muraayadaha midabyo kala duwan. Waxaad odhan kartaa waxaan qoray renderer. Run, tani waa wax yar oo dhib badan, inkastoo aad u xiiso badan.

Ciyaartan, waxay ku filnaan doontaa inaan sharaxo nidaamkayga muujinta pixels ee shaashadda. Waxaan u arkaa tan qaybta ugu weyn ee ciyaarta. Adiguna wax kasta oo kale ayaad la iman kartaa.

Haddaba, waxa aad shaashadda ku arkayso waa leydi midabo badan leh oo dhaqaaqa.

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Dhig leydi

leydi kasta waxaa u taagan matrix ay ka buuxaan tirooyinka. Jid ahaan, waxaan muujin karaa hal nuance oo xiiso leh - dhammaan matrixyada ciyaarta waxaa loo qorsheeyay qaab hal-cabbir ah. Ma aha laba-geesood, laakiin hal-cabbir! Nidaamyada hal-geeska ah ayaa aad u fudud oo degdeg ah in lagu shaqeeyo.

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Tusaalaha shaxda haanta ciyaarta

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Matalaadda jaantuska taangiga ciyaarta sida hannaan hal-cabbir ah

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Tusaalo muuqaal ah oo badan oo ka tarjumaya shaxanka sida hannaan hal-cabbir ah

Laakin gelitaanka walxaha shaxdu waxay ku dhacdaa wareegyo labajibbaaran, sida haddii aanay ahayn array hal-cabbir ah, laakiin mid laba-geesood ah. Tan waxaa la sameeyay sababtoo ah waxaan wali la shaqeynaa maaddooyinka.

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Ku-socoshada shax hal-cabbir ah oo laba wareeg ah. Aqoonsiga safka Y-, X - tiirka aqoonsiga

Fadlan ogow: halkii aan ka ahaan lahaa wax-sheegayaasha matrix-yada caadiga ah i, j, waxaan isticmaalaa aqoonsiyaasha x iyo y. Sidan, waxay iila muuqataa, waa mid aad uga roon isha oo aad u fahmi karta maskaxda. Intaa waxaa dheer, tilmaanta noocan oo kale ah waxay suurtogal ka dhigaysaa in si habboon loo qorsheeyo matrijyada loo isticmaalo faashashka isku xirka ee sawirka laba-geesoodka ah.

Hadda oo ku saabsan pixels, midabka iyo soo saarida shaashadda. Shaqada StretchDIBits waxa loo isticmaalaa soo saarista (Madaxa: windows.h; Library: gdi32.lib). Shaqadan, iyo waxyaabo kale, waxay heleysaa kuwan soo socda: aaladda sawirka lagu soo bandhigay (kiiskeyga, waa kumbuyuutarka Windows), isku-duwayaasha bilowga ee bandhigga sawirka, ballaciisa / dhererkiisa, iyo sawirka laftiisa qaabka bitmap-ka, oo ay u taagan yihiin habab bytes ah. Bitmap sida soo diyaarin byte ah!

StretchDIBits() waxay u shaqeysaa si ficil ah:

// screen output for game field
   StretchDIBits(
               deviceContext,
               OFFSET_LEFT, OFFSET_TOP,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               0, 0,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               m_p_bitmapMemory, &bitmapInfo,
               DIB_RGB_COLORS,
               SRCCOPY
               );

Xusuusta waxaa horay loogu qoondeeyay khariidaddan bitmap-ka iyadoo la adeegsanayo VirtualAlloc(). Taasi waa, tirada loo baahan yahay ee bytes waxaa loo hayaa in lagu kaydiyo macluumaadka ku saabsan dhammaan pixels, kuwaas oo markaas lagu soo bandhigi doonaa shaashadda.

Abuuritaanka m_p_bitmapMemory bitmapka:

// create bitmap
   int bitmapMemorySize = (PMATRIX_WIDTH * PMATRIX_HEIGHT) * BYTES_PER_PIXEL;
   void* m_p_bitmapMemory = VirtualAlloc(0, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);

Qiyaas ahaan, khariidad-qashinku waxay ka kooban tahay qaybo pixels ah. Afarta byte kasta ee shaxanka waa RGB pixel. Hal byte halkii qiimaha midabka cas, hal byte halkii qiimaha midabka cagaaran (G), iyo hal byte halkii qiimaha midabka buluuga ah (B). Waxaa dheer in hal bayt uu u haray gelitaanka Saddexdan midab - Casaan / Cagaar / Buluug (RGB) - waxay isku dhafan yihiin midba midka kale si loo abuuro midabka pixel ee ka soo baxa.

Hadda, mar labaad, leydi kasta, ama shay ciyaar, waxa uu u taagan yahay jaantus nambareed. Dhammaan walxahan ciyaarta waxa lagu meeleeyaa ururin. Kadibna waxaa lagu dhejiyaa garoonka ciyaarta, iyaga oo samaynaya hal matrix tiro badan. Nambar kasta oo ku jira shaxanka waxaan ku xidhay midab gaar ah. Tusaale ahaan, lambarka 8 wuxuu u dhigmaa buluug, lambarka 9 ilaa jaalaha, lambarka 10 ilaa cawl madow, iyo wixii la mid ah. Sidaa darteed, waxaan dhihi karnaa waxaan leenahay jaantuska garoonka ciyaarta, halkaasoo nambar kasta uu yahay midab.

Markaa, waxaanu haynaa shax nambareed goobta ciyaarta oo dhan oo dhinac ah iyo khariidad yar oo sawirka dhinaca kale ah. Ilaa hadda, khariidadda loo yaqaan 'bitmap' waa "madhan" - kuma jiraan macluumaadka ku saabsan pixels ee midabka la rabo. Tani waxay ka dhigan tahay in tallaabada ugu dambeysa ay noqon doonto in la buuxiyo bitmapka macluumaadka ku saabsan pixel kasta oo ku saleysan jaantuska tirada goobta ciyaarta. Tusaalaha cad ee isbeddelka noocaas ah ayaa ku yaal sawirka hoose.

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Tusaalaha buuxinta khariidad bitmap (Pixel matrix) macluumaad ku salaysan shaxanka dhijitaalka ah ee goobta ciyaarta

Waxaan sidoo kale soo bandhigi doonaa qayb ka mid ah koodka dhabta ah ee ciyaarta. Tilmaanta midabka doorsooma ee cel-celis kasta oo ka mid ah loop-ka waxa loo qoondeeyay qiime (tusmaynta midabka) ee shaxda tirada ee goobta ciyaarta (mainDigitalMatrix). Doorsoomka midabka ayaa markaa loo dejiyay midabka laftiisa iyadoo lagu saleynayo tusmada. Midabka soo baxay ayaa markaa loo qaybiyaa saamiga casaan, cagaar iyo buluug (RGB). Oo ay weheliso pixelPadding, macluumaadkan waxaa lagu qoraa pixel-ka marar badan, samaynta sawirka midabka ee khariidadda.

Koodhku waxa uu isticmaalaa tilmaameyaal iyo hawlgalo xoogaa yar, kuwaas oo ay adkaan karto in la fahmo. Markaa waxaan kugula talinayaa inaad meel gaar ah u akhrido sida dhismayaashan oo kale u shaqeeyaan.

Buuxinta bitmapka macluumaadka ku salaysan tirada tirada ee goobta ciyaarta:

// set pixel map variables
   int colorIndex;
   COLORREF color;
   int pitch;
   uint8_t* p_row;
 
   // arrange pixels for game field
   pitch = PMATRIX_WIDTH * BYTES_PER_PIXEL;     // row size in bytes
   p_row = (uint8_t*)m_p_bitmapMemory;       //cast to uint8 for valid pointer arithmetic
   							(to add by 1 byte (8 bits) at a time)   
   for (int y = 0; y < PMATRIX_HEIGHT; ++y)
   {
       uint32_t* p_pixel = (uint32_t*)p_row;
       for (int x = 0; x < PMATRIX_WIDTH; ++x)
       {
           colorIndex = mainDigitalMatrix[y * PMATRIX_WIDTH + x];
           color = Utils::GetColor(colorIndex);
           uint8_t blue = GetBValue(color);
           uint8_t green = GetGValue(color);
           uint8_t red = GetRValue(color);
           uint8_t pixelPadding = 0;
 
           *p_pixel = ((pixelPadding << 24) | (red << 16) | (green << 8) | blue);
           ++p_pixel;
       }
       p_row += pitch;
   }

Sida ku xusan habka kor lagu sharaxay, ciyaarta Crazy Tanks hal sawir (frame) ayaa la sameeyay oo lagu soo bandhigay shaashadda shaqada Sawirka (). Ka dib markii la diiwaan geliyo furayaasha furaha shaqada Input() iyo habayntooda ku xigta ee shaqada Logic(), sawir cusub (frame) ayaa la sameeyay. Run, walxaha ciyaarta waxa laga yaabaa inay hore u lahaan jireen boos ka duwan garoonka ciyaarta, sidaas awgeed, waxa lagu sawiraa meel kale. Tani waa sida animation (dhaqdhaqaaqa) u dhaco.

Aragti ahaan (haddii aanan waxba iloobin), fahamka wareegga ciyaarta ee ciyaartii ugu horreysay ("Snake") iyo nidaamka lagu soo bandhigo pixels shaashadda ciyaarta labaad ("Taangiyada") waa waxa kaliya ee aad u baahan tahay inaad wax qorto. ciyaarahaaga 2D ee hoos yimaada Windows. Dhawaaq la'aan! πŸ˜‰ Qaybaha intiisa kale waa duul qurux badan.

Dabcan, ciyaarta "Taangiyada" ayaa aad uga adag "Snake". Waxaan horay u isticmaalay luqadda C ++, taas oo ah, waxaan ku tilmaamay walxaha ciyaaraha kala duwan ee leh fasallo. Aniga ayaa abuuray ururintayda - koodka waxa laga eegi karaa madaxyada/Box.h. Jid ahaan, ururintu waxay u badan tahay inay leedahay daadinta xusuusta. Tilmaamayaasha la adeegsaday. Lagu shaqeeyay xusuusta. Waa inaan dhahaa buuggu wax badan ayuu i caawiyay Bilawga C++ Iyadoo loo marayo Barnaamijyada Ciyaarta. Tani waa bilow fiican oo loogu talagalay bilowgayaasha C++. Waa mid yar, xiiso leh oo si fiican loo habeeyey.

Waxay qaadatay ilaa lix bilood in la horumariyo ciyaartan. Waxaan wax ku qori jiray inta badan xilliga qadada iyo cuntada fudud ee shaqada. Kushiinka xafiiska ayuu fadhiistay, cuntadii ayuu ku tuntay, koodna qoray. Ama marka guriga lagu casheeyo. Markaa waxaan ku dhameeyay kuwan "dagaallada jikada". Sida had iyo jeer, waxaan si firfircoon u isticmaalay buug-yaraha, iyo dhammaan waxyaabaha fikradda ah ayaa ku dhashay.

Si aan u dhamaystiro qaybta dhabta ah, waxaan qaadan doonaa dhawr sawir oo buug-yarahayga ah. Si aan u tuso waxa saxda ah ee aan qoray, sawiray, tiriyay, nashqeeyay...

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Naqshadeynta sawirada taangiyada. Iyo go'aaminta inta pixels ee taangi kasta ay tahay inuu ku jiro shaashadda

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Xisaabinta algorithm-ka iyo qaacidooyinka wareegga wareegga haanta dhidigeeda

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Qorshaha ururintayda (midka ay ku jirto ilbaxnimada xusuusta, waxay u badan tahay). Uruurinta waxaa loo sameeyay si waafaqsan nooca Liiska Linked

DevOps C++ iyo "dagaallada jikada", ama sidaan u bilaabay qorista ciyaaraha anigoo wax cunaya
Kuwanuna waa isku dayo aan faa'iido lahayn oo ah in lagu dhejiyo sirdoonka macmalka ah ciyaarta

Aragtida

"Xitaa safar kun mayl ah wuxuu ku bilaabmaa tallaabada ugu horreysa"

Aynu ka guurno ku-dhaqanka una guurno aragti! Sidee waqti loogu helaa hiwaayaddaada?

  1. Go'aanso waxa aad dhab ahaantii rabto (haah, tani waa qaybta ugu adag).
  2. Deji mudnaanta.
  3. U hur wax kasta "dheeraad ah" aawadood mudnaanta sare aawadood.
  4. U dhaqaaq dhanka yoolalka maalin kasta.
  5. Ha filanin laba ama saddex saacadood oo wakhti firaaqo ah inaad ku qaadato hiwaayad.

Dhinaca kale, waxaad u baahan tahay inaad go'aamiso waxaad rabto oo aad mudnaanta siiso. Dhanka kale, waxaa suurtogal ah in laga tago hawlaha/mashruucyada qaarkood iyada oo loo eegayo mudnaantan. Si kale haddii loo dhigo, waa inaad wax walba u hurtaa "dheeraad ah". Waxaan meel ka maqlay in ugu badnaan saddex hawlood oo nolosha ah ay jiraan. Markaa waxaad awoodi doontaa inaad ku sameyso tayada ugu sareysa. Mashruucyo/jihooyin dheeri ah ayaa si fudud u bilaabi doona culeyska xad dhaafka ah. Laakiin tani dhammaanteed waxay u badan tahay inay tahay mid shakhsi ahaaneed iyo mid shakhsi ahaaneed.

Waxaa jira xeer dahabi ah oo gaar ah: waligaa ha yeelan 0% maalin! Waxaan ku bartay maqaal uu qoray horumariye indie ah. Haddii aad ka shaqaynayso mashruuc, wax ka samee maalin kasta. Wax macno ah ma samaynayso inta aad samayso. Qor hal kelmad ama hal xariiq oo kood ah, daawo hal muqaal cashar ah ama ku dhufo hal musbaar sabuurad - wax uun samee. Waxa ugu adag waa in la bilaabo. Markaad bilowdo, waxay u badan tahay inaad ku dambayn doonto samaynta wax yar oo ka badan intii aad rabtay. Sidan ayaad si joogto ah ugu dhaqaaqi doontaa dhanka yoolkaaga, i rumayso, si dhakhso leh. Ka dib oo dhan, caqabadda ugu weyn ee wax walba waa dib u dhigista.

Oo waxaa muhiim ah in la xasuusto in aadan dhayalsan oo aad iska indhatirin "badka" bilaashka ah ee wakhtiga 5, 10, 15, sug qaar ka mid ah "logs" waaweyn oo soconaya saacad ama laba. Ma saf baa taagan tahay? Ka fikir wax mashruucaaga. Qaadashada korontada? Wax ku qor warqad xusuus qor ah. Ma ku socotaa baska? Wacan, akhri maqaalka qaar. Ka faa'iidayso fursad kasta. Jooji daawashada bisadaha iyo eyda YouTube-ka! Maskaxdaada ha wasakhayn!

Iyo hal shay oo u dambeeya. Haddii, ka dib markaad akhrido maqaalkan, waxaad jeceshay fikradda abuurista ciyaaraha adigoon isticmaalin matoorada ciyaarta, ka dibna xasuuso magaca Casey Muratori. Ninkan ayaa leh bogga. Qaybta "daawasho -> XAFLADII HORE" waxaad ka heli doontaa casharro fiidiyoow ah oo bilaash ah oo cajiib ah oo ku saabsan abuurista ciyaar xirfad leh oo xoq ah. Shan Intro to C oo loogu talagalay casharrada Windows-ka waxaad u badan tahay inaad wax ka baran doonto wax ka badan shan sano oo waxbarasho jaamacadeed ah (qof ayaa arrintan ku qoray faallooyinka fiidiyowga hoostiisa).

Casey waxa kale oo uu sharxayaa in marka aad horumariso mishiinka ciyaarta, aad si fiican u fahmi doonto mishiin kasta oo jira. Dunida qaab dhismeedka halkaas oo qof kastaa isku dayayo in uu si otomaatig ah u sameeyo, waxaad barataa inaad abuurto halkii aad isticmaali lahayd. Waxaad fahantay dabeecadda kombayutarada. Waxaad sidoo kale noqon doontaa barnaamij wax badan ka caqli badan oo qaan gaar ah - pro.

Nasiib wacan waddada aad dooratay! Aduunyadana aynu ka dhigno kuwo xirfad leh.

Author: Grankin Andrey, DevOps



Source: www.habr.com