DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri

"Amaara m na amaghị m ihe ọ bụla" Socrates

Maka onye: maka ndị IT na-enweghị mmasị maka ndị mmepe niile ma chọọ igwu egwuregwu ha!

Gbasara Gịnị: banyere otu esi amalite ịde egwuregwu na C/C++, ma ọ bụrụ na ịchọrọ ya na mberede!

Gịnị kpatara ị ga-eji gụọ nke a: Mmepe ngwa abụghị mpaghara nka m, mana m na-agbalị itinye koodu kwa izu. N'ihi na m hụrụ egwuregwu n'anya!

Ndewo aha m bụ Andrey Grankin, Abụ m DevOps na Luxoft. Mmepe ngwa abụghị ọpụrụiche m, mana m na-agbalị itinye koodu kwa izu. N'ihi na m hụrụ egwuregwu n'anya!

Ụlọ ọrụ egwuregwu kọmputa buru ibu, a na-ekwukwa na ha karịrị ụlọ ọrụ ihe nkiri taa. Edere egwuregwu kemgbe mmalite nke kọmpụta, na-eji, n'ụkpụrụ ọgbara ọhụrụ, usoro mmepe dị mgbagwoju anya na nke bụ isi. Ka oge na-aga, igwe egwuregwu nwere eserese, physics, na ụda emeberelarị ịpụta. Ha na-enye gị ohere ilekwasị anya n'ịzụlite egwuregwu n'onwe ya ma ghara ichegbu onwe ya banyere ntọala ya. Ma yana ha, na engines, ndị mmepe "na-kpu ìsì" na-eweda. A na-etinye mmepụta nke egwuregwu n'onwe ya na eriri ebufe. Na ọnụ ọgụgụ nke ngwaahịa na-amalite imeri àgwà ya.

N'otu oge ahụ, mgbe anyị na-egwu egwuregwu ndị ọzọ, ebe, nkata, agwa, na usoro egwuregwu ndị mmadụ na-abịa na-ejedebe mgbe niile. Ya mere achọpụtara m na...

... oge eruola ịmepụta ụwa nke m, n'okpuru naanị m. Ụwa ebe m bụ Nna, Ọkpara, na Mụọ Nsọ!

M kwenyesiri ike na site n'ịde engine egwuregwu nke gị ma na-egwu egwu na ya, ị ga-enwe ike iwepụ akpụkpọ ụkwụ gị, hichaa windo ma kwalite ụlọ gị, na-aghọ onye na-eme ihe na-enwe ahụmahụ na nke zuru oke.

N'isiokwu a, m ga-agbalị ịgwa gị otú m si malite ịde obere egwuregwu na C / C ++, otú usoro mmepe dị, na ebe m na-achọta oge maka ntụrụndụ na gburugburu ebe ọrụ. Ọ bụ nke onwe ma na-akọwa usoro mmalite onye ọ bụla. Ihe gbasara amaghị ama na okwukwe, gbasara foto nke onwe m nke ụwa ugbu a. N'ikwu ya n'ụzọ ọzọ, "Ndị nchịkwa abụghị maka ụbụrụ nke gị!"

Mee ihe

"Ihe ọmụma na-enweghị omume abaghị uru, omume na-enweghị ihe ọmụma dị ize ndụ" Confucius

Akwụkwọ ndetu m bụ ndụ m!


Yabụ, na omume, enwere m ike ịsị na maka m ihe niile na-amalite na mpempe akwụkwọ. Ọ bụghị naanị na m na-edekọ ọrụ m kwa ụbọchị n'ebe ahụ, m na-esekwa ihe, mmemme, chepụta chaatị na-edozi nsogbu, gụnyere mgbakọ na mwepụ. Jiri akwụkwọ ndetu mgbe niile wee dee naanị na pensụl. Ọ dị ọcha, adaba na ntụkwasị obi, IMHO.

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Akwụkwọ ndetu m (ejupụtalarị na) Nke a bụ otú ọ dị. O nwere ihe aga-eme kwa ụbọchị, echiche, eserese, eserese, ihe ngwọta, idebe akwụkwọ ojii, koodu na ihe ndị ọzọ.

