DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon

"Nahibal-an ko nga wala ako nahibal-an" Socrates

Para kang kinsa: alang sa mga IT nga mga tawo nga nangluwa sa tanan nga mga developer ug gusto nga magdula sa ilang mga dula!

Mahitungod sa unsa: unsaon pagsugod sa pagsulat sa mga dula sa C/C++ kung kinahanglan nimo!

Nganong kinahanglan nimong basahon kini: Ang pag-develop sa app dili akong espesyalidad sa trabaho, apan naningkamot ko nga mag-code kada semana. Kay ganahan kog dula!

Hello Akong Ngalan Is Andrey Grankin, Usa ko ka DevOps sa Luxoft. Ang pagpalambo sa aplikasyon dili akong espesyalidad sa trabaho, apan naningkamot ko nga mag-code kada semana. Kay ganahan kog dula!

Ang industriya sa mga dula sa kompyuter dako kaayo, labi pa nga gidungog karon kaysa sa industriya sa sine. Ang mga dula gisulat sukad pa sa sinugdanan sa pag-uswag sa mga kompyuter, gamit, pinaagi sa modernong mga sumbanan, komplikado ug sukaranan nga mga pamaagi sa pagpalambo. Sa paglabay sa panahon, ang mga makina sa dula nagsugod sa pagpakita nga adunay naprograma na nga mga graphic, pisika, ug tunog. Gitugotan ka nila nga mag-focus sa pag-uswag sa dula mismo ug dili magsamok bahin sa pundasyon niini. Apan uban kanila, uban sa mga makina, ang mga developers "nabuta" ug degrade. Ang mismong produksiyon sa mga dula gibutang sa conveyor. Ug ang gidaghanon sa produksiyon nagsugod sa pagpatigbabaw sa kalidad niini.

Sa parehas nga oras, kung magdula sa mga dula sa ubang mga tawo, kanunay kami limitado sa mga lokasyon, laraw, mga karakter, mekaniko sa dula nga gihimo sa ubang mga tawo. So naka realize ko nga...

… panahon na sa paghimo sa imong kaugalingon nga mga kalibutan, ubos ra kanako. Kalibutan diin Ako ang Amahan, ug ang Anak, ug ang Espiritu Santo!

Ug ako sinsero nga nagtuo nga pinaagi sa pagsulat sa imong kaugalingon nga makina sa dula ug usa ka dula niini, mahimo nimong ablihan ang imong mga mata, pagpahid sa mga bintana ug bomba ang imong kabin, mahimong usa ka mas eksperyensiyado ug integral nga programmer.

Niini nga artikulo sulayan nako nga isulti kanimo kung giunsa nako pagsugod ang pagsulat sa gagmay nga mga dula sa C / C ++, kung unsa ang proseso sa pag-uswag ug kung diin ako nangita oras alang sa usa ka kalingawan sa usa ka busy nga palibot. Kini suhetibo ug naghulagway sa proseso sa usa ka indibidwal nga pagsugod. Materyal mahitungod sa pagkawalay alamag ug pagtuo, mahitungod sa akong personal nga hulagway sa kalibutan sa pagkakaron. Sa ato pa, "Ang administrasyon dili responsable sa imong personal nga utok!".

Pagpraktis

"Ang kahibalo nga walay praktis walay kapuslanan, ang praktis nga walay kahibalo peligroso." Confucius

Ang akong notebook mao ang akong kinabuhi!


Busa, sa praktis, makaingon ko nga ang tanan alang kanako magsugod sa usa ka notebook. Gisulat nako dili lamang ang akong adlaw-adlaw nga mga buluhaton didto, apan usab ang pagdrowing, programa, pagdesinyo sa mga flowchart ug pagsulbad sa mga problema, lakip ang mga matematika. Kanunay gamita ang notepad ug isulat lang gamit ang lapis. Kini limpyo, komportable ug kasaligan, IMHO.

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Akong (napuno na) notebook. Ingon niini ang hitsura niini. Naglangkob kini sa adlaw-adlaw nga buluhaton, ideya, drowing, diagram, solusyon, itom nga bookkeeping, code, ug uban pa.

