ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana

"Ua ike au aole au i ike i kekahi mea" Socrates

No wai: no ka poʻe IT e kuha i nā mea hoʻomohala āpau a makemake e pāʻani i kā lākou pāʻani!

E pili ana i ka mea: pehea e hoʻomaka ai e kākau i nā pāʻani ma C/C++ inā pono ʻoe!

No ke aha ʻoe e heluhelu ai i kēia: ʻAʻole ʻo ka hoʻomohala ʻana i ka app kaʻu hana kūikawā, akā hoʻāʻo wau e code i kēlā me kēia pule. No ka mea makemake au i nā pāʻani!

Aloha 'O koʻu inoa Andrey Grankin, He DevOps au ma Luxoft. ʻAʻole ʻo ka hoʻomohala noi ʻana i kaʻu hana kūikawā, akā hoʻāʻo wau e code i kēlā me kēia pule. No ka mea makemake au i nā pāʻani!

Nui ka ʻoihana pāʻani kamepiula, ʻoi aku ka lono i kēia lā ma mua o ka ʻoihana kiʻiʻoniʻoni. Ua kākau ʻia nā pāʻani mai ka hoʻomaka ʻana o ka hoʻomohala ʻana i nā kamepiula, me ka hoʻohana ʻana, e nā kūlana hou, paʻakikī a me nā ʻano hoʻomohala kumu. I ka hala ʻana o ka manawa, ua hoʻomaka nā ʻenekini pāʻani me nā kiʻi kiʻi i hoʻonohonoho mua ʻia, physics, a me ke kani. Hāʻawi lākou iā ʻoe e noʻonoʻo i ka hoʻomohala ʻana o ka pāʻani ponoʻī a ʻaʻole hopohopo e pili ana i kona kumu. Akā me lākou, me nā ʻenekini, "hele makapō" nā mea hoʻomohala a hoʻohaʻahaʻa. Hoʻokomo ʻia ka hana pono o nā pāʻani ma ka conveyor. A hoʻomaka ka nui o ka hana e lanakila ma luna o kona maikaʻi.

I ka manawa like, i ka wā e pāʻani ai i nā pāʻani a nā poʻe ʻē aʻe, ua kaupalena mau ʻia mākou e nā wahi, ka hoʻolālā, nā ʻano, nā mīkini pāʻani a nā poʻe ʻē aʻe i hele mai ai. No laila ua maopopo iaʻu ...

… ʻo ka manawa kēia e hana ai i kāu mau honua ponoʻī, ma lalo oʻu wale nō. Nā honua kahi oʻu ka Makua, a me ke Keiki, a me ka ʻUhane Hemolele!

A ke manaʻoʻiʻo nei au ma ke kākau ʻana i kāu mīkini pāʻani ponoʻī a me kahi pāʻani ma luna o laila, hiki iā ʻoe ke wehe i kou mau maka, holoi i nā puka makani a paʻi i kou keʻena, e lilo i mea hoʻomohala ʻoi aku ka ʻike.

Ma kēia ʻatikala e hoʻāʻo wau e haʻi iā ʻoe pehea wau i hoʻomaka ai e kākau i nā pāʻani liʻiliʻi ma C / C ++, he aha ke kaʻina hana hoʻomohala a ma kahi e loaʻa ai iaʻu ka manawa no kahi leʻaleʻa i kahi ʻano hana. He kumuhana a wehewehe i ke kaʻina hana o ka hoʻomaka kanaka. Nā mea e pili ana i ka naʻaupō a me ka manaʻoʻiʻo, e pili ana i kaʻu kiʻi pilikino o ka honua i kēia manawa. I nā huaʻōlelo ʻē aʻe, "ʻAʻole kuleana ka hoʻokele no kou lolo pilikino!".

E aʻo

"He mea ole ka ike me ka hana ole, he mea weliweli ka hana me ka ike ole." Confucius

ʻO kaʻu puke puke koʻu ola!


