DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun

"Mo mọ pe emi ko mọ nkankan" Socrates

Fun tani: fun IT eniyan ti o tutọ lori gbogbo awọn Difelopa ati ki o fẹ lati mu wọn ere!

Nipa kini: bi o ṣe le bẹrẹ kikọ awọn ere ni C / C ++ ti o ba nilo rẹ!

Kini idi ti o fi ka eyi: Idagbasoke App kii ṣe pataki iṣẹ mi, ṣugbọn Mo gbiyanju lati koodu ni gbogbo ọsẹ. Nitori ti mo ni ife awọn ere!

Kaabo Orukọ mi Ni Andrey Grankin, Mo jẹ DevOps ni Luxoft. Idagbasoke ohun elo kii ṣe pataki iṣẹ mi, ṣugbọn Mo gbiyanju lati koodu ni gbogbo ọsẹ. Nitori ti mo ni ife awọn ere!

Ile-iṣẹ ere kọnputa jẹ nla, paapaa agbasọ diẹ sii loni ju ile-iṣẹ fiimu lọ. Awọn ere ti kọ lati ibẹrẹ ti idagbasoke awọn kọnputa, lilo, nipasẹ awọn iṣedede ode oni, eka ati awọn ọna idagbasoke ipilẹ. Ni akoko pupọ, awọn ẹrọ ere bẹrẹ si han pẹlu awọn aworan ti a ti ṣe eto tẹlẹ, fisiksi, ati ohun. Wọn gba ọ laaye lati dojukọ idagbasoke ti ere funrararẹ ati pe ko ṣe wahala nipa ipilẹ rẹ. Ṣugbọn pẹlu wọn, pẹlu awọn enjini, awọn Difelopa "lọ afọju" ati degrade. Awọn gan gbóògì ti awọn ere ti wa ni fi lori conveyor. Ati pe opoiye ti iṣelọpọ bẹrẹ lati bori lori didara rẹ.

Ni akoko kanna, nigba ti ndun awọn ere eniyan miiran, a ni opin nigbagbogbo nipasẹ awọn ipo, Idite, awọn kikọ, awọn ẹrọ ere ti awọn eniyan miiran wa pẹlu. Nitorinaa mo rii pe ...

… o to akoko lati ṣẹda awọn aye tirẹ, koko ọrọ si mi nikan. Awọn aye nibiti Emi jẹ Baba, ati Ọmọ, ati Ẹmi Mimọ!

Ati pe Mo gbagbọ ni otitọ pe nipa kikọ ẹrọ ere tirẹ ati ere kan lori rẹ, iwọ yoo ni anfani lati ṣii oju rẹ, nu awọn window ati fifa agọ rẹ, di olutẹtisi ti o ni iriri diẹ sii ati alamọdaju.

Ninu nkan yii Emi yoo gbiyanju lati sọ fun ọ bi MO ṣe bẹrẹ kikọ awọn ere kekere ni C / C ++, kini ilana idagbasoke ati ibiti MO ti rii akoko fun ifisere ni agbegbe ti o nšišẹ. O jẹ koko-ọrọ ati ṣe apejuwe ilana ti ibẹrẹ ẹni kọọkan. Ohun elo nipa aimọkan ati igbagbọ, nipa aworan ti ara mi ti agbaye ni akoko yii. Ni awọn ọrọ miiran, "Iṣakoso naa ko ṣe iduro fun ọpọlọ ti ara ẹni!”.

Ṣaṣeṣe

“Imọ laisi iṣe ko wulo, adaṣe laisi imọ jẹ eewu.” Confucius

Iwe ajako mi ni igbesi aye mi!


Nitorinaa, ni iṣe, Mo le sọ pe ohun gbogbo fun mi bẹrẹ pẹlu iwe ajako kan. Mo kọ si isalẹ kii ṣe awọn iṣẹ ṣiṣe ojoojumọ mi nikan nibẹ, ṣugbọn tun fa, eto, awọn aworan apẹrẹ ati yanju awọn iṣoro, pẹlu awọn mathematiki. Lo iwe akọsilẹ nigbagbogbo ki o kọ pẹlu ikọwe nikan. O mọ, itunu ati igbẹkẹle, IMHO.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Iwe ajako mi (ti o ti kun tẹlẹ). Eyi ni bi o ṣe n wo. O ni awọn iṣẹ ṣiṣe lojoojumọ, awọn imọran, awọn iyaworan, awọn aworan atọka, awọn ojutu, ṣiṣe iwe dudu, koodu, ati bẹbẹ lọ.

