DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol

"Naf li ma naf xejn" Socrates

Għal min: għan-nies tal-IT li bżiq fuq l-iżviluppaturi kollha u jridu jilagħbu l-logħob tagħhom!

Dwar xiex: kif tibda tikteb logħob f'C/C++ jekk għandek bżonnha!

Għaliex għandek taqra dan: L-iżvilupp tal-app mhuwiex l-ispeċjalità tax-xogħol tiegħi, iżda nipprova nikkodifika kull ġimgħa. Għax inħobb il-logħob!

Hello jien jisimni Andrey Grankin, Jien DevOps fil-Luxoft. L-iżvilupp tal-applikazzjoni mhuwiex l-ispeċjalità tax-xogħol tiegħi, iżda nipprova nikkodifika kull ġimgħa. Għax inħobb il-logħob!

L-industrija tal-logħob tal-kompjuter hija enormi, saħansitra aktar rumored illum mill-industrija tal-films. Il-logħob inkiteb mill-bidu tal-iżvilupp tal-kompjuters, bl-użu, bi standards moderni, metodi ta 'żvilupp kumplessi u bażiċi. Maż-żmien, bdew jidhru magni tal-logħob bi grafika, fiżika u ħoss diġà programmati. Huma jippermettu li inti tiffoka fuq l-iżvilupp tal-logħba nnifisha u ma jolqot dwar il-pedament tagħha. Iżda flimkien magħhom, bil-magni, l-iżviluppaturi "go blind" u jiddegradaw. Il-produzzjoni stess tal-logħob titpoġġa fuq il-conveyor. U l-kwantità tal-produzzjoni tibda tipprevali fuq il-kwalità tagħha.

Fl-istess ħin, meta nilagħbu logħob ta 'nies oħra, aħna kontinwament limitati minn postijiet, plot, karattri, mekkaniżmi tal-logħob li nies oħra ħarġu bihom. Allura indunajt li...

… wasal iż-żmien li toħloq id-dinjiet tiegħek, soġġetti għalija biss. Dinjiet fejn jien il-Missier, u l-Iben, u l-Ispirtu s-Santu!

U sinċerament nemmen li billi tikteb il-magna tal-logħob tiegħek stess u logħba fuqha, tkun tista 'tiftaħ għajnejk, imsaħ it-twieqi u tippompja l-kabina tiegħek, issir programmatur b'aktar esperjenza u integrali.

F'dan l-artikolu ser nipprova ngħidlek kif bdejt nikteb logħob żgħir f'C / C ++, x'inhu l-proċess ta 'żvilupp u fejn insib ħin għal passatemp f'ambjent impenjattiv. Huwa suġġettiv u jiddeskrivi l-proċess ta 'bidu individwali. Materjal dwar l-injoranza u l-fidi, dwar l-istampa personali tiegħi tad-dinja fil-mument. Fi kliem ieħor, "L-amministrazzjoni mhix responsabbli għall-imħuħ personali tiegħek!".

Prattika

“Għarfien mingħajr prattika hija inutli, prattika mingħajr għarfien hija perikoluża.” Konfuċju

In-notebook tiegħi huwa ħajti!


Għalhekk, fil-prattika, nista’ ngħid li kollox għalija jibda b’notebook. Jiena nikteb mhux biss il-kompiti tiegħi ta’ kuljum hemmhekk, imma wkoll niġbed, nipprogramma, niddisinja flowcharts u nsolvi problemi, inklużi dawk matematiċi. Dejjem uża notepad u ikteb biss bil-lapes. Huwa nadif, komdu u affidabbli, IMHO.

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
In-notebook tiegħi (diġà mimli). Dan huwa kif jidher. Fiha kompiti ta 'kuljum, ideat, tpinġijiet, dijagrammi, soluzzjonijiet, żamma tal-kotba sewda, kodiċi, eċċ.