No laila, ma ka hoʻomaʻamaʻa, hiki iaʻu ke ʻōlelo e hoʻomaka nā mea āpau iaʻu me kahi puke puke. ʻAʻole wau i kākau i kaʻu mau hana i kēlā me kēia lā ma laila, akā kaha kiʻi pū kekahi, papahana, hoʻolālā i nā kaha kahe a hoʻonā i nā pilikia, me nā mea makemakika. E hoʻohana mau i ka notepad a kākau wale me kahi penikala. He maʻemaʻe, ʻoluʻolu a hilinaʻi hoʻi, IMHO.

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
ʻO kaʻu puke puke (ua hoʻopiha ʻia). Penei kona nana. Loaʻa iā ia nā hana o kēlā me kēia lā, nā manaʻo, nā kaha kiʻi, nā kiʻi, nā hopena, ka mālama puke ʻeleʻele, code, a pēlā aku.

I kēia pae, ua hiki iaʻu ke hoʻopau i ʻekolu mau papahana (ʻo kēia i koʻu ʻike ʻana i ka "hopena", no ka mea hiki ke hoʻomohala ʻia kekahi huahana me ka pau ʻole).

  • Kumuhana 0: ʻO kēia kahi hiʻohiʻona Architect Demo 3D i kākau ʻia ma C # me ka hoʻohana ʻana i ka mīkini pāʻani Unity. No nā papahana macOS a me Windows.
  • Pāʻani 1: pāʻani console Simple Snake (ʻike ʻia e nā mea a pau ʻo "Snake") no Windows. kākau ʻia ma C.
  • Pāʻani 2: ʻO ka pāʻani console Crazy Tanks (i ʻike ʻia e nā mea a pau ʻo "Tanks"), ua kākau ʻia ma C ++ (me ka hoʻohana ʻana i nā papa) a ma lalo o Windows.

Papahana 0 Architect Demo

  • Anuu: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • 'Ōlelo: C#
  • ʻEnekini pāʻani: ke kuikahi
  • Hoʻoulu: Darrin Lile
  • Waihona: GitHub

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
3D Scene Architect Demo

ʻAʻole i hoʻokō ʻia ka papahana mua ma C/C++, akā ma C# me ka hoʻohana ʻana i ka mīkini pāʻani Unity. ʻAʻole i like ka koi ʻana o kēia ʻenekini ma ka lako lako Unreal Pake, a ua maʻalahi hoʻi iaʻu e hoʻouka a hoʻohana. ʻAʻole au i noʻonoʻo i nā ʻenekini ʻē aʻe.

ʻO ka pahuhopu i Unity iaʻu ʻaʻole ia e hoʻomohala i kekahi ʻano pāʻani. Makemake au e hana i kahi hiʻohiʻona 3D me kekahi ʻano ʻano. ʻO ia, a i ʻole ʻo ia (ua hoʻohālike au i ke kaikamahine aʻu i aloha ai =) pono e neʻe a launa pū me ka honua o waho. He mea nui wale ka hoʻomaopopo ʻana i ke ʻano o Unity, he aha ke kaʻina hana hoʻomohala, a me ka nui o ka hoʻoikaika ʻana e hana i kekahi mea. ʻO kēia ke ʻano o ka hana ʻana o ka Architect Demo (ua hoʻokumu ʻia ka inoa kokoke mai ka bullshit). ʻO ka papahana, hoʻohālike, animation, texturing i lawe iaʻu i ʻelua mahina o ka hana i kēlā me kēia lā.

Ua hoʻomaka wau me nā wikiō aʻo ma YouTube e pili ana i ka hana ʻana i nā hiʻohiʻona 3D i loko Blender. He mea hana manuahi maikaʻi ʻo Blender no ka hoʻohālike 3D (a ʻoi aku) ʻaʻole pono e hoʻokomo. A eia kahi haʻalulu i kali mai iaʻu ... Ua ʻike ʻia ʻo ka hoʻohālike, animation, texturing he mau kumuhana kaʻawale nui e hiki ai iā ʻoe ke kākau i nā puke. Heʻoiaʻiʻo loa kēia no nā kiʻi. No ka hoʻohālike ʻana i nā manamana lima, nā niho, nā maka a me nā ʻāpana ʻē aʻe o ke kino, pono ʻoe i ka ʻike o ke anatomi. Pehea ka hoʻonohonoho ʻana o nā ʻiʻo o ka maka? Pehea ka neʻe ʻana o nā kānaka? Pono wau e "hoʻokomo" i nā iwi i loko o kēlā me kēia lima, wāwae, manamana lima, puʻupuʻu!