Ni ipele yii, Mo ṣakoso lati pari awọn iṣẹ akanṣe mẹta (eyi wa ninu oye mi ti “ipari”, nitori eyikeyi ọja le ni idagbasoke lainidi ailopin).

  • Ise agbese 0: Eyi jẹ iṣẹlẹ ayaworan Ririnkiri 3D ti a kọ sinu C # ni lilo ẹrọ ere Unity. Fun MacOS ati awọn iru ẹrọ Windows.
  • Ere 1: console game Simple Ejo (ti a mọ si gbogbo eniyan bi "Ejo") fun Windows. ti a kọ sinu C.
  • Ere 2: console game Crazy Tanks (mọ si gbogbo eniyan bi "Tanks"), tẹlẹ kọ ninu C ++ (lilo awọn kilasi) ati ki o tun labẹ Windows.

Project 0 ayaworan Ririnkiri

  • Syeed: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Ni ibamu si: C#
  • Enjini ere: isokan
  • Awokose: Darrin Lile
  • Ibi ipamọ: GitHub

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
3D Scene ayaworan Ririnkiri

Ni igba akọkọ ti ise agbese ti a muse ko ni C / C ++, sugbon ni C # lilo Unity game engine. Yi engine je ko bi demanding lori hardware bi unreal engine, ati pe o tun dabi ẹnipe o rọrun fun mi lati fi sori ẹrọ ati lo. Emi ko ro miiran enjini.

Ibi-afẹde ni Iṣọkan fun mi kii ṣe lati dagbasoke iru ere kan. Mo fe lati ṣẹda kan 3D si nmu pẹlu diẹ ninu awọn Iru ti ohun kikọ silẹ. Oun, tabi dipo O (Mo ṣe apẹẹrẹ ọmọbirin ti Mo nifẹ pẹlu =) ni lati gbe ati ṣe ajọṣepọ pẹlu agbaye ita. O ṣe pataki nikan lati ni oye kini Iṣọkan jẹ, kini ilana idagbasoke, ati iye akitiyan ti o nilo lati ṣẹda nkan. Eyi ni bii iṣẹ akanṣe Demo Architect ṣe jẹ bi (orukọ naa ti ṣẹda fere lati inu akọmalu). Siseto, awoṣe, iwara, texturing mu mi jasi oṣu meji ti iṣẹ ojoojumọ.

Mo bẹrẹ pẹlu awọn fidio ikẹkọ lori YouTube lori bii o ṣe le ṣẹda awọn awoṣe 3D ni idapọmọra. Blender jẹ ohun elo ọfẹ nla fun awoṣe 3D (ati diẹ sii) ti ko nilo fifi sori ẹrọ. Ati pe iyalẹnu kan n duro de mi… O wa ni jade pe awoṣe, iwara, texturing jẹ awọn akọle lọtọ ti o tobi lori eyiti o le kọ awọn iwe. Eyi jẹ otitọ paapaa fun awọn ohun kikọ. Lati ṣe apẹẹrẹ awọn ika ọwọ, eyin, oju ati awọn ẹya miiran ti ara, iwọ yoo nilo imọ ti anatomi. Bawo ni a ṣe ṣeto awọn iṣan oju? Bawo ni eniyan ṣe nlọ? Mo ni lati "fi" awọn egungun sinu apa kọọkan, ẹsẹ, ika, awọn knuckles!

Awoṣe awọn clavicle, afikun egungun levers, ki awọn iwara wulẹ adayeba. Lẹhin iru awọn ẹkọ bẹẹ, o mọ kini iṣẹ nla ti awọn olupilẹṣẹ ti awọn fiimu ere idaraya ṣe, lati ṣẹda awọn aaya 30 ti fidio. Ṣugbọn awọn fiimu 3D ṣiṣe fun awọn wakati! Ati lẹhinna a jade kuro ni awọn ile-iṣere ati sọ nkan bii: “Ta, aworan efe / fiimu kan! Wọn iba ti ṣe dara julọ…” Awọn aṣiwere!

