DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði

"Ég veit að ég veit ekkert" Sókrates

Fyrir hvern: fyrir upplýsingatæknifólk sem hrækir á alla þróunaraðilana og vill spila leikina sína!

Um hvað: hvernig á að byrja að skrifa leiki í C/C++ ef þú þarft það!

Af hverju ættirðu að lesa þetta: Forritaþróun er ekki mín vinnugrein, en ég reyni að kóða í hverri viku. Vegna þess að ég elska leiki!

Halló ég heiti Andrey Grankin, Ég er DevOps hjá Luxoft. Forritaþróun er ekki mín starfsgrein, en ég reyni að kóða í hverri viku. Vegna þess að ég elska leiki!

Tölvuleikjaiðnaðurinn er risastór, jafnvel meira orðrómur í dag en kvikmyndaiðnaðurinn. Leikir hafa verið skrifaðir frá upphafi þróunar tölva með því að nota, miðað við nútíma staðla, flóknar og grunnþróunaraðferðir. Með tímanum fóru leikjavélar að birtast með þegar forritaðri grafík, eðlisfræði og hljóði. Þeir leyfa þér að einbeita þér að þróun leiksins sjálfs og ekki skipta þér af grunni hans. En ásamt þeim, með vélunum, „blinda“ þróunaraðilarnir og rýrna. Sjálf framleiðsla leikja er sett á færibandið. Og framleiðslumagnið fer að ráða yfir gæðum hennar.

Á sama tíma, þegar við spilum leiki annarra, erum við stöðugt takmörkuð af staðsetningum, söguþræði, persónum, leikjafræði sem aðrir komust upp með. Svo ég áttaði mig á því að...

… það er kominn tími til að búa til þína eigin heima, aðeins háð mér. Heimir þar sem ég er faðirinn og sonurinn og heilagur andi!

Og ég trúi því í einlægni að með því að skrifa þína eigin leikjavél og leik á hana muntu geta opnað augun, þurrkað um gluggana og dælt í farþegarýmið þitt og orðið reyndari og samþættari forritari.

Í þessari grein mun ég reyna að segja þér hvernig ég byrjaði að skrifa litla leiki í C / C ++, hvað er þróunarferlið og hvar ég finn tíma fyrir áhugamál í annasömu umhverfi. Það er huglægt og lýsir ferli einstaklingsbyrjunar. Efni um fáfræði og trú, um persónulega mynd mína af heiminum í augnablikinu. Með öðrum orðum, "Stjórnin ber ekki ábyrgð á persónulegum heilum þínum!".

Practice

"Þekking án æfingu er gagnslaus, æfing án þekkingar er hættuleg." Konfúsíus

Minnisbókin mín er líf mitt!


Svo í reynd get ég sagt að allt fyrir mig byrjar á minnisbók. Þar skrifa ég ekki bara daglegu verkefnin mín, heldur teikna, forrita, hanna flæðirit og leysa vandamál, þar á meðal stærðfræðileg. Notaðu alltaf skrifblokk og skrifaðu aðeins með blýanti. Það er hreint, þægilegt og áreiðanlegt, IMHO.

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Minnisbókin mín (þegar fyllt). Svona lítur þetta út. Það inniheldur hversdagsleg verkefni, hugmyndir, teikningar, skýringarmyndir, lausnir, svart bókhald, kóða og svo framvegis.

Á þessu stigi tókst mér að klára þrjú verkefni (þetta er í mínum skilningi á „endanleika“, því það er hægt að þróa hvaða vöru sem er tiltölulega endalaust).

  • Verkefni 0: þetta er Architect Demo 3D sena skrifuð í C# með Unity leikjavélinni. Fyrir macOS og Windows palla.
  • Leikur 1: leikjatölvuleikur Simple Snake (þekktur öllum sem "Snake") fyrir Windows. skrifað í C.
  • Leikur 2: leikjatölvuleikur Crazy Tanks (sem allir þekkja sem "Tanks"), þegar skrifaður í C ​​++ (með því að nota flokka) og einnig undir Windows.