E hoʻohālike i ka clavicle, nā iwi iwi hou aʻe, i ʻike maoli ke ʻano. Ma hope o ia mau haʻawina, ʻike ʻoe i ka hana nui a nā mea hana o nā kiʻiʻoniʻoni animated, e hana wale i 30 kekona wikiō. Akā ʻo nā kiʻiʻoniʻoni 3D mau hola! A laila, puka mai mākou i waho o nā hale kiʻiʻoniʻoni a ʻōlelo mākou i kekahi mea penei: “Ta, he kiʻiʻoniʻoni / kiʻiʻoniʻoni! Ua hiki iā lākou ke hana maikaʻi aʻe…” Naʻaupō!

A hoʻokahi mea hou e pili ana i ka hoʻolālā ʻana i kēia papahana. ʻO ka mea hoihoi loa iaʻu, ʻo ia ka makemakika. Inā holo ʻoe i ka hiʻohiʻona (ka loulou i ka waihona ma ka wehewehe ʻana o ka papahana), e ʻike ʻoe i ka huli ʻana o ke kāmela a puni ke ʻano o ke kaikamahine i kahi pōʻai. No ka hoʻolālā ʻana i kēlā ʻano pahupaʻiwikiō, pono iaʻu e helu mua i nā hoʻonohonoho o ke kiko kūlana ma ka pōʻai (2D), a laila ma ka pōʻai (3D). ʻO ka mea ʻakaʻaka, ua inaina au i ka makemakika ma ke kula a ua ʻike au me ka hōʻemi. ʻO kahi hapa, malia paha, no ka mea ma ke kula ʻaʻole lākou e wehewehe iā ʻoe pehea e hoʻohana ʻia ai kēia makemakika i ke ola. Akā, i ka wā e makaʻala ai ʻoe i kāu pahuhopu, moeʻuhane, a laila ua maʻemaʻe ka noʻonoʻo, hōʻike ʻia! A hoʻomaka ʻoe e ʻike i nā hana paʻakikī ma ke ʻano he hoʻohiwahiwa hoihoi. A laila, noʻonoʻo ʻoe: "ʻAe, no ke aha i hiki ʻole ai i ka *aloha* makemakika ke haʻi maʻamau i kahi e hilinaʻi ʻia ai kēia mau ʻano?".

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Ka helu ʻana i nā ʻōkuhi no ka helu ʻana i nā hoʻonohonoho o kahi kiko ma kahi pōʻai a ma kahi pōʻai (mai kaʻu puke puke)

Pāʻani 1

  • Anuu: Windows (hoʻāʻo ʻia ma Windows 7, 10)
  • 'Ōlelo: Manaʻo wau ua kākau ʻia ma ka C maʻemaʻe
  • ʻEnekini pāʻani: Windows console
  • Hoʻoulu: javidx9
  • Waihona: GitHub

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Pāʻani nahesa maʻalahi

