DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana

"Fantatro fa tsy mahalala na inona na inona aho" Socrates

Ho an'iza: ho an'ny IT izay mandrora ny developer rehetra ary te hilalao ny lalaony!

Momba ny inona: Ahoana no hanombohana manoratra lalao amin'ny C/C++ raha mila izany ianao!

Nahoana ianao no tokony hamaky ity: Ny fampivoarana ny fampiharana dia tsy ny asa manokana ataoko, fa miezaka manao kaody isan-kerinandro aho. Satria tiako ny lalao!

Salama ny anarako Andrey Grankin, DevOps ao amin'ny Luxoft aho. Ny fampivoarana ny fampiharana dia tsy ny asa manokana ataoko, fa miezaka manao kaody isan-kerinandro aho. Satria tiako ny lalao!

Ny indostrian'ny lalao amin'ny ordinatera dia goavana, ary malaza kokoa noho ny indostrian'ny sarimihetsika ankehitriny. Ny lalao dia nosoratana hatramin'ny niandohan'ny fivoaran'ny ordinatera, mampiasa, amin'ny fenitra maoderina, fomba fampandrosoana sarotra sy fototra. Rehefa nandeha ny fotoana dia nanomboka nipoitra ny milina lalao miaraka amin'ny sary efa voarindra, fizika ary feo. Izy ireo dia mamela anao hifantoka amin'ny fampandrosoana ny lalao mihitsy fa tsy hanelingelina ny fototra. Saingy miaraka amin'izy ireo, miaraka amin'ny motera, ny mpamorona dia "manjamba" ary manimba. Ny famokarana lalao dia apetraka amin'ny conveyor. Ary ny habetsahan'ny famokarana dia manomboka manjaka noho ny kalitaony.

Mandritra izany fotoana izany, rehefa milalao ny lalaon'ny olon-kafa isika, dia voafetra hatrany amin'ny toerana, ny tantara, ny toetra, ny mekanika lalao izay novolavolain'ny olon-kafa. Ka tsapako fa...

… tonga ny fotoana hamoronana ny tontolonao manokana, ho ahy irery ihany. Tontolo misy Ahy Ray sy Zanaka ary Fanahy Masina!

Ary mino an-kitsimpo aho fa amin'ny fanoratana ny motera lalao anao manokana sy ny lalao eo aminy, dia ho afaka hanokatra ny masonao ianao, hamafa ny varavarankely ary paompy ny tranonao, ho lasa programmer za-draharaha sy manan-danja kokoa.

Amin'ity lahatsoratra ity dia hiezaka aho hilaza aminao ny fomba nanombohako nanoratra lalao kely tao amin'ny C / C ++, inona ny fizotran'ny fampandrosoana ary aiza no ahitako fotoana ho an'ny fialamboly amin'ny tontolo sahirana. Subjective izy io ary mamaritra ny fizotry ny fanombohan'ny tsirairay. Fitaovana momba ny tsy fahalalana sy ny finoana, momba ny sariko manokana momba an'izao tontolo izao amin'izao fotoana izao. Izany hoe "tsy tompon'andraikitra amin'ny atidohanao manokana ny fitantanana!".

fampiharana

"Tsy misy ilana ny fahalalana tsy misy fampiharana, mampidi-doza ny fampiharana raha tsy misy fahalalana." Confucius

Ny kahieko no fiainako!


Noho izany, amin'ny fampiharana, afaka milaza aho fa ny zava-drehetra amiko dia manomboka amin'ny kahie. Tsy ny asako isan'andro ihany no soratako ao, fa ny fanaovana sary, fandaharana, famolavolana tabilao ary famahana olana, anisan'izany ny matematika. Mampiasà notepad foana ary soraty amin'ny pensilihazo fotsiny. Madio, mahazo aina ary azo itokisana, IMHO.

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Ny kahie-ko (efa feno). Toy izao ny endriny. Ahitana asa andavanandro, hevitra, sary, kisary, vahaolana, fitahirizam-boky mainty, kaody, sy ny sisa.

