DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov

"Kuv paub tias kuv tsis paub dab tsi" Socrates

Rau leej twg: rau IT cov neeg uas tsis quav ntsej txog txhua tus tsim tawm thiab xav ua si lawv cov kev ua si!

Hais txog dab tsi: hais txog yuav ua li cas pib sau ua si hauv C / C ++, yog tias koj xav tau tam sim ntawd!

Vim li cas koj yuav tsum nyeem qhov no: Kev txhim kho daim ntawv thov tsis yog kuv cheeb tsam ntawm kev txawj ntse, tab sis kuv sim code txhua lub lim tiam. Vim kuv nyiam ua si!

Nyob zoo kuv lub npe yog Andrey Grankin, Kuv yog DevOps ntawm Luxoft. Kev txhim kho daim ntawv thov tsis yog kuv qhov tshwj xeeb, tab sis kuv sim code txhua lub lim tiam. Vim kuv nyiam ua si!

Kev lag luam hauv computer gaming yog qhov loj, rumored yuav loj dua li kev lag luam yeeb yaj kiab niaj hnub no. Kev ua si tau sau txij thaum kaj ntug ntawm cov khoos phis tawj, siv, los ntawm cov qauv niaj hnub, txoj kev txhim kho thiab kev txhim kho yooj yim. Nyob rau tib lub sijhawm, cov tshuab ua si nrog cov programmed graphics, physics, thiab suab pib tshwm. Lawv tso cai rau koj tsom mus rau kev tsim cov kev ua si nws tus kheej thiab tsis txhawj txog nws lub hauv paus. Tab sis nrog rau lawv, nrog rau cov cav tov, developers "mus dig muag" thiab degrade. Kev tsim cov kev ua si nws tus kheej yog muab tso rau ntawm txoj siv conveyor. Thiab qhov ntau ntawm cov khoom pib yeej dhau nws qhov zoo.

Nyob rau tib lub sijhawm, thaum ua si lwm tus neeg ua si, peb tsis tu ncua los ntawm qhov chaw, cov phiaj xwm, cov cim, thiab cov tshuab ua si uas lwm tus neeg tuaj nrog. Yog li kuv pom tau tias ...

... lub sij hawm tau los tsim kuv tus kheej lub ntiaj teb, raug rau kuv xwb. Ntiaj teb uas kuv yog Leej Txiv, Leej Tub, thiab tus Vaj Ntsuj Plig Dawb Huv!

Thiab kuv ntseeg siab tias los ntawm kev sau koj tus kheej lub cav ua si thiab ua si ntawm nws, koj yuav tuaj yeem tshem koj nkawm khau, so lub qhov rais thiab txhim kho koj lub tsev, dhau los ua tus kws tshaj lij thiab ua tiav cov programmer.

Hauv tsab xov xwm no kuv yuav sim qhia koj tias kuv pib sau cov kev ua si me me hauv C / C ++, qhov txheej txheem kev loj hlob zoo li cas, thiab qhov twg kuv nrhiav sijhawm rau kev nyiam ua hauv ib puag ncig tsis khoom. Nws yog subjective thiab piav txog tus txheej txheem ntawm ib tug neeg pib. Cov ntaub ntawv hais txog kev tsis paub thiab kev ntseeg, hais txog kuv tus kheej daim duab ntawm lub ntiaj teb tam sim no. Hauv lwm lo lus, "Kev tswj hwm tsis yog lub luag haujlwm rau koj lub hlwb!"

Xyaum ua haujlwm

"Kev paub tsis muaj kev xyaum tsis muaj txiaj ntsig, kev xyaum tsis paub yog qhov txaus ntshai" Confucius

Kuv phau ntawv yog kuv lub neej!


Yog li, hauv kev xyaum, kuv tuaj yeem hais tias rau kuv txhua yam pib nrog lub notepad. Tsis tsuas yog kuv sau kuv cov haujlwm txhua hnub nyob rau ntawd, kuv kuj kos, program, tsim cov kab kos thiab daws teeb meem, suav nrog lej. Ib txwm siv lub notepad thiab sau rau hauv cwj mem xwb. Nws yog huv, yooj yim thiab txhim khu kev qha, IMHO.

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Kuv (twb tau sau nrog) phau ntawv. Nov yog qhov nws zoo li. Nws muaj cov haujlwm txhua hnub, cov tswv yim, kos duab, kos duab, cov kev daws teeb meem, kev sau ntawv dub, cov lej thiab lwm yam