Verkefni 0 Arkitekt Demo

  • Platform: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Tungumál: C#
  • Leikjavél: Unity
  • Innblástur: Darrin Lile
  • Geymsla: GitHub

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
3D Scene Architect Demo

Fyrsta verkefnið var ekki útfært í C/C++ heldur í C# með Unity leikjavélinni. Þessi vél var ekki eins krefjandi fyrir vélbúnað og Unreal Engine, og fannst mér líka auðveldara að setja upp og nota. Ég tók ekki aðrar vélar til greina.

Markmiðið í Unity fyrir mig var ekki að þróa einhvers konar leik. Mig langaði að búa til þrívíddarsenu með einhvers konar karakter. Hann, eða réttara sagt hún (ég var fyrirmynd stelpan sem ég var ástfangin af =) þurfti að hreyfa sig og hafa samskipti við umheiminn. Það var aðeins mikilvægt að skilja hvað Unity er, hvert þróunarferlið er og hversu mikla áreynslu það tekur að búa til eitthvað. Svona fæddist Architect Demo verkefnið (nafnið var fundið upp nánast upp úr kjaftæðinu). Forritun, líkanagerð, hreyfimyndir, áferð tók mig líklega tvo mánuði af daglegri vinnu.

Ég byrjaði með kennslumyndbönd á YouTube um hvernig á að búa til þrívíddarlíkön í blender. Blender er frábært ókeypis tól fyrir þrívíddarlíkön (og fleira) sem þarfnast ekki uppsetningar. Og hér beið mín áfall ... Það kemur í ljós að líkan, hreyfimyndir, áferð eru gríðarstór aðskilin efni sem þú getur skrifað bækur um. Þetta á sérstaklega við um persónurnar. Til að móta fingur, tennur, augu og aðra líkamshluta þarftu þekkingu á líffærafræði. Hvernig er andlitsvöðvum raðað? Hvernig hreyfir fólk sig? Ég þurfti að „setja“ bein í hvorn handlegg, fót, fingur, hnúa!

Gerðu líkan af liðbeininu, auka beinstangir, svo að hreyfimyndin líti náttúrulega út. Eftir slíkar kennslustundir áttarðu þig á því hvað höfundar teiknimynda vinna gríðarlega mikið, bara til að búa til 30 sekúndur af myndbandi. En þrívíddarmyndir endast í marga klukkutíma! Og svo komum við út úr kvikmyndahúsunum og segjum eitthvað eins og: „Ta, skíthrædd teiknimynd/mynd! Þeir hefðu getað gert betur...“ Fífl!

Og eitt enn um forritun í þessu verkefni. Það kom í ljós að áhugaverðasti hlutinn fyrir mig var stærðfræðiþátturinn. Ef þú keyrir atriðið (tengill á geymsluna í verkefnislýsingunni) muntu taka eftir því að myndavélin snýst um stelpupersónuna í kúlu. Til að forrita slíkan snúning myndavélarinnar þurfti ég fyrst að reikna út hnit staðsetningarpunktsins á hringnum (2D) og síðan á kúlu (3D). Það fyndna er að ég hataði stærðfræði í skólanum og kunni hana með mínus. Að hluta, líklega, vegna þess að í skólanum útskýra þeir einfaldlega ekki fyrir þér hvernig í fjandanum þessari stærðfræði er beitt í lífinu. En þegar þú ert heltekinn af markmiði þínu, draumi, þá er hugurinn hreinsaður, opinberaður! Og þú byrjar að skynja flókin verkefni sem spennandi ævintýri. Og þá hugsarðu: "Jæja, hvers vegna gat *ástkær* stærðfræðingur venjulega ekki sagt hvar þessar formúlur er hægt að halla sér?".

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Útreikningur á formúlum til að reikna út hnit punkts á hring og á kúlu (úr minnisbókinni minni)