Niini nga yugto, nakahimo ako sa pagkompleto sa tulo ka mga proyekto (kini naa sa akong pagsabot sa "katapusan", tungod kay ang bisan unsang produkto mahimong maugmad nga walay katapusan).

  • Proyekto 0: kini usa ka Architect Demo 3D nga talan-awon nga gisulat sa C # gamit ang Unity game engine. Alang sa macOS ug Windows platform.
  • Dula 1: console game Simple Snake (nailhan sa tanan nga "Snake") para sa Windows. gisulat sa C.
  • Dula 2: console game Crazy Tanks (nailhan sa tanan nga "Tanks"), gisulat na sa C ++ (gamit ang mga klase) ug ubos usab sa Windows.

Proyekto 0 Arkitekto Demo

  • Plataporma: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Yano: C#
  • Game engine: Panaghiusa
  • Inspirasyon: Darrin Lile
  • Repositoryo: GitHub

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
3D Scene Architect Demo

Ang unang proyekto gipatuman dili sa C/C++, apan sa C# gamit ang Unity game engine. Kini nga makina dili ingon ka kinahanglanon sa hardware Unreal Engine, ug ingon usab alang kanako nga mas sayon ​​​​ang pag-instalar ug paggamit. Wala nako gikonsiderar ang ubang mga makina.

Ang tumong sa Unity alang kanako dili ang paghimo og usa ka matang sa dula. Gusto nako nga maghimo usa ka 3D nga talan-awon nga adunay usa ka matang sa karakter. Siya, o hinoon Siya (gimodelo nako ang babaye nga akong gihigugma =) kinahanglan nga molihok ug makig-uban sa kalibutan sa gawas. Importante lang nga masabtan kung unsa ang Unity, unsa ang proseso sa pag-uswag, ug unsa ka dako nga paningkamot ang gikinahanglan aron makahimo og usa ka butang. Ingon niini ang pagkahimugso sa proyekto sa Arkitekto Demo (ang ngalan naimbento halos gikan sa kabuang). Ang pagprograma, pagmodelo, animation, pag-texture mikuha tingali nako og duha ka bulan sa adlaw-adlaw nga trabaho.

Nagsugod ako sa mga video sa tutorial sa YouTube kung giunsa paghimo ang mga modelo sa 3D blender. Ang Blender usa ka maayo nga libre nga himan alang sa 3D modeling (ug daghan pa) nga wala magkinahanglan og pag-instalar. Ug ania ang usa ka kakurat nga naghulat kanako ... Kini nahimo nga ang pagmodelo, animation, pag-texture usa ka dako nga lahi nga mga hilisgutan diin mahimo nimong isulat ang mga libro. Tinuod kini ilabina alang sa mga karakter. Aron mamodelo ang mga tudlo, ngipon, mata ug uban pang bahin sa lawas, kinahanglan nimo ang kahibalo sa anatomy. Giunsa pagkahan-ay ang mga kaunoran sa nawong? Giunsa paglihok sa mga tawo? Kinahanglan kong "isulod" ang mga bukog sa matag bukton, bitiis, tudlo, buko!

I-modelo ang clavicle, dugang nga mga lever sa bukog, aron ang animation tan-awon nga natural. Pagkahuman sa ingon nga mga leksyon, nahibal-an nimo kung unsa ka dako nga buhat ang gibuhat sa mga tiglalang sa mga animated nga pelikula, aron lang makahimo og 30 segundos nga video. Apan ang 3D nga mga salida molungtad sa daghang oras! Ug unya migawas kami sa mga sinehan ug moingon og sama sa: β€œTa, usa ka bastos nga cartoon / sine! Mas maayo pa unta sila..." Mga buang!

