I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya

"Ndiyazi ukuba andazi nto" uSocrates

Yekabani: kubantu be-IT abatshicela bonke abaphuhlisi kwaye bafuna ukudlala imidlalo yabo!

Malunga nantoni: ungaqala njani ukubhala imidlalo kwiC/C ++ ukuba uyayifuna!

Kutheni kufuneka ufunde oku: Uphuhliso lwe-App ayisiyonto yam yomsebenzi, kodwa ndizama ukufaka ikhowudi veki nganye. Kuba ndiyayithanda imidlalo!

Malo igama lam ngu UAndrey Grankin, NdiyiDevOps eLuxoft. Uphuhliso lwesicelo ayisiyonto yam ekhethekileyo yomsebenzi, kodwa ndizama ukufaka ikhowudi veki nganye. Kuba ndiyayithanda imidlalo!

Ishishini lemidlalo yekhompyutha likhulu, yaye amarhe amaninzi namhlanje kuneshishini leemovie. Iimidlalo zibhaliwe ukususela ekuqaleni kokuphuhliswa kweekhomputha, usebenzisa, ngemigangatho yanamhlanje, iindlela eziyinkimbinkimbi kunye nesiseko sophuhliso. Ngokuhamba kwexesha, iinjini zomdlalo zaqala ukubonakala zinemizobo esele icwangcisiwe, ifiziksi kunye nesandi. Bakuvumela ukuba ugxininise ekuphuhlisweni komdlalo ngokwawo kwaye ungakhathazeki ngesiseko sawo. Kodwa kunye nabo, kunye neenjini, abaphuhlisi "bayayimfama" kwaye bahlazeke. Imveliso kanye yemidlalo ibekwe kwi-conveyor. Kwaye ubungakanani bemveliso buqala ukongamela umgangatho wayo.

Kwangaxeshanye, xa sidlala imidlalo yabanye abantu, sihlala sithintelwa ziindawo, iploti, abalinganiswa, oomatshini bemidlalo abaze nabanye abantu. Ndiye ndaqonda ukuba...

… lixesha lokuba udale awakho amazwe, uxhomekeke kum kuphela. Ehlabathini apho ndinguBawo, noNyana, noMoya oyiNgcwele!

Kwaye ndikholelwa ngokunyanisekileyo ukuba ngokubhala eyakho injini yomdlalo kunye nomdlalo kuyo, uya kukwazi ukuvula amehlo akho, usule iifestile kwaye upompe ikhabhinethi yakho, ube ngumdwelisi onamava kunye odibeneyo.

Kweli nqaku ndiza kuzama ukukuxelela indlela endiqale ngayo ukubhala imidlalo emincinci kwiC / C ++, yintoni inkqubo yophuhliso kwaye apho ndifumana ixesha lokuzilibazisa kwindawo exakekileyo. Ixhomekeke kwaye ichaza inkqubo yomntu ngamnye. Izinto malunga nokungazi kunye nokholo, malunga nomfanekiso wam wehlabathi okwangoku. Ngamanye amazwi, "Ulawulo alunaxanduva lobuchopho bakho!".

Zenza

“Ulwazi ngaphandle koqheliselo alunamsebenzi, ukwenza ngaphandle kolwazi kuyingozi.” Confucius

Incwadi yam yamanqaku bubomi bam!


Ngoko, ekusebenzeni, ndingatsho ukuba yonke into kum iqala ngencwadana. Andibhali kuphela imisebenzi yam yemihla ngemihla apho, kodwa ndizoba, inkqubo, iitshati zoyilo kunye nokusombulula iingxaki, kubandakanya nezibalo. Soloko usebenzisa incwadana yokubhala kwaye ubhale ngepensile kuphela. Icocekile, ikhululekile kwaye ithembekile, i-IMHO.

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Incwadi yam yokubhalela (sele igcwalisiwe). Le yindlela ekhangeleka ngayo. Iqulethe imisebenzi yemihla ngemihla, iingcamango, imidwebo, imizobo, izisombululo, ukugcinwa kweencwadi ezimnyama, ikhowudi, njalo njalo.