Nyob rau theem no, kuv tau tswj kom ua tiav peb txoj haujlwm (qhov no yog nyob rau hauv kuv txoj kev nkag siab ntawm "ua tiav", vim tias txhua yam khoom tuaj yeem tsim kho tsis tu ncua).

  • Qhov Haujlwm 0: Nov yog 3D Architect Demo scene sau hauv C# siv lub cav sib sau ua si. Rau macOS thiab Windows platforms.
  • Kev ua si 1: console game Simple Snake (paub rau txhua tus neeg li "Snake") rau Windows. Sau hauv C.
  • Kev ua si 2: console game Crazy Tanks (paub rau txhua tus neeg li "Tanks"), sau hauv C ++ (siv cov chav kawm) thiab rau Windows.

Qhov project 0. Architect Demo

  • Platform: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Hais lus: Lus C#
  • Game engine: kev sib sau
  • Kev tshoov siab: Darrin Lile
  • Repository: GitHub

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
3D Scene Architect Demo

Thawj qhov project tau siv tsis yog hauv C / C ++, tab sis hauv C # siv Unity game engine. Lub cav no tsis yog xav tau ntawm kev kho vajtse li Unreal cav, thiab kuj zoo li yooj yim rau nruab thiab siv. Kuv tsis xav txog lwm lub cav.

Kuv lub hom phiaj hauv Unity tsis yog los tsim kev ua si. Kuv xav tsim 3D scene nrog qee tus cwj pwm. Nws, lossis es Nws (Kuv ua qauv rau tus ntxhais uas kuv hlub nrog =) yuav tsum tau txav mus thiab cuam tshuam nrog lub ntiaj teb nyob ib puag ncig nws. Nws tsuas yog ib qho tseem ceeb kom nkag siab tias Unity yog dab tsi, txoj kev txhim kho yog dab tsi thiab yuav tsum tau siv zog npaum li cas los tsim ib yam dab tsi. Qhov no yog li cas Architect Demo project tau yug los (lub npe yuav luag tsim tawm ntawm qhov tsis pom). Programming, modeling, animation, texturing coj kuv zaum ob lub hlis ntawm kev ua haujlwm txhua hnub.

Kuv pib nrog kev qhia yeeb yaj kiab hauv YouTube ntawm kev tsim 3D qauv hauv rab. Blender yog qhov zoo tshaj plaws pub dawb rau 3D qauv (thiab ntau dua) uas tsis tas yuav teeb tsa. Thiab ntawm no muaj kev poob siab tos kuv ... Nws hloov tawm tias kev ua qauv, kev ua yeeb yam, kev sau ntawv yog cov ncauj lus loj loj uas koj tuaj yeem sau cov ntawv. Qhov no muaj tseeb tshwj xeeb rau cov cim. Ua qauv ntiv tes, hniav, qhov muag thiab lwm yam hauv lub cev, koj yuav xav tau kev paub txog lub cev. Cov leeg ntawm lub ntsej muag zoo li cas? Cov neeg tsiv li cas? Kuv yuav tsum tau "ntxig" cov pob txha rau hauv txhua caj npab, ceg, ntiv tes, phalanges ntawm tus ntiv tes!

Ua qauv rau cov pob txha caj dab thiab cov pob txha ntxiv kom ua rau cov animation zoo li ntuj. Tom qab cov lus qhia zoo li no, koj paub ntau npaum li cas cov neeg tsim cov yeeb yaj kiab ua yeeb yaj kiab ua haujlwm tsuas yog tsim 30 vib nas this ntawm video. Tab sis cov yeeb yaj kiab 3D kav ntev li teev! Thiab tom qab ntawd peb tawm hauv cov xinesmas thiab hais ib yam dab tsi zoo li: "Qhov ntawd yog ib qho kev ua yeeb yaj kiab crap! Lawv tuaj yeem ua tau zoo dua ... " ruam!