ʻAʻole pāʻani ke kiʻi 3D. Eia kekahi, lōʻihi a paʻakikī ka hoʻohālike a me ka hoʻoulu ʻana i nā mea 3D (ʻoi aku ka paʻakikī. Ma hope o ka pāʻani ʻana me Unity, ʻike wau pono wau e hoʻomau, a i ʻole e hoʻomaka, mai nā kumu. He mea maʻalahi a wikiwiki, akā i ka manawa like honua, e hoʻomaopopo i ke ʻano o nā pāʻani.

A he aha kā mākou maʻalahi a wikiwiki? Pololei, console a me 2D. ʻOi aku ka pololei, ʻo ka console a me nā hōʻailona. Eia hou, ua hoʻomaka wau e ʻimi i ka hoʻoikaika ʻana ma ka Pūnaewele (ma ka laulā, ke manaʻo nei au i ka Pūnaewele ʻo ia ka mea hou a me ka weliweli o ka kenekulia XNUMX). Ua ʻeli au i kahi wikiō o kahi mea papahana nāna i hana console Tetris. A ma ke ʻano o kāna pāʻani, ua hoʻoholo ʻo ia e ʻoki i ka "snake". Mai ke wikiō, ua aʻo au e pili ana i ʻelua mau mea nui - ka loop loop (me ʻekolu mau hana / ʻāpana) a me ka hoʻopuka i ka buffer.

E like paha ke ʻano o ka loop game:

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

Hōʻike ke code i ka hana nui () i ka manawa hoʻokahi. A hoʻomaka ka pōʻai pāʻani ma hope o ka ʻōlelo pili. ʻEkolu mau hana maʻamau i loko o ka loop: Input (), Logic (), Draw (). ʻO ka mea mua, hoʻokomo i ka ʻikepili Input (ka mana nui o nā kī kī), a laila hoʻoponopono i ka Logic data i hoʻokomo ʻia, a laila hōʻike ʻia ma ka pale - Draw. A pēlā kēlā me kēia kiʻi. Hoʻokumu ʻia ka animation ma kēia ʻano. Ua like ia me nā kiʻi paʻi kiʻi. ʻO ka hana maʻamau i ka ʻikepili hoʻokomo e lawe i ka manawa nui a, e like me kaʻu ʻike, e hoʻoholo i ka helu kiʻi o ka pāʻani. Eia naʻe, wikiwiki loa ka hana Logic (). No laila, pono e hoʻomalu ʻia ka nui o ka frame e ka moe () me ka pāʻani Speed ​​​​parameter, nāna e hoʻoholo i kēia helu.

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
pōʻai pāʻani. Hoʻolālā nahesa ma ka notepad

Inā ʻoe e hoʻomohala nei i kahi pāʻani console symbolic, a laila e hōʻike ana i ka ʻikepili ma ka pale me ka hoʻohana ʻana i ke kahawai maʻamau 'cout' ʻaʻole e hana - lohi loa. No laila, pono e hoʻokō ʻia ka hopena ma ka pale pale. ʻOi aku ka wikiwiki a e hana ka pāʻani me ka ʻole o nā glitches. ʻO kaʻoiaʻiʻo, ʻaʻole maopopo iaʻu i ke ʻano o ka pale pale a pehea e hana ai. Akā e hāʻawi wau i kahi laʻana code ma aneʻi, a hiki paha i kekahi ma nā ʻōlelo ke wehewehe i ke kūlana.

Loaʻa i ka pale pale (inā hiki iaʻu ke ʻōlelo pēlā):

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

Hoʻopuka pololei i ka pale o kekahi laina scoreLine (ka laina no ka hōʻike ʻana i nā helu):

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

Ma ke kumumanaʻo, ʻaʻohe mea paʻakikī i kēia pāʻani, me he mea lā iaʻu he kumu hoʻohālike maikaʻi o kahi pāʻani komo. Ua kākau ʻia ke code i hoʻokahi faila a hoʻonohonoho ʻia i nā hana he nui. ʻAʻohe papa, ʻaʻohe hoʻoilina. Hiki iā ʻoe ke ʻike i nā mea āpau i ke kumu kumu o ka pāʻani ma ka hele ʻana i ka waihona ma GitHub.

Pāʻani 2 Crazy Tanks

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Pāʻani Crazy Tanks

ʻO ka paʻi ʻana i nā huaʻōlelo i ka console ka mea maʻalahi loa hiki iā ʻoe ke lilo i pāʻani. Akā, ʻike ʻia kahi pilikia: ʻokoʻa nā kiʻekiʻe a me nā laula (ʻoi aku ke kiʻekiʻe ma mua o ka laulā). No laila, ʻano like ʻole nā ​​mea a pau, a ʻoi aku ka wikiwiki o ka neʻe ʻana i lalo a i luna paha ma mua o ka neʻe ʻana i ka hema a i ʻole. ʻIke loa kēia hopena ma "Snake" (Game 1). "Tanks" (Game 2) ʻaʻohe drawback, no ka mea, ua hoʻonohonoho ʻia ka hoʻopuka ma ka pena ʻana i nā pika aniani me nā kala like ʻole. Hiki iā ʻoe ke ʻōlelo ua kākau wau i kahi mea hoʻopuka. ʻOiaʻiʻo, ua ʻoi aku ka paʻakikī o kēia, ʻoiai ʻoi aku ka hoihoi.

No kēia pāʻani, lawa ia e wehewehe i kaʻu ʻōnaehana no ka hōʻike ʻana i nā pika ma ka pale. Manaʻo wau ʻo kēia ka hapa nui o ka pāʻani. A me nā mea ʻē aʻe e hiki iā ʻoe ke hana iā ʻoe iho.

No laila, ʻo ka mea āu e ʻike ai ma ka pale he pūʻulu o nā ʻāpana ʻāpana kala e neʻe ana.

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Hoʻonohonoho ʻāhāhā

Hōʻike ʻia kēlā me kēia rectangle e kahi matrix i hoʻopiha ʻia me nā helu. Ma ke ala, hiki iaʻu ke hōʻike i kahi nuance hoihoi - ua hoʻonohonoho ʻia nā matrices āpau i ka pāʻani ma ke ʻano he hoʻonohonoho hoʻokahi. ʻAʻole ʻelua ʻāpana, akā hoʻokahi ʻano! ʻOi aku ka maʻalahi a ʻoi aku ka maʻalahi o ka hana ʻana i nā ʻāpana hoʻokahi.

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
He laʻana o ka pahu pahu pāʻani matrix

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
E hōʻike ana i ka Matrix o kahi pahu pāʻani me kahi ʻāpana hoʻokahi

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
He laʻana hoʻohālike hou aʻe o ka hōʻike ʻana i ka matrix ma kahi ʻano ʻāpana hoʻokahi

Akā ʻo ka loaʻa ʻana o nā mea o ka laha e loaʻa i loko o kahi puʻupuʻu pālua, me he mea lā ʻaʻole ia he ʻāpana hoʻokahi, akā he ʻāpana ʻelua. Hana ʻia kēia no ka mea ke hana nei mākou me nā matrices.

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Ke kaahele ʻana i kahi ʻāpana ʻāpana hoʻokahi i loko o kahi loop lua. ʻO Y ka ID lālani, ʻo X ka ID kolamu

E ʻoluʻolu e hoʻomaopopo ma kahi o nā mea hōʻike matrix maʻamau i, j, hoʻohana wau i nā mea hōʻike x a me y. No laila, me he mea lā iaʻu, ʻoi aku ka ʻoluʻolu o ka maka a ʻoi aku ka maopopo o ka lolo. Eia hou, ua hiki ke hoʻolālā maʻalahi i nā matrices i hoʻohana ʻia ma nā koʻi koʻikoʻi o kahi kiʻi ʻelua.

I kēia manawa e pili ana i nā pika, ke kala a me ka hōʻike. Hoʻohana ʻia ka hana StretchDIBits (Header: windows.h; Library: gdi32.lib) no ka hoʻopuka. Ma waena o nā mea ʻē aʻe, ua hāʻawi ʻia kēia i kēia hana: ʻo ka mea i hōʻike ʻia ke kiʻi (i koʻu hihia, ʻo ia ka Windows console), nā hoʻonohonoho o ka hoʻomaka ʻana e hōʻike i ke kiʻi, kona ākea / kiʻekiʻe, a me ke kiʻi. iā ia iho ma ke ʻano o kahi bitmap (bitmap), i hōʻike ʻia e kahi ʻano o nā bytes. Bitmap ma ke ʻano he ʻano paita!

ʻO ka hana StretchDIBits() ma ka hana:

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

Hoʻokaʻawale ʻia ka hoʻomanaʻo no kēia bitmap me ka hoʻohana ʻana i ka hana VirtualAlloc (). ʻO ia hoʻi, mālama ʻia ka helu o nā bytes e mālama i ka ʻike e pili ana i nā pika āpau, a laila e hōʻike ʻia ma ka pale.

Ke hana nei i 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);