Kweli nqanaba, ndikwazile ukugqiba iiprojekthi ezintathu (oku kukuqonda kwam "ukugqibela", kuba nayiphi na imveliso inokuphuhliswa ngokungapheliyo).

  • Iprojekthi 0: lo ngumboniso we-Architect Demo 3D ebhalwe kwi-C # usebenzisa i-Unity game injini. Kwiqonga leMacOS kunye neWindows.
  • Umdlalo 1: umdlalo we-console Inyoka elula (eyaziwa ngumntu wonke njenge "Snake") yeWindows. ibhalwe ngoC.
  • Umdlalo 2: umdlalo we-console Crazy Tanks (owaziwa nguye wonke umntu njenge "Tanki"), esele ibhaliwe kwi-C ++ (usebenzisa iiklasi) kwaye phantsi kweWindows.

Iprojekthi 0 iDemo yoMyili

  • Iqonga: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Ulwimi: C#
  • Injini yomdlalo: ubunye
  • Impembelelo: Darrin Lile
  • Uvimba: GitHub

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Idemo ye-3D Scene Architect

Iprojekthi yokuqala ayiphunyezwanga kwi-C/C++, kodwa kwi-C# isebenzisa i-Unity game injini. Le njini ibingeyomfuneko kwihardware njengoko Unreal Engine, kwaye kum kwabonakala kulula ukuyifaka nokusebenzisa. Andizange ndicinge ngezinye iinjini.

Injongo kuManyano kum yayingekuko ukuphuhlisa uhlobo oluthile lomdlalo. Bendifuna ukwenza umboniso we3D ngohlobo oluthile lomlinganiswa. Yena, okanye kunoko Yena (Ndayilinganisa intombazana endiyithandayo =) kwafuneka ahambe kwaye adibanise nehlabathi langaphandle. Kwakubalulekile kuphela ukuqonda ukuba yintoni Ubumbano, yintoni inkqubo yophuhliso, kwaye ungakanani umgudu ofunekayo ukudala into. Yile ndlela iprojekthi yeDemo yeArchitect yazalwa ngayo (igama laqanjwa phantse kwi-bullshit). Ukucwangcisa, ukwenza imodeli, oopopayi, ukuthumela imiyalezo kundithathe mhlawumbi iinyanga ezimbini zomsebenzi wemihla ngemihla.

Ndiqale ngeevidiyo zokufundisa kwiYouTube malunga nendlela yokwenza iimodeli ze3D ngaphakathi Blender. I-Blender sisixhobo esikhulu sasimahla semodeli ye-3D (kunye nokunye) esingadingi kufakelo. Kwaye nantsi umothuko ondilindileyo ... Kuyavela ukuba imodeli, oopopayi, ukuthumela imiyalezo zizihloko ezinkulu ezahlukeneyo onokuthi ubhale kuzo iincwadi. Oku kuyinyani ngakumbi kubalinganiswa. Ukwenza umzekelo weminwe, amazinyo, amehlo kunye namanye amalungu omzimba, uya kufuna ulwazi lwe-anatomy. Ilungelelaniswe njani imisipha yobuso? Bahamba njani abantu? Kwafuneka “ndifake” amathambo kwingalo nganye, emlenzeni, emnweni, emaqaqeni!

Umzekelo we-clavicle, i-levers yamathambo eyongezelelweyo, ukwenzela ukuba i-animation ibonakale yendalo. Emva kwezifundo ezinjalo, uyawuqonda ukuba mkhulu umsebenzi owenziwa ngabadali beefilimu ezinoopopayi, ukwenza nje imizuzwana engama-30 yevidiyo. Kodwa iimuvi ze-3D zihlala iiyure! Kwaye emva koko siphuma kwiithiyetha kwaye sithethe into efana nale: "Ta, ikhathuni / imuvi emdaka! Ngebebenze ngcono…” Zidenge!

Kwaye enye into malunga nenkqubo kule projekthi. Njengoko kwenzekayo, eyona nxalenye inomdla kum yayiyeyezibalo. Ukuba uqhuba indawo (ikhonkco kwindawo yokugcina kwinkcazo yeprojekthi), uya kuqaphela ukuba ikhamera ijikeleza umlingiswa wentombazana kwi-sphere. Ukucwangcisa ujikelezo lwekhamera olunjalo, kwafuneka ndiqale ndibale ulungelelwaniso lwendawo kwindawo kwisangqa (2D), emva koko kwingqukuva (3D). Into ehlekisayo kukuba ndandicaphukela izibalo esikolweni kwaye ndandiyazi nge-minus. Ngokuyinxenye, mhlawumbi, ngenxa yokuba esikolweni abakuchazi nje ukuba isihogo sisetyenziswa njani le mathematika ebomini. Kodwa xa uxakeke nenjongo yakho, phupha, emva koko ingqondo iyacinywa, ityhilwe! Kwaye uqala ukubona imisebenzi enzima njengomdlalo omnandi. Kwaye emva koko ucinga: "Ewe, kutheni isazi semathematika * esithandekayo singakwazi ukuxelela apho ezi fomyula zinokuthi zixhomekeke phi?".

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Ukubalwa kweefomyula zokubala ulungelelwaniso lwenqaku kwisangqa nakwi-sphere (ukusuka kwincwadi yam yamanqaku)

