DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja

"Sò chì ùn sò nunda" Socrates

Per quale: per e persone IT chì sputanu nantu à tutti i sviluppatori è volenu ghjucà i so ghjochi!

À ciò chì: cumu cumincià à scrive ghjochi in C/C++ se ne avete bisognu!

Perchè duvete leghje questu: U sviluppu di l'app ùn hè micca a mo specialità di travagliu, ma pruvate à codificà ogni settimana. Perchè mi piace i ghjochi!

Salutu u mo nome hè Andrey Grankin, Sò un DevOps à Luxoft. U sviluppu di l'applicazioni ùn hè micca a mo specialità di travagliu, ma pruvate à codificà ogni settimana. Perchè mi piace i ghjochi!

L'industria di i ghjochi di computer hè enormu, ancu più rumore oghje chì l'industria cinematografica. I ghjochi sò stati scritti da u principiu di u sviluppu di l'urdinatori, utilizendu, da i normi muderni, metudi di sviluppu cumplessi è basi. À u tempu, i mutori di ghjocu cuminciaru à apparisce cù gràfiche, fisica è sonu digià programate. Permettenu di fucalizza nantu à u sviluppu di u ghjocu stessu è ùn preoccupa micca di a so fundazione. Ma cun elli, cù i mutori, i sviluppatori "vannu cecu" è degradanu. A pruduzzione stessa di ghjochi hè messu nantu à u trasportatore. È a quantità di pruduzzione cumencia à prevale nantu à a so qualità.

À u listessu tempu, quandu si ghjucanu à i ghjoculi di l'altri, simu constantemente limitati da i lochi, a trama, i caratteri, a meccanica di ghjocu chì l'altri persone anu ghjuntu. Allora aghju capitu chì ...

... hè ora di creà i vostri mondi, sottumessi solu à mè. Mondi induve sò u Patre, è u Figliolu, è u Spìritu Santu!

E crede sinceramente chì scrivendu u vostru propiu mutore di ghjocu è un ghjocu nantu à questu, puderà apre l'ochji, sguassate i finestri è pompà a vostra cabina, diventendu un programatore più sperimentatu è integrale.

In questu articulu pruvaraghju à dì cumu aghju cuminciatu à scrive i picculi ghjochi in C / C ++, quale hè u prucessu di sviluppu è induve truvà tempu per un hobby in un ambiente occupatu. Hè subjectivu è descrive u prucessu di un principiu individuale. Materiale nantu à ignuranza è a fede, nantu à a mo stampa persunale di u mondu in u mumentu. In altre parolle, "L'amministrazione ùn hè micca rispunsevuli di u vostru cervellu persunale!".

Prutizzioni

"A cunniscenza senza pratica hè inutile, a pratica senza cunniscenza hè periculosa." Confucius

U mo quaderno hè a mo vita !


Allora, in pratica, possu dì chì tuttu per mè principia cù un notebook. Scrivu micca solu i mo compiti di ogni ghjornu, ma ancu disegnà, prugramma, cuncepisce diagrammi di flussu è risolve i prublemi, cumpresi quelli matematichi. Aduprate sempre un bloccu note è scrivite solu cù un lapis. Hè pulitu, còmode è affidabile, IMHO.

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
U mo librettu (dighjà pienu). Questu hè cumu si vede. Contene i travaglii di ogni ghjornu, idee, disegni, diagrammi, suluzioni, cuntabilità nera, codice, etc.