Thiab ib qho ntxiv txog qhov programming hauv qhov project no. Raws li nws muab tawm, qhov nthuav tshaj plaws rau kuv yog tus lej. Yog tias koj khiav qhov xwm txheej (txuas mus rau qhov chaw khaws cia hauv qhov project piav qhia), koj yuav pom tias lub koob yees duab tig ib ncig ntawm tus ntxhais tus cwj pwm hauv ib puag ncig. Txhawm rau ua qhov kev sib hloov ntawm lub koob yees duab, kuv yuav tsum tau ua ntej xam cov kev sib koom ua ke ntawm txoj hauj lwm taw tes ntawm lub voj voog (2D), thiab tom qab ntawd ntawm tus kheej (3D). Qhov funny yog tias kuv ntxub lej hauv tsev kawm ntawv thiab paub nws nrog C-tus lej. Ib feem, tej zaum, vim hais tias nyob rau hauv tsev kawm ntawv lawv tsuas tsis piav qhia rau koj yuav ua li cas lub ntuj raug txim no lej siv nyob rau hauv lub neej. Tab sis thaum koj obsessed nrog koj lub hom phiaj, koj npau suav, koj lub siab clears thiab opens! Thiab koj pib pom cov haujlwm nyuaj raws li kev lom zem lom zem. Thiab tom qab ntawd koj xav tias: "Zoo, vim li cas koj tus lej * nyiam * tsis tuaj yeem qhia koj ib txwm siv cov qauv no?

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Kev suav cov qauv rau kev xam cov kev sib koom ua ke ntawm qhov taw tes ntawm lub voj voog thiab ntawm tus kheej (los ntawm kuv phau ntawv sau)

Game 1. Simple Nab

  • Platform: Windows (kuaj ntawm Windows 7, 10)
  • Hais lus: Lus Kuv xav tias kuv sau nws hauv C
  • Game engine: Windows console
  • Kev tshoov siab: javidx 9
  • Repository: GitHub

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Simple Snake game

3D scene tsis yog kev ua si. Tsis tas li ntawd, kev ua qauv thiab ua kom pom cov khoom 3D (tshwj xeeb yog cov cim) yog siv sijhawm thiab nyuaj. Tom qab ua si nrog Unity, qhov kev paub tau los rau kuv tias kuv yuav tsum tau mus txuas ntxiv, lossis pib, los ntawm qhov pib. Tej yam yooj yim thiab ceev, tab sis tib lub sij hawm thoob ntiaj teb, kom nkag siab txog cov qauv ntawm kev ua si.

Dab tsi yog qhov yooj yim thiab ceev? Yog lawm, console thiab 2D. Ntau precisely, txawm lub console thiab cov cim. Ib zaug ntxiv kuv mus nrhiav kev tshoov siab hauv Is Taws Nem (feem ntau, kuv xav tias Is Taws Nem yog qhov kev hloov pauv thiab txaus ntshai tshaj plaws ntawm lub xyoo pua XNUMXst). Kuv khawb ib daim vis dis aus ntawm tus programmer uas ua console Tetris. Thiab nyob rau hauv qhov zoo li ntawm nws qhov kev ua si kuv txiav txim siab los ua ib tug "nab". Los ntawm cov yeeb yaj kiab kuv tau kawm txog ob yam tseem ceeb - qhov kev ua si voj (nrog peb lub luag haujlwm / ntu) thiab tso tawm rau qhov tsis.

Lub voj voog game yuav zoo li no:

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

Txoj cai nthuav tawm tag nrho lub ntsiab () ua haujlwm ib zaug. Thiab lub voj voog kev ua si pib tom qab cov lus pom zoo. Muaj peb txoj haujlwm yooj yim hauv lub voj: Input(), Logic(), Draw(). Ua ntej, cov ntaub ntawv tawm tswv yim Input (tsuas yog tswj cov keystrokes), tom qab ntawd ua cov ntaub ntawv nkag Logic, tom qab ntawd tso tawm mus rau qhov screen - Kos. Thiab yog li ntawm txhua tus ncej. Qhov no yog li cas animation yog tsim. Nws zoo li hauv cartoons. Feem ntau, ua cov ntaub ntawv nkag mus yuav siv sij hawm ntau tshaj plaws thiab, raws li kuv paub, txiav txim siab tus nqi ntawm qhov kev ua si. Tab sis ntawm no lub Logic() muaj nuj nqi executes sai heev. Yog li ntawd, koj yuav tsum tswj tus ncej tus nqi siv lub Sleep() muaj nuj nqi nrog lub gameSpeed ​​​​qhov parameter, uas txiav txim siab qhov ceev no.

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Kev ua si voj voog. Programming "nas" nyob rau hauv lub notepad