Umdlalo 1

  • Iqonga: IiWindows (zivavanywa kwi-Windows 7, 10)
  • Ulwimi: Ndicinga ukuba yayibhalwe ngoC ococekileyo
  • Injini yomdlalo: Windows console
  • Impembelelo: javidx9
  • Uvimba: GitHub

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Umdlalo olula weNyoka

Indawo ye-3D ayingomdlalo. Ukongeza, ukwenza imodeli kunye nokwenza izinto ze-3D (ingakumbi abalinganiswa) zide kwaye zinzima. Emva kokudlala malunga noManyano, ndaqonda ukuba kufuneka ndiqhubeke, okanye kunoko ndiqale, kwizinto ezisisiseko. Into elula kwaye ekhawulezayo, kodwa kwangaxeshanye yehlabathi, ukuqonda eyona sakhiwo semidlalo.

Kwaye yintoni esinayo elula kwaye ngokukhawuleza? Ilungile loo nto, i-console kunye ne-2D. Ngokuchanekileyo, nkqu i-console kunye neempawu. Kwakhona, ndaqala ukukhangela inkuthazo kwi-Intanethi (ngokubanzi, ndithatha i-Intanethi njengeyona nto inenguquko kunye neyingozi yokuveliswa kwenkulungwane yama-XNUMX). Ndemba ividiyo yomnye umdwelisi wenkqubo owenza iTetris console. Kwaye ngokufana nomdlalo wakhe, wagqiba ekubeni agawule "inyoka". Kwividiyo, ndifunde ngezinto ezimbini ezisisiseko- iluphu yomdlalo (enemisebenzi emithathu esisiseko / iinxalenye) kunye nemveliso kwi-buffer.

I-loop yomdlalo inokujongeka ngolu hlobo:

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

Ikhowudi ibonisa wonke ongundoqo () umsebenzi kanye. Kwaye umjikelo womdlalo uqala emva kokuphawula okuhambelanayo. Kukho imisebenzi emithathu esisiseko kwilophu: Igalelo (), Ingqiqo (), Zoba (). Okokuqala, i-input data Input (ikakhulukazi ulawulo lwee-keystrokes), emva koko kusetyenzwa idatha engenisiweyo Logic, emva koko ibonise kwisikrini - Zoba. Kwaye ngoko yonke isakhelo. Oopopayi benziwa ngolu hlobo. Kufana neekhathuni. Ngokwesiqhelo ukusetyenzwa kwedatha yegalelo kuthatha elona xesha lininzi kwaye, ngokokwazi kwam, imisela ireyithi yesakhelo somdlalo. Kodwa apha i-Logic () umsebenzi ukhawuleza kakhulu. Ke ngoko, umyinge wesakhelo kufuneka ulawulwe ngumsebenzi wokuLala () kunye neparamitha yesantya somdlalo, emisela lo mgangatho.

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
umjikelo womdlalo. Inkqubo yenyoka kwincwadana

Ukuba uphuhlisa umdlalo weconsole yomfuziselo, emva koko ukubonisa idatha kwiscreen usebenzisa imveliso eqhelekileyo yokuphuma 'cout' ayizukusebenza - iyacotha kakhulu. Ke ngoko, imveliso kufuneka yenziwe kwi-buffer yesikrini. Ngokukhawuleza kakhulu kwaye umdlalo uya kusebenza ngaphandle kwe-glitches. Ukunyaniseka, andiqondi kakuhle ukuba yintoni isithinteli sesikrini kwaye sisebenza njani. Kodwa ndiya kunika umzekelo wekhowudi apha, kwaye mhlawumbi umntu kwizimvo uya kukwazi ukucacisa imeko.

Ukufumana isithinteli sesikrini (ukuba ndingatsho njalo):

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