F'dan l-istadju, irnexxieli nlesti tliet proġetti (dan huwa fil-fehma tiegħi ta '"finalità", minħabba li kwalunkwe prodott jista' jiġi żviluppat relattivament bla tmiem).

  • Proġett 0: din hija xena Architect Demo 3D miktuba f'C# bl-użu tal-magna tal-logħob Unity. Għal pjattaformi macOS u Windows.
  • Logħba 1: logħba console Simple Snake (magħrufa għal kulħadd bħala "Snake") għall-Windows. miktuba f'Ċ.
  • Logħba 2: logħba console Crazy Tanks (magħrufa għal kulħadd bħala "Tankijiet"), diġà miktuba f'C ++ (bl-użu tal-klassijiet) u wkoll taħt il-Windows.

Proġett 0 Perit Demo

  • Pjattaforma: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Lingwa: C#
  • Magna tal-logħob: Unità
  • Ispirazzjoni: Darrin Lile
  • Repożitorju: GitHub

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
3D Xena Perit Demo

L-ewwel proġett ġie implimentat mhux f'C/C++, iżda f'C# bl-użu tal-magna tal-logħob Unity. Din il-magna ma kinitx eżiġenti fuq il-ħardwer daqs Magna Unreal, u deherli wkoll aktar faċli biex tinstalla u tuża. Ma qistx magni oħra.

L-għan f'Unity għalija ma kienx li niżviluppa xi tip ta' logħba. Ridt noħloq xena 3D b’xi tip ta’ karattru. Hu, jew aħjar Hija (immudellajt lit-tfajla li kont inħobb =) kellha timxi u tinteraġixxi mad-dinja ta’ barra. Kien importanti biss li wieħed jifhem x'inhi l-Unità, x'inhu l-proċess ta 'żvilupp, u kemm hemm bżonn ta' sforz biex tinħoloq xi ħaġa. Hekk twieled il-proġett Demo Architect (l-isem kien ivvintat kważi mill-bullshit). L-ipprogrammar, l-immudellar, l-animazzjoni, it-tessuti ħadni x'aktarx xahrejn ta' xogħol ta' kuljum.

Bdejt b'videos tutorjali fuq YouTube dwar kif toħloq mudelli 3D fi blender. Blender hija għodda b'xejn kbira għall-immudellar 3D (u aktar) li ma teħtieġx installazzjoni. U hawn xokk jistennieni ... Jirriżulta li l-immudellar, l-animazzjoni, it-tessuti huma suġġetti separati enormi li fuqhom tista 'tikteb kotba. Dan hu veru speċjalment għall-karattri. Biex timmudella s-swaba, is-snien, l-għajnejn u partijiet oħra tal-ġisem, ser ikollok bżonn għarfien dwar l-anatomija. Kif huma rranġati l-muskoli tal-wiċċ? Kif jiċċaqilqu n-nies? Kelli "daħħal" għadam f'kull driegħ, riġel, subgħajk, knuckles!

Immudella l-klavikula, lievi tal-għadam addizzjonali, sabiex l-animazzjoni tidher naturali. Wara lezzjonijiet bħal dawn, tirrealizza x'xogħol kbir jagħmlu l-ħallieqa tal-films animati, biss biex joħolqu 30 sekonda ta 'video. Iżda l-films 3D jdumu għal sigħat! U mbagħad noħorġu mit-teatri u ngħidu xi ħaġa bħal: “Ta, cartoon / movie shitty! Huma setgħu għamlu aħjar...” Fools!