Yog tias koj tab tom tsim lub cim raws li kev ua si console, koj yuav tsis muaj peev xwm tso tawm cov ntaub ntawv mus rau qhov screen uas siv cov 'cout' cov zis tawm tsis tu ncua - nws qeeb heev. Yog li ntawd, cov zis yuav tsum raug xa mus rau qhov screen tsis. Qhov no yog sai dua thiab qhov kev ua si yuav khiav tsis muaj glitches. Ua ncaj ncees, kuv tsis nkag siab tias qhov screen tsis yog dab tsi thiab nws ua haujlwm li cas. Tab sis kuv yuav muab ib qho piv txwv ntawm no, thiab tej zaum ib tug neeg tuaj yeem piav qhia qhov xwm txheej hauv cov lus.

Tau txais ib qho screen buffer (yog li hais):

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

Direct zaub ntawm qee txoj hlua scoreLine (cov qhab nias cov kab):

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

Hauv txoj kev xav, tsis muaj dab tsi nyuaj hauv qhov kev ua si; ​​Kuv xav tias nws yog qhov piv txwv zoo nkag mus. Cov cai yog sau rau hauv ib cov ntaub ntawv thiab formatted nyob rau hauv ntau lub zog. Tsis muaj chav kawm, tsis muaj qub txeeg qub teg. Koj tuaj yeem pom txhua yam koj tus kheej hauv qhov kev ua si qhov chaws los ntawm kev mus rau qhov chaw cia ntawm GitHub.

Kev ua si 2. Lub tank vwm

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Game Crazy Tanks

Kev luam cov cim rau lub console yog tej zaum qhov yooj yim tshaj plaws uas koj tuaj yeem tig mus rau hauv kev ua si. Tab sis tom qab ntawd ib qho teeb meem tshwm sim: cov cim muaj qhov siab sib txawv thiab qhov dav (qhov siab yog siab dua qhov dav). Ua li no, txhua yam yuav saib tsis sib luag, thiab txav mus los lossis nce yuav tshwm sai dua li txav sab laug lossis sab xis. Cov nyhuv no pom tau zoo heev hauv Snake (Game 1). "Tanks" (Kev Ua Si 2) tsis muaj qhov tsis zoo no, txij li cov khoom tso tawm muaj kev teeb tsa los ntawm kev pleev xim rau lub vijtsam pixels nrog cov xim sib txawv. Koj tuaj yeem hais tias kuv tau sau ib qho renderer. Muaj tseeb, qhov no yog qhov nyuaj me ntsis, txawm tias nthuav ntau dua.

Rau qhov kev ua si no, nws yuav txaus los piav qhia kuv qhov system kom pom cov pixels ntawm qhov screen. Kuv xav tias qhov no yog qhov tseem ceeb ntawm qhov kev ua si. Thiab koj tuaj yeem tuaj nrog txhua yam ntawm koj tus kheej.

Yog li, qhov koj pom ntawm qhov screen tsuas yog ib txheej txav ntau xim duab plaub.

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Teeb ntawm cov duab plaub

Txhua daim duab plaub yog sawv cev los ntawm lub matrix uas muaj cov lej. Los ntawm txoj kev, kuv tuaj yeem hais txog ib qho kev nthuav dav - tag nrho cov matrices nyob rau hauv qhov kev ua si yog programmed li ib-seem array. Tsis yog ob-dimensional, tab sis ib-dimensional! Ib-dimensional arrays yooj yim dua thiab ua haujlwm sai dua.

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Piv txwv ntawm game tank matrix

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Sawv cev ntawm qhov kev ua si tank matrix raws li ib-seem array

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Ib qho piv txwv pom ntau dua ntawm kev sawv cev ntawm lub matrix ua ib qho ntawm ib sab

Tab sis kev nkag mus rau cov ntsiab lus ntawm cov array tshwm sim nyob rau hauv ob lub voj, zoo li nws tsis yog ib qho ntawm ib sab, tab sis ob sab. Qhov no ua tiav vim peb tseem ua haujlwm nrog matrices.

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Traversing ib-dimensional array nyob rau hauv ib lub voj ob. Y - kab identifier, X - kab ntawv txheeb xyuas

Thov nco ntsoov: es tsis txhob siv cov cim matrix li ib txwm kuv, j, kuv siv cov cim x thiab y. Txoj kev no, zoo li kuv, nws zoo dua rau lub qhov muag thiab nkag siab ntau dua rau lub hlwb. Tsis tas li ntawd, qhov kev sau no ua rau nws ua tau yooj yim rau qhov project matrices siv rau hauv kev sib koom ua ke ntawm cov duab ob sab.

