I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla

"Ngiyazi ukuthi angazi lutho" uSocrates

Okwabani: kubantu be-IT abakhafulela bonke abathuthukisi futhi abafuna ukudlala imidlalo yabo!

Mayelana nani: ungaqala kanjani ukubhala imidlalo ku-C/C++ uma uyidinga!

Kungani kufanele ufunde lokhu: Ukuthuthukiswa kohlelo lokusebenza akuwona umsebenzi wami okhethekile, kodwa ngizama ukufaka ikhodi njalo ngeviki. Ngoba ngiyayithanda imidlalo!

Sanibonani igama lami ngingu U-Andrey Grankin, Ngiyi-DevOps e-Luxoft. Ukuthuthukiswa kohlelo lokusebenza akuwona umsebenzi wami okhethekile, kodwa ngizama ukufaka ikhodi njalo ngeviki. Ngoba ngiyayithanda imidlalo!

Imboni yemidlalo yamakhompiyutha inkulu, kunamahemuhemu amaningi namuhla kunemboni yamafilimu. Imidlalo ibhalwe kusukela ekuqaleni kokuthuthukiswa kwamakhompiyutha, kusetshenziswa, ngezindinganiso zanamuhla, izindlela zokuthuthukisa eziyinkimbinkimbi neziyisisekelo. Ngokuhamba kwesikhathi, izinjini zegeyimu zaqala ukuvela ezinezithombe ezihleliwe kakade, i-physics nomsindo. Bakuvumela ukuthi ugxile ekuthuthukisweni komdlalo ngokwawo futhi ungazihluphi ngesisekelo sawo. Kodwa kanye nabo, kanye nezinjini, abathuthukisi "baphuphutheka" futhi banciphise. Kona kanye ukukhiqizwa kwemidlalo kufakwa ku-conveyor. Futhi inani lokukhiqiza liqala ukunqoba ikhwalithi yayo.

Ngesikhathi esifanayo, lapho sidlala imidlalo yabanye abantu, sihlala sikhawulelwa izindawo, isakhiwo, abalingisi, izinsimbi zegeyimu abanye abantu abaqhamuke nazo. Ngakho ngabona ukuthi...

… sekuyisikhathi sokuzakhela eyakho imihlaba, engaphansi kwami ​​kuphela. Emhlabeni lapho nginguBaba, neNdodana, noMoya oNgcwele!

Futhi ngikholelwa ngobuqotho ukuthi ngokubhala injini yakho yomdlalo kanye nomdlalo kuyo, uzokwazi ukuvula amehlo akho, usule amafasitela bese upompa ikhabethe lakho, ube ngumhleli onolwazi futhi obalulekile.

Kulesi sihloko ngizozama ukukutshela ukuthi ngaqala kanjani ukubhala imidlalo emincane ku-C / C ++, iyini inqubo yokuthuthukiswa futhi lapho ngithola khona isikhathi sokuzilibazisa endaweni ematasa. I-subjective futhi ichaza inqubo yesiqalo somuntu ngamunye. Okubalulekile mayelana nokungazi nokholo, mayelana nesithombe sami siqu somhlaba okwamanje. Ngamanye amazwi, "Ukuphatha akunasibopho sobuchopho bakho bomuntu siqu!".

Hlanganisa

“Ulwazi ngaphandle kokwenza akusizi, ukwenza ngaphandle kolwazi kuyingozi.” Confucius

Incwadi yami yokubhalela iyimpilo yami!


Ngakho-ke, ekusebenzeni, ngingasho ukuthi konke kimi kuqala nge-notebook. Angibhali kuphela imisebenzi yami yansuku zonke lapho, kodwa futhi ngidweba, uhlelo, ngiklame amashadi agelezayo futhi ngixazulule izinkinga, okuhlanganisa nezibalo. Njalo sebenzisa incwajana futhi ubhale ngepensela kuphela. Ihlanzekile, inethezekile futhi ithembekile, i-IMHO.

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Ibhuku lami (eseligcwalisiwe). Kubukeka kanjena. Iqukethe imisebenzi yansuku zonke, imibono, imidwebo, imidwebo, izixazululo, ukugcinwa kwamabhuku omnyama, ikhodi, njalonjalo.