Tamin'ity dingana ity dia nahavita tetikasa telo aho (araka ny fahazoako ny "farany", satria ny vokatra rehetra dia azo amboarina tsy misy farany).

  • Tetikasa 0: Ity dia sehatra Architect Demo 3D nosoratana tamin'ny C # mampiasa ny motera lalao Unity. Ho an'ny sehatra macOS sy Windows.
  • Lalao 1: lalao console Simple Snake (fantatry ny rehetra amin'ny hoe "Snake") ho an'ny Windows. voasoratra ao amin'ny C.
  • Lalao 2: lalao console Crazy Tanks (fantatra amin'ny rehetra hoe "Tanks"), efa voasoratra amin'ny C ++ (mampiasa kilasy) ary eo ambanin'ny Windows ihany koa.

Tetikasa 0 Architect Demo

  • Sehatra: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Language: C#
  • Lalao Engine: Unity
  • aingam-panahy: Darrin Lile
  • Repository: GitHub

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
3D Scene Architect Demo

Ny tetikasa voalohany dia tsy nampiharina tamin'ny C/C++, fa tamin'ny C# tamin'ny fampiasana ny motera lalao Unity. Ity motera ity dia tsy mitaky fitakiana toy ny fitaovana mampino Engine, ary toa mora kokoa amiko ny mametraka sy mampiasa. Tsy nijery motera hafa aho.

Ny tanjona tao amin'ny Unity ho ahy dia tsy ny hamolavola karazana lalao. Te hamorona sehatra 3D misy karazana toetra aho. Izy, na ny marimarina kokoa, Izy (natao modeliko ilay sipa tiako =) tsy maintsy nihetsika sy nifanerasera tamin'ny any ivelany. Zava-dehibe ihany ny nahatakatra ny atao hoe Unity, inona ny dingana fampandrosoana ary hatraiza ny ezaka ilaina amin'ny famoronana zavatra. Toy izany no nahaterahan'ny tetikasa Architect Demo (saika avy amin'ny omby no noforonina ny anarana). Ny fandaharana, ny modeling, ny animation, ny texturing dia naharitra roa volana niasako isan'andro.

Nanomboka tamin'ny lahatsary fampianarana tao amin'ny YouTube momba ny fomba famoronana modely 3D aho blender. Blender dia fitaovana maimaim-poana ho an'ny modely 3D (sy ny maro hafa) izay tsy mitaky fametrahana. Ary eto dia nisy fahatairana niandry ahy ... Hita fa ny modeling, ny animation, ny texturing dia lohahevitra miavaka izay ahafahanao manoratra boky. Marina indrindra izany ho an'ny mpilalao. Mba hanaovana modely amin'ny rantsantanana, nify, maso ary faritra hafa amin'ny vatana dia mila fahalalana momba ny anatomie ianao. Ahoana no fandaminana ny hozatry ny tarehy? Ahoana no fihetsiky ny olona? Tsy maintsy “nampiditra” taolana teo amin'ny sandry, tongotra, rantsantanana, ankihibe aho!

Modely ny clavicle, fanampim-pamokarana taolana, mba ho voajanahary ny sary mihetsika. Aorian'ny lesona toy izany dia tsapanao ny asa goavana ataon'ireo mpamorona sarimihetsika mihetsika, mba hamoronana horonantsary 30 segondra fotsiny. Fa ny sarimihetsika 3D dia maharitra ora maro! Avy eo dia mivoaka avy ao amin'ny teatra izahay ary miteny toy izao: “Ta, sariitatra / sarimihetsika maharikoriko! Afaka nanao tsaratsara kokoa izy ireo…” Adala!

Ary zavatra iray hafa momba ny fandaharana amin'ity tetikasa ity. Raha ny fantatra dia ny matematika no tena nahaliana ahy. Raha mihazakazaka ny sehatra ianao (rohy mankany amin'ny tahiry ao amin'ny famaritana ny tetikasa), dia ho hitanao fa mihodina manodidina ny toetran'ny tovovavy amin'ny sehatra iray ny fakantsary. Mba hanomanana ny fihodinan'ny fakan-tsary toy izany, dia tsy maintsy nikajy ny koordinate ny toerana misy eo amin'ny faribolana (2D), ary avy eo amin'ny sphere (3D). Ny mampihomehy dia tsy tiako ny matematika tany am-pianarana ary fantatro izany tamin'ny minus. Amin'ny ampahany, angamba, satria any am-pianarana dia tsy manazava aminao fotsiny ny fomba ampiharana an'io matematika io amin'ny fiainana. Fa rehefa variana amin'ny tanjonao, manonofy, dia madio ny saina, miharihary! Ary manomboka mahita asa sarotra ho toy ny fitsangatsanganana mampientam-po ianao. Ary avy eo mieritreritra ianao hoe: "Eny, maninona no tsy afaka milaza amin'ny fomba mahazatra ny *matematika malala* hoe aiza no azo hianteherana ireo formulas ireo?".

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Fikajiana ny raikipohy amin'ny kajy ny koordinate amin'ny teboka iray amin'ny faribolana sy amin'ny sphere (avy amin'ny kahieko)

Lalao 1

  • Sehatra: Windows (voazaha tamin'ny Windows 7, 10)
  • Language: Heveriko fa nosoratana tamin'ny C madio izy io
  • Lalao Engine: Windows console
  • aingam-panahy: javidx9
  • Repository: GitHub

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Lalao Simple Snake

Ny sehatra 3D dia tsy lalao. Ho fanampin'izany, lava sy sarotra ny fanaovana modely sy famelomana zavatra 3D (indrindra fa ny tarehin-tsoratra). Rehefa avy nilalao tamin'ny Unity aho, dia tsapako fa tsy maintsy nanohy, na vao manomboka, avy amin'ny fototra aho. Zavatra tsotra sy haingana, fa miaraka amin'izay koa maneran-tany, mba hahatakatra ny tena firafitry ny lalao.

Ary inona no ananantsika tsotra sy haingana? Marina izany, console ary 2D. Ny marimarina kokoa, na dia ny console sy ny marika aza. Nanomboka nitady aingam-panahy tao amin'ny Internet indray aho (amin'ny ankapobeny, heveriko fa ny Internet no famoronana revolisionera sy mampidi-doza indrindra tamin'ny taonjato faha-XNUMX). Nikaroka lahatsarin'ny programmer iray nanao console Tetris aho. Ary amin'ny endriky ny lalaony dia nanapa-kevitra ny hanapaka ny "bibilava" izy. Avy amin'ny horonan-tsary dia nianatra zavatra fototra roa aho - ny lalao loop (miaraka amin'ny fiasa / ampahany telo) ary ny famoahana ny buffer.

Ny lalao loop dia mety ho toy izao:

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

Ny kaody dia manolotra ny fiasan'ny main() manontolo indray mandeha. Ary ny tsingerin'ny lalao dia manomboka aorian'ny fanehoan-kevitra mifanaraka amin'izany. Misy fiasa fototra telo ao amin'ny loop: Input(), Logic(), Draw(). Voalohany, ampidiro ny data Input (indrindra ny fanaraha-maso ny fanendry), avy eo ny fanodinana ny data niditra Logic, avy eo dia aseho eo amin'ny efijery - Draw. Ary noho izany ny frame tsirairay. Ny animation dia noforonina tamin'izany fomba izany. Toy ny sariitatra izany. Matetika ny fanodinana ny angona fampidirana dia mitaky fotoana be indrindra ary, araka ny fantatro, dia mamaritra ny tahan'ny lalao. Fa eto dia tena haingana ny fiasa Logic(). Noho izany, ny tahan'ny frame dia tsy maintsy fehezin'ny fiasan'ny Sleep() miaraka amin'ny gameSpeed ​​​​parameter, izay mamaritra io tahan'ny io.

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
tsingerin'ny lalao. Programa bibilava amin'ny notepad

Raha mamolavola lalao fampiononana an'ohatra ianao, dia tsy mandeha ny fampisehoana angon-drakitra eo amin'ny efijery amin'ny alàlan'ny famoahana stream mahazatra 'cout' - miadana be izany. Noho izany, ny vokatra dia tsy maintsy atao amin'ny buffer efijery. Haingana kokoa ary ny lalao dia hiasa tsy misy glitches. Raha ny marina dia tsy azoko tsara ny atao hoe buffer écran sy ny fomba fiasany. Fa hanome ohatra kaody eto aho, ary angamba misy olona afaka manazava ny zava-misy ao amin'ny fanehoan-kevitra.

Mahazo ny buffer écran (raha azoko lazaina izany):

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

Output mivantana mankany amin'ny efijerin'ny tsipika scoreLine (ny tsipika hanehoana isa):

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

Raha ny teoria dia tsy misy sarotra amin'ity lalao ity, toa ahy ohatra tsara amin'ny lalao fidirana. Ny kaody dia voasoratra ao anaty rakitra iray ary nalamina amin'ny fiasa maromaro. Tsy misy kilasy, tsy misy lova. Ny tenanao dia afaka mahita ny zava-drehetra ao amin'ny kaody loharanon'ny lalao amin'ny alàlan'ny fandehanana any amin'ny tahiry ao amin'ny GitHub.

Lalao 2 Crazy Tanks

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Lalao Crazy Tanks

Ny fanontana litera amin'ny console angamba no zavatra tsotra indrindra azonao avadika ho lalao. Saingy misy olana iray miseho: samy hafa ny haavony sy ny sakany (ny haavony dia lehibe noho ny sakany). Noho izany, ny zava-drehetra dia ho toa tsy mifandanja, ary ny midina na miakatra dia toa haingana kokoa noho ny miankavia na miankavanana. Ity vokatra ity dia tena hita ao amin'ny "Snake" (Lalao 1). Ny "Tanks" (Lalao 2) dia tsy manana lesoka toy izany, satria ny vokatra dia nokarakaraina tamin'ny fandokoana ny pikantsary misy loko samihafa. Azonao atao ny milaza fa nanoratra mpandika teny aho. Marina fa efa somary sarotra kokoa izany, na dia mahaliana kokoa aza.

Ho an'ity lalao ity dia ho ampy ny mamaritra ny rafitrako amin'ny fampisehoana piksel amin'ny efijery. Heveriko fa ity no ampahany lehibe amin'ny lalao. Ary ny zavatra hafa rehetra azonao atao amin'ny tenanao.

Noho izany, ny zavatra hitanao eo amin'ny efijery dia andiana mahitsizoro miloko mihetsika.

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Rectangle napetraka

Ny mahitsizoro tsirairay dia aseho amin'ny matrix feno isa. Amin'ny lafiny iray, afaka manasongadina ny nuance iray mahaliana aho - ny matrices rehetra ao amin'ny lalao dia voarindra ho toy ny array iray misy dimensional. Tsy roa dimension, fa tokana! Mora kokoa sy haingana kokoa ny miara-miasa amin'ny arrays tokana.

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Ohatra iray amin'ny lalao tank matrix

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Misolo tena ny Matrix amin'ny fiara mifono vy miaraka amin'ny Array tokana

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Ohatra iray amin'ny fanoharana bebe kokoa amin'ny fanehoana matrices amin'ny laharan-tarehimarika iray

Fa ny fidirana amin'ireo singa ao amin'ny array dia mitranga amin'ny tadivavarana roa, toy ny hoe tsy iray dimensions, fa array roa dimensional. Vita izany satria mbola miasa amin'ny matrices isika.

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Mamakivaky laharan-tseza tokana amin'ny tadivavarana roa. Y no ID andalana, X no ID tsanganana

Mariho fa raha tokony ho ny famantarana matrix mahazatra i, j, dia mampiasa ny famantarana x sy y aho. Noho izany, toa ahy, mahafinaritra kokoa ny maso sy mazava kokoa ny atidoha. Fanampin'izany, ny fanamarihana toy izany dia ahafahana mamolavola amin'ny fomba mora ny matrices ampiasaina amin'ny famaky mandrindra amin'ny sary roa.

Ankehitriny momba ny piksel, loko ary fampisehoana. Ny fiasa StretchDIBits (Lohateny: windows.h; Tranomboky: gdi32.lib) dia ampiasaina amin'ny famoahana. Anisan'ny zavatra hafa, ity manaraka ity dia ampitaina amin'ity fiasa ity: ny fitaovana izay nanehoana ny sary (raha ny ahy dia ny Windows console), ny fandrindrana ny fanombohana ny sary, ny sakany / ny haavony ary ny sary. ny tenany amin'ny endrika bitmap (bitmap), aseho amin'ny alalan'ny array of bytes. Bitmap ho andiam-bytes!

Ny fiasan'ny StretchDIBits() any am-piasana:

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

Ny fitadidiana dia atokana mialoha ho an'ity bitmap ity amin'ny fampiasana ny fiasa VirtualAlloc(). Izany hoe, ny isan'ny bytes takiana dia natokana hitahirizana ny vaovao momba ny piksel rehetra, izay haseho eo amin'ny efijery.

Mamorona bitmap 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);

Amin'ny ankapobeny, ny bitmap dia misy andiana piksel. Isaky ny efatra bytes ao amin'ny array dia RGB pixel. Iray byte isaky ny sanda mena, iray byte isaky ny sanda maitso (G), ary iray byte isaky ny loko manga (B). Ankoatra izany, misy byte iray isaky ny indent. Ireo loko telo ireo - Mena / Maitso / Manga (RGB) - dia mifangaro amin'ny habeny samihafa - ary azo ny loko pixel.

Ankehitriny, indray, ny mahitsizoro tsirairay, na ny zavatra lalao, dia aseho amin'ny matrix isa. Ireo zavatra lalao rehetra ireo dia napetraka ao anaty fanangonana. Ary avy eo dia apetraka eo amin'ny kianja filalaovana izy ireo, mamorona matrix isa lehibe iray. Nataoko sarintany ny isa tsirairay ao amin'ny matrix ho loko manokana. Ohatra, manga ny isa 8, mavo ny isa 9, volondavenona maizina ny isa 10, sns. Noho izany, afaka milaza isika fa manana matrix ny kianja filalaovana, izay isa tsirairay dia karazana loko.

Noho izany, manana matrix isa ny kianja filalaovana manontolo amin'ny lafiny iray ary bitmap hanehoana ny sary amin'ny lafiny iray. Hatramin'izao, ny bitmap dia "foana" - tsy mbola manana fampahalalana momba ny pixel amin'ny loko irina. Midika izany fa ny dingana farany dia ny famenoana ny bitmap amin'ny fampahalalana momba ny piksel tsirairay mifototra amin'ny matrices nomerika amin'ny kianja filalaovana. Ohatra iray amin'ny fanoharana momba ny fiovana toy izany ny sary etsy ambany.

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Ohatra iray amin'ny famenoana bitmap (Pixel matrix) miaraka amin'ny fampahalalana mifototra amin'ny matrix numerical (Digital matrix) amin'ny kianja filalaovana (tsy mifanaraka amin'ny indices amin'ny lalao ny indices loko)

Hanolotra sombin-kaody tena izy avy amin'ny lalao ihany koa aho. Ny colorIndex miovaova isaky ny famerimberenan'ny tadivavarana dia omena sanda (fanondro-loko) avy amin'ny matrices numerical an'ny kianja filalaovana (mainDigitalMatrix). Avy eo dia soratana amin'ny loko miovaova mifototra amin'ny fanondroana ny loko. Ankoatr'izay, ny loko vokarina dia zaraina amin'ny tahan'ny mena, maitso ary manga (RGB). Ary miaraka amin'ny indent (pixelPadding), ity fampahalalana ity dia soratana amin'ny piksela miverimberina, mamorona sary miloko ao amin'ny bitmap.

Ny kaody dia mampiasa tondro sy asa bitwise, izay mety ho sarotra takarina. Noho izany dia manoro hevitra anao aho hamaky misaraka any amin'ny toerana iray ny fomba fiasan'ny rafitra toy izany.

Famenoana sarintany bitika amin'ny fampahalalana mifototra amin'ny matrices numerical an'ny kianja filalaovana:

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

Araka ny fomba voalaza etsy ambony, sary iray (frame) no miforona ao amin'ny lalao Crazy Tanks ary aseho eo amin'ny efijery amin'ny asa Draw(). Aorian'ny fisoratana anarana amin'ny fanendry fanalahidy ao amin'ny fiasa Input() sy ny fanodinana azy ireo ao amin'ny fonction Logic() dia misy sary (frame) vaovao miforona. Marina fa mety efa manana toerana hafa eo amin'ny kianja filalaovana ny zavatra lalao ary, araka izany, dia voasarika amin'ny toerana hafa. Toy izany no mitranga ny animation (hetsika).

Amin'ny teoria (raha tsy nanadino na inona na inona ianao), ny fahatakarana ny lalao loop amin'ny lalao voalohany ("Snake") sy ny rafitra hanehoana pikantsary eo amin'ny efijery amin'ny lalao faharoa ("Tanks") no hany ilainao hanoratana na inona na inona. amin'ny lalao 2D-nao ho an'ny Windows. Tsy misy feo! 😉 Ny ampahany sisa dia sidina raitra fotsiny.

Mazava ho azy, ny lalao "Tanks" dia natao sarotra kokoa noho ny "Snake". Efa nampiasa ny fiteny C++ aho, izany hoe namaritra zavatra lalao samihafa misy kilasy aho. Namorona ny fanangonako manokana aho - azonao jerena ao amin'ny headers/Box.h ny code. Teny an-dalana, ny famoriam-bola azo inoana fa manana fahatsiarovana leak. Tondro ampiasaina. Niasa tamin'ny fitadidiana. Tsy maintsy milaza aho fa tena nanampy ahy ilay boky. Manomboka C++ amin'ny alalan'ny fandaharana lalao. Ity dia fanombohana tsara ho an'ireo vao manomboka amin'ny C ++. Kely izy io, mahaliana ary voalamina tsara.

Enim-bolana teo ho eo vao namolavola ity lalao ity. Nanoratra indrindra aho nandritra ny sakafo antoandro sy ny tsakitsaky tany am-piasana. Nipetraka tao an-dakozia birao izy, nanitsaka sakafo ary nanoratra code. Na ao an-trano hisakafo. Noho izany dia nahazo "ady an-dakozia" toy izany aho. Toy ny mahazatra, nampiasa kahie aho, ary teraka tao daholo ny zava-drehetra.

Amin'ny faran'ny ampahany azo ampiharina dia hamoaka scan vitsivitsy amin'ny kahieko aho. Mba hampisehoana izay tena nosoratako, nanao sary, manisa, namolavola…

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Famolavolana sary tanky. Ary ny famaritana ny isan'ny piksela tsirairay tanky tokony hipetraka eo amin'ny efijery

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Ny kajy ny algorithm sy ny formulas ho an'ny fihodinan'ny tank manodidina ny axis

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Diagram amin'ny fanangonako (ilay misy fitadidiana mitete, azo inoana fa). Ny fanangonana dia noforonina ho Lisitra mifandray

DevOps C++ sy "ady amin'ny lakozia", ​​na ny fomba nanombohako nanoratra lalao teo am-pisakafoana
Ary ireo dia fikasana tsy misy dikany hanesorana ny faharanitan-tsaina artifisialy amin'ny lalao

-kevitra

"Na dia ny dia an'arivony kilaometatra aza dia manomboka amin'ny dingana voalohany" (Fahendren'ny Sinoa fahiny)

Andao hifindra avy amin'ny fampiharana mankany amin'ny teoria! Ahoana no ahitanao fotoana hanaovana fialamboly?

  1. Farito izay tena tianao (indrisy, ity no sarotra indrindra).
  2. Mametraha laharam-pahamehana.
  3. Ataovy sorona daholo ny "tsy ilaina" ho an'ny laharam-pahamehana ambony.
  4. Mandrosoa mankany amin'ny tanjonao isan'andro.
  5. Aza manantena fa hisy ora roa na telo ny fotoana malalaka ho an'ny fialam-boly.

Amin'ny lafiny iray, mila mamaritra izay tianao ianao ary atao laharam-pahamehana. Amin'ny lafiny iray, azo atao ny miala amin'ny tranga / tetikasa sasany manohana ireo laharam-pahamehana ireo. Raha lazaina amin'ny teny hafa dia tsy maintsy manao sorona ny zava-drehetra ianao "mihoatra noho izany". Reko tany ho any fa eo amin'ny fiainana dia tokony hisy hetsika lehibe telo farafahakeliny. Amin'izay dia ho afaka hiatrika azy ireo amin'ny fomba tsara indrindra ianao. Ary ny tetikasa/torolalana fanampiny dia hanomboka hameno ny corny. Fa izany rehetra izany, angamba, subjective sy ny tsirairay.

Misy fitsipika volamena iray: aza manana andro 0%! Nianatra momba izany aho tao amin'ny lahatsoratra iray nataon'ny mpamorona indie. Raha miasa amin'ny tetikasa ianao dia manaova zavatra momba izany isan'andro. Ary tsy maninona ny vola azonao. Manorata teny iray na andalana iray misy kaody, mijery horonan-tsary fampianarana iray, na asio fantsika iray eo amin'ny solaitrabe—manaova zavatra fotsiny. Ny ampahany sarotra indrindra dia ny manomboka. Raha vao manomboka ianao dia mety hanao zavatra mihoatra noho izay tianao. Noho izany dia hiroso hatrany amin'ny tanjonao ianao ary minoa ahy, haingana dia haingana. Rehefa dinihina tokoa, ny fanemorana ny zava-drehetra.

Ary zava-dehibe ny mahatsiaro fa tsy tokony hohamaivanina sy tsy hiraharaha ny maimaim-poana "sawdust" ny fotoana ao anatin`ny 5, 10, 15 minitra, miandry ny sasany lehibe "logs" maharitra adiny iray na roa. Mijoro milahatra ve ianao? Mieritrereta zavatra ho an'ny tetikasanao. Hiakatra escalator ve ianao? Soraty ao anaty kahie ny zavatra iray. Misakafo ao anaty fiara fitateram-bahoaka ve ianao? Eny, vakio lahatsoratra vitsivitsy. Ampiasao ny fahafahana rehetra. Atsaharo ny fijerena saka sy alika amin'ny YouTube! Aza variana amin'ny ati-doha!

Ary ny farany. Raha, rehefa avy namaky ity lahatsoratra ity ianao dia tia ny hevitra hamorona lalao tsy mampiasa milina lalao, dia tsarovy ny anarana Casey Muratori. Ity lehilahy ity dia manana tranonkala. Ao amin'ny fizarana "watch -> PREVIOUS EPISODES" dia hahita fampianarana video maimaim-poana mahavariana momba ny famoronana lalao matihanina manomboka amin'ny scratch ianao. Azonao atao ny mianatra bebe kokoa amin'ny lesona dimy Intro to C ho an'ny Windows noho ny fianarana dimy taona tany amin'ny oniversite (misy nanoratra momba izany tao amin'ny fanehoan-kevitra eo ambanin'ny horonan-tsary).

Nohazavain'i Casey ihany koa fa amin'ny alàlan'ny famolavolana motera lalao anao manokana dia hanana fahatakarana tsara kokoa momba ny maotera efa misy ianao. Ao amin'ny tontolon'ny frameworks, izay ezahan'ny tsirairay atao ny mandeha ho azy, dia hianatra ny fomba hamoronana ianao fa tsy hampiasa. Fantaro ny tena toetran'ny solosaina. Ary ho lasa programmer marani-tsaina sy matotra kokoa ianao - pro.

Mirary soa amin'ny lalana nofidinao! Ary andao hataontsika matihanina kokoa izao tontolo izao.

Author: Grankin Andrey, DevOps



Source: www.habr.com