U ħaġa oħra dwar l-ipprogrammar f'dan il-proġett. Kif irriżulta, l-aktar parti interessanti għalija kienet dik matematika. Jekk tmexxi x-xena (link għar-repożitorju fid-deskrizzjoni tal-proġett), tinduna li l-kamera ddur madwar il-karattru tat-tfajla fi sfera. Biex tipprogramma tali rotazzjoni tal-kamera, kelli l-ewwel nikkalkula l-koordinati tal-punt tal-pożizzjoni fuq iċ-ċirku (2D), u mbagħad fuq l-isfera (3D). Il-ħaġa umoristiċi hija li ddejjaqt il-matematika fl-iskola u kont nafha b'minus. Parzjalment, aktarx, għax fl-iskola sempliċiment ma jispjegawlekx kif infern din il-matematika hija applikata fil-ħajja. Imma meta tkun ossessjonat bil-mira tiegħek, ħolma, allura l-moħħ jiġi mnaddaf, żvelat! U tibda tipperċepixxi kompiti kumplessi bħala avventura eċċitanti. U mbagħad taħseb: "Well, għaliex ma setax * maħbub * matematiku normalment jgħid fejn dawn il-formuli jistgħu jiġu inklinati?".

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Kalkolu ta 'formuli għall-kalkolu tal-koordinati ta' punt fuq ċirku u fuq sfera (minn-notebook tiegħi)

Logħba 1

  • Pjattaforma: Windows (ittestjat fuq Windows 7, 10)
  • Lingwa: Naħseb li kien miktub b'Ċ pur
  • Magna tal-logħob: Windows console
  • Ispirazzjoni: javidx9
  • Repożitorju: GitHub

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Logħba sempliċi tas-Snake

Ix-xena 3D mhix logħba. Barra minn hekk, l-immudellar u l-animazzjoni ta 'oġġetti 3D (speċjalment karattri) huwa twil u diffiċli. Wara li lgħabt ma' Unity, indunajt li kelli nkompli, jew aħjar nibda, mill-affarijiet bażiċi. Xi ħaġa sempliċi u veloċi, iżda fl-istess ħin globali, biex tifhem l-istruttura stess tal-logħob.

U x'għandna sempliċi u veloċi? Dak id-dritt, console u 2D. B'mod aktar preċiż, anke l-console u simboli. Għal darb'oħra, bdejt infittex l-ispirazzjoni fuq l-Internet (b'mod ġenerali, nikkunsidra l-Internet l-aktar invenzjoni rivoluzzjonarja u perikoluża tas-seklu XNUMX). Ħaffejt vidjo ta’ programmatur wieħed li għamel console Tetris. U fix-xebh tal-logħba tiegħu, iddeċieda li jaqta 's-"serp". Mill-video, tgħallimt dwar żewġ affarijiet fundamentali - il-loop tal-logħob (bi tliet funzjonijiet / partijiet bażiċi) u output għall-buffer.

Il-loop tal-logħob jista' jidher xi ħaġa bħal din:

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

Il-kodiċi jippreżenta l-funzjoni main() kollha f'daqqa. U ċ-ċiklu tal-logħba jibda wara l-kumment korrispondenti. Hemm tliet funzjonijiet bażiċi fil-linja: Input (), Logic (), Draw (). L-ewwel, id-data tad-dħul Input (prinċipalment kontroll ta 'keystrokes), imbagħad l-ipproċessar tad-data mdaħħla Loġika, imbagħad wiri fuq l-iskrin - Iġbed. U hekk kull frame. L-animazzjoni hija maħluqa b'dan il-mod. Huwa bħal cartoons. Normalment l-ipproċessar tad-dejta tal-input jieħu l-aktar ħin u, safejn naf jien, jiddetermina r-rata tal-qafas tal-logħba. Imma hawn il-funzjoni Logic() hija mgħaġġla ħafna. Għalhekk, ir-rata tal-qafas għandha tkun ikkontrollata mill-funzjoni Sleep() bil-parametru gameSpeed ​​​​, li jiddetermina din ir-rata.

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
ċiklu tal-logħob. Programmazzjoni tas-serp f'notepad

Jekk qed tiżviluppa logħba simbolika tal-console, allura l-wiri tad-dejta fuq l-iskrin bl-użu tal-output tan-nixxiegħa tas-soltu 'cout' mhux se jaħdem - huwa bil-mod ħafna. Għalhekk, l-output għandu jitwettaq fil-buffer tal-iskrin. Tant aktar malajr u l-logħba se taħdem mingħajr glitches. Biex inkun onest, ma tantx nifhem x'inhu screen buffer u kif jaħdem. Imma jien se nagħti eżempju ta 'kodiċi hawn, u forsi xi ħadd fil-kummenti se jkun jista' jiċċara s-sitwazzjoni.