Tam sim no hais txog pixels, xim thiab cov zis tso tawm. StretchDIBits muaj nuj nqi yog siv rau cov zis (Header: windows.h; Library: gdi32.lib). Qhov kev ua haujlwm no, ntawm lwm yam, tau txais cov hauv qab no: cov cuab yeej uas cov duab tau tshwm sim (hauv kuv rooj plaub, nws yog Windows console), pib ua haujlwm ntawm cov duab zaub, nws qhov dav / qhov siab, thiab cov duab nws tus kheej hauv qhov daim ntawv ntawm ib tug bitmap, sawv cev los ntawm ib tug array ntawm bytes. Bitmap raws li ib tug byte array!

StretchDIBits() muaj nuj nqi hauv kev nqis tes ua:

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

Nco tau muab faib ua ntej rau daim ntawv qhia no siv VirtualAlloc() muaj nuj nqi. Ntawd yog, tus lej ntawm cov bytes yuav tsum tau khaws tseg los khaws cov ntaub ntawv hais txog txhua pixels, uas yuav tshwm sim tom qab lub vijtsam.

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

Hais lus kwv yees, ib daim ntawv teev lus muaj ib phau ntawm pixels. Txhua plaub bytes hauv array yog RGB pixel. Ib byte rau xim liab tus nqi, ib byte rau ntsuab xim tus nqi (G), thiab ib byte rau xiav xim tus nqi (B). Ntxiv rau muaj ib byte sab laug rau indentation. Peb cov xim no - Liab / Ntsuab / Xiav (RGB) - yog sib xyaw nrog ib leeg sib txawv los tsim cov xim pixel.

Tam sim no, dua, txhua daim duab plaub, lossis cov khoom ua si, yog sawv cev los ntawm tus lej matrix. Tag nrho cov khoom ua si no tau muab tso rau hauv ib phau. Thiab tom qab ntawd lawv tau muab tso rau ntawm qhov chaw ua si, tsim ib qho loj lej matrix. Kuv txuas txhua tus lej hauv matrix nrog ib qho xim tshwj xeeb. Piv txwv li, tus naj npawb 8 sib raug rau xiav, tus lej 9 rau daj, tus lej 10 rau tsaus grey, thiab lwm yam. Yog li, peb tuaj yeem hais tias peb muaj lub matrix ntawm qhov chaw ua si, qhov twg txhua tus lej yog xim.

Yog li, peb muaj tus lej matrix ntawm tag nrho cov chaw ua si ntawm ib sab thiab ib daim ntawv qhia me me rau kev nthuav tawm cov duab ntawm lwm qhov. Txog tam sim no, lub bitmap yog "tsis muaj" - nws tseem tsis tau muaj cov ntaub ntawv hais txog pixels ntawm cov xim uas xav tau. Qhov no txhais tau hais tias cov kauj ruam kawg yuav yog kom populate bitmap nrog cov ntaub ntawv hais txog txhua pixel raws li tus lej matrix ntawm qhov chaw ua si. Ib qho piv txwv meej ntawm xws li kev hloov pauv yog nyob rau hauv daim duab hauv qab no.

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Ib qho piv txwv ntawm kev sau ib lub bitmap (Pixel matrix) nrog cov ntaub ntawv raws li Digital matrix ntawm qhov chaw ua si (xim indices tsis phim cov indices hauv kev ua si)

Kuv kuj tseem yuav nthuav tawm ib daim ntawm code tiag los ntawm qhov kev ua si. Qhov sib txawv colorIndex ntawm txhua iteration ntawm lub voj yog muab tus nqi (xim index) los ntawm cov lej matrix ntawm qhov chaw ua si (mainDigitalMatrix). Cov xim sib txawv yog ces teem rau xim nws tus kheej raws li qhov ntsuas. Cov xim tshwm sim yog muab faib ua qhov sib piv ntawm liab, ntsuab thiab xiav (RGB). Thiab ua ke nrog pixelPadding, cov ntaub ntawv no tau sau rau hauv pixel ntau dua, tsim cov duab xim hauv cov duab bitmap.

Cov cai siv cov pointers thiab kev ua haujlwm me ntsis, uas tuaj yeem nkag siab tsis yooj yim. Yog li kuv qhia koj kom nyeem qhov chaw sib cais li cas cov qauv ua haujlwm.