Ug usa pa ka butang bahin sa pagprograma sa kini nga proyekto. Ingon sa nahimo, ang labing makapaikag nga bahin alang kanako mao ang matematika. Kung gipadagan nimo ang talan-awon (link sa repository sa paghulagway sa proyekto), imong namatikdan nga ang camera nagtuyok sa palibot sa karakter sa babaye sa usa ka sphere. Aron maprograma ang ingon nga rotation sa camera, kinahanglan nako nga kuwentahon una ang mga coordinate sa posisyon nga punto sa lingin (2D), ug dayon sa sphere (3D). Ang kataw-anan kay gidumtan nako ang math sa eskuylahan ug nahibal-an nako kini nga adunay minus. Sa usa ka bahin, tingali, tungod kay sa eskuylahan wala nila ipasabut kanimo kung giunsa kini nga matematika gipadapat sa kinabuhi. Apan kung nahingangha ka sa imong katuyoan, damgo, nan ang hunahuna nalimpyo, gipadayag! Ug nagsugod ka sa pagtan-aw sa komplikado nga mga buluhaton ingon usa ka kulbahinam nga adventure. Ug unya maghunahuna ka: "Aw, ngano nga ang * minahal * nga matematiko kasagarang makasulti kung asa kini nga mga pormula mahimong masandig?".

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Pagkalkula sa mga pormula alang sa pagkalkulo sa mga koordinasyon sa usa ka punto sa usa ka lingin ug sa usa ka sphere (gikan sa akong notebook)

Dula 1

  • Plataporma: Windows (gisulayan sa Windows 7, 10)
  • Yano: Sa akong hunahuna kini gisulat sa puro nga C
  • Game engine: Windows console
  • Inspirasyon: javidx9
  • Repositoryo: GitHub

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Yano nga Snake game

Ang 3D nga talan-awon dili usa ka dula. Dugang pa, ang pagmodelo ug pag-animate sa 3D nga mga butang (ilabi na ang mga karakter) taas ug lisud. Human sa pagdula sa Unity, akong naamgohan nga kinahanglan kong magpadayon, o hinoon magsugod, gikan sa mga sukaranan. Usa ka butang nga yano ug paspas, apan sa samang higayon global, aron masabtan ang istruktura sa mga dula.

Ug unsa ang naa kanato nga yano ug paspas? Husto kana, console ug 2D. Mas tukma, bisan ang console ug mga simbolo. Sa makausa pa, nagsugod ko sa pagpangita og inspirasyon sa Internet (sa kinatibuk-an, akong gikonsiderar ang Internet nga labing rebolusyonaryo ug delikado nga imbensyon sa ika-XNUMX nga siglo). Nagkutkot ako usa ka video sa usa ka programmer nga naghimo sa console nga Tetris. Ug sa dagway sa iyang dula, nakahukom siya nga putlon ang "snake". Gikan sa video, nahibal-an nako ang bahin sa duha ka sukaranan nga mga butang - ang dula nga loop (nga adunay tulo nga sukaranan nga mga gimbuhaton / bahin) ug output sa buffer.

Ang dula loop mahimong tan-awon sama niini:

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

Ang code nagpresentar sa tibuok main() function sa makausa. Ug ang siklo sa dula magsugod pagkahuman sa katugbang nga komento. Adunay tulo ka sukaranan nga mga gimbuhaton sa loop: Input (), Logic (), Draw (). Una, input data Input (nag-una sa pagkontrolar sa keystroke), unya pagproseso sa gisulod data Logic, unya ipakita sa screen - Draw. Ug busa ang matag frame. Ang animation gihimo niining paagiha. Morag mga cartoons. Kasagaran ang pagproseso sa input data nagkinahanglan sa labing daghang oras ug, sa akong nahibal-an, nagtino sa frame rate sa dula. Apan dinhi ang Logic() function paspas kaayo. Busa, ang frame rate kinahanglang kontrolahon sa Sleep() function uban sa gameSpeed ​​​​parameter, nga nagtino niini nga rate.

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
siklo sa dula. Snake programming sa notepad

