DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe

"Tha fios agam nach eil fios agam air rud sam bith" Socrates

Cò dha: airson daoine IT a bhios a’ spùtadh air an luchd-leasachaidh air fad agus a tha airson na geamannan aca a chluich!

Mu dè: mar a thòisicheas tu air geamannan a sgrìobhadh ann an C / C ++ ma tha feum agad air!

Carson a bu chòir dhut seo a leughadh: Chan e leasachadh app mo speisealachd obrach, ach bidh mi a’ feuchainn ri còd a h-uile seachdain. Leis gu bheil mi dèidheil air geamannan!

Halo Is e m’ Ainm Andrey Grankin, Tha mi nam DevOps aig Luxoft. Chan e leasachadh tagraidh an obair shònraichte agam, ach bidh mi a’ feuchainn ri còd a h-uile seachdain. Leis gu bheil mi dèidheil air geamannan!

Tha gnìomhachas nan geamannan coimpiutair fìor mhòr, eadhon barrachd fathann an-diugh na gnìomhachas nam film. Chaidh geamannan a sgrìobhadh bho thoiseach leasachadh choimpiutairean, a’ cleachdadh, a rèir inbhean an latha an-diugh, dòighean leasachaidh iom-fhillte agus bunaiteach. Thar ùine, thòisich einnseanan geama a’ nochdadh le grafaigean, fiosaig agus fuaim a bha air am prògramadh mar-thà. Leigidh iad leat fòcas a chuir air leasachadh a ’gheama fhèin agus gun a bhith a’ cur dragh air a bhunait. Ach còmhla riutha, leis na h-einnseanan, an luchd-leasachaidh "a dhol dall" agus a 'crìonadh. Tha fìor riochdachadh gheamannan air a chuir air a’ ghiùladair. Agus tha meud an toraidh a’ tòiseachadh a’ faighinn làmh an uachdair air a chàileachd.

Aig an aon àm, nuair a bhios sinn a’ cluich gheamannan dhaoine eile, tha sinn an-còmhnaidh cuingealaichte le àiteachan, cuilbheart, caractaran, meacanaig geama a thàinig daoine eile suas. Mar sin thuig mi gu robh ...

… tha an t-àm ann do shaoghal fhèin a chruthachadh, le ùmhlachd dhòmhsa a-mhàin. Saoghal far a bheil mise an t-Athair, agus am Mac, agus an Spiorad Naomh!

Agus tha mi gu dùrachdach a’ creidsinn, le bhith a’ sgrìobhadh an einnsean geama agad fhèin agus geama air, gum bi e comasach dhut do shùilean fhosgladh, na h-uinneagan a sguabadh agus do chaban a phumpadh, a bhith nad phrògramadair nas eòlaiche agus nas coileanta.

San artaigil seo feuchaidh mi ri innse dhut mar a thòisich mi a’ sgrìobhadh gheamannan beaga ann an C / C ++, dè am pròiseas leasachaidh a th’ ann agus far am faigh mi ùine airson cur-seachad ann an àrainneachd thrang. Tha e cuspaireil agus a’ toirt cunntas air pròiseas tòiseachaidh neach fa leth. Stuth mu aineolas agus creideamh, mun dealbh pearsanta agam den t-saoghal an-dràsta. Ann am faclan eile, "Chan eil an rianachd an urra ris na brains pearsanta agad!".

Cleachdaich

“Tha eòlas gun chleachdadh gun fheum, tha cleachdadh gun eòlas cunnartach.” Confucius

Is e mo leabhar notaichean mo bheatha!


Mar sin, ann an cleachdadh, is urrainn dhomh a ràdh gu bheil a h-uile dad dhòmhsa a’ tòiseachadh le leabhar notaichean. Bidh mi a’ sgrìobhadh sìos chan e a-mhàin na gnìomhan làitheil agam an sin, ach bidh mi cuideachd a’ tarraing, a’ prògramadh, a’ dealbhadh chlàran-sruth agus a’ fuasgladh cheistean, a’ gabhail a-steach feadhainn matamataigeach. Cleachd leabhar notaichean an-còmhnaidh agus sgrìobh le peansail a-mhàin. Tha e glan, comhfhurtail agus earbsach, IMHO.

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
An leabhar notaichean agam (mar-thà air a lìonadh). Seo mar a tha e coltach. Tha gnìomhan làitheil ann, beachdan, dealbhan, diagraman, fuasglaidhean, gleidheadh ​​​​leabhraichean dubh, còd, agus mar sin air adhart.