Niżżel il-buffer tal-iskrin (jekk nista' ngħid hekk):

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

Output dirett għall-iskrin ta 'ċerta linja scoreLine (il-linja għall-wiri tal-punteġġi):

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

Fit-teorija, m'hemm xejn ikkumplikat f'din il-logħba, jidhirli eżempju tajjeb ta 'logħba entry-level. Il-kodiċi huwa miktub f'fajl wieħed u rranġat f'diversi funzjonijiet. L-ebda klassijiet, l-ebda wirt. Inti stess tista' tara kollox fil-kodiċi tas-sors tal-logħba billi tmur fir-repożitorju fuq GitHub.

Game 2 Crazy Tanks

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Logħba Crazy Tanks

L-istampar ta 'karattri fuq il-console huwa probabbilment l-aktar ħaġa sempliċi li tista' tibdel f'logħba. Imma mbagħad jidher inkwiet wieħed: il-karattri għandhom għoli u wisgħat differenti (l-għoli huwa akbar mill-wisa '). Għalhekk, kollox se jidher sproporzjonat, u li tiċċaqlaq 'l isfel jew 'il fuq tidher ħafna aktar mgħaġġla milli tiċċaqlaq lejn ix-xellug jew il-lemin. Dan l-effett huwa notevoli ħafna fil-"Snake" (Logħba 1). "Tankijiet" (Logħba 2) m'għandhomx tali żvantaġġ, peress li l-output hemm huwa organizzat billi tpinġi l-pixels tal-iskrin b'kuluri differenti. Tista 'tgħid li ktibt renderer. Veru, dan diġà huwa ftit aktar ikkumplikat, għalkemm ħafna aktar interessanti.

Għal din il-logħba, ikun biżżejjed li tiddeskrivi s-sistema tiegħi għall-wiri tal-pixels fuq l-iskrin. Naħseb li din hija l-parti ewlenija tal-logħba. U kull ħaġa oħra tista’ toħroġ bik innifsek.

Allura, dak li tara fuq l-iskrin huwa biss sett ta 'rettangoli kkuluriti li jiċċaqilqu.

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Sett rettangolu

Kull rettangolu huwa rappreżentat minn matriċi mimlija bin-numri. Mill-mod, nista 'nenfasizza sfumatura waħda interessanti - il-matriċi kollha fil-logħba huma pprogrammati bħala firxa ta' dimensjoni waħda. Mhux bidimensjonali, imma waħda dimensjonali! Arrays one-dimensjonali huma ħafna aktar faċli u aktar mgħaġġla biex jaħdmu magħhom.

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Eżempju ta 'matriċi tat-tank tal-logħob

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Jirrappreżenta l-Matriċi ta 'Tank tal-Logħob b'Arranġament One-Dimensional

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Eżempju aktar illustrattiv ta' rappreżentazzjoni matriċi minn firxa ta' dimensjoni waħda

Iżda l-aċċess għall-elementi tal-firxa jseħħ f'linja doppja, bħallikieku ma kienx firxa waħda dimensjonali, iżda żewġ dimensjonijiet. Dan isir għax għadna naħdmu bil-matriċi.

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
It-traversing ta' firxa ta' dimensjoni waħda f'linja doppja. Y hija l-ID tar-ringiela, X hija l-ID tal-kolonna

Jekk jogħġbok innota li minflok l-identifikaturi matriċi tas-soltu i, j, nuża l-identifikaturi x u y. Allura, jidhirli, aktar pjaċir għall-għajn u aktar ċara għall-moħħ. Barra minn hekk, notazzjoni bħal din tagħmilha possibbli li jiġu pproġettati b'mod konvenjenti l-matriċi użati fuq l-assi koordinati ta 'immaġni bidimensjonali.