Kung nagpalambo ka usa ka simbolikong console nga dula, unya ang pagpakita sa data sa screen gamit ang naandan nga stream output nga 'cout' dili molihok - kini hinay kaayo. Busa, ang output kinahanglan nga gidala sa gawas sa screen buffer. Mas paspas ug ang dula molihok nga wala’y mga glitches. Sa tinuod lang, wala kaayo ko kasabot kung unsa ang screen buffer ug kung giunsa kini paglihok. Apan maghatag ako usa ka pananglitan sa code dinhi, ug tingali adunay usa sa mga komentaryo nga makapatin-aw sa kahimtang.

Pagkuha sa buffer sa screen (kung ingon nako):

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

Direkta nga output sa screen sa usa ka linya nga scoreLine (ang linya para sa pagpakita sa mga score):

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

Sa teorya, wala’y komplikado sa kini nga dula, alang kanako usa ka maayong pananglitan sa usa ka dula nga lebel sa pagsulod. Ang code gisulat sa usa ka file ug gihan-ay sa daghang mga gimbuhaton. Walay klase, walay kabilin. Makita nimo ang tanan sa source code sa dula pinaagi sa pag-adto sa repository sa GitHub.

Game 2 Crazy Tanks

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Crazy Tanks nga dula

Ang pag-imprenta sa mga karakter sa console mao tingali ang pinakasimple nga butang nga mahimo nimo nga dula. Apan unya usa ka problema ang makita: ang mga karakter adunay lainlaing mga gitas-on ug gilapdon (ang gitas-on mas dako kaysa sa gilapdon). Sa ingon, ang tanan tan-awon nga dili parehas, ug ang paglihok paubos o pataas ingon labi ka paspas kaysa paglihok sa wala o tuo. Kini nga epekto makita kaayo sa "Snake" (Game 1). Ang "Tanks" (Game 2) walay ingon nga disbentaha, tungod kay ang output didto giorganisar pinaagi sa pagpintal sa mga pixel sa screen nga adunay lainlaing kolor. Mahimo nimong isulti nga nagsulat ako usa ka tighubad. Tinuod, kini usa ka gamay nga mas komplikado, bisan kung mas makapaikag.

Alang sa kini nga dula, igo na nga ihulagway ang akong sistema sa pagpakita sa mga pixel sa screen. Sa akong hunahuna kini ang panguna nga bahin sa dula. Ug ang tanan nga imong mahimo sa imong kaugalingon.

Busa, ang imong makita sa screen usa lang ka set sa naglihok nga kolor nga mga rektanggulo.

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Rectangle set

Ang matag rectangle girepresentahan sa usa ka matrix nga puno sa mga numero. Pinaagi sa dalan, mahimo nakong ipasiugda ang usa ka makapaikag nga nuance - ang tanan nga mga matrice sa dula giprograma ingon usa ka usa ka dimensyon nga laray. Dili duha ka dimensyon, apan usa ka dimensyon! Ang one-dimensional arrays mas sayon ​​ug mas paspas sa pagtrabaho.

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Usa ka pananglitan sa usa ka game tank matrix

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Nagrepresentar sa Matrix sa usa ka Game Tank nga adunay One-Dimensional Array

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Usa ka labaw nga ilustrasyon nga pananglitan sa usa ka representasyon sa matrix pinaagi sa usa ka dimensyon nga array

Apan ang pag-access sa mga elemento sa array mahitabo sa usa ka double loop, ingon nga kini dili usa ka dimensiyon, apan usa ka two-dimensional array. Gihimo kini tungod kay nagtrabaho pa kami sa mga matrices.

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Paglatas sa usa ka dimensyon nga laray sa usa ka double loop. Y ang row ID, X ang column ID

Palihug timan-i nga imbes sa naandan nga matrix identifiers i, j, akong gigamit ang identifiers x ug y. So, para nako, mas makapahimuot sa mata ug mas klaro sa utok. Dugang pa, ang ingon nga usa ka notasyon nagpaposible nga dali nga ma-proyekto ang mga matrice nga gigamit sa mga coordinate axes sa usa ka two-dimensional nga imahe.