Aig an ìre seo, chaidh agam air trì pròiseactan a chrìochnachadh (tha seo nam thuigse air “deireannach”, oir faodar toradh sam bith a leasachadh an ìre mhath gun chrìoch).

  • Pròiseact 0: is e seo sealladh Ailtire Demo 3D sgrìobhte ann an C # a’ cleachdadh einnsean geama Unity. Airson àrd-ùrlaran macOS agus Windows.
  • Gèam 1: geama tòcan Nathair shìmplidh (aithnichte don h-uile duine mar "Nathair") airson Windows. sgrìobhte ann an C.
  • Gèam 2: geama tòcan Crazy Tanks (aithnichte don h-uile duine mar "Tanks"), air a sgrìobhadh mu thràth ann an C ++ (a 'cleachdadh chlasaichean) agus cuideachd fo Windows.

Pròiseact 0 ailtire demo

  • Àrd-ùrlar: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Cànan: C#
  • Einnsean cluiche: aonachd
  • Brosnachadh: Darrin Lile
  • Stòr-tasgaidh: GitHub

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Demo ailtire sealladh 3d a

Chaidh a’ chiad phròiseact a chuir an gnìomh chan ann ann an C / C ++, ach ann an C # a’ cleachdadh einnsean geama Unity. Cha robh an einnsean seo cho cruaidh ri bathar-cruaidh Unreal Engine, agus bha e coltach riumsa cuideachd na b’ fhasa a stàladh agus a chleachdadh. Cha do bheachdaich mi air einnseanan eile.

Cha b’ e an amas ann an Unity dhòmhsa geama de sheòrsa air choreigin a leasachadh. Bha mi airson sealladh 3D a chruthachadh le caractar air choireigin. B’ fheudar dha fhèin, no an àite ise (rinn mi an nighean air an robh mi ann an gaol =) gluasad agus eadar-obrachadh leis an t-saoghal a-muigh. Cha robh e ach cudromach tuigsinn dè a th’ ann an Unity, dè a th’ ann am pròiseas leasachaidh, agus dè an oidhirp a bheir e gus rudeigin a chruthachadh. Seo mar a rugadh am pròiseact Ailtire Demo (chaidh an t-ainm a chruthachadh cha mhòr bhon bullshit). Is dòcha gun tug prògramadh, modaladh, beòthalachd, teacsadh dà mhìos de dh’ obair làitheil dhomh.

Thòisich mi le bhideothan oideachaidh air YouTube air mar a chruthaicheas tu modalan 3D a-steach Blender. Tha Blender na inneal math an-asgaidh airson modaladh 3D (agus barrachd) nach eil feumach air stàladh. Agus an seo bha clisgeadh a’ feitheamh rium ... Tha e a’ tionndadh a-mach gu bheil modaladh, beòthalachd, teacsadh nan cuspairean mòra fa leth air an urrainn dhut leabhraichean a sgrìobhadh. Tha seo gu sònraichte fìor mu na caractaran. Gus modaladh a dhèanamh air corragan, fiaclan, sùilean agus pàirtean eile den bhodhaig, bidh feum agad air eòlas air anatomy. Ciamar a tha fèithean an aodainn air an rèiteachadh? Ciamar a bhios daoine a’ gluasad? Bha agam ri cnàmhan “cuir a-steach” a-steach do gach gàirdean, cas, meur, cnagan!

Modail an clavicle, luamhan cnàimh a bharrachd, gus am bi am beòthalachd a’ coimhead nàdarra. Às deidh leasanan mar seo, tuigidh tu dè an obair mhòr a bhios luchd-cruthachaidh filmichean beòthail a ’dèanamh, dìreach airson 30 diog de bhidio a chruthachadh. Ach mairidh filmichean 3D airson uairean a thìde! Agus an uairsin thig sinn a-mach às na taighean-cluiche agus abair rudeigin mar: “Ta, cartùn / film shitty! Dh’ fhaodadh iad a bhith air dèanamh nas fheàrr. ”… Sgrìobhte le Amadan!

Agus aon rud eile mu phrògramadh sa phròiseact seo. Mar a thionndaidh e a-mach, b’ e am pàirt matamataigeach am pàirt as inntinniche dhomh. Ma ruitheas tu an sealladh (ceangal ris an stòr ann an tuairisgeul a’ phròiseict), chì thu gu bheil an camara a’ cuairteachadh timcheall caractar na h-ìghne ann an raon. Gus a leithid de chuairteachadh camara a phrògramadh, bha agam ri co-chomharran a’ phuing suidheachaidh air a’ chearcall (2D) obrachadh a-mach, agus an uairsin air a’ chruinne (3D). Is e an rud èibhinn gun robh gràin agam air matamataigs san sgoil agus gun robh mi eòlach air le minus. Gu ìre, is dòcha, oir san sgoil dìreach chan eil iad a’ mìneachadh dhut mar a tha am matamataig seo air a chuir an sàs nad bheatha. Ach nuair a tha thu trom leis an amas agad, bruadar, tha an inntinn air a ghlanadh, air fhoillseachadh! Agus tòisichidh tu a’ faicinn gnìomhan iom-fhillte mar dhàn-thuras inntinneach. Agus an uairsin tha thu a’ smaoineachadh: “Uill, carson nach b’ urrainn do neach-matamataig * gràdhach * innse càite an gabh na foirmlean sin a leantainn?

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Obraich a-mach foirmlean airson obrachadh a-mach co-chomharran puing air cearcall agus air cruinne (bhon leabhar notaichean agam)

Gèam 1

  • Àrd-ùrlar: Windows (deuchainn air Windows 7, 10)
  • Cànan: Tha mi a’ smaoineachadh gun deach a sgrìobhadh ann an C
  • Einnsean cluiche: Console airson Windows
  • Brosnachadh: javidx9
  • Stòr-tasgaidh: GitHub

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Geama nathair sìmplidh

Chan e geama a th’ anns an t-sealladh 3D. A bharrachd air an sin, tha modaladh agus beòthachadh nithean 3D (gu sònraichte caractaran) fada agus duilich. Às deidh dhomh cluich timcheall le Unity, thuig mi gum feumadh mi leantainn air adhart, no tòiseachadh, bho na rudan bunaiteach. Rudeigin sìmplidh agus luath, ach aig an aon àm cruinneil, gus fìor structar gheamannan a thuigsinn.

Agus dè a tha againn sìmplidh agus luath? Tha sin ceart, consol agus 2D. Nas mionaidiche, eadhon an consol agus na samhlaidhean. A-rithist, thòisich mi a 'coimhead airson brosnachadh air an eadar-lìon (san fharsaingeachd, tha mi a' smaoineachadh gur e an eadar-lìon an innleachd as adhartaiche agus as cunnartach san XNUMXmh linn). Chladhaich mi bhidio de aon phrògramadair a rinn consol Tetris. Agus ann an coltas a gheama, chuir e roimhe an "nathair" a ghearradh sìos. Bhon bhidio, dh'ionnsaich mi mu dhà rud bunaiteach - lùb a 'gheama (le trì gnìomhan / pàirtean bunaiteach) agus toradh chun a' bhufair.