Isiphumo esithe ngqo kwisikrini somgca wamanqaku athile Umgca (umgca wokubonisa amanqaku):

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

Kwithiyori, akukho nto inzima kulo mdlalo, kubonakala kum umzekelo omhle womdlalo wokungena kwinqanaba. Ikhowudi ibhalwe kwifayile enye kwaye ihlelwe kwimisebenzi emininzi. Akukho ziklasi, akukho lifa. Wena ngokwakho unokubona yonke into kwikhowudi yomthombo womdlalo ngokuya kwindawo yokugcina kwiGitHub.

Umdlalo 2 Crazy Tanks

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Umdlalo weTanki we-Crazy

Ukushicilela abalinganiswa kwikhonsoli yeyona nto ilula onokuyijika ibe ngumdlalo. Kodwa ke enye inkathazo ibonakala: abalinganiswa banobude obuhlukeneyo kunye nobubanzi (ubude bukhulu kunobubanzi). Ke, yonke into iya kujongeka ingalingani, kwaye ukuhamba phantsi okanye phezulu kuya kubonakala kukhawuleza kunokuhamba ngasekhohlo okanye ngasekunene. Esi siphumo sibonakala kakhulu kwi "Snake" (Umdlalo 1). "Iitanki" (Umdlalo 2) awunayo i-drawback enjalo, ekubeni imveliso apho ihlelwe ngokupeyinta iipikseli zesikrini ngemibala eyahlukeneyo. Unokuthi ndibhale umnikezeli. Enyanisweni, oku sele kunzima ngakumbi, nangona kunomdla ngakumbi.

Kulomdlalo, kuyakwanela ukuchaza inkqubo yam yokubonisa ipixels kwiscreen. Ndicinga ukuba le yinxalenye ephambili yomdlalo. Kwaye yonke enye into unokuza nayo ngokwakho.

Ke, okubonayo kwiscreen yiseti nje yeengxande ezinemibala eshukumayo.

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Iseti yoxande

Uxande ngalunye lumelwe yimatrix ezaliswe ngamanani. Ngendlela, ndiyakwazi ukugqamisa i-nuance enye enomdla - zonke iimatriki zomdlalo zicwangciswe njengoluhlu olunecala elinye. Ayinamacala amabini, kodwa inedimensional enye! Uluhlu olune-dimensional lulula kakhulu kwaye lukhawuleza ukusebenza.

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Umzekelo wetanki yomdlalo wematrix

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Emele iMatrix yeTanki yoMdlalo ene-One-Dimensional Array

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Umzekelo ongaphezulu obonisa imatriksi ngoluhlu olunedimensional enye

Kodwa ukufikelela kwizinto zoluhlu lwenzeka kwi-loop ephindwe kabini, njengokungathi yayingekho i-dimensional enye, kodwa i-dimensional array. Oku kwenziwa kuba sisasebenza ngematrices.

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Ukunqumla uluhlu lwe-dimensional kwi-loop ephindwe kabini. Y yi-ID yomqolo, X yi-ID yomqolo

Nceda qaphela ukuba endaweni yezazisi zesiqhelo zematrix u-i, j, ndisebenzisa izazisi u-x kunye no-y. Ngoko, kubonakala kum, kuthandeka ngakumbi kwiliso kwaye kucace ngakumbi kwingqondo. Ukongeza, ubhalo olunjalo lwenza kube lula ukwenza iprojekthi yeematriki ezisetyenziswa kwii-axes zolungelelwaniso lomfanekiso omacala mabini.

Ngoku malunga neepikseli, umbala kunye nomboniso. Umsebenzi we-StretchDIBits (iHeader: windows.h; Ithala leencwadi: gdi32.lib) lisetyenziselwa imveliso. Phakathi kwezinye izinto, oku kulandelayo kugqithiselwe kulo msebenzi: isixhobo apho umfanekiso uboniswa (kwimeko yam, le yiWindows console), ulungelelwaniso lokuqalisa kokubonisa umfanekiso, ububanzi / ubude bawo, kunye nomfanekiso. ngokwayo ikwimo yebitmap (bitmap), imelwe luluhlu lweebytes. Bitmap njengoluhlu lwee-byte!

I-StretchDIBits () umsebenzi emsebenzini:

// screen output for game field
   StretchDIBits(
               deviceContext,
               OFFSET_LEFT, OFFSET_TOP,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               0, 0,
               PMATRIX_WIDTH, PMATRIX_HEIGHT,
               m_p_bitmapMemory, &bitmapInfo,
               DIB_RGB_COLORS,
               SRCCOPY
               );

Inkumbulo inikezelwe kwangaphambili kule bitmap usebenzisa i VirtualAlloc () umsebenzi. Oko kukuthi, inani elifunekayo leebhayithi ligcinelwe ukugcina ulwazi malunga nazo zonke iipikseli, eziya kuthi emva koko ziboniswe kwisikrini.

Ukwenza i-bitmap ye-m_p_bitmapMemory:

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

Xa sithetha nje, i-bitmap ineseti yeepikseli. Zonke iibhayithi ezine kuluhlu yipikseli yeRGB. Ibhayithi enye ngexabiso elibomvu, ibhayithi enye ngokwexabiso eliluhlaza (G), kunye nebhayithi enye ngombala oblowu (B). Ukongeza, kukho i-byte enye kwi-indenti nganye. Le mibala mithathu - Ebomvu / eluhlaza / eluhlaza okwesibhakabhaka (RGB) - ixutywe enye kwenye ngokwemilinganiselo eyahlukeneyo - kwaye umbala we-pixel obangelwayo ufunyenwe.

Ngoku, kwakhona, uxande ngalunye, okanye into yomdlalo, imelwe yinombolo yematrix. Zonke ezi zinto zomdlalo zibekwe kwingqokelela. Kwaye ke zibekwe ebaleni lokudlala, zenza imatrix yamanani enye enkulu. Ndabala inani ngalinye kwimatrix kumbala othile. Umzekelo, inani 8 bhlowu, inani 9 tyheli, inani 10 grey emnyama, njalo njalo. Ngaloo ndlela, sinokuthi sine-matrix yebala lokudlala, apho inani ngalinye luhlobo oluthile lombala.

Ke, sinematrix yamanani yebala lokudlala lonke kwelinye icala kunye ne-bitmap yokubonisa umfanekiso kwelinye. Ukuza kuthi ga ngoku, i-bitmap "ayinanto" - ayinalo ulwazi malunga neepixels zombala ofunekayo. Oku kuthetha ukuba inyathelo lokugqibela liya kuba lizalisa i-bitmap ngolwazi malunga ne-pixel nganye ngokusekelwe kwimatrix yamanani ebala lokudlala. Umzekelo obonisa ukuguqulwa okunjalo kumfanekiso ongezantsi.

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Umzekelo wokugcwalisa i-bitmap (i-Pixel matrix) ngolwazi olusekwe kumanani amanani (i-Digital matrix) yebala lokudlala (izalathi zombala azihambelani nezalathisi kumdlalo)

Ndiza kubonisa kwakhona iqhekeza lekhowudi yokwenyani evela kumdlalo. Isalathiso sombala esiguquguqukayo kuphinda-phindo ngalunye lwelophu yabelwe ixabiso (isalathiso sombala) ukusuka kumanani amanani ebala lokudlala (mainDigitalMatrix). Emva koko umbala ngokwawo ubhalwa kwinguqu yombala esekelwe kwisalathisi. Ukongezelela, umbala obangelwayo wahlulwe kumlinganiselo obomvu, oluhlaza kunye nohlaza okwesibhakabhaka (RGB). Kwaye kunye ne-ident (i-pixelPadding), olu lwazi lubhalwa kwi-pixel ngokuphindaphindiweyo, lwenza umfanekiso wombala kwi-bitmap.

Ikhowudi isebenzisa izikhombisi kunye nokusebenza kancinci, kunokuba nzima ukuyiqonda. Ngoko ndikucebisa ukuba ufunde ngokwahlukileyo kwindawo ethile ukuba izakhiwo ezinjalo zisebenza njani.

Ukuzalisa i-bitmap ngolwazi olusekwe kumanani amanani ebala lokudlala:

// set pixel map variables
   int colorIndex;
   COLORREF color;
   int pitch;
   uint8_t* p_row;
 
   // arrange pixels for game field
   pitch = PMATRIX_WIDTH * BYTES_PER_PIXEL;     // row size in bytes
   p_row = (uint8_t*)m_p_bitmapMemory;       //cast to uint8 for valid pointer arithmetic
   							(to add by 1 byte (8 bits) at a time)   
   for (int y = 0; y < PMATRIX_HEIGHT; ++y)
   {
       uint32_t* p_pixel = (uint32_t*)p_row;
       for (int x = 0; x < PMATRIX_WIDTH; ++x)
       {
           colorIndex = mainDigitalMatrix[y * PMATRIX_WIDTH + x];
           color = Utils::GetColor(colorIndex);
           uint8_t blue = GetBValue(color);
           uint8_t green = GetGValue(color);
           uint8_t red = GetRValue(color);
           uint8_t pixelPadding = 0;
 
           *p_pixel = ((pixelPadding << 24) | (red << 16) | (green << 8) | blue);
           ++p_pixel;
       }
       p_row += pitch;
   }

Ngokwendlela echazwe ngasentla, umfanekiso omnye (isakhelo) wenziwe kumdlalo we-Crazy Tanks kwaye uboniswe kwisikrini kwi-Draw () umsebenzi. Emva kokubhalisa iziqhoboshi zeqhosha kwi-Input () umsebenzi kunye noqhubekeko lwazo olulandelayo kwi-Logic () umsebenzi, umfanekiso omtsha (isakhelo) uyakhiwa. Enyanisweni, izinto zomdlalo zinokuba sele zinendawo eyahlukileyo kwibala lokudlala kwaye, ngokufanelekileyo, zizotywe kwindawo eyahlukileyo. Le yindlela okwenzeka ngayo oopopayi (intshukumo).

Kwithiyori (ukuba awulibalanga nto), ukuqonda iluphu yomdlalo kumdlalo wokuqala (“iNyoka”) kunye nenkqubo yokubonisa iipixels kwiscreen ukusuka kumdlalo wesibini (“iTanki”) yiyo yonke into oyifunayo ukubhala nayiphi na yemidlalo yakho ye-2D yeeWindows. Ayinasandi! 😉 Amalungu aseleyo kukubhabha nje kobumnandi.

Kakade ke, umdlalo "Iitanki" yenzelwe nzima kakhulu ngaphezu "Inyoka". Sele ndisebenzise ulwimi lweC ++, oko kukuthi, ndichaze izinto ezahlukeneyo zomdlalo ngeeklasi. Ndidale eyam ingqokelela - ungabona ikhowudi kwiiheader/Box.h. Ngendlela, ingqokelela inokuba nememori evuzayo. Izikhombisi ezisetyenzisiweyo. Sebenza ngenkumbulo. Manditsho ukuba le ncwadi yandinceda kakhulu. Ukuqala C++ Ngokusebenzisa iNkqubo yoMdlalo. Esi sisiqalo esihle sabaqalayo kwi-C++. Incinci, inomdla kwaye ilungelelaniswe kakuhle.

Kuthathe malunga neenyanga ezintandathu ukuphuhlisa lo mdlalo. Ndandibhala kakhulu ngexesha lesidlo sasemini kunye ne-snacks emsebenzini. Wahlala ekhitshini leofisi, wanyathela ukutya wabhala ikhowudi. Okanye ekhaya isidlo. Ngoko ndafumana "iimfazwe zasekhitshini" ezinjalo. Njengesiqhelo, ndasebenzisa incwadi yokubhalela, kwaye zonke izinto ezinengqondo zazalelwa kuyo.

Ekupheleni kwecandelo elisebenzayo, ndiza kukhupha iiskena ezimbalwa zencwadana yam. Ukubonisa ukuba yintoni kanye kanye le bendiyibhala phantsi, ndizoba, ndibala, ndiyila...

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Uyilo lomfanekiso wetanki. Kwaye inkcazo yokuba zingaphi iipixels itanki nganye kufuneka ihlale kwiscreen

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Ukubalwa kwe-algorithm kunye neefomula zokujikeleza kwetanki malunga ne-axis yayo

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Umzobo wengqokelela yam (lowo unenkumbulo evuzayo, kusenokwenzeka). Ingqokelela yenziwa njengoLuhlu oluDityanisiweyo

I-DevOps C ++ kunye ne "kitchen war", okanye Indlela endaqala ngayo ukubhala imidlalo ngelixa ndisitya
Kwaye ezi ziinzame ezililize zokujija ubukrelekrele bokwenziwa kumdlalo

Iingcamango

"Nokuba uhambo lweekhilomitha eziliwaka luqala ngesinyathelo sokuqala" (Ubulumko bamaShayina aMandulo)