Karon bahin sa mga pixel, kolor ug display. Ang StretchDIBits function (Header: windows.h; Library: gdi32.lib) gigamit para sa output. Lakip sa ubang mga butang, ang mga musunud gipasa sa kini nga function: ang aparato diin gipakita ang imahe (sa akong kaso, kini ang Windows console), ang mga koordinasyon sa pagsugod sa pagpakita sa imahe, ang gilapdon / gitas-on niini, ug ang imahe. mismo sa porma sa usa ka bitmap (bitmap), nga girepresentahan sa usa ka han-ay sa mga byte. Bitmap isip usa ka han-ay sa mga byte!

Ang StretchDIBits() function sa trabaho:

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

Ang memorya gigahin daan alang niini nga bitmap gamit ang VirtualAlloc() function. Kana mao, ang gikinahanglan nga gidaghanon sa mga byte gitagana aron sa pagtipig sa impormasyon mahitungod sa tanan nga mga pixel, nga unya ipakita sa screen.

Paghimo og 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);

Sa kinatibuk-an, ang bitmap naglangkob sa usa ka set sa mga pixel. Ang matag upat ka byte sa array usa ka RGB pixel. Usa ka byte matag pula nga kantidad, usa ka byte matag berde nga kantidad (G), ug usa ka byte matag asul nga kolor (B). Dugang pa, adunay usa ka byte matag indent. Kining tulo ka mga kolor - Pula / Berde / Asul (RGB) - gisagol sa usag usa sa lain-laing mga proporsiyon - ug ang resulta nga kolor sa pixel makuha.

Karon, usab, ang matag rektanggulo, o dula nga butang, girepresentahan sa usa ka numero nga matrix. Ang tanan niini nga mga butang sa dula gibutang sa usa ka koleksyon. Ug dayon sila gibutang sa dulaanan, nga nagporma sa usa ka dako nga numerical matrix. Gimapa nako ang matag numero sa matrix sa usa ka piho nga kolor. Pananglitan, ang numero 8 asul, ang numero 9 dalag, ang numero 10 itom nga abohon, ug uban pa. Sa ingon, makaingon kita nga kita adunay usa ka matrix sa dulaanan, diin ang matag numero usa ka matang sa kolor.

Busa, kami adunay usa ka numerical matrix sa tibuok dulaanan sa usa ka bahin ug usa ka bitmap alang sa pagpakita sa hulagway sa pikas. Sa pagkakaron, ang bitmap "walay sulod" - wala pa kini kasayuran mahitungod sa mga pixel sa gusto nga kolor. Kini nagpasabot nga ang katapusang lakang mao ang pagpuno sa bitmap sa impormasyon mahitungod sa matag pixel base sa numerical matrix sa playing field. Ang usa ka ilustrasyon nga pananglitan sa ingon nga pagbag-o naa sa litrato sa ubos.

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Usa ka pananglitan sa pagpuno sa bitmap (Pixel matrix) nga adunay impormasyon base sa numerical matrix (Digital matrix) sa dulaanan (mga indeks sa kolor dili motakdo sa mga indeks sa dula)

Ipresentar usab nako ang usa ka piraso sa tinuud nga code gikan sa dula. Ang variable colorIndex sa matag pag-uli sa loop gihatagan og bili (color index) gikan sa numerical matrix sa playing field (mainDigitalMatrix). Dayon ang kolor mismo gisulat sa color variable base sa index. Dugang pa, ang resulta nga kolor gibahin sa ratio nga pula, berde ug asul (RGB). Ug uban sa indent (pixelPadding), kini nga impormasyon gisulat sa pixel balik-balik, nga nagporma og kolor nga hulagway sa bitmap.

Ang code naggamit sa mga pointer ug bitwise nga mga operasyon, nga mahimong lisud sabton. Mao nga gitambagan ko ikaw nga magbasa nga gilain sa usa ka lugar kung giunsa ang ingon nga mga istruktura molihok.