Is dòcha gum bi an lùb geama a’ coimhead rudeigin mar seo:

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

Tha an còd a’ taisbeanadh a’ phrìomh ghnìomh () gu lèir aig an aon àm. Agus bidh cearcall a’ gheama a’ tòiseachadh às deidh a’ bheachd fhreagarrach. Tha trì gnìomhan bunaiteach anns an lùb: Input(), Logic(), Draw(). An toiseach, cuir a-steach dàta Cuir a-steach (smachd air iuchraichean sa mhòr-chuid), an uairsin a’ giullachd an Logic dàta a chaidh a chuir a-steach, an uairsin a ’nochdadh air an sgrion - Tarraing. Agus mar sin a h-uile frèam. Tha beothachadh air a chruthachadh san dòigh seo. Tha e coltach ri cartoons. Mar as trice bidh a bhith a’ giullachd an dàta cuir a-steach a’ toirt an ùine as motha agus, cho fad ‘s as aithne dhomh, bidh e a’ dearbhadh ìre frèam a’ gheama. Ach an seo tha an gnìomh Logic () gu math luath. Mar sin, feumaidh an ìre frèam a bhith air a smachdachadh leis a’ ghnìomh Sleep () leis a’ pharamadair gameSpeed ​​​​a bhios a’ dearbhadh an ìre seo.

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
cearcall cluiche. Prògramachadh nathair ann an Notepad