N'oge a, m jisiri ike rụọ ọrụ atọ (nke a bụ nghọta m nke "izu ezu", n'ihi na ngwaahịa ọ bụla nwere ike ịmepụta na-adịghị agwụ agwụ).

  • Oru 0: Nke a bụ ihe ngosi 3D Architect Demo edere na C # site na iji igwe egwuregwu Unity. Maka sistemụ arụmọrụ Windows na macOS.
  • Egwuregwu 1: egwuregwu console Mfe Snake (onye ọ bụla maara dị ka "agwọ") maka Windows. Edere ya na C.
  • Egwuregwu 2: egwuregwu console Crazy Tanks (onye ọ bụla mara dị ka "tankị"), nke edere na C++ (iji klaasị) yana kwa Windows.

Ọrụ 0. Ngosipụta ihe nrụpụta

  • Platform: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Ire: C#
  • Igwe egwuregwu: Ịdị n'Otu
  • Nkwalite: Darin Lile
  • Ebe nchekwa: GitHub

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ihe ngosi 3D Scene Architect

Emebere ọrụ mbụ ọ bụghị na C / C ++, mana na C # site na iji igwe egwuregwu Unity. Igwe a adịghị achọ ngwaike dị ka Injinia Emeghi Anya, ma dịkwa ka ọ dị mfe ịwụnye na iji. Echeghị m injin ndị ọzọ.