À questu stadiu, aghju sappiutu per cumpiendu trè prughjetti (questu hè in u mo capitu di "finalità", perchè ogni pruduttu pò esse sviluppatu relativamente interminable).

  • Prughjettu 0: Questa hè una scena 3D di Demo Architecture scritta in C # cù u mutore di ghjocu Unity. Per piattaforme macOS è Windows.
  • Ghjocu 1: ghjocu di cunsola Simple Snake (cunnisciutu da tutti cum'è "Snake") per Windows. scrittu in C.
  • Ghjocu 2: ghjocu di cunsola Crazy Tanks (cunnisciutu da tutti cum'è "Tanks"), digià scrittu in C ++ (usendu classi) è ancu sottu Windows.

Prughjettu 0 Architect Demo

  • Piattaforma: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Язык: C#
  • Mutore di ghjocu: unitati
  • Ispirazioni: Darrin Lile
  • Repository: GitHub

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Demo di l'architettu di scena 3D

U primu prughjettu hè statu implementatu micca in C / C ++, ma in C # cù u mutore di ghjocu Unity. Stu mutore ùn era micca cusì esigente in hardware cum'è Unreal Engine, è mi pareva ancu più faciule d'installà è di utilizà. Ùn aghju micca cunsideratu altri motori.

U scopu in Unità per mè ùn era micca di sviluppà un tipu di ghjocu. Vuliu creà una scena 3D cù un tipu di caratteru. Ellu, o piuttostu Idda (aghju modellatu a zitella chì era in amore =) avia da spustà è interagisce cù u mondu esternu. Era solu impurtante per capisce ciò chì hè Unità, quale hè u prucessu di sviluppu, è quantu sforzu ci vole à creà qualcosa. Hè cusì chì u prughjettu di l'Architettu Demo hè natu (u nome hè statu inventatu guasi da u bulu). A prugrammazione, u mudellu, l'animazione, a texturizazione m'hà pigliatu probabilmente dui mesi di travagliu ogni ghjornu.

Aghju cuminciatu cù video tutoriali in YouTube nantu à cumu creà mudelli 3D Blender. Blender hè un grande strumentu gratuitu per a modellazione 3D (è più) chì ùn hà micca bisognu di installazione. E quì un scossa m'aspittava ... Ci hè chì u mudellu, l'animazione, a texturizazione sò temi enormi separati nantu à quale pudete scrive libri. Questu hè soprattuttu veru per i caratteri. Per mudificà dite, denti, ochji è altre parti di u corpu, avete bisognu di cunniscenze di l'anatomia. Cumu sò disposti i musculi di a faccia? Cumu si move a ghjente ? Aviu avutu à "inserisce" l'osse in ogni bracciu, gamba, dita, nucche!

Mudificà a clavicula, lever osse supplementari, cusì chì l'animazione pare naturali. Dopu tali lezioni, capite chì un travagliu enormu facenu i creatori di filmi animati, solu per creà 30 seconde di video. Ma i filmi 3D duranu ore! È po esce da i teatri è dicemu quarchi cosa cum'è : « Ta, un cartoon / filmu di merda ! Puderanu fà megliu ... "Stupi!

È una cosa più nantu à a prugrammazione in stu prughjettu. Cum'è hè risultatu, a parte più interessante per mè era quella matematica. Se eseguite a scena (ligame à u repository in a descrizzione di u prughjettu), vi vede chì a camera gira intornu à u caratteru di a ragazza in una sfera. Per programà una tale rotazione di càmera, aghju avutu prima di calculà e coordenate di u puntu di pusizione nantu à u circhiu (2D), è dopu nantu à a sfera (3D). A cosa divertente hè chì odiava a matematica à a scola è a sapia cun un minus. In parte, prubabilmente, perchè à a scola ùn vi spiegà micca cumu diavule sta matematica hè applicata in a vita. Ma quandu site obsesionatu cù u vostru scopu, sognu, allora a mente hè sbulicata, revelata! È cuminciate à percepisce i travaglii cumplessi cum'è una avventura eccitante. E tandu pensate: "Ebbè, perchè ùn puderia micca * amata * matematica di solitu dì induve queste formule ponu esse appughjate?".

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Càlculu di e formule per u calculu di e coordenate di un puntu nantu à un cerculu è nantu à una sfera (da u mo librettu)

Ghjocu 1

  • Piattaforma: Windows (pruvatu nantu à Windows 7, 10)
  • Язык: Pensu chì era scrittu in puru C
  • Mutore di ghjocu: Consola Windows
  • Ispirazioni: javidx9
  • Repository: GitHub

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Un ghjocu simplice di serpente

A scena 3D ùn hè micca un ghjocu. Inoltre, u mudellu è l'animazione di l'uggetti 3D (in particulare i caratteri) hè longu è difficiule. Dopu avè ghjucatu cù Unità, aghju capitu chì duvia cuntinuà, o piuttostu principià, da i principii. Qualcosa simplice è veloce, ma à u stessu tempu glubale, per capisce a struttura stessa di i ghjoculi.

E ciò chì avemu simplice è veloce? Hè propiu, cunsola è 2D. Più precisamente, ancu a cunsola è i simboli. In novu, aghju cuminciatu à circà l'ispirazione in Internet (in generale, cunsidereraghju l'Internet l'invenzione più rivoluzionaria è periculosa di u XXI seculu). Aghju scavatu un video di un programatore chì hà fattu a consola Tetris. È in a similitude di u so ghjocu, hà decisu di taglià a "serpente". Da u video, aghju amparatu nantu à duie cose fundamentali - u ciclu di ghjocu (cù trè funzioni / parti basi) è output à u buffer.

U ciclu di ghjocu pò esse simile à questu:

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

U codice presenta tutta a funzione main() in una volta. È u ciculu di ghjocu principia dopu à u cumentu currispundente. Ci sò trè funzioni basi in u ciclu: Input (), Logic (), Draw (). Prima, input di dati Input (principalmente u cuntrollu di keystrokes), poi trasfurmazioni di i dati entrata Logic, poi mustrà nant'à u screnu - Draw. È cusì ogni quadru. L'animazione hè creata in questu modu. Hè cum'è i cartoni animati. Di solitu l'elaborazione di e dati di input pigghia u più tempu è, per quantu a so, determina a freccia di u quadru di u ghjocu. Ma quì a funzione Logic () hè assai veloce. Dunque, a freccia di quadru deve esse cuntrullata da a funzione Sleep() cù u paràmetru gameSpeed ​​​​, chì determina sta tarifa.

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
ciclu di ghjocu. Programmazione di serpente in u bloccu note

Sè vo site sviluppatu un ghjocu simbolicu di cunsola, allora a visualizazione di dati nantu à u screnu usendu u solitu stream output 'cout' ùn funziona micca - hè assai lento. Dunque, l'output deve esse realizatu in u buffer di u screnu. Tantu più veloce è u ghjocu hà da travaglià senza glitches. Per esse onesto, ùn capiscu micca bè ciò chì hè un buffer di schermu è cumu funziona. Ma daraghju un esempiu di codice quì, è forsi qualchissia in i cumenti puderà chjarificà a situazione.

Ottene u buffer di u screnu (se possu dì cusì):

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

Sorta diretta à u screnu di una certa linea scoreLine (a linea per vede i punteggi):

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

In teoria, ùn ci hè nunda di complicatu in stu ghjocu, mi pari un bon esempiu di un ghjocu di livellu d'entrata. U codice hè scrittu in un schedariu è dispostu in parechje funzioni. Nisuna classi, nè eredità. Pudete vede tuttu in u codice fonte di u ghjocu andendu à u repository in GitHub.

Ghjocu 2 Crazy Tanks

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
U ghjocu Crazy Tanks

A stampa di caratteri à a cunsola hè probabilmente a cosa più simplice chì pudete trasfurmà in un ghjocu. Ma tandu si prisenta un prublema: i caratteri anu diverse altezze è larghezza (l'altezza hè più grande di a larghezza). Cusì, tuttu vi parerà sproporzionatu, è muvimenti in giru o in su sembrerà assai più veloce di muvimenti a manca o a diritta. Stu effettu hè assai notevuli in "Snake" (Game 1). "Tanks" (Game 2) ùn anu micca un tali inconveniente, postu chì l'output hè urganizatu da pittura di pixel di schermu cù culori diffirenti. Pudete dì chì aghju scrittu un rendering. True, questu hè digià un pocu più cumplicatu, ancu s'ellu hè assai più interessante.

Per stu ghjocu, basterà à descriverà u mo sistema per vede pixelli nantu à u screnu. Pensu chì questu hè a parte principale di u ghjocu. È tuttu ciò chì pudete vene cun sè stessu.

Allora, ciò chì vede nantu à u screnu hè solu un inseme di rectanguli culurati in muvimentu.

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Set di rettangulu

Ogni rectangulu hè rapprisintatu da una matrice piena di numeri. Per via, possu mette in risaltu una sfumatura interessante - tutte e matrici in u ghjocu sò programate cum'è una matrice unidimensionale. Micca bidimensionale, ma unidimensionale! Arrays unidimensionali sò assai più faciuli è più veloci per travaglià.

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Un esempiu di una matrice di tank di ghjocu

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Rappresentà a Matrice di un Tank di ghjocu cù un Array One-Dimensional

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Un esempiu più illustratu di una rapprisintazioni matrice da un array unidimensionale

Ma l'accessu à l'elementi di l'array si trova in un ciclu doppiu, cum'è s'ellu ùn era micca un array unidimensionale, ma bidimensionale. Questu hè fattu perchè avemu sempre travagliatu cù matrici.

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Traversà un array unidimensionale in un ciclu doppiu. Y hè l'ID di fila, X hè l'ID di colonna

Per piacè nutate chì invece di l'identificatori matrici usuali i, j, aghju utilizatu l'identificatori x è y. Allora, mi pari, più piacevule à l'ochju è più chjaru à u cervellu. Inoltre, una tale notazione permette di prughjettà convenientemente e matrici usate nantu à l'assi di coordenate di una maghjina bidimensionale.

Avà nantu à pixel, culore è display. A funzione StretchDIBits (Header: windows.h; Library: gdi32.lib) hè aduprata per l'output. Tra l'altri cose, i seguenti sò passati à sta funzione: u dispositivu nantu à quale l'imaghjini hè visualizatu (in u mo casu, questu hè a cunsola Windows), e coordenate di l'iniziu di a visualizazione di l'imaghjini, a so larghezza / altezza, è l'imaghjini. stessu in a forma di un bitmap (bitmap), rapprisintatu da un array di bytes. Bitmap cum'è una matrice di byte!

A funzione StretchDIBits() à u travagliu:

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

A memoria hè attribuita in anticipu per questu bitmap utilizendu a funzione VirtualAlloc(). Vale à dì, u numeru necessariu di byte hè riservatu per almacenà infurmazioni nantu à tutti i pixelli, chì poi seranu visualizati nantu à u screnu.

Creazione di una 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);

In modu approssimativu, un bitmap hè custituitu da un inseme di pixel. Ogni quattru byte in l'array hè un pixel RGB. Un byte per valore rossu, un byte per valore verde (G) è un byte per culore blu (B). In più, ci hè un byte per indent. Questi trè culori - Rossu / Verde / Blu (RGB) - sò mischiati l'un à l'altru in proporzioni diffirenti - è u culore di pixel risultante hè ottenutu.

Avà, di novu, ogni rettangulu, o ughjettu di ghjocu, hè rapprisintatu da una matrice numerica. Tutti questi ughjetti di ghjocu sò posti in una cullezzione. È dopu sò posti nantu à u campu di ghjocu, furmendu una grande matrice numerica. Aghju mappatu ogni numeru in a matrice à un culore specificu. Per esempiu, u numeru 8 hè turchinu, u numeru 9 hè giallu, u numeru 10 hè grisgiu scuru, è cusì. Cusì, pudemu dì chì avemu una matrice di u campu di ghjocu, induve ogni numeru hè un tipu di culore.

Dunque, avemu una matrice numerica di tuttu u campu di ghjocu da una banda è un bitmap per vede l'imaghjini da l'altru. Finu a ora, u bitmap hè "viota" - ùn hà ancu infurmazione nantu à i pixelli di u culore desideratu. Questu significa chì l'ultimu passu serà riempie u bitmap cù infurmazioni nantu à ogni pixel basatu annantu à a matrice numerica di u campu di ghjocu. Un esempiu illustrativu di tali trasfurmazioni hè in u ritrattu sottu.

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Un esempiu di riempimentu di un bitmap (Pixel matrix) cù l'infurmazioni basati nantu à a matrice numerica (Digital matrix) di u campu di ghjocu (l'indici di culore ùn currispondenu micca à l'indici in u ghjocu)

Vi prisintà ancu un pezzu di codice veru da u ghjocu. A variabile colorIndex à ogni iterazione di u ciclu hè assignatu un valore (indici di culore) da a matrice numerica di u campu di ghjocu (mainDigitalMatrix). Allora u culore stessu hè scrittu à a variabile di culore basatu annantu à l'indici. In più, u culore risultatu hè divisu in a ratio di rossu, verde è blu (RGB). È inseme cù l'indentu (pixelPadding), questa informazione hè scritta à u pixel una volta è una volta, furmendu una maghjina di culore in u bitmap.

U codice usa puntatori è operazioni bitwise, chì ponu esse difficili di capiscenu. Allora vi cunsigliu di leghje separatamente in un locu cumu funziona tali strutture.

Riempite un bitmap cù informazioni basate nantu à a matrice numerica di u campu di ghjocu:

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

Sicondu u metudu descrittu sopra, una stampa (frame) hè furmatu in u ghjocu Crazy Tanks è affissatu nantu à u screnu in a funzione Draw (). Dopu avè registratu i tasti in a funzione Input () è u so processu sussegwente in a funzione Logic (), una nova stampa (frame) hè furmatu. True, l'uggetti di u ghjocu pò digià avè una pusizione diversa nantu à u campu di ghjocu è, per quessa, sò disegnati in un locu diversu. Hè cusì chì l'animazione (muvimentu) succede.

In teoria (se ùn avete micca scurdatu di nunda), capisce u ciclu di ghjocu da u primu ghjocu ("Snake") è u sistema per vede pixelli nantu à u screnu da u sicondu ghjocu ("Tanks") hè tuttu ciò chì avete bisognu di scrive qualsiasi. di i vostri ghjochi 2D per Windows. Senza sonu ! 😉 U restu di e parti sò solu un volu di fantasia.

Di sicuru, u ghjocu "Tanks" hè cuncepitu assai più cumplicatu cà u "Snake". Aghju digià utilizatu a lingua C++, vale à dì, aghju descrittu diversi oggetti di ghjocu cù classi. Aghju creatu a mo propria cullezzione - pudete vede u codice in headers/Box.h. Per via, a cullizzioni più prubabilmente hà una fuga di memoria. Indicatori usati. U travagliu cù a memoria. Devu dì chì u libru m'hà aiutatu assai. Principiu di C ++ Per mezu di u prugramma di ghjocu. Questu hè un grande principiu per i principianti in C++. Hè chjucu, interessante è ben organizatu.

Pigliò circa sei mesi per sviluppà stu ghjocu. Scrivu principarmenti durante u pranzu è spuntini à u travagliu. Si pusò in a cucina di l'uffiziu, pisò l'alimentariu è hà scrittu codice. O in casa per cena. Allora aghju avutu tali "guerre di cucina". Comu sempre, aghju utilizatu attivamente un notebook, è tutte e cose cuncettuali sò nati in questu.

À a fine di a parte pratica, tiraraghju uni pochi di scansi di u mo notebook. Per dimustrà ciò chì esattamente scrivu, disegnu, cuntà, cuncepì ...

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Disegnu di l'imaghjini di u tank. È a definizione di quanti pixel chì ogni tank duveria occupà nantu à u screnu

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Càlculu di l'algoritmu è e formule per a rotazione di u tank intornu à u so assi

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
Diagramma di a mo cullizzioni (quellu cù a fuga di memoria, più prubabile). A cullizzioni hè creata cum'è Lista Linked

DevOps C++ è "guerre di cucina", o Cumu aghju cuminciatu à scrive ghjochi mentre manghja
E quessi sò tentativi inutili di avvità l'intelligenza artificiale in u ghjocu

Teoria

"Ancu un viaghju di mille chilometri principia cù u primu passu" (A saviezza cinese antica)

Passemu da a pratica à a teoria ! Cumu truvà u tempu per u vostru hobby?

  1. Determina ciò chì vulete veramente (alas, questu hè u più difficiule).
  2. Stabbilisce e priorità.
  3. Sacrificiate tutti i "superfluous" per a fine di priorità più altu.
  4. Avanzate versu i vostri scopi ogni ghjornu.
  5. Ùn aspettate micca chì ci saranu duie o trè ore di tempu liberu per un hobby.

Da una banda, avete bisognu di determinà ciò chì vulete è priorità. Per d 'altra banda, hè pussibule abbandunà certi casi / prughjetti in favore di sti priurità. In autri paroli, vi tuccherà à sacrificà tuttu "superfluous". Aghju intesu in qualchì locu chì in a vita ci deve esse un massimu di trè attività principali. Allora puderete trattà cun elli in u megliu modu pussibule. E prughjetti / direzzione supplementari cumincianu à sovraccaricare corny. Ma questu hè tuttu, probabilmente, subjective è individuale.

Ci hè una certa regula d'oru: ùn avete mai un ghjornu di 0%! Aghju amparatu nantu à questu in un articulu di un sviluppatore indie. Sè vo site u travagliu nantu à un prughjettu, fate qualcosa ogni ghjornu. È ùn importa micca quantu fate. Scrivite una parolla o una linea di codice, fighjate un video tutoriale, o martellate un chiovu in a tavula - basta à fà qualcosa. A parte più dura hè di principià. Una volta chì avete principiatu, probabilmente fate un pocu più di ciò chì vulete. Allora andate constantemente versu u vostru scopu è, crede à mè, assai prestu. Dopu tuttu, u frenu principalu di tutte e cose hè a procrastinazione.

È hè impurtante di ricurdà chì ùn deve micca sottovalutà è ignurà u "serratura" liberu di u tempu in 5, 10, 15 minuti, aspittà per qualchi big "logs" chì duranu una ora o duie. State in fila ? Pensate à qualcosa per u vostru prughjettu. Ascendi l'escalator? Scrivite qualcosa in un quaderno. Manghjate in l'autobus ? Va bè, leghjite qualchì articulu. Aduprate ogni opportunità. Smetti di fighjà i misgi è i cani nantu à YouTube! Ùn scherzi micca cù u vostru cervellu !

È l'ultimu. Sè, dopu avè lettu stu articulu, avete piaciutu l'idea di creà ghjochi senza aduprà mutori di ghjocu, allora ricordate u nome Casey Muratori. Stu omu hà situ web. In a sezione "guarda -> EPISODI PRECEDENTI" truverete fantastichi tutoriali video gratuiti nantu à cumu creà un ghjocu prufessiunale da zero. Pudete amparà di più in cinque Intro à C per Windows lezioni chè in cinque anni di studiu à l'università (qualchissia hà scrittu annantu à questu in i cumenti sottu u video).

Casey spiega ancu chì sviluppendu u vostru propiu mutore di ghjocu, avarete una megliu comprensione di qualsiasi mutori esistenti. In u mondu di i frameworks, induve ognunu cerca di automatizà, amparate cumu creà, micca aduprà. Capisce a natura stessa di l'urdinatori. È diventerai ancu un programatore assai più intelligente è maturu - un pro.

Bona furtuna nantu à a strada scelta! È femu u mondu più prufessiunale.

Author: Grankin Andrey, DevOps



Source: www.habr.com