Leikur 1

  • Platform: Windows (prófað á Windows 7, 10)
  • Tungumál: Ég held að það hafi verið skrifað á hreinu C
  • Leikjavél: Windows leikjatölva
  • Innblástur: javidx9
  • Geymsla: GitHub

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Einfaldur Snake leikur

Þrívíddarsenan er ekki leikur. Að auki er líkan og hreyfimyndir í þrívíddarhlutum (sérstaklega persónum) langt og erfitt. Eftir að hafa verið að leika mér með Unity áttaði ég mig á því að ég yrði að halda áfram, eða réttara sagt, byrja á grunnatriðum. Eitthvað einfalt og fljótlegt, en á sama tíma alþjóðlegt, til að skilja sjálfa uppbyggingu leikja.

Og hvað höfum við einfalt og fljótlegt? Það er rétt, hugga og 2D. Nánar tiltekið, jafnvel stjórnborðið og táknin. Aftur fór ég að leita að innblæstri á netinu (almennt séð tel ég internetið byltingarkenndastu og hættulegustu uppfinningu XNUMX. aldarinnar). Ég gróf upp myndband af einum forritara sem bjó til leikjatölvu Tetris. Og í líkingu við leik hans ákvað hann að höggva niður "snákinn". Af myndbandinu lærði ég um tvennt grundvallaratriði - leiklykkjuna (með þremur grunnaðgerðum / hlutum) og úttakið í biðminni.

Leikjalykkjan gæti litið svona út:

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

Kóðinn sýnir alla aðal() aðgerðina í einu. Og leikjalotan hefst eftir samsvarandi athugasemd. Það eru þrjár grunnaðgerðir í lykkjunni: Input(), Logic(), Draw(). Fyrst skaltu setja inn gögn Inntak (aðallega stjórn á ásláttum), síðan vinna innslögð gögn Logic, þá birta á skjánum - Draw. Og svo hver rammi. Hreyfimynd er búin til á þennan hátt. Þetta er eins og teiknimyndir. Venjulega tekur vinnsla inntaksgagna mestan tíma og ræður, eftir því sem ég best veit, rammahraða leiksins. En hér er Logic() aðgerðin mjög hröð. Þess vegna verður rammahraðanum að vera stjórnað af Sleep() aðgerðinni með gameSpeed ​​​​færibreytunni, sem ákvarðar þennan hraða.

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
leikjalotu. Snake forritun í skrifblokk

Ef þú ert að þróa táknrænan leikjatölvuleik mun það ekki virka að birta gögn á skjánum með því að nota venjulega straumúttakið 'cout' - það er mjög hægt. Þess vegna verður úttakið að fara fram í biðminni á skjánum. Svo miklu hraðar og leikurinn mun virka án galla. Satt að segja skil ég ekki alveg hvað skjábuffi er og hvernig hann virkar. En ég mun gefa kóðadæmi hér, og kannski getur einhver í athugasemdunum skýrt stöðuna.

Að fá skjábuffið (ef ég má segja það):

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

Bein úttak á skjá ákveðinnar línuskoraLínu (línan til að sýna stig):

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

Fræðilega séð er ekkert flókið í þessum leik, mér sýnist hann vera gott dæmi um inngangsleik. Kóðinn er skrifaður í eina skrá og raðað í nokkrar aðgerðir. Engir flokkar, engin arfleifð. Þú getur sjálfur séð allt í frumkóða leiksins með því að fara í geymsluna á GitHub.

Leikur 2 Crazy Tanks

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Crazy Tanks leikur

Að prenta stafi á leikjatölvuna er líklega það einfaldasta sem þú getur breytt í leik. En svo kemur eitt vandamál: persónurnar hafa mismunandi hæð og breidd (hæðin er meiri en breiddin). Þannig mun allt líta út fyrir að vera óhóflegt og að færa sig niður eða upp virðist mun hraðari en að færa sig til vinstri eða hægri. Þessi áhrif eru mjög áberandi í "Snake" (leik 1). „Tankar“ (leikur 2) hafa ekki slíkan galla, þar sem framleiðslan þar er skipulögð með því að mála skjápunktana með mismunandi litum. Það má segja að ég hafi skrifað renderer. Að vísu er þetta nú þegar aðeins flóknara, þó miklu áhugaverðara.