ʻO ka ʻōlelo maʻalahi, aia ka bitmap i kahi hoʻonohonoho o nā pika. ʻO kēlā me kēia ʻehā paita i loko o ka laha he RGB pixel. Hoʻokahi paita no ka waiwai ʻulaʻula, hoʻokahi paita no ka waiwai ʻōmaʻomaʻo (G), a hoʻokahi paita no ka waihoʻoluʻu uliuli (B). Eia kekahi, aia hoʻokahi byte no kēlā me kēia indent. ʻO kēia mau waihoʻoluʻu ʻekolu - ʻulaʻula / ʻōmaʻomaʻo / ʻulaʻula (RGB) - ua hui pū ʻia kekahi me kekahi ma nā ʻāpana like ʻole - a loaʻa ke kala pixel hopena.

Eia hou, hōʻike ʻia kēlā me kēia ʻāpana ʻāpana, a i ʻole mea pāʻani e kahi matrix helu. Hoʻokomo ʻia kēia mau mea pāʻani āpau i kahi hōʻiliʻili. A laila kau ʻia lākou ma ke kahua pāʻani, e hana ana i hoʻokahi matrix helu nui. Ua paʻi au i kēlā me kēia helu ma ka matrix i kahi kala kikoʻī. Eia kekahi laʻana, he uliuli ka helu 8, he melemele ka helu 9, he hina hina ka helu 10, a pēlā aku. No laila, hiki iā mākou ke ʻōlelo he matrix o ke kahua pāʻani, kahi o kēlā me kēia helu he ʻano kala.