Ati ohun kan diẹ sii nipa siseto ni iṣẹ yii. Bi o ti yipada, apakan ti o nifẹ julọ fun mi ni ọkan ti mathematiki. Ti o ba ṣiṣẹ iṣẹlẹ naa (ọna asopọ si ibi-ipamọ ni apejuwe ise agbese), iwọ yoo ṣe akiyesi pe kamẹra yiyi ni ayika ohun kikọ ọmọbirin ni aaye kan. Lati ṣe eto iru yiyi kamẹra kan, Mo ni lati kọkọ ṣe iṣiro awọn ipoidojuko ti aaye ipo lori Circle (2D), ati lẹhinna lori aaye (3D). Awọn funny ohun ni wipe mo ti korira isiro ni ile-iwe ati ki o mọ ti o pẹlu kan iyokuro. Ni apakan, boya, nitori ni ile-iwe wọn kii ṣe alaye fun ọ bi apaadi ṣe lo mathimatiki yii ni igbesi aye. Ṣugbọn nigbati o ba ni ifẹ afẹju pẹlu ibi-afẹde rẹ, ala, lẹhinna ọkan ti sọ di mimọ, ṣafihan! Ati pe o bẹrẹ lati ni oye awọn iṣẹ ṣiṣe ti o nipọn bi ìrìn alarinrin. Ati lẹhinna o ronu: “Daradara, kilode ti * olufẹ * mathimatiki ko le sọ ni deede ibiti awọn agbekalẹ wọnyi le tẹri?”.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Iṣiro awọn agbekalẹ fun iṣiro awọn ipoidojuko ti aaye kan lori iyika ati lori aaye kan (lati inu iwe ajako mi)

Ere 1

  • Syeed: Windows (idanwo lori Windows 7, 10)
  • Ni ibamu si: Mo ro pe o ti kọ sinu funfun C
  • Enjini ere: Windows console
  • Awokose: javidx9
  • Ibi ipamọ: GitHub

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Simple Ejo game

Ipele 3D kii ṣe ere. Ni afikun, awoṣe ati ere idaraya awọn nkan 3D (paapaa awọn ohun kikọ) gun ati nira. Lẹhin ti o dun ni ayika pẹlu Iṣọkan, Mo rii pe Mo ni lati tẹsiwaju, tabi dipo bẹrẹ, lati awọn ipilẹ. Nkankan ti o rọrun ati iyara, ṣugbọn ni akoko kanna agbaye, lati loye ilana pupọ ti awọn ere.

Ati kini a ni irọrun ati iyara? Iyẹn tọ, console ati 2D. Ni deede diẹ sii, paapaa console ati awọn aami. Lẹẹkansi, Mo bẹrẹ si wa awokose lori Intanẹẹti (ni gbogbogbo, Mo ro Intanẹẹti ni ipilẹṣẹ rogbodiyan ati eewu julọ ti ọrundun XNUMXst). Mo wa fidio kan ti pirogirama kan ti o ṣe console Tetris. Ati ni irisi ere rẹ, o pinnu lati ge "ejo" naa. Lati fidio naa, Mo kọ ẹkọ nipa awọn nkan ipilẹ meji - lupu ere (pẹlu awọn iṣẹ ipilẹ / awọn ẹya mẹta) ati iṣelọpọ si ifipamọ.

Loop ere le dabi nkan bi eyi:

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

Awọn koodu ṣafihan gbogbo iṣẹ akọkọ () ni ẹẹkan. Ati awọn ere ọmọ bẹrẹ lẹhin ti o baamu ọrọìwòye. Awọn iṣẹ ipilẹ mẹta wa ninu lupu: Input (), Logic (), Fa (). Ni akọkọ, titẹ sii data Input (nipataki iṣakoso ti awọn bọtini bọtini), lẹhinna sisẹ data kannaa ti a tẹ, lẹhinna han loju iboju - Fa. Ati ki gbogbo fireemu. Idaraya ti ṣẹda ni ọna yii. O dabi awọn aworan efe. Nigbagbogbo sisẹ data titẹ sii gba akoko pupọ julọ ati, niwọn bi Mo ti mọ, pinnu iwọn fireemu ti ere naa. Ṣugbọn nibi iṣẹ Logic () yara yara pupọ. Nitorinaa, oṣuwọn fireemu gbọdọ jẹ iṣakoso nipasẹ iṣẹ oorun () pẹlu paramita EreSpeed ​​​​, eyiti o pinnu oṣuwọn yii.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
ere ọmọ. Ejo siseto ni akọsilẹ