Ma tha thu a’ leasachadh geama tòcan samhlachail, an uairsin cha bhith taisbeanadh dàta air an sgrion a’ cleachdadh an toradh sruth àbhaisteach ‘cout’ ag obair - tha e gu math slaodach. Mar sin, feumar an toradh a dhèanamh ann am bufair an sgrion. Gu math nas luaithe agus obraichidh an geama às aonais glitches. Gus a bhith onarach, chan eil mi buileach a’ tuigsinn dè a th’ ann am bufair sgrion agus mar a tha e ag obair. Ach bheir mi eisimpleir còd an seo, agus is dòcha gum bi e comasach dha cuideigin anns na beachdan an suidheachadh a shoilleireachadh.

A’ faighinn bufair an sgrion (ma chanas mi sin):

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

Toradh dìreach chun sgrion de loidhne sgòr loidhne sònraichte (an loidhne airson sgòran a thaisbeanadh):

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

Ann an teòiridh, chan eil dad iom-fhillte sa gheama seo, tha e coltach riumsa na dheagh eisimpleir de gheama ìre inntrigidh. Tha an còd sgrìobhte ann an aon fhaidhle agus air a rèiteachadh ann an grunn ghnìomhan. Gun chlasaichean, gun oighreachd. Chì thu fhèin a h-uile dad ann an còd stòr a ’gheama le bhith a’ dol chun stòr air GitHub.

Geama 2 Crazy Tanks

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Geama crazy tancaichean

Is dòcha gur e clò-bhualadh charactaran air a’ chonsail an rud as sìmplidh as urrainn dhut a thionndadh gu geama. Ach an uairsin tha aon trioblaid a 'nochdadh: tha àirdean agus leud eadar-dhealaichte aig na caractaran (tha an àirde nas àirde na an leud). Mar sin, bidh a h-uile dad a’ coimhead neo-chothromach, agus bidh gluasad sìos no suas a’ coimhead fada nas luaithe na bhith a’ gluasad clì no deas. Tha a 'bhuaidh seo gu math follaiseach ann an "Nathair" (Gèam 1). Chan eil an leithid de dhuilgheadas aig "Tanks" (Gèam 2), leis gu bheil an toradh air a chuir air dòigh le bhith a ’peantadh piogsail sgrion le dathan eadar-dhealaichte. Dh’ fhaodadh tu a ràdh gun do sgrìobh mi renderer. Fìor, tha seo mar-thà beagan nas iom-fhillte, ged a tha e tòrr nas inntinniche.

Airson a’ gheama seo, bidh e gu leòr cunntas a thoirt air an t-siostam agam airson piogsail a thaisbeanadh air an sgrion. Tha mi a’ smaoineachadh gur e seo am prìomh phàirt den gheama. Agus a h-uile càil eile as urrainn dhut a thighinn suas leat fhèin.

Mar sin, chan eil anns na chì thu air an sgrion ach seata de cheart-cheàrnach dathte gluasadach.

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Seata ceart-cheàrnach

Tha gach ceart-cheàrnach air a riochdachadh le matrix làn de àireamhan. Co-dhiù, is urrainn dhomh aon nuance inntinneach a chomharrachadh - tha a h-uile matrices sa gheama air am prògramadh mar raon aon-thaobhach. Chan e dà-thaobhach, ach aon-thaobhach! Tha arrays aon-thaobhach mòran nas fhasa agus nas luaithe obrachadh leotha.

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Eisimpleir de tanca matrix geama a

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
A’ riochdachadh Matrix Tanca Gèam le Raon Aon-thaobhach

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Eisimpleir nas mìneachail de riochdachadh matrix le sreath aon-thaobhach

Ach tha cothrom air na h-eileamaidean den raon a 'tachairt ann an lùb dhùbailte, mar nach e sreath aon-thaobhach a bh' ann, ach sreath dà-thaobhach. Tha seo air a dhèanamh oir tha sinn fhathast ag obair le matrices.

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
A’ dol thairis air sreath aon-thaobhach ann an lùb dhùbailte. Is e Y ID na loidhne, is e X ID a’ cholbh

Thoir an aire, an àite nan aithnichearan matrix àbhaisteach i, j, bidh mi a’ cleachdadh nan aithnichearan x agus y. Mar sin, tha e coltach riumsa, nas taitneile don t-sùil agus nas soilleire don eanchainn. A bharrachd air an sin, tha an leithid de chomharra ga dhèanamh comasach na matrices a chleachdar a dhealbhadh gu h-iomchaidh air tuaghan co-òrdanachaidh ìomhaigh dà-mheudach.