Sau cov bitmap nrog cov ntaub ntawv raws li tus lej matrix ntawm qhov chaw ua si:

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

Raws li txoj kev tau piav qhia saum toj no, hauv qhov kev ua si Crazy Tanks ib daim duab (thav duab) yog tsim thiab tso tawm rau ntawm qhov screen hauv Draw() muaj nuj nqi. Tom qab sau npe keystrokes nyob rau hauv lub input() muaj nuj nqi thiab lawv cov tom ntej ua nyob rau hauv lub Logic() muaj nuj nqi, ib tug tshiab daim duab (ntev) yog tsim. Muaj tseeb tiag, cov khoom ua si twb muaj qhov sib txawv ntawm qhov chaw ua si thiab, raws li, tau kos rau hauv ib qho chaw sib txawv. Qhov no yog li cas animation (kev txav) tshwm sim.

Hauv txoj kev xav (yog tias kuv tsis tau hnov ​​​​qab dab tsi), nkag siab qhov kev ua si voj los ntawm thawj qhov kev ua si ("Snake") thiab lub kaw lus rau kev tso saib pixels ntawm lub vijtsam los ntawm qhov kev ua si thib ob ("Tsev") yog txhua yam koj xav tau los sau ib qho. ntawm koj 2D games hauv qab Windows. Tsis muaj suab! 😉 Lwm qhov ntawm qhov tsuas yog ya ntawm kev zoo nkauj.

Ntawm chav kawm, qhov kev ua si "Tanks" yog ntau nyuaj tshaj li "Snake". Kuv twb tau siv cov lus C ++, uas yog, kuv tau piav qhia cov khoom sib txawv nrog cov chav kawm. Kuv tsim kuv tus kheej sau - tus lej tuaj yeem pom hauv headers/Box.h. Los ntawm txoj kev, qhov sau feem ntau yuav muaj lub cim xeeb xau. Siv cov taw qhia. Ua haujlwm nrog kev nco. Kuv yuav tsum hais tias phau ntawv pab kuv heev Pib C ++ Los ntawm Kev Ua Si Programming. Qhov no yog qhov pib zoo rau cov pib tshiab hauv C ++. Nws yog me me, nthuav dav thiab txhim kho zoo.

Nws siv li ntawm rau lub hlis los tsim qhov kev ua si no. Kuv sau feem ntau thaum noj su thiab khoom noj txom ncauj tom haujlwm. Nws zaum hauv chav ua noj hauv chav ua noj, tsoo zaub mov thiab sau cov cai. Los yog noj hmo tom tsev. Yog li kuv tau xaus nrog cov "kev ua tsov rog hauv chav ua noj". Raws li ib txwm muaj, kuv nquag siv phau ntawv sau, thiab txhua yam kev xav tau yug los hauv nws.

Txhawm rau ua kom tiav qhov ua tau zoo, Kuv yuav siv ob peb lub scans ntawm kuv phau ntawv sau. Qhia qhov tseeb kuv sau, kos, suav, tsim ...

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Tsim cov duab ntawm lub tank. Thiab txiav txim siab pes tsawg pixels txhua lub tank yuav tsum nyob ntawm qhov screen

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Kev suav cov algorithm thiab cov qauv rau kev sib hloov ntawm lub tank nyob ib ncig ntawm nws axis

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Scheme ntawm kuv sau (ib qho uas muaj lub cim xeeb xau, feem ntau yuav). Kev sau yog tsim raws li Linked List hom

DevOps C ++ thiab "kev ua tsov ua rog hauv chav ua noj", lossis Kuv pib sau ua si li cas thaum noj mov
Thiab cov no yog futile sim mus txuas cov txawj ntse txawj ntse rau qhov kev ua si

Txoj kev xav

"Txawm tias kev taug kev ntawm ib txhiab mais pib nrog thawj kauj ruam" (Ancient Suav kev txawj ntse)

Cia peb txav los ntawm kev xyaum mus rau txoj kev xav! Yuav nrhiav sijhawm li cas rau koj txoj haujlwm nyiam?

  1. Txiav txim siab qhov koj xav tau tiag tiag (alas, qhov no yog qhov nyuaj tshaj plaws).
  2. Teeb qhov tseem ceeb.
  3. Txuag txhua yam "ntxiv" rau lub hom phiaj ntawm qhov tseem ceeb dua.
  4. Txav mus rau lub hom phiaj txhua hnub.
  5. Tsis txhob cia siab tias ob lossis peb teev sijhawm dawb los siv rau kev nyiam ua haujlwm.