Kulesi sigaba, ngikwazile ukuqeda amaphrojekthi amathathu (lokhu kukuqonda kwami ​​"ukugcina", ngoba noma yimuphi umkhiqizo ungathuthukiswa ngokungenamkhawulo).

  • Iphrojekthi 0: lesi yisigcawu se-Architect Demo 3D esibhalwe ku-C# kusetshenziswa injini yegeyimu ye-Unity. Kumapulatifomu e-macOS neWindows.
  • Umdlalo 1: igeyimu ye-console Inyoka Elula (eyaziwa yiwo wonke umuntu ngokuthi "Inyoka") ye-Windows. ibhalwe ngo-C.
  • Umdlalo 2: umdlalo we-console Crazy Tanks (owaziwa yiwo wonke umuntu ngokuthi "Amathangi"), asevele abhalwe ku-C ++ (kusetshenziswa amakilasi) nangaphansi kwe-Windows.

Idemo ye-Project 0 ye-Architect

  • Inkundla: I-Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • I-albhamu kuphela: C#
  • Injini yomdlalo: Unity
  • Ugqozi: Darrin Lile
  • Inqolobane: GitHub

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Idemo ye-3D Scene Architect

Iphrojekthi yokuqala ayizange isetshenziswe ku-C/C++, kodwa ku-C# kusetshenziswa injini yegeyimu ye-Unity. Le njini ibingafuneki kangako ku-hardware Unreal Engine, futhi kimi kwakubonakala kulula ukuyifaka nokusebenzisa. Angizange ngicabangele ezinye izinjini.

Inhloso ku-Unity kimina kwakungekona ukuthuthukisa uhlobo oluthile lomdlalo. Bengifuna ukudala isigcawu se-3D esinohlobo oluthile lomlingiswa. Yena, noma kunalokho Yena (ngamodela intombazane engangithandana nayo =) kwadingeka anyakaze futhi ahlanganyele nezwe langaphandle. Bekubalulekile kuphela ukuqonda ukuthi iyini i-Unity, ukuthi iyini inqubo yentuthuko, nokuthi kuthatha umzamo ongakanani ukudala okuthile. Yile ndlela iphrojekthi ye-Architect Demo yazalwa ngayo (igama lasungulwa cishe kusukela ku-bullshit). Ukwenza izinhlelo, ukumodela, ukugqwayiza, ukuthumela imiyalezo kungithathe cishe izinyanga ezimbili zomsebenzi wansuku zonke.

Ngiqale ngamavidiyo wokufundisa ku-YouTube okuthi ungawakha kanjani amamodeli e-3D kuwo blender. I-Blender iyithuluzi elikhulu lamahhala lokumodela i-3D (nokwengeziwe) elingadingi ukufakwa. Futhi lapha ngangilindelwe ukushaqeka ... Kuvele ukuthi ukumodela, ukugqwayiza, ukuthumela imiyalezo kuyizihloko ezinkulu ezihlukene ongabhala kuzo izincwadi. Lokhu kuyiqiniso ikakhulukazi kubalingiswa. Ukumodela iminwe, amazinyo, amehlo nezinye izingxenye zomzimba, uzodinga ulwazi lwe-anatomy. Ihlelwa kanjani imisipha yobuso? Bahamba kanjani abantu? Kwadingeka “ngifake” amathambo engalweni ngayinye, emlenzeni, emunweni, emaqaqeni!

Yenza isibonelo i-clavicle, izinsimbi zethambo ezengeziwe, ukuze ukugqwayiza kubukeke kungokwemvelo. Ngemva kwezifundo ezinjalo, uyaqaphela ukuthi umsebenzi omkhulu owenziwa abadali bamafilimu opopayi, ukudala imizuzwana engama-30 yevidiyo. Kodwa amamuvi e-3D ahlala amahora! Bese siphuma ezinkundleni zemidlalo yaseshashalazini sisho into efana nalena: “Ta, ikhathuni/imuvi engcolile! Bebengenza kangcono…” Ziwula!