No laila, loaʻa iā mākou kahi matrix helu o ke kahua pāʻani holoʻokoʻa ma kekahi lima a me kahi bitmap no ka hōʻike ʻana i ke kiʻi ma kekahi. I kēia manawa, ʻo ka bitmap he "mea ʻole" - ʻaʻohe ʻike e pili ana i nā pika o ke kala i makemake ʻia. ʻO ia ke ʻano o ka hana hope e hoʻopiha i ka bitmap me ka ʻike e pili ana i kēlā me kēia pika ma muli o ka matrix helu o ke kahua pāʻani. Aia kekahi la'ana ho'ohālike o ia ho'ololi 'ana ma ke ki'i ma lalo nei.

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
ʻO kahi laʻana o ka hoʻopiha ʻana i kahi bitmap (Pixel matrix) me ka ʻike e pili ana i ka matrix helu (Digital matrix) o ke kahua pāʻani (ʻaʻole i kūlike nā helu kala me nā helu o ka pāʻani)

E hōʻike pū wau i kahi ʻāpana code maoli mai ka pāʻani. Hāʻawi ʻia ka colorIndex hoʻololi i kēlā me kēia hoʻololi ʻana o ka loop i kahi waiwai (ka helu helu) mai ka matrix helu o ke kahua pāʻani (mainDigitalMatrix). A laila kākau ʻia ke kala ponoʻī i ka hoʻololi kala ma muli o ka index. Eia hou, ua māhele ʻia ka waihoʻoluʻu i ka ratio o ka ʻulaʻula, ʻōmaʻomaʻo a me ka uliuli (RGB). A hui pū me ka indent (pixelPadding), ua kākau ʻia kēia ʻike i ka pika, e hana ana i kiʻi kala ma ka bitmap.

Hoʻohana ke code i nā kuhikuhi a me nā hana bitwise, hiki ke paʻakikī ke hoʻomaopopo. No laila ke aʻo aku nei au iā ʻoe e heluhelu kaʻawale ma kahi o ka hana ʻana o ia mau hale.

Hoʻopiha i kahi bitmap me ka ʻike e pili ana i ka matrix helu o ke kahua pāʻani:

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

E like me ke ʻano i hōʻike ʻia ma luna, hoʻokahi kiʻi (frame) i hoʻokumu ʻia i ka pāʻani Crazy Tanks a hōʻike ʻia ma ka pale ma ka hana Draw(). Ma hope o ka hoʻopaʻa inoa ʻana i nā kī kī i loko o ka hana Input () a me kā lākou hana ʻana ma ka hana Logic (), ua hoʻokumu ʻia kahi kiʻi hou (frame). ʻOiaʻiʻo, he kūlana ʻokoʻa paha nā mea pāʻani ma ke kahua pāʻani a, no laila, huki ʻia ma kahi ʻokoʻa. ʻO kēia ke ʻano o ka animation (neʻe).