Pagpuno sa bitmap sa impormasyon base sa numerical matrix sa 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;
   }

Sumala sa pamaagi nga gihulagway sa ibabaw, usa ka hulagway (frame) ang naporma sa Crazy Tanks game ug gipakita sa screen sa Draw() function. Human marehistro ang mga keystroke sa Input() function ug ang ilang sunod nga pagproseso sa Logic() function, usa ka bag-ong hulagway (frame) ang maporma. Tinuod, ang mga butang sa dula mahimo nang adunay lahi nga posisyon sa dulaanan ug, sumala niana, gidrowing sa lahi nga lugar. Ingon niini ang pagkahitabo sa animation (paglihok).

Sa teorya (kung wala ka nakalimot sa bisan unsa), ang pagsabut sa dula nga dula gikan sa una nga dula ("Snake") ug ang sistema sa pagpakita sa mga pixel sa screen gikan sa ikaduhang dula ("Tanks") mao ra ang kinahanglan nimo nga isulat ang bisan unsang sa imong 2D nga mga dula para sa Windows. Walay tingog! πŸ˜‰ Ang nahabilin nga mga bahin usa ra ka paglupad sa kaanyag.

Siyempre, ang dula nga "Tanks" gidisenyo nga labi ka komplikado kaysa sa "Snake". Gigamit na nako ang C ++ nga pinulongan, nga mao, akong gihulagway ang lainlaing mga butang sa dula nga adunay mga klase. Naghimo ko sa akong kaugalingong koleksyon - makita nimo ang code sa mga header/Box.h. Pinaagi sa dalan, ang koleksyon lagmit adunay usa ka pagtulo sa memorya. Gigamit nga mga punto. Nagtrabaho uban ang memorya. Kinahanglan kong isulti nga ang libro nakatabang kaayo kanako. Pagsugod sa C++ Pinaagi sa Game Programming. Kini usa ka maayong pagsugod alang sa mga nagsugod sa C++. Kini gamay, makapaikag ug maayo ang pagkahan-ay.

Nagkinahanglan kini og mga unom ka bulan aron mapalambo kini nga dula. Nagsulat ako labi na sa panahon sa paniudto ug meryenda sa trabaho. Milingkod siya sa kusina sa opisina, gitumban ang pagkaon ug nagsulat og code. O sa balay para sa panihapon. Mao nga nakuha nako ang ingon nga "mga gubat sa kusina". Sama sa kanunay, aktibo kong gigamit ang usa ka notebook, ug ang tanan nga mga konsepto nga mga butang natawo niini.

Sa pagtapos sa praktikal nga bahin, akong kuhaon ang pipila ka mga scan sa akong notebook. Aron ipakita kung unsa gyud ang akong gisulat, pagdrowing, pag-ihap, pagdesinyo…

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Disenyo sa imahe sa tangke. Ug ang kahulugan kung pila ka mga pixel ang kinahanglan nga okupar sa matag tangke sa screen

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Pagkalkula sa algorithm ug mga pormula alang sa pagtuyok sa tangke sa palibot sa axis niini

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Diagram sa akong koleksyon (ang usa nga adunay memory leak, lagmit). Ang koleksyon gihimo isip Linked List

DevOps C++ ug "kitchen wars", o Giunsa nako pagsugod sa pagsulat sa mga dula samtang nagkaon
Ug kini walay kapuslanan nga mga pagsulay sa pag-screw sa artificial intelligence ngadto sa dula

Teorya

"Bisan ang usa ka panaw sa usa ka libo ka milya nagsugod sa unang lakang" (Kaalam sa Karaang Intsik)

Mobalhin kita gikan sa praktis ngadto sa teorya! Unsaon nimo pagpangita og panahon alang sa imong kalingawan?

  1. Tinoa kung unsa gyud ang imong gusto (alaut, kini ang labing lisud).
  2. Paghimog mga prayoridad.
  3. Isakripisyo ang tanan nga "sobra" alang sa mas taas nga mga prayoridad.
  4. Pagbalhin ngadto sa imong mga tumong kada adlaw.
  5. Ayaw pagdahum nga adunay duha o tulo ka oras nga libre nga oras alang sa usa ka kalingawan.