A-nis mu dheidhinn piogsail, dath agus taisbeanadh. Tha gnìomh StretchDIBits (Ceannard: windows.h; Leabharlann: gdi32.lib) air a chleachdadh airson toradh. Am measg rudan eile, thèid na leanas a thoirt don ghnìomh seo: an inneal air a bheil an ìomhaigh air a thaisbeanadh (na mo chùis, is e seo consol Windows), co-chomharran toiseach taisbeanadh na h-ìomhaigh, a leud / àirde, agus an ìomhaigh fhèin ann an cruth bitmap (bitmap), air a riochdachadh le sreath de bytes. Bitmap mar raon de bytes!

An gnìomh StretchDIBits() aig an obair:

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

Tha cuimhne air a riarachadh ro-làimh airson a’ mhapa seo a’ cleachdadh an gnìomh VirtualAlloc(). Is e sin, tha an àireamh riatanach de bytes glèidhte gus fiosrachadh a stòradh mu na piogsail gu lèir, a thèid an uairsin a thaisbeanadh air an sgrion.

A' cruthachadh m_p_bitmap Memory bitmap:

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

Gu ìre mhòr, tha mapa bit air a dhèanamh suas de sheata de piogsail. Tha a h-uile ceithir bytes san raon na piogsail RGB. Aon byte gach luach dearg, aon byte gach luach uaine (G), agus aon byte gach dath gorm (B). A bharrachd air an sin, tha aon byte gach indent. Tha na trì dathan sin - Dearg / Uaine / Gorm (RGB) - air an measgachadh le chèile ann an diofar chuibhreannan - agus gheibhear an dath piogsail a thig às.

A-nis, a-rithist, tha gach ceart-cheàrnach, no nì geama, air a riochdachadh le matrix àireamh. Tha na stuthan geama sin uile air an cur ann an cruinneachadh. Agus an uairsin bidh iad air an cur air an raon cluiche, a 'cruthachadh aon mhaitris àireamhach mòr. Mhapadh mi gach àireamh sa mhaitrix gu dath sònraichte. Mar eisimpleir, tha an àireamh 8 gorm, tha an àireamh 9 buidhe, tha an àireamh 10 dorcha glas, agus mar sin air adhart. Mar sin, faodaidh sinn a ràdh gu bheil matrix den raon-cluiche againn, far a bheil gach àireamh de sheòrsa dath.

Mar sin, tha matrix àireamhach againn den raon cluiche gu lèir air an aon làimh agus mapa bit airson an ìomhaigh a thaisbeanadh air an taobh eile. Gu ruige seo, tha am mapa bit "falamh" - chan eil fiosrachadh ann fhathast mu na piogsail den dath a tha thu ag iarraidh. Tha seo a’ ciallachadh gur e an ceum mu dheireadh am mapa-bith a lìonadh le fiosrachadh mu gach piogsail stèidhichte air matrix àireamhach an raon-cluiche. Tha eisimpleir de leithid de chruth-atharrachadh anns an dealbh gu h-ìosal.

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Eisimpleir de bhith a’ lìonadh mapa-bit (maitrix piogsail) le fiosrachadh stèidhichte air matrix àireamhach (matrix didseatach) den raon cluiche (chan eil clàran-amais dath a’ freagairt ris na clàran-amais sa gheama)

Bidh mi cuideachd a’ taisbeanadh pìos de chòd fìor bhon gheama. Thathas a’ toirt luach (clàr-amais dath) don chlàr-dath caochlaideach aig gach tionndadh den lùb bho mhaitrix àireamhach an raon-cluiche (prìomh-dhidseatachMatrix). An uairsin tha an dath fhèin air a sgrìobhadh chun chaochladair dath stèidhichte air a’ chlàr-amais. Nas fhaide, tha an dath mar thoradh air a roinn ann an co-mheas de dearg, uaine agus gorm (RGB). Agus còmhla ris an indent (pixelPadding), tha am fiosrachadh seo air a sgrìobhadh chun piogsail a-rithist agus a-rithist, a’ cruthachadh ìomhaigh dath anns a ’mhapa.