Ma ke kumumanaʻo (inā ʻaʻole ʻoe i poina i kekahi mea), ʻo ka hoʻomaopopo ʻana i ka loop loop mai ka pāʻani mua ("Snake") a me ka ʻōnaehana no ka hōʻike ʻana i nā pika ma ka pale mai ka pāʻani lua ("Tanks") wale nō kāu e kākau ai i kekahi. o kāu mau pāʻani 2D no Windows. Leo ʻole! 😉 ʻO ke koena o nā ʻāpana he lele lele wale nō.

ʻOiaʻiʻo, ʻoi aku ka paʻakikī o ka pāʻani "Tanks" ma mua o ka "Snake". Ua hoʻohana mua au i ka ʻōlelo C++, ʻo ia hoʻi, ua wehewehe au i nā mea pāʻani like ʻole me nā papa. Ua hana au i kaʻu hōʻiliʻili ponoʻī - hiki iā ʻoe ke ʻike i ke code ma nā poʻo/Box.h. Ma ke ala, ʻo ka hōʻiliʻili ʻana he leak hoʻomanaʻo. Nā kuhikuhi i hoʻohana ʻia. Hana me ka hoʻomanaʻo. Pono wau e ʻōlelo ua kōkua nui ka puke iaʻu. E hoʻomaka ana i ka C++ ma o ka papahana pāʻani. He hoʻomaka maikaʻi kēia no ka poʻe hoʻomaka ma C++. He liʻiliʻi, hoihoi a hoʻonohonoho maikaʻi ʻia.

He ʻeono mahina i hoʻomohala ʻia kēia pāʻani. Ua kākau nui au i ka wā ʻaina awakea a me nā mea ʻai ma ka hana. Noho ʻo ia ma ka lumi kuke o ke keʻena, hehi i ka meaʻai a kākau i ke code. A i ʻole ma ka home no ka ʻaina ahiahi. No laila ua loaʻa iaʻu nā "kaua kīhini". E like me nā manawa a pau, ua hoʻohana au i kahi puke puke, a ua hānau ʻia nā mea manaʻo a pau i loko.

I ka pau ʻana o ka ʻāpana hana, e huki wau i kekahi mau scan o kaʻu puke. No ka hōʻike ʻana i kaʻu mea e kākau nei, kiʻi, helu, hoʻolālā…

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Hoʻolālā kiʻi pahu. A ʻo ka wehewehe ʻana i ka nui o nā pika e noho ai kēlā me kēia pahu ma ka pale

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
Ka helu ʻana o ka algorithm a me nā hoʻohālikelike no ka hoʻololi ʻana o ka pahu a puni kona axis

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
ʻO ke kiʻikuhi o kaʻu hōʻiliʻili (ʻo ka mea me ka leak hoʻomanaʻo, ʻoi loa paha). Hoʻokumu ʻia ka hōʻiliʻili ma ke ʻano he Listed List

ʻO DevOps C++ a me nā "kaua kīhini", a i ʻole Pehea wau i hoʻomaka ai e kākau i nā pāʻani i ka wā e ʻai ana
A he mau ho'āʻo makehewa kēia e hoʻopololei i ka ʻike artificial i loko o ka pāʻani

Kaona

"Hoʻomaka ka huakaʻi o hoʻokahi tausani mile me ka hana mua" (Ancient Chinese wisdom)

E neʻe kākou mai ka hoʻomaʻamaʻa a i ke kumumanaʻo! Pehea ʻoe e loaʻa ai ka manawa no kāu leʻaleʻa?

  1. E hoʻoholo i kāu makemake maoli (auwe, ʻo ka paʻakikī kēia).
  2. E hoʻonohonoho i nā mea nui.
  3. Hāʻawi i nā "superfluous" a pau no ka pono o nā mea nui.
  4. E neʻe i kāu mau pahuhopu i kēlā me kēia lā.
  5. Mai manaʻo e loaʻa ʻelua a ʻekolu mau hola o ka manawa kaʻawale no kahi leʻaleʻa.