Fyrir þennan leik mun það vera nóg að lýsa kerfinu mínu til að sýna pixla á skjánum. Ég held að þetta sé aðalhlutinn í leiknum. Og allt annað sem þú getur fundið upp sjálfur.

Svo, það sem þú sérð á skjánum er bara sett af lituðum rétthyrningum á hreyfingu.

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Rétthyrningur sett

Hver rétthyrningur er táknaður með fylki fyllt með tölum. Við the vegur get ég bent á einn áhugaverðan blæbrigði - öll fylkin í leiknum eru forrituð sem einvídd fylki. Ekki tvívídd, heldur einvídd! Einvíddar fylki er miklu auðveldara og fljótlegra að vinna með.

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Dæmi um game tank fylki

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Sýnir fylki leiktanks með einvíddar fylki

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Meira lýsandi dæmi um fylkisframsetningu með einvíddar fylki

En aðgangur að þáttum fylkisins á sér stað í tvöfaldri lykkju, eins og það væri ekki einvídd, heldur tvívíð fylki. Þetta er gert vegna þess að við erum enn að vinna með fylki.

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Farið yfir einvíddar fylki í tvöfaldri lykkju. Y er auðkenni röð, X er auðkenni dálks

Vinsamlegast athugaðu að í stað venjulegra fylkisauðkenna i, j nota ég auðkennin x og y. Þannig að mér sýnist það vera meira ánægjulegt fyrir augað og skýrara fyrir heilann. Að auki gerir slík nótnaskrift mögulegt að varpa fylkjunum sem notuð eru á þægilegan hátt á hnitaása tvívíddar myndar.

Nú um pixla, lit og skjá. StretchDIBits aðgerðin (Header: windows.h; Library: gdi32.lib) er notuð fyrir úttak. Meðal annars færist eftirfarandi í þessa aðgerð: tækið sem myndin er sýnd á (í mínu tilfelli er þetta Windows stjórnborðið), hnit upphafs að birta myndina, breidd/hæð hennar og myndin sjálft í formi punktamynd (bitmap), táknað með fylki bæta. Bitmap sem fylki af bætum!

StretchDIBits() aðgerðin í vinnunni:

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

Minni er úthlutað fyrirfram fyrir þetta bitamynd með því að nota VirtualAlloc() aðgerðina. Það er, nauðsynlegur fjöldi bæta er frátekinn til að geyma upplýsingar um alla pixla, sem munu síðan birtast á skjánum.

Að búa til 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);

Í grófum dráttum samanstendur bitamynd af setti pixla. Fjögurra bæti í fylkinu eru RGB pixlar. Eitt bæti fyrir hvert rautt gildi, eitt bæti fyrir hvert grænt gildi (G) og eitt bæti fyrir hvern bláan lit (B). Auk þess er eitt bæti fyrir hvert inndrátt. Þessir þrír litir - Rauður / Grænn / Blár (RGB) - er blandað saman í mismunandi hlutföllum - og pixlaliturinn sem myndast fæst.

Nú, aftur, hver rétthyrningur, eða leikhlutur, er táknaður með talnafylki. Allir þessir leikhlutir eru settir í safn. Og svo eru þeir settir á leikvöllinn og mynda eitt stórt tölufylki. Ég kortlagði hverja tölu í fylkinu í ákveðinn lit. Til dæmis er talan 8 blá, talan 9 er gul, talan 10 er dökkgrá og svo framvegis. Þannig getum við sagt að við höfum fylki leikvallarins, þar sem hver tala er einhvers konar litur.