Sa usa ka bahin, kinahanglan nimo nga mahibal-an kung unsa ang imong gusto ug unahon. Sa laing bahin, posible nga biyaan ang pipila ka mga kaso/proyekto pabor niini nga mga prayoridad. Sa laing pagkasulti, kinahanglan nimong isakripisyo ang tanan nga "sobra". Nakadungog ko sa usa ka dapit nga sa kinabuhi kinahanglan adunay labing taas nga tulo ka mga nag-unang kalihokan. Unya mahimo nimong atubangon sila sa labing kaayo nga posible nga paagi. Ug ang dugang nga mga proyekto/direksyon magsugod sa pag-overload sa corny. Apan kini tanan, tingali, suhetibo ug indibidwal.

Adunay usa ka piho nga bulawan nga lagda: ayaw pagbaton ug 0% nga adlaw! Nahibal-an nako kini sa usa ka artikulo sa usa ka indie developer. Kung nagtrabaho ka sa usa ka proyekto, buhata kini matag adlaw. Ug dili igsapayan kung pila ang imong kinitaan. Pagsulat og usa ka pulong o usa ka linya sa code, tan-awa ang usa ka video sa tutorial, o i-martilyo ang usa ka lansang sa pisaraβ€”buhata lang ang usa ka butang. Ang pinakalisud nga bahin mao ang pagsugod. Sa higayon nga magsugod ka, mahimo nimong buhaton ang labi pa sa imong gusto. Mao nga kanunay ka nga molihok padulong sa imong katuyoan ug, tuohi ako, dali kaayo. Human sa tanan, ang nag-unang preno sa tanan nga mga butang mao ang paglangay-langay.

Ug importante nga hinumdoman nga dili nimo angayng pakamenoson ug ibaliwala ang libre nga "sawdust" sa oras sa 5, 10, 15 ka minuto, paghulat sa pipila ka dagkong "mga troso" nga molungtad sa usa o duha ka oras. Naglinya ka ba? Hunahunaa ang usa ka butang alang sa imong proyekto. Mosaka ka sa escalator? Isulat ang usa ka butang sa notebook. Nangaon ka sa bus? Okay, basaha ang pipila ka artikulo. Gamita ang matag kahigayonan. Hunonga ang pagtan-aw sa mga iring ug iro sa YouTube! Ayaw pagsamok sa imong utok!

Ug ang katapusan. Kung, pagkahuman sa pagbasa niini nga artikulo, gusto nimo ang ideya sa paghimo og mga dula nga wala gigamit ang mga makina sa dula, nan hinumdomi ang ngalan nga Casey Muratori. Kini nga lalaki adunay website. Sa seksyon nga "watch -> UNANG EPISOD" makit-an nimo ang katingad-an nga libre nga mga tutorial sa video kung giunsa paghimo ang usa ka propesyonal nga dula gikan sa wala. Mahimo kang makakat-on og dugang sa lima ka Intro to C for Windows nga mga leksyon kay sa lima ka tuig nga pagtuon sa unibersidad (usa ka tawo ang nagsulat mahitungod niini sa mga komentaryo ubos sa video).

Gipatin-aw usab ni Casey nga pinaagi sa pagpalambo sa imong kaugalingon nga makina sa dula, mas masabtan nimo ang bisan unsang naa na nga makina. Sa kalibutan sa mga frameworks, diin ang tanan naningkamot sa pag-automate, makakat-on ka kung unsaon paghimo, dili paggamit. Sabta ang kinaiyahan sa mga kompyuter. Ug mahimo ka usab nga labi ka intelihente ug hamtong nga programmer - usa ka pro.

Good luck sa imong gipili nga dalan! Ug himoon nato nga mas propesyonal ang kalibutan.

Author: Kuya Andrey, DevOps



Source: www.habr.com