Masisuke kwindlela yokuziqhelanisa siye kwithiyori! Ulifumana njani ixesha lokuzonwabisa kwakho?

  1. Qinisekisa ukuba ufuna ntoni ngokwenene (yeha, le yeyona nto inzima).
  2. Beka izinto ezibalulekileyo kwindawo yokuqala.
  3. Ukuncama konke "okugqithisileyo" ngenxa yezinto eziphambili eziphambili.
  4. Yiya kwiinjongo zakho yonke imihla.
  5. Ungalindeli ukuba kuya kubakho iiyure ezimbini okanye ezintathu zexesha lasimahla lokuzilibazisa.

Kwelinye icala, kufuneka ujonge into oyifunayo kwaye uyibeke phambili. Kwelinye icala, kuyenzeka ukuba uyeke ezinye iimeko/iiprojekthi ngokuthanda ezi zinto zibalulekileyo. Ngamanye amazwi, kuya kufuneka uncame yonke into "engaphezulu". Ndeva kwindawo ethile ukuba ebomini kufuneka kubekho ubuninzi bezinto ezintathu eziphambili. Emva koko uya kukwazi ukujongana nabo ngendlela engcono kakhulu. Kwaye iiprojekthi / izikhokelo ezongezelelweyo ziya kuqalisa ukulayisha ngaphezulu i-corny. Kodwa oku konke, mhlawumbi, kuxhomekeke kumntu ngamnye.

Kukho umgaqo othile wegolide: ungaze ube nosuku lwe-0%! Ndifunde ngayo kwinqaku lomphuhlisi we-indie. Ukuba usebenza kwiprojekthi, yenza into malunga nayo yonke imihla. Kwaye akukhathaliseki nokuba wenza malini na. Bhala igama elinye okanye umgca omnye wekhowudi, jonga ividiyo yokufundisa enye, okanye ubethelele isikhonkwane esinye ebhodini-yenza into nje. Eyona nto inzima kukuqalisa. Nje ukuba uqalise, uya kwenza okungakumbi kunoko ubufuna ukukwenza. Ke uya kuhlala usiya kwinjongo yakho kwaye, ndikholelwe, ngokukhawuleza okukhulu. Emva kwayo yonke loo nto, eyona nto iphambili kuzo zonke izinto kukulibazisa.

Kwaye kubalulekile ukukhumbula ukuba akufanele ujonge kwaye ungayihoyi "i-sawdust" yamahhala yexesha kwi-5, 10, 15 imizuzu, linda "iilogi" ezinkulu ezithatha iyure okanye ezimbini. Ngaba umi emgceni? Cinga ngento ethile yeprojekthi yakho. Ngaba uyenyuka ngezitebhisi ezizihambelayo? Bhala phantsi into ethile ebhukwini. Uyatya ebhasini? Kulungile, funda inqaku. Sebenzisa lonke ithuba. Yeka ukubukela iikati nezinja kuYouTube! Musa ukumosha ingqondo yakho!

Kwaye yokugqibela. Ukuba, emva kokufunda eli nqaku, uwuthandile umbono wokudala imidlalo ngaphandle kokusebenzisa iinjini zomdlalo, ke khumbula igama elithi Casey Muratori. Lo mfo unaye website. Kwicandelo elithi "wotshi -> IZIQINISEKISO ZANGAPHAMBILI" uya kufumana izifundo ezimangalisayo zevidiyo zasimahla malunga nendlela yokudala umdlalo wobuchwephesha ukusuka ekuqaleni. Kwizifundo ezintlanu ze-Intro ukuya ku-C zeWindows, unokufunda ngaphezulu kweminyaka emihlanu yokufunda eyunivesithi (umntu ubhale malunga noku kwizimvo eziphantsi kwevidiyo).

UCasey ukwachaza ukuba ngokuphuhlisa eyakho injini yomdlalo, uya kuba nokuqonda ngcono naziphi na iinjini ezikhoyo. Ehlabathini lezakhelo, apho wonke umntu uzama ukuzenzekelayo, uya kufunda ukwenza, ungasebenzisi. Qonda ubume beekhompyuter. Kwaye uya kuba ngumdwelisi okrelekrele kakhulu kwaye oqolileyo - ipro.

Inhlanhla kwindlela oyikhethileyo! Kwaye masenze ihlabathi ngobungcali ngakumbi.

umbhali: UGrankin Andrey, DevOps



umthombo: www.habr.com