Þannig að við erum með tölulegt fylki yfir allan leikvöllinn annars vegar og bitmap til að sýna myndina hins vegar. Enn sem komið er er bitmapið „tómt“ - það hefur ekki enn upplýsingar um pixla af viðkomandi lit. Þetta þýðir að síðasta skrefið verður að fylla bitamyndina af upplýsingum um hvern pixla sem byggir á tölulegu fylki leikvallarins. Lýsandi dæmi um slíka umbreytingu er á myndinni hér að neðan.

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Dæmi um að fylla punktamynd (Pixel matrix) með upplýsingum sem byggjast á tölulegu fylki (Digital matrix) leikvallarins (litavísitölur passa ekki við vísitölurnar í leiknum)

Ég mun einnig kynna stykki af alvöru kóða úr leiknum. Breyta litavísitalan í hverri endurtekningu lykkjunnar er úthlutað gildi (litavísitala) úr tölulegu fylki leikvallarins (mainDigitalMatrix). Þá er liturinn sjálfur skrifaður í litabreytuna miðað við vísitöluna. Ennfremur er litnum sem myndast skipt í hlutfallið af rauðum, grænum og bláum (RGB). Og ásamt inndrættinum (pixelPadding) eru þessar upplýsingar skrifaðar á pixlann aftur og aftur og mynda litamynd í bitmapinu.

Kóðinn notar ábendingar og bitaaðgerðir, sem getur verið erfitt að skilja. Svo ég ráðlegg þér að lesa sérstaklega einhvers staðar hvernig slík mannvirki virka.

Að fylla punktamynd með upplýsingum sem byggjast á tölulegu fylki leikvallarins:

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

Samkvæmt aðferðinni sem lýst er hér að ofan myndast ein mynd (rammi) í Crazy Tanks leiknum og birtist á skjánum í Draw() fallinu. Eftir að hafa skráð áslög í Input() fallinu og síðari vinnslu þeirra í Logic() fallinu myndast ný mynd (rammi). Að vísu geta leikhlutir þegar verið í annarri stöðu á leikvellinum og eru því dregnir á annan stað. Svona gerist fjör (hreyfing).

Í orði (ef þú hefur ekki gleymt neinu), þá er allt sem þú þarft til að skilja leikjalykkjuna frá fyrsta leiknum ("Snake") og kerfið til að sýna pixla á skjánum frá seinni leiknum ("Tanks"). af 2D leikjunum þínum fyrir Windows. Hljóðlaust! 😉 Restin af hlutunum er bara ímynd.

Auðvitað er leikurinn "Tanks" hannaður miklu flóknari en "Snake". Ég notaði þegar C++ tungumálið, það er, ég lýsti mismunandi leikhlutum með flokkum. Ég bjó til mitt eigið safn - þú getur séð kóðann í hausum/Box.h. Við the vegur, safnið er líklegast með minnisleka. Notaðir vísbendingar. Unnið með minni. Ég verð að segja að bókin hjálpaði mér mikið. Byrjar C++ í gegnum leikjaforritun. Þetta er frábær byrjun fyrir byrjendur í C++. Það er lítið, áhugavert og vel skipulagt.

Það tók um sex mánuði að þróa þennan leik. Ég skrifaði aðallega í hádeginu og í nesti í vinnunni. Hann sat í eldhúsinu á skrifstofunni, stappaði í matinn og skrifaði kóða. Eða heima í kvöldmat. Svo fékk ég svona "eldhússtríð". Eins og alltaf notaði ég glósubók virkan og allir hugmyndafræðilegir hlutir fæddust í henni.

Í lok verklega hlutans mun ég draga fram nokkrar skannar af minnisbókinni minni. Til að sýna hvað ég var nákvæmlega að skrifa niður, teikna, telja, hanna...

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Tankmyndahönnun. Og skilgreiningin á því hversu marga punkta hver tankur ætti að taka á skjánum

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Útreikningur á reiknirit og formúlur fyrir snúning tanksins um ás hans

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Skýringarmynd af safninu mínu (sá með minnisleka, líklegast). Safnið er búið til sem tengdur listi