Bidh an còd a’ cleachdadh stiùiridhean agus gnìomhachd bitwise, a dh’ fhaodadh a bhith duilich a thuigsinn. Mar sin tha mi a 'toirt comhairle dhut leughadh fa leth an àiteigin mar a tha structaran mar sin ag obair.

A’ lìonadh mapa le fiosrachadh stèidhichte air matrix àireamhach an raon-cluiche:

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

A rèir an dòigh a chaidh a mhìneachadh gu h-àrd, tha aon dealbh (frèam) air a chruthachadh anns a’ gheama Crazy Tanks agus air a thaisbeanadh air an sgrion anns a ’ghnìomh Draw(). Às deidh dhaibh prìomh bhuillean a chlàradh anns a’ ghnìomh Input() agus an giullachd às deidh sin anns a’ ghnìomh Logic(), thèid dealbh ùr (frèam) a chruthachadh. Fìor, is dòcha gu bheil suidheachadh eadar-dhealaichte aig nithean geama mu thràth air an raon-cluiche agus, mar sin, air an tarraing ann an àite eile. Seo mar a tha beòthalachd (gluasad) a’ tachairt.

Ann an teòiridh (mura h-eil thu air dad a dhìochuimhneachadh), is e a bhith a’ tuigsinn an lùb geama bhon chiad gheama (“Nathair”) agus an siostam airson piogsail a thaisbeanadh air an sgrion bhon dàrna geama (“Tanks”) a h-uile dad a dh’ fheumas tu a sgrìobhadh. de na geamannan 2D agad airson Windows. Gun fhuaim! 😉 Chan eil anns a’ chòrr de na pàirtean ach rud inntinneach.

Gu dearbh, tha an geama "Tanks" air a dhealbhadh mòran nas iom-fhillte na an "Nathair". Chleachd mi an cànan C ++ mu thràth, is e sin, thug mi cunntas air diofar stuthan geama le clasaichean. Chruthaich mi an cruinneachadh agam fhìn - chì thu an còd ann an bannan-cinn/Box.h. Co-dhiù, tha coltas ann gu bheil aodion cuimhne aig a’ chruinneachadh. Comharran air an cleachdadh. Ag obair le cuimhne. Feumaidh mi ràdh gun do chuidich an leabhar mi gu mòr. A’ tòiseachadh C ++ tro Phrògramadh Gèam. Is e deagh thoiseach tòiseachaidh a tha seo do luchd-tòiseachaidh ann an C ++. Tha e beag, inntinneach agus air a dheagh eagrachadh.

Thug e timcheall air sia mìosan an geama seo a leasachadh. Sgrìobh mi sa mhòr-chuid aig àm lòn agus greimean-bìdh aig an obair. Shuidh e ann an cidsin na h-oifis, stomp e air biadh agus sgrìobh e còd. No aig an taigh airson dinnear. Mar sin fhuair mi a leithid de “cogaidhean cidsin”. Mar as àbhaist, chleachd mi leabhar notaichean gu gnìomhach, agus rugadh a h-uile rud bun-bheachdail ann.

Aig deireadh a’ phàirt phractaigeach, tarraingidh mi a-mach beagan sganaidhean den leabhar notaichean agam. Gus sealltainn dè dìreach a bha mi a’ sgrìobhadh sìos, a’ tarraing, a’ cunntadh, a’ dealbhadh…

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Dealbhadh dealbh tanca. Agus am mìneachadh air cia mheud piogsail a bu chòir a bhith aig gach tanca air an sgrion

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Obraich a-mach an algairim agus foirmlean airson cuairteachadh an tanca timcheall an axis aige

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Diagram den chruinneachadh agam (am fear leis an aodion cuimhne, is coltaiche). Tha an cruinneachadh air a chruthachadh mar Liosta Ceangailte

DevOps C ++ agus “cogaidhean cidsin”, no Mar a thòisich mi a’ sgrìobhadh gheamannan fhad ‘s a bha mi ag ithe
Agus is e oidhirpean neo-sheasmhach a tha seo gus inntleachd fuadain a thoirt a-steach don gheama

Teòiridh

"Tha eadhon turas mìle mìle a 'tòiseachadh leis a' chiad cheum" (Gliocas Seann Shìona)