Ti o ba n ṣe agbekalẹ ere console aami kan, lẹhinna iṣafihan data loju iboju nipa lilo iṣelọpọ ṣiṣan deede 'cout' kii yoo ṣiṣẹ - o lọra pupọ. Nitorinaa, abajade gbọdọ ṣee ṣe ni ifipamọ iboju. Ki Elo yiyara ati awọn ere yoo ṣiṣẹ lai glitches. Lati so ooto, Emi ko loye ohun ti ifipamọ iboju jẹ ati bii o ṣe n ṣiṣẹ. Ṣugbọn Emi yoo fun apẹẹrẹ koodu kan nibi, ati boya ẹnikan ninu awọn asọye yoo ni anfani lati ṣalaye ipo naa.

Ngba idaduro iboju (ti MO ba le sọ bẹ):

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

Ijade taara si iboju ti ila ila kan (ila fun iṣafihan awọn ikun):

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

Ni yii, ko si ohun idiju ninu ere yi, o dabi si mi kan ti o dara apẹẹrẹ ti ohun titẹsi-ipele game. Awọn koodu ti kọ sinu ọkan faili ati idayatọ ni orisirisi awọn iṣẹ. Ko si awọn kilasi, ko si iní. Iwọ funrararẹ le rii ohun gbogbo ninu koodu orisun ti ere naa nipa lilọ si ibi ipamọ lori GitHub.

Ere 2 Crazy tanki

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Crazy tanki game

Titẹ awọn ohun kikọ si console jẹ ohun ti o rọrun julọ ti o le yipada si ere kan. Ṣugbọn lẹhinna wahala kan han: awọn ohun kikọ naa ni awọn giga giga ati awọn iwọn (giga naa tobi ju iwọn lọ). Nitorinaa, ohun gbogbo yoo dabi aibikita, ati gbigbe si isalẹ tabi oke yoo dabi iyara pupọ ju gbigbe si osi tabi sọtun. Ipa yii jẹ akiyesi pupọ ni "Ejo" (Ere 1). "Awọn tanki" (Ere 2) ko ni iru idasẹhin bẹ, nitori abajade ti o wa nibẹ ti ṣeto nipasẹ kikun awọn piksẹli iboju pẹlu awọn awọ oriṣiriṣi. O le sọ Mo ti kowe a renderer. Otitọ, eyi ti jẹ idiju diẹ sii tẹlẹ, botilẹjẹpe o nifẹ diẹ sii.

Fun ere yii, yoo to lati ṣe apejuwe eto mi fun iṣafihan awọn piksẹli loju iboju. Mo ro pe eyi ni akọkọ apa ti awọn ere. Ati ohun gbogbo miiran ti o le wá soke pẹlu ara rẹ.

Nítorí náà, ohun ti o ri loju iboju jẹ o kan kan ti ṣeto ti gbigbe awọ rectangles.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Eto onigun

Olukuluku onigun jẹ aṣoju nipasẹ matrix ti o kun pẹlu awọn nọmba. Nipa ọna, Mo le ṣe afihan nuance ti o nifẹ kan - gbogbo awọn matrices ninu ere ni a ṣe eto bi titobi onisẹpo kan. Kii ṣe onisẹpo meji, ṣugbọn onisẹpo kan! Awọn akojọpọ onisẹpo kan rọrun pupọ ati yiyara lati ṣiṣẹ pẹlu.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Apeere ti a matrix ojò game

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Ti n ṣojuuṣe Matrix ti Ojò Ere kan pẹlu Array Onisẹpo Kan

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Apeere apejuwe diẹ sii ti aṣoju matrix kan nipasẹ titobi onisẹpo kan

Ṣugbọn iraye si awọn eroja ti opo naa waye ni lupu ilọpo meji, bi ẹnipe kii ṣe onisẹpo kan, ṣugbọn titobi onisẹpo meji. Eyi ni a ṣe nitori a tun n ṣiṣẹ pẹlu awọn matrices.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Lilọ kiri titobi onisẹpo kan ni lupu ilọpo meji. Y jẹ ID kana, X ni ID ọwọn

Jọwọ ṣe akiyesi pe dipo awọn idamọ matrix deede i, j, Mo lo awọn idamọ x ati y. Nitorina, o dabi si mi, diẹ sii ni itẹlọrun si oju ati ki o ṣe kedere si ọpọlọ. Ni afikun, iru ami akiyesi jẹ ki o ṣee ṣe ni irọrun ṣe akanṣe awọn matiriki ti a lo sori awọn aake ipoidojuko ti aworan onisẹpo meji.