Issa dwar pixels, kulur u wiri. Il-funzjoni StretchDIBits (Header: windows.h; Librerija: gdi32.lib) tintuża għall-output. Fost affarijiet oħra, dan li ġej huwa mgħoddi għal din il-funzjoni: l-apparat li fuqu tintwera l-immaġni (fil-każ tiegħi, dan huwa l-console tal-Windows), il-koordinati tal-bidu tal-wiri tal-immaġni, il-wisa '/għoli tiegħu, u l-immaġni innifsu fil-forma ta' bitmap (bitmap), rappreżentat minn firxa ta' bytes. Bitmap bħala firxa ta' bytes!

Il-funzjoni StretchDIBits() fuq ix-xogħol:

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

Il-memorja hija allokata minn qabel għal din il-bitmap bl-użu tal-funzjoni VirtualAlloc(). Jiġifieri, in-numru meħtieġ ta 'bytes huwa riżervat biex jaħżen informazzjoni dwar il-pixels kollha, li mbagħad jintwerew fuq l-iskrin.

Il-ħolqien ta' m_p_bitmapMemory bitmap:

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

Bejn wieħed u ieħor, bitmap jikkonsisti f'sett ta' pixels. Kull erba 'bytes fil-firxa huwa pixel RGB. Byte wieħed għal kull valur aħmar, byte wieħed għal kull valur aħdar (G), u byte wieħed għal kull kulur blu (B). Barra minn hekk, hemm byte wieħed għal kull inċiż. Dawn it-tliet kuluri - Aħmar / Aħdar / Blu (RGB) - huma mħallta ma 'xulxin fi proporzjonijiet differenti - u jinkiseb il-kulur tal-pixel li jirriżulta.

Issa, għal darb'oħra, kull rettangolu, jew oġġett tal-logħba, huwa rappreżentat minn matriċi ta 'numri. Dawn l-oġġetti tal-logħob kollha jitqiegħdu f'kollezzjoni. U mbagħad jitqiegħdu fuq il-playing field, li jiffurmaw matriċi numerika kbira waħda. I mmappjat kull numru fil-matriċi għal kulur speċifiku. Pereżempju, in-numru 8 huwa blu, in-numru 9 huwa isfar, in-numru 10 huwa griż skur, eċċ. Għalhekk, nistgħu ngħidu li għandna matriċi tal-playing field, fejn kull numru huwa xi tip ta 'kulur.

Għalhekk, għandna matriċi numerika tal-playing field kollu minn naħa waħda u bitmap għall-wiri tal-immaġni min-naħa l-oħra. S'issa, il-bitmap hija "vojta" - għad m'għandhiex informazzjoni dwar il-pixels tal-kulur mixtieq. Dan ifisser li l-aħħar pass se jkun li timla l-bitmap b'informazzjoni dwar kull pixel ibbażata fuq il-matriċi numerika tal-playing field. Eżempju illustrattiv ta 'tali trasformazzjoni jinsab fl-istampa hawn taħt.

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Eżempju ta 'mili ta' bitmap (Pixel matrix) b'informazzjoni bbażata fuq il-matriċi numerika (Digital matrix) tal-playing field (indiċijiet tal-kulur ma jaqblux mal-indiċijiet fil-logħba)

Se nippreżenta wkoll biċċa kodiċi reali mil-logħba. Il-varjabbli colorIndex f'kull iterazzjoni tal-linja hija assenjata valur (indiċi tal-kulur) mill-matriċi numerika tal-playing field (mainDigitalMatrix). Imbagħad il-kulur innifsu jinkiteb fil-varjabbli tal-kulur ibbażat fuq l-indiċi. Barra minn hekk, il-kulur li jirriżulta huwa maqsum fil-proporzjon ta 'aħmar, aħdar u blu (RGB). U flimkien mal-inċiż (pixelPadding), din l-informazzjoni tinkiteb fuq il-pixel għal darb'oħra, u tifforma immaġni bil-kulur fil-bitmap.