Futhi enye into mayelana nezinhlelo kule phrojekthi. Njengoba kwenzeka, ingxenye eyayithakazelisa kakhulu kimi kwakuyizibalo. Uma uqhuba isigameko (isixhumanisi senqolobane encazelweni yephrojekthi), uzoqaphela ukuthi ikhamera izungeza umlingisi wentombazane endaweni. Ukuze ngihlele ukuzungezisa kwekhamera okunjalo, kwadingeka ngiqale ngibale izixhumanisi zephoyinti lokuma kumbuthano (2D), bese kuba yindilinga (3D). Okuhlekisayo ukuthi ngangizizonda izibalo esikoleni futhi ngangizazi nge-minus. Ngokwengxenye, mhlawumbe, ngoba esikoleni abakuchazi nje ukuthi lesi zibalo sisetshenziswa kanjani empilweni. Kodwa uma ugxile emgomweni wakho, phupha, ingqondo iyasuswa, yembulwe! Futhi uqala ukubona imisebenzi eyinkimbinkimbi njenge-adventure ethokozisayo. Bese ucabanga ukuthi: "Hhayi-ke, kungani *isazi sezibalo esithandwayo* singakwazi ukusho ukuthi lawa mafomula angancika kuphi?".

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Ukubalwa kwamafomula okubala izixhumanisi zephoyinti esiyingini kanye nendilinga (kusuka encwadini yami yokubhalela)

Umdlalo 1

  • Inkundla: I-Windows (ihlolwe ku-Windows 7, 10)
  • I-albhamu kuphela: Ngicabanga ukuthi yayibhalwe ngo-C omsulwa
  • Injini yomdlalo: I-Windows console
  • Ugqozi: javidx9
  • Inqolobane: GitHub

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Simple Snake game

Isigcawu se-3D akuwona umdlalo. Ngaphezu kwalokho, ukumodela nokugqwayiza izinto ze-3D (ikakhulukazi izinhlamvu) kude futhi kunzima. Ngemva kokudlala nge-Unity, ngabona ukuthi kufanele ngiqhubeke, noma kunalokho ngiqale, kusukela ezintweni eziyisisekelo. Into elula futhi esheshayo, kodwa ngesikhathi esifanayo yomhlaba wonke, ukuqonda isakhiwo semidlalo.

Futhi yini esinayo elula futhi esheshayo? Kulungile, ikhonsoli ne-2D. Ngokunembayo, ngisho nekhonsoli nezimpawu. Nalapha, ngaqala ukufuna ugqozi ku-inthanethi (ngokuvamile, ngibheka i-inthanethi njengento esungulwe izinguquko neziyingozi kakhulu zekhulu lama-XNUMX). Ngimbe ividiyo yomunye umhleli owenza i-console Tetris. Futhi ngokufana nomdlalo wakhe, wanquma ukunquma "inyoka". Kuvidiyo, ngifunde ngezinto ezimbili ezibalulekile - iluphu yegeyimu (enemisebenzi / izingxenye ezintathu eziyisisekelo) kanye nomphumela kubhafa.

I-loop yegeyimu ingase ibukeke kanje:

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

Ikhodi yethula wonke umsebenzi oyinhloko () ngesikhathi esisodwa. Futhi umjikelezo wegeyimu uqala ngemva kokuphawula okuhambisanayo. Kunemisebenzi emithathu eyisisekelo kuluphu: Okokufaka(), Umqondo(), Dweba(). Okokuqala, okokufaka kwedatha (ikakhulukazi ukulawula izinkinobho), bese ucubungula idatha efakiwe Logic, bese uyiveza esikrinini - Dweba. Futhi ngakho wonke uhlaka. I-animation idalwe ngale ndlela. Kufana namakhathuni. Ngokuvamile ukucubungula idatha yokufaka kuthatha isikhathi esiningi futhi, ngokwazi kwami, kunquma izinga lozimele legeyimu. Kodwa lapha umsebenzi we-Logic() uyashesha kakhulu. Ngakho-ke, izinga lozimele kufanele lilawulwe umsebenzi Wokulala() ngepharamitha ye-gameSpeed ​​​​, enquma leli zinga.

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
umjikelezo wegeyimu. Uhlelo lwenyoka ku-notepad