DevOps C++ og "kitchen wars", eða hvernig ég byrjaði að skrifa leiki á meðan ég borðaði
Og þetta eru tilgangslausar tilraunir til að skrúfa gervigreind inn í leikinn

Теория

„Jafnvel þúsund mílna ferð hefst með fyrsta skrefinu“ (Forn kínversk speki)

Við skulum fara frá praktík til kenninga! Hvernig finnurðu tíma fyrir áhugamálið þitt?

  1. Ákveða hvað þú vilt raunverulega (því miður, þetta er erfiðast).
  2. Settu forgangsröðun.
  3. Fórnaðu öllu "óþarfa" í þágu meiri forgangs.
  4. Farðu í átt að markmiðum þínum á hverjum degi.
  5. Ekki búast við því að það verði tveir eða þrír tímar af frítíma fyrir áhugamál.

Annars vegar þarftu að ákveða hvað þú vilt og forgangsraða. Á hinn bóginn er hægt að falla frá sumum málum / verkefnum í þágu þessara forgangsröðunar. Með öðrum orðum, þú verður að fórna öllu "óþarfa". Einhvers staðar heyrði ég að í lífinu ættu að vera að hámarki þrjár aðalathafnir. Þá muntu geta brugðist við þeim á besta mögulega hátt. Og fleiri verkefni / leiðbeiningar munu byrja að ofhlaða corny. En þetta er allt, líklega, huglægt og einstaklingsbundið.

Það er ákveðin gullin regla: hafðu aldrei 0% dag! Ég lærði um það í grein eftir indie forritara. Ef þú ert að vinna að verkefni, gerðu þá eitthvað í því á hverjum degi. Og það skiptir ekki máli hversu mikið þú græðir. Skrifaðu eitt orð eða eina línu af kóða, horfðu á eitt kennslumyndband eða sláðu einum nagla í töfluna - gerðu bara eitthvað. Erfiðast er að byrja. Þegar þú byrjar, muntu líklega gera aðeins meira en þú vildir. Þannig að þú munt stöðugt fara í átt að markmiði þínu og trúðu mér mjög fljótt. Enda er aðalbremsan á öllum hlutum frestun.

Og það er mikilvægt að muna að þú ættir ekki að vanmeta og hunsa ókeypis „sag“ tímans á 5, 10, 15 mínútum, bíddu eftir stórum „loggum“ sem endast í klukkutíma eða tvo. Stendur þú í röð? Hugsaðu um eitthvað fyrir verkefnið þitt. Ertu að fara upp rúllustiga? Skrifaðu eitthvað niður í minnisbók. Borðarðu í strætó? Allt í lagi, lestu einhverja grein. Notaðu hvert tækifæri. Hættu að horfa á ketti og hunda á YouTube! Ekki skipta þér af heilanum!

Og það síðasta. Ef, eftir að hafa lesið þessa grein, líkaði þér hugmyndin um að búa til leiki án þess að nota leikjavélar, mundu þá nafnið Casey Muratori. Þessi gaur hefur сайт. Í hlutanum „horfa -> FYRIR ÞÁTTAR“ finnurðu ótrúleg ókeypis kennslumyndbönd um hvernig á að búa til atvinnuleik frá grunni. Þú gætir lært meira í fimm Intro to C for Windows kennslustundum en í fimm ára námi við háskólann (einhver skrifaði um þetta í athugasemdum undir myndbandinu).

Casey útskýrir einnig að með því að þróa þína eigin leikjavél muntu hafa betri skilning á núverandi vélum. Í heimi ramma, þar sem allir eru að reyna að gera sjálfvirkan, munt þú læra hvernig á að búa til, ekki nota. Skilja eðli tölva. Og þú munt líka verða miklu gáfaðri og þroskaðri forritari - atvinnumaður.

Gangi þér vel á valinni leið! Og gerum heiminn fagmannlegri.

Höfundur: Grankin Andrey, DevOps



Heimild: www.habr.com