Il-kodiċi juża indikaturi u operazzjonijiet bit-bit, li jistgħu jkunu diffiċli biex jinftiehmu. Allura nagħtikom parir biex taqraw separatament x'imkien kif jaħdmu strutturi bħal dawn.

Imla bitmap b'informazzjoni bbażata fuq il-matriċi numerika tal-playing field:

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

Skont il-metodu deskritt hawn fuq, stampa waħda (qafas) hija ffurmata fil-logħba Crazy Tanks u murija fuq l-iskrin fil-funzjoni Draw (). Wara li tirreġistra keystrokes fil-funzjoni Input() u l-ipproċessar sussegwenti tagħhom fil-funzjoni Logic() , tiġi ffurmata stampa ġdida (qafas). Veru, l-oġġetti tal-logħob jista 'diġà jkollhom pożizzjoni differenti fuq il-playing field u, għalhekk, huma mfassla f'post differenti. Dan huwa kif animazzjoni (moviment) jiġri.

Fit-teorija (jekk ma insejt xejn), li tifhem il-loop tal-logħba mill-ewwel logħba (“Serp”) u s-sistema għall-wiri tal-pixels fuq l-iskrin mit-tieni logħba (“Tankijiet”) huwa dak kollu li għandek bżonn biex tikteb xi tal-logħob 2D tiegħek għall-Windows. Bla ħoss! 😉 Il-bqija tal-partijiet huma biss titjira ta 'fancy.

Naturalment, il-logħba "Tankijiet" hija mfassla ħafna aktar ikkumplikata mill-"Serp". Diġà użajt il-lingwa C++, jiġifieri, iddeskriviet oġġetti tal-logħob differenti bi klassijiet. Ħloqt il-kollezzjoni tiegħi stess - tista' tara l-kodiċi f'headers/Box.h. Mill-mod, il-kollezzjoni x'aktarx għandha tnixxija tal-memorja. Pointers użati. Ħadem bil-memorja. Irrid ngħid li l-ktieb għeni ħafna. Bidu tas-C++ Permezz tal-Programmazzjoni tal-Logħob. Dan huwa bidu tajjeb għal dawk li jibdew fis-C++. Huwa żgħir, interessanti u organizzat tajjeb.

Ħa madwar sitt xhur biex tiżviluppa din il-logħba. Jien ktibt prinċipalment waqt l-ikla u snacks fuq ix-xogħol. Huwa poġġa bilqiegħda fil-kċina tal-uffiċċju, stomped fuq l-ikel u kiteb kodiċi. Jew id-dar għall-pranzu. Allura sibt tali "gwerer tal-kċina". Bħal dejjem, użajt b'mod attiv notebook, u l-affarijiet kunċettwali kollha twieldu fih.