Uma uthuthukisa igeyimu yekhonsoli engokomfanekiso, bese ubonisa idatha esikrinini usebenzisa okukhiphayo okusakazwayo okuvamile okuthi 'cout' ngeke kusebenze - kuhamba kancane kakhulu. Ngakho-ke, okukhiphayo kufanele kwenziwe kubhafa yesikrini. Ngokushesha kakhulu futhi umdlalo uzosebenza ngaphandle kwama-glitches. Uma ngikhuluma iqiniso, angiqondi kahle ukuthi iyini isilondolozi sesikrini nokuthi sisebenza kanjani. Kodwa ngizonikeza isibonelo sekhodi lapha, futhi mhlawumbe othile kumazwana uzokwazi ukucacisa isimo.

Ukuthola ibhafa yesikrini (uma ngingasho njalo):

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

Okuphumayo okuqondile esikrinini somugqa othile wamaphuzuUmugqa (umugqa wokubonisa amaphuzu):

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

Ngombono, akukho lutho oluyinkimbinkimbi kulo mdlalo, kubonakala kimi njengesibonelo esihle somdlalo wezinga lokungena. Ikhodi ibhalwe efayeleni elilodwa futhi ihlelwe ngemisebenzi eminingana. Awekho amakilasi, alikho ifa. Wena ngokwakho ungabona yonke into kukhodi yomthombo yomdlalo ngokuya endaweni yokugcina ku-GitHub.

Umdlalo 2 Crazy Tanks

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Crazy Tanks umdlalo

Ukuphrinta izinhlamvu kukhonsoli cishe kuyinto elula ongayenza ube umdlalo. Kodwa-ke kuvela inkathazo eyodwa: abalingiswa banobude obuhlukene nobubanzi (ubude bukhulu kunobubanzi). Ngakho-ke, yonke into izobukeka ingenakulinganiswa, futhi ukuhamba phansi noma phezulu kuzobonakala kushesha kakhulu kunokuhamba kwesokunxele noma kwesokudla. Lo mphumela ubonakala kakhulu ku-"Snake" (Umdlalo 1). "Amathangi" (Umdlalo 2) awunayo i-drawback enjalo, njengoba okukhiphayo kuhlelwe ngokudweba amaphikseli esikrini ngemibala ehlukene. Ungase uthi ngibhale isinikezeli. Yiqiniso, lokhu sekuvele kuyinkimbinkimbi, nakuba kuthakazelisa kakhulu.

Kulo mdlalo, kuzokwanela ukuchaza isistimu yami yokubonisa amaphikseli esikrinini. Ngicabanga ukuthi lena ingxenye eyinhloko yomdlalo. Futhi konke okunye ungaqhamuka nakho.

Ngakho-ke, okubonayo esibukweni kuyisethi nje yonxande abanemibala enyakazayo.

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Isethi kanxande

Unxande ngamunye umelelwa i-matrix egcwele izinombolo. Kodwa-ke, ngingagqamisa i-nuance eyodwa ethokozisayo - wonke ama-matrics emdlalweni ahlelwe njengohlelo olunohlangothi olulodwa. Hhayi i-two-dimensional, kodwa enohlangothi olulodwa! Amalungu afanayo anohlangothi olulodwa kulula kakhulu futhi ayashesha ukusebenza ngawo.

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Isibonelo se-matrix yethangi legeyimu

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Imele i-Matrix Yethangi Legeyimu ene-One-Dimensional Array

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Isibonelo esihle kakhulu sokumelwa kwe-matrix ngohlelo lohlangothi olulodwa

Kodwa ukufinyelela kuzakhi zamalungu afanayo kwenzeka ku-loop ephindwe kabili, njengokungathi kwakungeyona ingxenye eyodwa-dimensional, kodwa i-two-dimensional array. Lokhu kwenziwa ngoba sisasebenza nomatikuletsheni.

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Ukunqamula amalungu afanayo anohlangothi olulodwa kuluphu ekabili. U-Y uyi-ID yomugqa, u-X yi-ID yekholomu

Sicela uqaphele ukuthi esikhundleni sezihlonzi ezijwayelekile ze-matrix i, j, ngisebenzisa izihlonzi x kanye no-y. Ngakho-ke, kubonakala kimi, kujabulisa kakhulu iso futhi kucace nakakhulu ebuchosheni. Ngaphezu kwalokho, i-notation enjalo yenza kube nokwenzeka ukuklama kalula ama-matrices asetshenziswa kuma-ax axhumanisa wesithombe esinezinhlangothi ezimbili.