Ebumnuche m na Unity abụghị ịzụlite egwuregwu. Achọrọ m ịmepụta ihe nkiri 3D nwere ụfọdụ agwa. Ya, ma ọ bụ kama ọ (m modeled nwa agbọghọ m hụrụ n'anya =) ga-akpali na-emekọ ihe na ụwa gbara ya gburugburu. Ọ dị mkpa naanị ịghọta ihe ịdị n'otu bụ, ihe usoro mmepe bụ na mbọ ole achọrọ iji mepụta ihe. Nke a bụ otú e si mụọ ọrụ Architect Demo (aha ahụ fọrọ nke nta ka ọ bụrụ ebe ọ bụla). Mmemme, ime ihe ngosi, animation, texturing were m eleghị anya ọnwa abụọ n'ọrụ kwa ụbọchị.

Amalitere m site na vidiyo nkuzi na YouTube na imepụta ụdị 3D n'ime blender. Blender bụ ngwá ọrụ magburu onwe ya maka ịme ihe ngosi 3D (na ndị ọzọ) nke na-achọghị ntinye. Na ebe a ujo na-echere m ... Ọ na-apụta na ịme ngosi, animation, texturing bụ nnukwu isiokwu dị iche iche nke ị nwere ike ide akwụkwọ. Nke a bụ eziokwu karịsịa maka mkpụrụedemede. Iji ṅomie mkpịsị aka, ezé, anya na akụkụ ahụ ndị ọzọ, ị ga-achọ ihe ọmụma gbasara ahụ. Kedu ka e si ahazi akwara ihu? Kedu ka ndị mmadụ si aga? Ekwesịrị m itinye ọkpụkpụ n'ime ogwe aka ọ bụla, ụkwụ, mkpịsị aka, phalanges nke mkpịsị aka ọ bụla!

Mepụta ọkpụkpụ olu na ọkpụkpụ lever ọzọ iji mee ka ihe nkiri ahụ yie ihe okike. Mgbe nkuzi ndị dị otú ahụ gasịrị, ị ghọtara ọrụ ndị na-emepụta ihe nkiri na-eme ihe nkiri na-arụ naanị iji mepụta vidiyo 30 sekọnd. Mana ihe nkiri 3D na-adịru ọtụtụ awa! Mgbe ahụ, anyị na-ahapụ cinemas ma kwuo ihe dị ka: "Nke ahụ bụ katuunu / ihe nkiri! Ha gaara eme nke ọma. "Nzuzu!

Na otu ihe ọzọ gbasara mmemme na ọrụ a. Dịka ọ siri pụta, akụkụ kacha masị m bụ nke mgbakọ na mwepụ. Ọ bụrụ na ị na-agba ọsọ ahụ (njikọ na ebe nchekwa na nkọwa ọrụ), ị ga-achọpụta na igwefoto na-agbagharị gburugburu nwa agbọghọ ahụ na mpaghara. Iji mee ka usoro ntụgharị igwefoto dị otú ahụ, aghaghị m ibu ụzọ gbakọọ nhazi nke ebe ọnọdụ na gburugburu (2D), na mgbe ahụ na sphere (3D). Ihe na-atọ ọchị bụ na m kpọrọ mgbakọ na mwepụ asị n'ụlọ akwụkwọ wee mara ya na C-minus. Akụkụ ụfọdụ, eleghị anya, n'ihi na n'ụlọ akwụkwọ ha anaghị akọwara gị otú e si etinye mgbakọ na mwepụ a na ndụ. Ma mgbe ị na-eche banyere ihe mgbaru ọsọ gị, nrọ gị, uche gị na-ekpochapụ ma meghee! Na ị na-amalite ịghọta ọrụ siri ike dị ka ihe na-akpali akpali. Mgbe ahụ ị na-eche: "Ọfọn, gịnị kpatara na * ọkacha mmasị* gị na-agụghị akwụkwọ na-agwa gị mgbe niile ebe enwere ike itinye usoro ndị a?"

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ngụkọta usoro maka ịgbakọ nhazi nke isi ihe na gburugburu na gburugburu (site na akwụkwọ ndetu m)

Egwuregwu 1. Agwọ Dị Mfe

  • Platform: Windows (a nwalere na Windows 7, 10)
  • Ire: Echere m na m dere ya na ọcha C
  • Igwe egwuregwu: Windows console
  • Nkwalite: javidx9
  • Ebe nchekwa: GitHub

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Egwuregwu agwọ dị mfe

Ihe nkiri 3D abụghị egwuregwu. Na mgbakwunye, ịmegharị na ịmegharị ihe 3D (karịsịa mkpụrụedemede) na-ewe oge ma sie ike. Mgbe mụ na Unity na-egwuri egwu, m ghọtara na m kwesịrị ịga n'ihu, ma ọ bụ kama ịmalite, site na isi. Ihe dị mfe na ngwa ngwa, ma n'otu oge ahụ zuru ụwa ọnụ, ịghọta nnọọ usoro nke egwuregwu.

Kedu ihe dị mfe na ngwa ngwa? Nke ahụ ziri ezi, console na 2D. Kpọmkwem karịa, ọbụlagodi njikwa na akara. Ọzọ, agara m ịchọ mmụọ nsọ na ịntanetị (n'ozuzu, echere m na ịntanetị bụ ihe nrụpụta mgbanwe na nke dị ize ndụ nke narị afọ nke XNUMX). Egwupụtara m vidiyo nke onye mmemme nke mere console Tetris. Na n'ọdịdị egwuregwu ya, ekpebiri m ime "agwọ". Site na vidiyo a, amụtara m ihe abụọ dị mkpa - loop egwuregwu (nwere ọrụ atọ / akụkụ) na mmepụta na nchekwa.

Loop egwuregwu ahụ nwere ike ịdị ka nke a:

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

Koodu ahụ na-egosi ọrụ isi() niile n'otu oge. Na okirikiri egwuregwu na-amalite mgbe okwu kwesịrị ekwesị. Enwere isi ọrụ atọ na loop: Ntinye(), Logic(), Draw(). Nke mbụ, ntinye data ntinye (ọkachasị njikwa igodo igodo), wee hazie data abanyela Logic, wee pụta na ihuenyo - Draw. Ya mere ọ bụla etiti. Otu a ka esi emepụta animation. Ọ dị ka na cartoons. Na-emekarị, nhazi data abanyela na-ewe oge kachasị na, dịka m maara, na-ekpebi ọnụego etiti egwuregwu ahụ. Mana ebe a ọrụ Logic() na-arụ ngwa ngwa. Ya mere, ị ga-ejikwa ọrụ Sleep () na-eji egwuregwuSpeed ​​​​parameter, nke na-ekpebi ọsọ a.

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
okirikiri egwuregwu. Ịmepụta “agwọ” na akwụkwọ ndetu

Ọ bụrụ na ị na-emepe egwuregwu njikwa agwa, ị gaghị enwe ike iwepụta data na ihuenyo site na iji mpụta iyi 'cout' mgbe niile - ọ na-adị ngwa ngwa. Ya mere, a ga-ezigarịrị mmepụta na ebe nchekwa ihuenyo. Nke a dị nnọọ ngwa ngwa na egwuregwu ga-agba ọsọ na-enweghị glitches. N'ikwu eziokwu, Aghọtachaghị m ihe ihe nchekwa ihuenyo bụ yana otu o si arụ ọrụ. Ma m ga-enye ihe atụ koodu ebe a, ma eleghị anya, onye nwere ike dokwuo anya ọnọdụ na comments.

Ịnweta ihe nchekwa ihuenyo (dị ka a pụrụ isi kwuo ya):

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

Ngosipụta ozugbo nke ụfọdụ eriri akara akara (akara ngosi akara):

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

Na tiori, ọ dịghị ihe mgbagwoju anya na egwuregwu a; Echere m na ọ bụ ezigbo ihe atụ ntinye ọkwa. Edere koodu a n'otu faịlụ ma hazie ya n'ọtụtụ ọrụ. Enweghị klas, enweghị ihe nketa. Ị nwere ike ịhụ ihe niile n'onwe gị na koodu isi iyi egwuregwu site na ịga na ebe nchekwa na GitHub.

Egwuregwu 2. Tankị Crazy

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Egwuregwu Crazy tankị

Ịbipụta mkpụrụedemede na njikwa bụ eleghị anya ihe kachasị mfe ị nwere ike ịtụgharị ghọọ egwuregwu. Ma mgbe ahụ, otu nsogbu pụtara: akara ngosi nwere ịdị elu na obosara dị iche iche (ịdị elu dị elu karịa obosara). N'ụzọ dị otú a, ihe niile ga-ele anya nke ọma, na ịkwaga ala ma ọ bụ elu ga-apụta ngwa ngwa karịa ịkwaga aka ekpe ma ọ bụ aka nri. Mmetụta a na-ahụ nke ọma na Snake (Egwuregwu 1). "Tankị" (Egwuregwu 2) enweghị ihe ndọghachi azụ a, ebe ọ bụ na a na-ahazi mmepụta ebe ahụ site na eserese pikselụ ihuenyo nwere agba dị iche iche. Ị nwere ike ịsị na m dere onye ntụgharị. N'ezie, nke a dị ntakịrị mgbagwoju anya, ọ bụ ezie na ọ na-adọrọ mmasị karị.

Maka egwuregwu a, ọ ga-ezuru iji kọwaa usoro m maka igosipụta pikselụ na ihuenyo. M na-atụle nke a bụ isi akụkụ nke egwuregwu. Na ị nwere ike ime ihe ọ bụla ọzọ n'onwe gị.

Yabụ, ihe ị na-ahụ na ihuenyo bụ naanị otu akụkụ anọ nwere agba agba agba agba agba.

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ntọala rectangles

A na-anọchi anya akụkụ anọ ọ bụla site na matriks jupụtara na ọnụọgụ. Site n'ụzọ, enwere m ike igosi otu nuance na-adọrọ mmasị - a na-ahazi matrices niile dị na egwuregwu ahụ dị ka usoro otu akụkụ. Ọ bụghị akụkụ abụọ, mana otu akụkụ! Usoro otu akụkụ na-adị mfe yana ngwa ngwa iji rụọ ọrụ.

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ọmụmaatụ nke matriks tank egwuregwu

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Nnọchite anya nke matriks tank egwuregwu dị ka otu akụkụ n'usoro

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ihe atụ a na-ahụ anya karịa nke ịnọchite anya matriks dị ka nhazi otu akụkụ

Ma ịnweta ihe ndị dị n'usoro ahụ na-eme na mgbanaka abụọ, dịka a ga-asị na ọ bụghị otu akụkụ, kama ọ bụ akụkụ abụọ. Emere nke a n'ihi na anyị ka na-arụ ọrụ na matrices.

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Na-agafe n'usoro otu akụkụ na akaghị okpukpu abụọ. Y - ihe nchọpụta ahịrị, X - ihe nchọpụta kọlụm

Biko rịba ama: kama njirimara matrix i, j, a na m eji njirimara x na y. N'ụzọ dị otú a, ọ dị m ka ọ na-amasị anya karịa ma na-aghọtakwu ụbụrụ. Na mgbakwunye, nrịbama dị otú ahụ na-eme ka o kwe omume ịrụpụta matrices ndị e ji mee ihe n'ụzọ dabara adaba na anyụike nhazi nke onyonyo nwere akụkụ abụọ.

Ugbu a gbasara pikselụ, agba na mmepụta ihuenyo. A na-eji ọrụ StretchDIBits maka mmepụta (Isi okwu: windows.h; Library: gdi32.lib). Ọrụ a, n'etiti ihe ndị ọzọ, na-enweta ihe ndị a: ngwaọrụ nke egosipụtara ihe oyiyi ahụ (n'ọnọdụ m, ọ bụ Windows console), mmalite mmalite nke ihe ngosi ihe oyiyi, obosara / ịdị elu ya, na onyinyo ahụ n'onwe ya na ụdị nke bitmap, nke ọtụtụ bytes nọchiri anya ya. Bitmap dị ka nhazi byte!

StretchDIBits() na-arụ ọrụ:

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

A na-ekenye ebe nchekwa n'ihu maka bitmap a site na iji ọrụ VirtualAlloc(). Ya bụ, ọnụọgụ bytes achọrọ ka edobere iji chekwaa ozi gbasara pikselụ niile, nke a ga-egosipụta na ihuenyo.

Ịmepụta m_p_bitmapMemory bitmap:

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

N'ikwu okwu, bitmap nwere nchịkọta pikselụ. Bytes anọ ọ bụla dị n'usoro bụ pixel RGB. Otu byte kwa uru agba uhie, otu byte kwa uru agba akwụkwọ ndụ akwụkwọ ndụ (G), na otu byte kwa uru agba anụnụ anụnụ (B). Ọzọkwa enwere otu byte fọdụrụ maka ntinye. Agba atọ a - Red/Green/Blue (RGB) - agwakọtara ya na ibe ya n'ụzọ dị iche iche iji mepụta agba pixel nke ga-esi na ya pụta.

Ugbu a, ọzọ, akụkụ anọ, ma ọ bụ ihe egwuregwu, na-anọchi anya matriks ọnụọgụ. A na-etinye ihe egwuregwu ndị a niile na nchịkọta. Mgbe ahụ, a na-etinye ha n'ọhịa egwuregwu, na-akpụ otu nnukwu matriks ọnụọgụ. Ejikọtara m nọmba ọ bụla na matriks na agba akọwapụtara. Dịka ọmụmaatụ, nọmba 8 kwekọrọ na-acha anụnụ anụnụ, nọmba 9 na odo odo, nọmba 10 na isi awọ gbara ọchịchịrị, na ihe ndị ọzọ. Ya mere, anyị nwere ike ịsị na anyị nwere matrix nke ebe egwuregwu, ebe ọnụọgụ ọ bụla bụ agba.

Yabụ, anyị nwere matrix ọnụọgụ nke ogige egwuregwu niile n'otu akụkụ yana bitmap maka igosipụta onyonyo n'akụkụ nke ọzọ. Ka ọ dị ugbu a, bitmap ahụ bụ "ihe efu" - o nwebeghị ozi gbasara pikselụ nke agba achọrọ. Nke a pụtara na nzọụkwụ ikpeazụ ga-abụ iji ozi gbasara pikselụ ọ bụla mejupụta bitmap ahụ dabere na ọnụọgụ ọnụọgụ nke ogige egwuregwu. Ihe atụ doro anya nke mgbanwe dị otú ahụ dị na foto dị n'okpuru ebe a.

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ihe atụ nke imeju bitmap (Pixel matrix) na ozi dabere na Digital matrix nke ebe egwuregwu (ntụgharị agba anaghị adaba na indices dị na egwuregwu ahụ)

M ga-ewetakwa mpempe ezigbo koodu si egwuregwu. A na-ekenye Index nke na-agbanwe agbanwe na ntụgharị ọ bụla nke akaghị uru (ntụgharị agba) site na matrix ọnụọgụ nke ebe egwuregwu (mainDigitalMatrix). A na-edobe mgbanwe agba na agba n'onwe ya dabere na ndeksi. A na-ekewa ụcha nke si na ya pụta na oke nke uhie, akwụkwọ ndụ akwụkwọ ndụ na acha anụnụ anụnụ (RGB). Ya na pixelPadding, a na-ede ozi a n'ime pikselụ ugboro ugboro, na-eme onyinyo agba na bitmap.

Koodu ahụ na-eji ntụnye aka na arụmọrụ bitwise, nke nwere ike isi ike nghọta. Ya mere, m na-adụ ọdụ ka ị gụọ ebe dị iche iche ka usoro ndị dị otú ahụ si arụ ọrụ.

Na-ejuputa bitmap ahụ na ozi dabere na ọnụọgụ ọnụọgụ nke ogige egwuregwu:

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

Dị ka usoro akọwara n'elu, na egwuregwu Crazy Tanks otu foto (frame) na-etolite ma gosipụta na ihuenyo na ọrụ Draw (). Mgbe ị debanyere igodo igodo na ọrụ ntinye () na nhazi ha na-esote na ọrụ Logic(), a na-emepụta foto ọhụrụ (frame). N'ezie, ihe egwuregwu nwere ike nwee ọnọdụ dị iche n'ọgbọ egwuregwu, n'ihi ya, a na-ese ya n'ebe dị iche. Otu a ka animation (mmegharị) si eme.

Na tiori (ma ọ bụrụ na echefubeghị m ihe ọ bụla), ịghọta loop egwuregwu site na egwuregwu mbụ ("agwọ") na usoro maka igosipụta pikselụ na ihuenyo site na egwuregwu nke abụọ (" tankị ") bụ ihe niile ị chọrọ iji dee ọ bụla. nke egwuregwu 2D gị n'okpuru Windows. Enweghị ụda! 😉 Akụkụ ndị ọzọ bụ naanị ụgbọ elu mara mma.

N'ezie, egwuregwu "tankị" dị mgbagwoju anya karịa "agwọ". Ejila m asụsụ C ++ mee ihe, ya bụ, ejiri klaasị kọwaa ihe egwuregwu dị iche iche. Emepụtara m nchịkọta nke m - enwere ike ịlele koodu ahụ na nkụnye eji isi mee / Box.h. Site n'ụzọ, nchịkọta nwere ike inwe ebe nchekwa. Ntụnye aka. Na-arụ ọrụ na ebe nchekwa. M ga-asị na akwụkwọ ahụ nyeere m aka nke ukwuu Mmalite C++ Site na mmemme egwuregwu. Nke a bụ nnukwu mmalite maka ndị mbido na C++. Ọ dị obere, na-adọrọ mmasị ma hazie nke ọma.

O were ihe dị ka ọnwa isii ịmalite egwuregwu a. M na-edekarị akwụkwọ n'oge nri ehihie na nri nri n'ebe ọrụ. Ọ nọdụrụ na kichin ụlọ ọrụ, zọọ nri wee dee koodu. Ma ọ bụ na nri abalị n'ụlọ. Ya mere, m kwụsịrị na "agha kichin" ndị a. Dị ka mgbe niile, m na-arụsi ọrụ ike na-eji akwụkwọ ndetu, na ihe niile echiche a mụrụ na ya.

Iji mezue akụkụ bara uru, a ga m enyocha akwụkwọ ndetu m ole na ole. Iji gosi kpọmkwem ihe m dere, dọtara, gụta, hazie...

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ịmepụta ihe oyiyi nke tankị. Na ikpebi ole pikselụ nke tank kwesịrị ịdị na ihuenyo

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ngụkọta algọridim na usoro maka ntụgharị nke tank gburugburu axis ya

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Atụmatụ nke mkpokọta m (nke enwere ebe nchekwa ebe nchekwa, yikarịrị). A na-emepụta mkpokọta ahụ dịka ụdị Ndepụta Njikọ

DevOps C++ na "agha kichin", ma ọ bụ ka m si malite ide egwuregwu mgbe m na-eri nri
Ndị a bụ mbọ na-enweghị isi iji tinye ọgụgụ isi na egwuregwu ahụ

Akwụkwọ

"Ọbụna njem nke otu puku kilomita na-amalite na nzọụkwụ mbụ" (amamihe ndị China oge ochie)

Ka anyị si na omume gaa na tiori! Kedu ka esi enweta oge maka ihe omume ntụrụndụ gị?

  1. Kpebie ihe ị chọrọ n'ezie (Ewoo, nke a bụ akụkụ kacha sie ike).
  2. Tọọ ihe ndị ka mkpa ụzọ.
  3. Na-achụ ihe niile "mgbara" n'ihi na elu-ebute ụzọ.
  4. Gaa n'ihu ebumnuche kwa ụbọchị.
  5. Atụla anya awa abụọ ma ọ bụ atọ nke oge efu iji nọrọ na ntụrụndụ.

N'otu aka ahụ, ị ​​ga-ekpebi ihe ị chọrọ na-ebute ụzọ. N'aka nke ọzọ, ọ ga-ekwe omume ịhapụ ụfọdụ ọrụ / ọrụ maka ihe ndị a ka mkpa. N'ikwu ya n'ụzọ ọzọ, ị ga-achụ ihe niile "mgbakwunye". M nụrụ ebe na e kwesịrị ịbụ kacha nke atọ isi ihe na ndụ. Mgbe ahụ, ị ​​​​ga-enwe ike ime ha na àgwà kachasị elu. Na ọrụ / ntụzịaka ndị ọzọ ga-amalite ibufe ibu. Mana nke a niile nwere ike ịbụ nke onwe na nke onwe.

Enwere ụfọdụ iwu ọla edo: enwela ụbọchị 0%! Amụtara m ya n'otu akụkọ sitere n'aka onye nrụpụta indie. Ọ bụrụ na ị na-arụ ọrụ, mee ihe banyere ya kwa ụbọchị. Ọ baghịkwa uru ole ị na-eme. Dee otu okwu ma ọ bụ otu ahịrị koodu, lelee vidiyo nkuzi ma ọ bụ hama otu ntu n'ime bọọdụ - naanị mee ihe. Ihe kacha sie ike bụ ịmalite. Ozugbo ịmalitere, ị ga-emecha mee ntakịrị karịa ka ịchọrọ. N'ụzọ dị otú a, ị ga-anọgide na-aga n'ihu ruo ebumnobi gị na, kwere m, ngwa ngwa. A sị ka e kwuwe, isi ihe na-egbochi ihe niile bụ imegharị ihe.

Ma ọ dị mkpa icheta na ị kwesịrị ị na-elelị na-eleghara free "sawdust" nke oge nke 5, 10, 15 nkeji, chere maka ụfọdụ nnukwu "osisi" na-adịru otu awa ma ọ bụ abụọ. Ị na-eguzo n'ahịrị? Chee echiche banyere ihe maka ọrụ gị. Na-ewere escalator? Dee ihe n'ime akwụkwọ ndetu. Ị na-eme njem na bọs? Ọ dị mma, gụọ akụkọ ụfọdụ. Jiri ohere ọ bụla mee ihe. Kwụsị ikiri nwamba na nkịta na YouTube! Emerụla ụbụrụ gị!

Na otu ihe ikpeazụ. Ọ bụrụ na, mgbe ị gụchara isiokwu a, ọ masịrị gị echiche nke ịmepụta egwuregwu n'ejighị igwe egwuregwu, cheta aha Casey Muratori. Nwoke a nwere mkpokọta. Na ngalaba “lele -> EPISODES gara aga” ị ga-ahụ nkuzi vidiyo na-enweghị atụ maka imepụta egwuregwu ọkachamara site na ọkọ. Na Intro na C ise maka nkuzi Windows ị ga-amụta ihe karịrị afọ ise nke ọmụmụ mahadum (onye dere banyere nke a na nkọwa n'okpuru vidiyo).

Casey kọwakwara na site n'ịmepụta injin egwuregwu nke gị, ị ga-enwe nghọta nke ọma maka injin ọ bụla dị. N'ime ụwa nke frameworks ebe onye ọ bụla na-agbalị ime ka akpaaka, ị na-amụta ịmepụta kama iji. Ị ghọtara ụdị kọmpụta dị. Ị ga-abụkwa onye nwere ọgụgụ isi na onye tozuru okè mmemme - pro.

Jisie n'ụzọ gị họọrọ! Ka anyị meekwa ka ụwa bụrụ ọkachamara.

Author: Grankin Andrey, DevOps



isi: www.habr.com