Ma kekahi ʻaoʻao, pono ʻoe e hoʻoholo i ka mea āu e makemake ai a hoʻonohonoho mua. Ma ka ʻaoʻao ʻē aʻe, hiki ke haʻalele i kekahi mau hihia / papahana no kēia mau mea nui. I nā huaʻōlelo ʻē aʻe, pono ʻoe e kaumaha i nā mea āpau "superfluous". Ua lohe au ma kahi o ke ola he ʻekolu mau hana nui. A laila hiki iā ʻoe ke hana me lākou ma ke ala maikaʻi loa. A e hoʻomaka ana nā papahana / kuhikuhi hou e hoʻonui i ka corny. Akā ʻo kēia wale nō, malia paha, kumuhana a me ke kanaka.

Aia kekahi lula gula: ʻaʻole loaʻa kahi lā 0%! Ua aʻo wau e pili ana iā ia ma kahi ʻatikala na kahi mea hoʻomohala indie. Inā ʻoe e hana nei i kahi papahana, a laila e hana i kekahi mea e pili ana i kēlā me kēia lā. A ʻaʻole pili ka nui o kāu hana. E kākau i hoʻokahi huaʻōlelo a i ʻole hoʻokahi laina o ke code, e nānā i hoʻokahi wikiō aʻo, a i ʻole hoʻokahi kui i loko o ka papa—e hana wale i kekahi mea. ʻO ka mea paʻakikī ke hoʻomaka. Ke hoʻomaka ʻoe, e hana ʻoi aku paha ʻoe ma mua o kou makemake. No laila e neʻe mau ʻoe i kāu pahuhopu a, manaʻoʻiʻo mai iaʻu, wikiwiki loa. Ma hope o nā mea a pau, ʻo ka hoʻopaneʻe nui o nā mea āpau.

A he mea nui e hoʻomanaʻo ʻaʻole pono ʻoe e hoʻohaʻahaʻa a haʻalele i ka "sawdust" manuahi o ka manawa ma 5, 10, 15 mau minuke, e kali no kekahi mau "logs" nui i hoʻokahi hola a ʻelua paha. Ke kū nei ʻoe ma ka laina? E noʻonoʻo i kekahi mea no kāu papahana. Ke piʻi nei ʻoe i ka escalator? E kākau i kekahi mea ma ka puke puke. ʻAi ʻoe ma ke kaʻa? ʻAe, heluhelu i kekahi ʻatikala. E hoʻohana i kēlā me kēia manawa. Mai nānā i nā pōpoki a me nā ʻīlio ma YouTube! Mai huikau me kou lolo!

A ʻo ka hope. Inā, ma hope o ka heluhelu ʻana i kēia ʻatikala, makemake ʻoe i ka manaʻo o ka hana ʻana i nā pāʻani me ka ʻole o ka hoʻohana ʻana i nā mīkini pāʻani, a laila e hoʻomanaʻo i ka inoa ʻo Casey Muratori. Aia kēia kanaka pūnaewele. Ma ka ʻāpana "nānā -> PREVIOUS EPISODES" e ʻike ʻoe i nā haʻawina wikiō manuahi e pili ana i ka hana ʻana i kahi pāʻani ʻoihana mai ka wā ʻōpala. Hiki iā ʻoe ke aʻo hou aʻe i loko o ʻelima mau haʻawina Intro to C no Windows ma mua o ʻelima mau makahiki o ke aʻo ʻana ma ke kulanui (ua kākau kekahi e pili ana i kēia ma nā ʻōlelo ma lalo o ke wikiō).

Ua wehewehe pū ʻo Casey ma ka hoʻomohala ʻana i kāu mīkini pāʻani ponoʻī, e ʻoi aku ka maikaʻi o kou ʻike ʻana i nā mīkini e kū nei. I ka honua o nā frameworks, kahi e ho'āʻo ai nā mea a pau e hana automate, e aʻo ʻoe pehea e hana ai, ʻaʻole hoʻohana. E hoʻomaopopo i ke ʻano o nā kamepiula. A e lilo ʻoe i mea hoʻolālā ʻoi aku ka naʻauao a me ke kanaka makua - he pro.

Laki maikaʻi ma kāu ala i koho ʻia! A e hoʻoikaika kākou i ka honua.

Author: ʻO Grankin Andrey, DevOps



Source: www.habr.com