Manje mayelana namaphikseli, umbala nesibonisi. Umsebenzi we-StretchDIBits (Header: windows.h; Library: gdi32.lib) usetshenziselwa okukhiphayo. Phakathi kwezinye izinto, lokhu okulandelayo kudluliselwe kulo msebenzi: idivayisi lapho isithombe siboniswa (esimweni sami, lena i-Windows console), izixhumanisi zokuqala kokubonisa isithombe, ububanzi / ubude baso, nesithombe. yona ngokwayo isesimweni se-bitmap (i-bitmap), emelwe uxhaxha lwamabhayithi. I-Bitmap njengohlu lwamabhayithi!

Umsebenzi we-StretchDIBits() emsebenzini:

// 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
               );

Imemori yabelwe kusengaphambili kule bitmap kusetshenziswa umsebenzi we-VirtualAlloc(). Okusho ukuthi, inombolo edingekayo yamabhayithi igcinelwe ukugcina ulwazi mayelana nawo wonke amaphikseli, azovezwa esikrinini.

Ukudala i-bitmap ye-m_p_bitmapMemory:

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

Uma sikhuluma nje, i-bitmap iqukethe isethi yamaphikseli. Wonke amabhayithi amane ohlwini ayiphikseli ye-RGB. Ibhayithi eyodwa ngenani elibomvu, ibhayithi eyodwa ngenani eliluhlaza (G), kanye nebhayithi eyodwa ngombala oluhlaza okwesibhakabhaka (B). Futhi, kukhona ibhayithi eyodwa ngokuhlehlisa ngakunye. Le mibala emithathu - Ebomvu / Eluhlaza / Eluhlaza okwesibhakabhaka (RGB) - ixutshwe nomunye ngezilinganiso ezihlukene - futhi umbala wephikseli owumphumela uyatholakala.

Manje, futhi, unxande ngamunye, noma into yomdlalo, imelelwa inombolo yematrix. Zonke lezi zinto zegeyimu zibekwe eqoqweni. Bese bebekwa enkundleni yokudlala, benze i-matrix eyodwa enkulu yezinombolo. Ngifake imephu inombolo ngayinye ku-matrix ngombala othile. Isibonelo, inombolo yesi-8 iluhlaza okwesibhakabhaka, inombolo engu-9 iphuzi, inombolo engu-10 inompunga obumnyama, njalonjalo. Ngakho-ke, singasho ukuthi sine-matrix yenkundla yokudlala, lapho inombolo ngayinye iwuhlobo oluthile lombala.

Ngakho-ke, sine-matrix yezinombolo yayo yonke inkundla yokudlala ngakolunye uhlangothi kanye ne-bitmap yokubonisa isithombe ngakolunye. Kuze kube manje, i-bitmap "ayinalutho" - ayikabi nalo ulwazi mayelana namaphikseli ombala owufunayo. Lokhu kusho ukuthi isinyathelo sokugcina sizogcwalisa i-bitmap ngolwazi mayelana nephikseli ngayinye ngokusekelwe kunombolo ye-matrix yenkundla yokudlala. Isibonelo esifanekisayo senguquko enjalo sisesithombeni esingezansi.

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Isibonelo sokugcwalisa i-bitmap (i-Pixel matrix) ngolwazi olususelwe kuzibalo zezinombolo (i-Digital matrix) yenkundla yokudlala (izinkomba zombala azifani nezinkomba zegeyimu)

Ngizophinde ngithule ucezu lwekhodi yangempela evela emdlalweni. I-colorIndex eguquguqukayo ekuphindaphindweni ngakunye kweluphu inikezwa inani (inkomba yombala) ukusuka ku-matrix yenombolo yenkundla yokudlala (mainDigitalMatrix). Khona-ke umbala ngokwawo ubhalwa ku-variable yombala ngokusekelwe kunkomba. Ngaphezu kwalokho, umbala umphumela uhlukaniswe isilinganiso obomvu, oluhlaza kanye blue (RGB). Futhi kanye ne-indenti (i-pixelPadding), lolu lwazi lubhalwa ku-pixel kaninginingi, lwakha isithombe sombala ku-bitmap.