Gluaisidh sinn bho chleachdadh gu teòiridh! Ciamar a lorgas tu ùine airson do chur-seachad?

  1. Faigh a-mach dè a tha thu dha-rìribh ag iarraidh (moch, is e seo an rud as duilghe).
  2. Suidhich prìomhachasan.
  3. ìobraich a h-uile “barrachd” air sgàth prìomhachasan nas àirde.
  4. Gluais a dh'ionnsaigh na h-amasan agad a h-uile latha.
  5. Na bi dùil gum bi dhà no trì uairean a thìde de shaor-ùine ann airson cur-seachad.

Air an aon làimh, feumaidh tu dearbhadh dè a tha thu ag iarraidh agus prìomhachas a thoirt dhut. Air an làimh eile, tha e comasach cuid de chùisean / phròiseactan a thrèigsinn airson na prìomhachasan sin. Ann am briathran eile, bidh agaibh ri ìobairt a h-uile rud "superfluous". Chuala mi an àiteigin gum bu chòir trì prìomh ghnìomhan a bhith ann am beatha. An uairsin bidh e comasach dhut dèiligeadh riutha san dòigh as fheàrr. Agus tòisichidh pròiseactan / stiùireadh a bharrachd a’ luchdachadh cus corny. Ach tha seo uile, is dòcha, pearsanta agus fa leth.

Tha riaghailt òir sònraichte ann: na bi latha 0% a-riamh! Dh’ ionnsaich mi mu dheidhinn ann an artaigil le leasaiche indie. Ma tha thu ag obair air pròiseact, dèan rudeigin mu dheidhinn a h-uile latha. Agus chan eil e gu diofar dè an ìre a nì thu. Sgrìobh aon fhacal no aon loidhne de chòd, coimhead air aon bhidio oideachaidh, no òrd aon ìnean a-steach don bhòrd - dìreach dèan rudeigin. Is e am pàirt as duilghe tòiseachadh. Cho luath ‘s a thòisicheas tu, is dòcha gun dèan thu beagan a bharrachd na bha thu ag iarraidh. Mar sin gluaisidh tu gu cunbhalach a dh’ ionnsaigh an amas agad agus, creid mi, gu math luath. Às deidh na h-uile, is e foillseachadh am prìomh bhreic air a h-uile càil.

Agus tha e cudromach cuimhneachadh nach bu chòir dhut dì-meas a dhèanamh agus dearmad a dhèanamh air an “sàbhaladh” an-asgaidh ann an 5, 10, 15 mionaidean, feitheamh ri “logaichean” mòra a mhaireas uair no dhà. A bheil thu nad sheasamh san loidhne? Smaoinich air rudeigin airson do phròiseact. A bheil thu a’ dol suas an sreapadan? Sgrìobh sìos rudeigin ann an leabhar notaichean. Am bi thu ag ithe air a’ bhus? Ceart gu leòr, leugh beagan artaigil. Cleachd a h-uile cothrom. Stad a bhith a’ coimhead cait is coin air YouTube! Na gabh dragh leis an eanchainn agad!

Agus an tè mu dheireadh. Ma tha, às deidh dhut an artaigil seo a leughadh, bu toil leat a ’bheachd a bhith a’ cruthachadh gheamannan gun a bhith a ’cleachdadh einnseanan geama, cuimhnich air an ainm Casey Muratori. Tha aig an fhear seo làrach-lìn. Anns an roinn "watch -> PREVIOUS EPISODES" gheibh thu clasaichean bhidio iongantach an-asgaidh air mar a chruthaicheas tu geama proifeasanta bhon fhìor thoiseach. Is dòcha gun ionnsaich thu barrachd ann an còig Intro gu C airson leasanan Windows na ann an còig bliadhna de sgrùdadh aig an oilthigh (sgrìobh cuideigin mu dheidhinn seo anns na beachdan fon bhidio).

Tha Casey cuideachd a’ mìneachadh, le bhith a’ leasachadh an einnsean geama agad fhèin, gum bi tuigse nas fheàrr agad air einnseanan sam bith a tha ann mu thràth. Ann an saoghal frèamaichean, far a bheil a h-uile duine a 'feuchainn ri fèin-ghluasad, ionnsaichidh tu mar a chruthaicheas tu, gun a bhith a' cleachdadh. Tuig nàdar nan coimpiutairean. Agus bidh thu cuideachd nad phrògramadair tòrr nas tuigseach agus nas aibidh - pro.

Math fortanach air an t-slighe a thagh thu! Agus dèanamaid an saoghal nas proifeiseanta.

Author: Andrey Grankin, DevOps



Source: www.habr.com