Bayi nipa awọn piksẹli, awọ ati ifihan. Iṣẹ StretchDIBits (Akọsori: windows.h; Library: gdi32.lib) jẹ lilo fun iṣelọpọ. Lara awọn ohun miiran, atẹle naa ti kọja si iṣẹ yii: ẹrọ ti a fi aworan han (ninu ọran mi, eyi ni console Windows), awọn ipoidojuko ti ibẹrẹ ti iṣafihan aworan naa, iwọn / giga rẹ ati aworan naa. funrararẹ ni irisi bitmap (bitmap), ti o jẹ aṣoju nipasẹ titobi awọn baiti. Bitmap gẹgẹbi titobi ti awọn baiti!

Iṣẹ StretchDIBits () ni iṣẹ:

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

Iranti ti wa ni ipin siwaju fun bitmap yii nipa lilo iṣẹ VirtualAlloc (). Iyẹn ni, nọmba ti a beere fun awọn baiti ti wa ni ipamọ lati tọju alaye nipa gbogbo awọn piksẹli, eyiti yoo han loju iboju.

Ṣiṣẹda 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);

Ni aijọju sisọ, bitmap kan ni akojọpọ awọn piksẹli kan. Gbogbo awọn baiti mẹrin ninu titobi jẹ ẹbun RGB kan. Baiti kan fun iye pupa, baiti kan fun iye alawọ ewe (G), ati baiti kan fun awọ buluu (B). Pẹlupẹlu, baiti kan wa fun indent. Awọn awọ mẹta wọnyi - Pupa / Alawọ ewe / Buluu (RGB) - ti dapọ pẹlu ara wọn ni awọn iwọn oriṣiriṣi - ati pe a gba awọ ẹbun ti abajade.

Ni bayi, lẹẹkansi, onigun mẹrin kọọkan, tabi ohun ere, jẹ aṣoju nipasẹ matrix nọmba kan. Gbogbo awọn nkan ere wọnyi ni a gbe sinu akojọpọ kan. Ati lẹhinna wọn gbe sori aaye ere, ti o ṣẹda matrix nọmba nla kan. Mo ya nọmba kọọkan ninu matrix si awọ kan pato. Fun apẹẹrẹ, nọmba 8 jẹ buluu, nọmba 9 jẹ ofeefee, nọmba 10 jẹ grẹy dudu, ati bẹbẹ lọ. Nitorinaa, a le sọ pe a ni matrix ti aaye ere, nibiti nọmba kọọkan jẹ iru awọ kan.

Nitorinaa, a ni matrix nomba ti gbogbo aaye ere ni apa kan ati maapu kan fun iṣafihan aworan ni ekeji. Nitorinaa, bitmap naa jẹ “ofo” - ko sibẹsibẹ ni alaye nipa awọn piksẹli ti awọ ti o fẹ. Eyi tumọ si pe igbesẹ ti o kẹhin yoo jẹ kikun bitmap pẹlu alaye nipa ẹbun kọọkan ti o da lori matrix nomba ti aaye ere. Apeere apejuwe ti iru iyipada kan wa ninu aworan ni isalẹ.

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Apeere ti kikun bitmap kan (Pixel matrix) pẹlu alaye ti o da lori matrix nomba (Matrix Digital) ti aaye ere (awọn atọka awọ ko baramu awọn atọka ninu ere)

Mo ti yoo tun mu kan nkan ti gidi koodu lati awọn ere. Atọka awọ oniyipada ni isọdọtun kọọkan ti lupu ni a yan iye kan (atọka awọ) lati inu matrix nomba ti aaye ere (mainDigitalMatrix). Lẹhinna awọ ara rẹ ni a kọ si iyipada awọ ti o da lori atọka. Siwaju sii, awọ abajade ti pin si ipin ti pupa, alawọ ewe ati buluu (RGB). Ati papọ pẹlu indent (pixelPadding), alaye yii ni a kọ si ẹbun leralera, ti o ṣẹda aworan awọ ni bitmap.

Awọn koodu nlo awọn itọka ati awọn iṣẹ bitwise, eyiti o le nira lati ni oye. Nitorinaa Mo gba ọ ni imọran lati ka lọtọ ni ibikan bi iru awọn ẹya ṣe n ṣiṣẹ.