Ikhodi isebenzisa izikhombisi nokusebenza kancane, okungaba nzima ukuyiqonda. Ngakho-ke ngikweluleka ukuthi ufunde ngokwehlukana endaweni ethile ukuthi izakhiwo ezinjalo zisebenza kanjani.

Ukugcwalisa i-bitmap ngolwazi olususelwe kunombolo yenkundla yokudlala:

// 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;
   }

Ngokwendlela echazwe ngenhla, kwakheka isithombe esisodwa (uhlaka) kumdlalo we-Crazy Tanks futhi siboniswe esikrinini ku-Draw() umsebenzi. Ngemva kokubhalisa okhiye ku-Input() umsebenzi kanye nokucubungula kwabo okulandelayo kumsebenzi we-Logic(), isithombe esisha (uhlaka) siyakhiwa. Yiqiniso, izinto zomdlalo kungenzeka sezivele zinendawo ehlukile enkundleni yokudlala futhi, ngokufanele, zidwetshwe endaweni ehlukile. Lena indlela ukugqwayiza (ukunyakaza) okwenzeka ngayo.

Ngokombono (uma ungakhohlwanga lutho), ukuqonda iluphu yegeyimu kusukela kugeyimu yokuqala (“Inyoka”) kanye nesistimu yokubonisa amaphikseli esikrinini asuka kumdlalo wesibili (“Amathangi”) yikho konke okudingayo ukuze ubhale noma iyiphi yemidlalo yakho ye-2D yeWindows. Ayinamsindo! 😉 Ezinye izingxenye zimane nje ziwubukhazikhazi.

Yiqiniso, umdlalo "Amathangi" yakhelwe eziyinkimbinkimbi kakhulu kuka "Snake". Sengivele ngasebenzisa ulimi lwe-C ++, okungukuthi, ngichaze izinto ezihlukene zegeyimu ngamakilasi. Ngizakhele iqoqo lami - ungabona ikhodi kumaheda/Box.h. Ngendlela, iqoqo cishe linokuvuza kwenkumbulo. Izikhombisi ezisetshenzisiwe. Sebenza ngenkumbulo. Kumelwe ngisho ukuthi le ncwadi yangisiza kakhulu. Ukuqala C++ Ngokuhlelwa Kwegeyimu. Lesi isiqalo esihle sabaqalayo ku-C++. Incane, iyathakazelisa futhi ihleleke kahle.

Kuthathe cishe izinyanga eziyisithupha ukuthuthukisa lo mdlalo. Ngangibhala ikakhulukazi ngesikhathi sesidlo sasemini kanye nokudla okulula emsebenzini. Wahlala ekhishini ehhovisi, wanyathela ukudla wabhala amakhodi. Noma ekhaya ukudla kwakusihlwa. Ngakho ngathola "izimpi zasekhishini" ezinjalo. Njengenjwayelo, ngasebenzisa incwadi yokubhala ngenkuthalo, futhi zonke izinto ezinomqondo zazalelwa kuyo.

Ekupheleni kwengxenye engokoqobo, ngizokhipha izikena ezimbalwa zencwajana yami yokubhalela. Ukukhombisa ukuthi yini ngempela ebengiyibhala phansi, ngidweba, ngibala, ngiklama...

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Idizayini yesithombe sethangi. Nencazelo yokuthi ithangi ngalinye kufanele libe namaphikseli amangaki esikrinini

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Ukubalwa kwe-algorithm namafomula okuzungezisa ithangi ekseni yalo

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Umdwebo weqoqo lami (lowo onokuvuza kwenkumbulo, okungenzeka kakhulu). Iqoqo lidalwe njengohlu oluxhunyiwe

I-DevOps C++ kanye "nezimpi zasekhishini", noma Ngiqale kanjani ukubhala imidlalo ngenkathi ngidla
Futhi lena imizamo eyize yokufaka ubuhlakani bokwenziwa emdlalweni

Umbono

"Ngisho nohambo lwamamayela ayinkulungwane luqala ngesinyathelo sokuqala" (Ubuhlakani bamaShayina Asendulo)