Fl-aħħar tal-parti prattika, se niġbed ftit skans tan-notebook tiegħi. Biex nuri x'qed nikteb eżattament, npinġi, ngħodd, niddisinja...

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Disinn tal-immaġni tat-tank. U d-definizzjoni ta 'kemm pixels kull tank għandu jokkupa fuq l-iskrin

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Kalkolu tal-algoritmu u formuli għar-rotazzjoni tat-tank madwar l-assi tiegħu

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
Dijagramma tal-kollezzjoni tiegħi (dik li għandha t-tnixxija tal-memorja, x'aktarx). Il-kollezzjoni hija maħluqa bħala Lista Linked

DevOps C++ u "gwerer tal-kċina", jew Kif bdejt nikteb logħob waqt li niekol
U dawn huma tentattivi għalxejn biex l-intelliġenza artifiċjali tal-kamin fil-logħba

Теория

"Anke vjaġġ ta 'elf mil jibda bl-ewwel pass" (Għerf Ċiniż antik)

Ejja nimxu mill-prattika għat-teorija! Kif issib ħin għad-delizzju tiegħek?

  1. Iddetermina dak li verament trid (sfortunatament, dan huwa l-aktar diffiċli).
  2. Stabbilixxi prijoritajiet.
  3. Sagrifika kollha "superfluwi" għall-fini ta 'prijoritajiet ogħla.
  4. Imxi lejn il-miri tiegħek kuljum.
  5. Tistenniex li jkun hemm sagħtejn jew tliet sigħat ta’ ħin liberu għal xi passatemp.

Min-naħa waħda, trid tiddetermina dak li trid u tipprijoritizza. Min-naħa l-oħra, huwa possibbli li jiġu abbandunati xi każijiet/proġetti favur dawn il-prijoritajiet. Fi kliem ieħor, ikollok tissagrifika kollox "superfluwu". Smajt x'imkien li fil-ħajja għandu jkun hemm massimu ta' tliet attivitajiet ewlenin. Imbagħad tkun tista’ tittrattahom bl-aħjar mod possibbli. U proġetti/direzzjonijiet addizzjonali se jibdew jgħabbu żżejjed corny. Iżda dan kollu huwa, probabbilment, suġġettiv u individwali.

Hemm ċerta regola tad-deheb: qatt ma jkollok ġurnata 0%! Tgħallimt dwarha f'artiklu minn żviluppatur indie. Jekk qed taħdem fuq proġett, imbagħad agħmel xi ħaġa dwaru kuljum. U ma jimpurtax kemm tagħmel. Ikteb kelma waħda jew linja waħda ta 'kodiċi, ara vidjo tutorja wieħed, jew martell dwiefer wieħed fil-bord—sempliċement agħmel xi ħaġa. L-aktar parti diffiċli hija li tibda. Ladarba tibda, inti probabilment se tagħmel ftit aktar milli xtaqt. Allura inti dejjem se timxi lejn il-mira tiegħek u, emminni, malajr ħafna. Wara kollox, il-brejk ewlieni fuq l-affarijiet kollha huwa procrastination.

U huwa importanti li tiftakar li m'għandekx tissottovaluta u tinjora s-"serratura" ħielsa tal-ħin f'5, 10, 15-il minuta, stenna għal xi "zkuk" kbar li jdumu siegħa jew tnejn. Inti bil-wieqfa fil-linja? Aħseb dwar xi ħaġa għall-proġett tiegħek. Qed titla’ l-eskalatur? Ikteb xi ħaġa f'notebook. Tiekol fuq il-karozza tal-linja? Tajjeb, aqra xi artiklu. Uża kull opportunità. Tieqaf tara qtates u klieb fuq YouTube! Tħawwadx b'moħħok!

U l-aħħar. Jekk, wara li qrajt dan l-artikolu, għoġbok l-idea li toħloq logħob mingħajr ma tuża magni tal-logħob, imbagħad ftakar l-isem Casey Muratori. Dan il-bniedem għandu website. Fis-sezzjoni "għassa -> EPISODI PREĊEDENTI" issib tutorials tal-vidjo b'xejn tal-għaġeb dwar kif toħloq logħba professjonali mill-bidu. F'ħames lezzjonijiet ta 'Intro to C għall-Windows, tista' titgħallem aktar minn ħames snin ta 'studju fl-università (xi ħadd kiteb dwar dan fil-kummenti taħt il-video).

Casey jispjega wkoll li billi tiżviluppa l-magna tal-logħob tiegħek stess, ser ikollok fehim aħjar ta 'kwalunkwe magni eżistenti. Fid-dinja tal-oqfsa, fejn kulħadd qed jipprova awtomat, int titgħallem kif toħloq, mhux tuża. Jifhmu n-natura stess tal-kompjuters. U int se ssir ukoll programmatur ħafna aktar intelliġenti u matur - pro.

Xorti tajba fit-triq magħżula tiegħek! U ejja nagħmlu d-dinja aktar professjonali.

Awtur: Grankin Andrey, DevOps



Sors: www.habr.com