Àgbáye bitmap kan pẹlu alaye ti o da lori matrix nomba ti aaye ere:

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

Ni ibamu si awọn ọna ti salaye loke, ọkan aworan (fireemu) ti wa ni akoso ni Crazy Tanks game ati ki o han loju iboju ni Fa () iṣẹ. Lẹhin iforukọsilẹ awọn bọtini bọtini ni iṣẹ Input () ati sisẹ wọn ti o tẹle ni iṣẹ Logic (), aworan tuntun (fireemu) ti ṣẹda. Lootọ, awọn nkan ere le ti ni ipo ti o yatọ tẹlẹ lori aaye ere ati, ni ibamu, ti fa ni aye ti o yatọ. Eyi ni bii iwara (iṣipopada) ṣe ṣẹlẹ.

Ni imọran (ti o ko ba gbagbe ohunkohun), agbọye lupu ere lati ere akọkọ (“Ejo”) ati eto fun iṣafihan awọn piksẹli loju iboju lati ere keji (“Awọn tanki”) ni gbogbo ohun ti o nilo lati kọ eyikeyi ti awọn ere 2D rẹ fun Windows. Laisi ohun! 😉 Awọn iyokù ti awọn ẹya jẹ o kan ofurufu ti Fancy.

Nitoribẹẹ, ere “Awọn tanki” jẹ apẹrẹ pupọ diẹ sii idiju ju “ejo”. Mo ti lo ede C ++ tẹlẹ, iyẹn ni, Mo ṣe apejuwe awọn nkan ere oriṣiriṣi pẹlu awọn kilasi. Mo ṣẹda akojọpọ ti ara mi - o le rii koodu ni awọn akọle / Box.h. Nipa ona, awọn gbigba julọ seese ni a iranti jo. Awọn itọka ti a lo. Ti ṣiṣẹ pẹlu iranti. Mo gbọdọ sọ pe iwe naa ṣe iranlọwọ fun mi pupọ. Ibẹrẹ C ++ Nipasẹ siseto ere. Eyi jẹ ibẹrẹ nla fun awọn olubere ni C ++. O ti wa ni kekere, awon ati daradara ṣeto.

O gba to oṣu mẹfa lati ṣe agbekalẹ ere yii. Mo kọ ni pataki lakoko ounjẹ ọsan ati awọn ipanu ni iṣẹ. O joko ni ibi idana ounjẹ ọfiisi, o tẹ ounjẹ ati kọ koodu. Tabi ni ile fun ale. Nitorina mo ni iru "ogun idana". Gẹgẹbi nigbagbogbo, Mo lo iwe ajako kan, ati pe gbogbo awọn nkan imọran ni a bi ninu rẹ.

Ni ipari apakan ti o wulo, Emi yoo fa awọn ọlọjẹ diẹ ti iwe ajako mi jade. Lati ṣafihan ohun ti Mo nkọ ni pato, yiya, kika, ṣe apẹrẹ…

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Apẹrẹ aworan ojò. Ati awọn definition ti bi ọpọlọpọ awọn piksẹli kọọkan ojò yẹ ki o kun okan loju iboju

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Iṣiro algorithm ati awọn agbekalẹ fun yiyi ojò ni ayika ipo rẹ

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Aworan atọka ti gbigba mi (eyi ti o ni jijo iranti, o ṣeeṣe julọ). A ṣẹda ikojọpọ naa bi Akojọ ti o sopọ

DevOps C ++ ati "ogun idana", tabi Bawo ni MO ṣe bẹrẹ kikọ awọn ere lakoko ti o jẹun
Ati pe iwọnyi jẹ awọn igbiyanju asan lati yi oye oye atọwọda sinu ere naa

Yii

“Paapaa irin-ajo ti ẹgbẹrun maili bẹrẹ pẹlu igbesẹ akọkọ” (Ọgbọn Kannada atijọ)

Jẹ ki a gbe lati iwa si yii! Bawo ni o ṣe ri akoko fun ifisere rẹ?

  1. Ṣe ipinnu ohun ti o fẹ gaan (alas, eyi ni o nira julọ).
  2. Ṣeto awọn ohun pataki.
  3. Ẹ rubọ gbogbo “aṣeju” nitori awọn ayo ti o ga julọ.
  4. Lọ si awọn ibi-afẹde rẹ ni gbogbo ọjọ.
  5. Maṣe nireti pe wakati meji tabi mẹta ti akoko ọfẹ yoo wa fun ifisere kan.