Masisuke ekuzijwayezeni siye kuthiyori! Usithola kanjani isikhathi sokuzilibazisa kwakho?

  1. Thola ukuthi yini oyifunayo ngempela (maye, lokhu kunzima kakhulu).
  2. Beka izinto eziza kuqala.
  3. Dedela konke "okungaphezu kwamandla" ngenxa yezinto eziza kuqala.
  4. Qhubekela ezinhlosweni zakho nsuku zonke.
  5. Ungalindeli ukuthi kuzoba namahora amabili noma amathathu esikhathi samahhala sokuzilibazisa.

Ngakolunye uhlangothi, udinga ukunquma ukuthi yini oyifunayo futhi ubeke phambili. Ngakolunye uhlangothi, kungenzeka ukushiya ezinye izimo / amaphrojekthi ngokuvuna lezi zinto ezibalulekile. Ngamanye amazwi, kuzodingeka udele konke "okungaphezu kwamandla". Ngezwa ndawana thize ukuthi empilweni kufanele kube nemisebenzi emithathu esemqoka. Khona-ke uzokwazi ukubhekana nabo ngendlela engcono kakhulu. Futhi amaphrojekthi/izikhombisi-ndlela ezengeziwe zizoqala ukugcwala i-corny. Kodwa lokhu konke, cishe, subjective futhi ngabanye.

Kunomthetho othile wegolide: ungalokothi ube nosuku oluyi-0%! Ngifunde ngakho esihlokweni sonjiniyela we-indie. Uma usebenza kuphrojekthi, yenza okuthile ngakho nsuku zonke. Futhi akunandaba ukuthi wenza malini. Bhala igama elilodwa noma umugqa owodwa wekhodi, buka ividiyo yokufundisa eyodwa, noma ubethele isipikili esisodwa ebhodini—yenza okuthile. Ingxenye enzima kakhulu ukuqala. Uma usuqalile, cishe uzokwenza okungaphezu kwalokho obukufuna. Ngakho-ke uzoqhubekela phambili uye emgomweni wakho futhi, ngikholwe, ngokushesha okukhulu. Phela, i-brake enkulu kuzo zonke izinto ukuhlehlisa.

Futhi kubalulekile ukukhumbula ukuthi akufanele ubukele phansi futhi ungayinaki "sawdust" yamahhala yesikhathi emaminithini angu-5, 10, 15, ulinde "izingodo" ezinkulu ezihlala ihora noma amabili. Ingabe umi kulayini? Cabanga ngokuthile kwephrojekthi yakho. Uyakhuphuka ngezitebhisi ezizihambelayo? Bhala okuthile ebhukwini lokubhalela. Uyadla ebhasini? Kulungile, funda isihloko. Sebenzisa wonke amathuba. Yeka ukubuka amakati nezinja ku-YouTube! Ungadlali nobuchopho bakho!

Futhi okokugcina. Uma, ngemva kokufunda lesi sihloko, wawuthanda umqondo wokudala imidlalo ngaphandle kokusebenzisa izinjini, khumbula igama elithi Casey Muratori. Lo mfana une iwebhusayithi. Esigabeni esithi "buka -> IZIQEPHU ESINGAPHAMBILI" uzothola izifundo zevidiyo zamahhala ezimangalisayo zokuthi ungawakha kanjani umdlalo wochwepheshe kusukela ekuqaleni. Ezifundweni ezinhlanu ze-Intro kuya ku-C zeWindows, ungafunda ngaphezu kweminyaka emihlanu yokufunda enyuvesi (omunye ubhale ngalokhu kumazwana angaphansi kwevidiyo).

U-Casey uphinde achaze ukuthi ngokwakha injini yakho yegeyimu, uzoba nokuqonda okungcono kwanoma yiziphi izinjini ezikhona. Emhlabeni wezinhlaka, lapho wonke umuntu ezama ukwenza ngokuzenzakalelayo, uzofunda ukudala, hhayi ukusebenzisa. Qonda ubunjalo bamakhompyutha. Futhi uzoba umhleli ohlakaniphe kakhulu futhi ovuthiwe - uchwepheshe.

Inhlanhla endleleni oyikhethile! Futhi masenze umhlaba ube ngochwepheshe kakhulu.

Author: UGrankin Andrey, DevOps



Source: www.habr.com