Ntawm qhov tod tes, koj yuav tsum txiav txim siab yam koj xav tau thiab ua qhov tseem ceeb. Ntawm qhov tod tes, nws muaj peev xwm tso tseg qee yam kev ua ub no / tej yaam num hauv kev pom zoo ntawm qhov tseem ceeb no. Hauv lwm lo lus, koj yuav tau txi txhua yam "ntxiv". Kuv hnov ​​​​qhov chaw uas yuav tsum muaj qhov siab tshaj plaws ntawm peb yam tseem ceeb hauv lub neej. Tom qab ntawd koj yuav ua tau lawv ntawm qhov zoo tshaj plaws. Thiab cov phiaj xwm ntxiv / kev taw qhia yuav yooj yim pib overload. Tab sis qhov no yog tag nrho tej zaum subjective thiab tus kheej.

Muaj ib txoj cai golden: yeej tsis muaj 0% hnub! Kuv kawm txog nws hauv ib tsab xov xwm los ntawm tus tsim tawm indie. Yog tias koj ua haujlwm ntawm ib qhov project, ua ib yam dab tsi txog nws txhua hnub. Thiab nws tsis muaj teeb meem npaum li cas koj ua. Sau ib lo lus lossis ib kab ntawm txoj cai, saib ib qho kev qhia video lossis rauj rau ib tus ntsia hlau rau hauv lub rooj tsavxwm - tsuas yog ua qee yam. Qhov nyuaj tshaj plaws yog pib. Thaum koj pib, koj yuav zaum kawg ua me ntsis ntau tshaj qhov koj xav tau. Txoj kev no koj yuav mus tas li mus rau koj lub hom phiaj thiab, ntseeg kuv, sai heev. Tom qab tag nrho, lub ntsiab obstacle rau txhua yam yog procrastination.

Thiab nws yog ib qho tseem ceeb uas yuav tsum nco ntsoov tias koj yuav tsum tsis txhob kwv yees thiab tsis quav ntsej qhov dawb "sawdust" ntawm lub sijhawm 5, 10, 15 feeb, tos rau qee qhov "logs" loj ntev ib teev lossis ob. Puas yog koj sawv hauv kab? Xav txog ib yam dab tsi rau koj qhov project. Siv lub escalator? Sau ib yam dab tsi rau hauv ib lub notepad. Koj puas tau caij tsheb npav? Zoo heev, nyeem ib co lus. Coj kom zoo dua txhua lub sijhawm. Txhob saib miv thiab dev hauv YouTube! Tsis txhob ua phem rau koj lub hlwb!

Thiab ib qho kawg. Yog tias, tom qab nyeem tsab xov xwm no, koj nyiam lub tswv yim ntawm kev tsim kev ua si yam tsis siv lub tshuab ua si, ces nco ntsoov lub npe Casey Muratori. Tus txiv neej no muaj lub website. Hauv seem "saib -> THOV VAJTSWV" ntu koj yuav pom cov yeeb yaj kiab dawb zoo tshaj plaws ntawm kev tsim kev ua si tshaj lij los ntawm kos. Hauv tsib Intro rau C rau Windows zaj lus qhia koj yuav zaum kawm ntau dua li tsib xyoos ntawm kev kawm hauv tsev kawm qib siab (ib tus neeg sau txog qhov no hauv cov lus hauv qab video).

Casey kuj piav qhia tias los ntawm kev tsim koj tus kheej lub cav ua si, koj yuav muaj kev nkag siab zoo ntawm txhua lub cav uas twb muaj lawm. Nyob rau hauv lub ntiaj teb ntawm lub moj khaum uas txhua leej txhua tus tab tom sim automate, koj kawm tsim es tsis siv. Koj nkag siab qhov xwm txheej ntawm computers. Thiab koj tseem yuav dhau los ua tus neeg txawj ntse thiab paub tab ntau dua programmer - tus tshaj lij.

Hmoov zoo ntawm koj txoj kev xaiv! Thiab cia peb ua kom lub ntiaj teb no muaj kev tshaj lij.

Author: Grankin Andrey, DevOps



Tau qhov twg los: www.hab.com