Ni ọna kan, o nilo lati pinnu ohun ti o fẹ ki o si ṣe pataki. Lori awọn miiran ọwọ, o jẹ ṣee ṣe lati fi kọ diẹ ninu awọn igba / ise agbese ni ojurere ti awọn wọnyi ayo . Ni awọn ọrọ miiran, iwọ yoo ni lati rubọ ohun gbogbo “superfluous”. Mo ti gbọ ibikan ni aye o yẹ ki o wa kan ti o pọju mẹta akọkọ akitiyan. Lẹhinna o yoo ni anfani lati koju wọn ni ọna ti o dara julọ. Ati awọn iṣẹ akanṣe / awọn itọnisọna afikun yoo bẹrẹ lati ṣe apọju corny. Ṣugbọn eyi jẹ gbogbo, boya, ti ara ẹni ati ẹni kọọkan.

Ofin goolu kan wa: ko ni ọjọ 0% rara! Mo kọ nipa rẹ ninu nkan kan nipasẹ olupilẹṣẹ indie kan. Ti o ba n ṣiṣẹ lori iṣẹ akanṣe kan, lẹhinna ṣe nkan nipa rẹ ni gbogbo ọjọ. Ati pe ko ṣe pataki iye ti o ṣe. Kọ ọrọ kan tabi laini koodu kan, wo fidio ikẹkọ kan, tabi lu eekanna kan sinu igbimọ — kan ṣe nkan kan. Apakan ti o nira julọ ni bibẹrẹ. Ni kete ti o ba bẹrẹ, iwọ yoo ṣe diẹ diẹ sii ju ti o fẹ lọ. Nitorinaa iwọ yoo tẹsiwaju nigbagbogbo si ibi-afẹde rẹ ati, gba mi gbọ, yarayara. Lẹhinna, idaduro akọkọ lori ohun gbogbo jẹ isọkuro.

Ati pe o ṣe pataki lati ranti pe o ko yẹ ki o ṣe akiyesi ati foju “sawdust” ọfẹ ti akoko ni iṣẹju 5, 10, 15, duro fun diẹ ninu awọn “awọn akọọlẹ” nla ti o gun wakati kan tabi meji. Ṣe o duro ni ila? Ronu nipa nkankan fun ise agbese rẹ. Ṣe o n lọ soke escalator? Kọ nkan silẹ sinu iwe ajako kan. Ṣe o jẹun lori ọkọ akero? O dara, ka nkan diẹ. Lo gbogbo anfani. Duro wiwo awọn ologbo ati awọn aja lori YouTube! Maṣe daamu pẹlu ọpọlọ rẹ!

Ati awọn ti o kẹhin. Ti, lẹhin kika nkan yii, o fẹran imọran ti ṣiṣẹda awọn ere laisi lilo awọn ẹrọ ere, lẹhinna ranti orukọ Casey Muratori. Eniyan yii ni aaye ayelujara. Ninu apakan “iṣọna -> Awọn iṣẹlẹ iṣaaju” iwọ yoo rii awọn ikẹkọ fidio ọfẹ ti iyalẹnu lori bii o ṣe le ṣẹda ere alamọdaju lati ibere. Ni awọn ẹkọ marun ti Intoro si C fun Windows, o le kọ ẹkọ diẹ sii ju ọdun marun ti iwadi ni ile-ẹkọ giga (ẹnikan kowe nipa eyi ni awọn asọye labẹ fidio).

Casey tun ṣalaye pe nipa idagbasoke ẹrọ ere tirẹ, iwọ yoo ni oye ti o dara julọ ti eyikeyi awọn ẹrọ ti o wa tẹlẹ. Ni agbaye ti awọn ilana, nibiti gbogbo eniyan n gbiyanju lati ṣe adaṣe, iwọ yoo kọ ẹkọ bi o ṣe le ṣẹda, kii ṣe lo. Loye iseda ti awọn kọnputa. Ati pe iwọ yoo tun di onimọ-jinlẹ pupọ ati pirogirama ogbo - pro.

Ti o dara orire lori rẹ yàn ona! Ati pe jẹ ki a jẹ ki agbaye jẹ alamọdaju diẹ sii.

Author: Grankin Andrey, DevOps



orisun: www.habr.com