DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan

"Aku ngerti yen aku ora ngerti apa-apa" Socrates

Kagem sinten: kanggo wong IT sing ora peduli karo kabeh pangembang lan pengin main game!

babagan apa: bab carane miwiti nulis game ing C / C ++, yen dumadakan perlu!

Kenapa sampeyan kudu maca iki: Pangembangan aplikasi dudu bidang keahlianku, nanging aku nyoba kode saben minggu. Amarga aku seneng game!

Halo Jenengku Is Andrey Grankin, Aku DevOps ing Luxoft. Pangembangan aplikasi dudu spesialisasiku, nanging aku nyoba kode saben minggu. Amarga aku seneng game!

Industri game komputer gedhe banget, dikabarake luwih gedhe tinimbang industri film saiki. Game wis ditulis wiwit esuke komputer, nggunakake, dening standar modern, Komplek lan cara pembangunan dhasar. Sajrone wektu, mesin game kanthi grafis, fisika, lan swara sing wis diprogram wiwit katon. Dheweke ngidini sampeyan fokus ing ngembangake game kasebut lan ora kuwatir babagan dhasare. Nanging bebarengan karo wong-wong mau, karo mesin, pangembang "buta" lan degradasi. Produksi game dhewe dilebokake ing sabuk conveyor. Lan jumlah produk wiwit menang liwat kualitas.

Ing wektu sing padha, nalika main game wong liya, kita terus diwatesi dening lokasi, plot, karakter, lan mekanika game sing digawe wong liya. Dadi aku ngerti yen ...

... wektu wis teka kanggo nggawe donya dhewe, mung kanggo kula. Donya ing ngendi Aku iki Sang Rama, Sang Putra lan Sang Roh Suci!

Lan aku kanthi tulus pracaya yen nulis mesin game dhewe lan muter, sampeyan bakal bisa njupuk sepatu, ngilangke jendhela lan nganyarke kabin, dadi programmer sing luwih berpengalaman lan lengkap.

Ing artikel iki aku bakal nyoba kanggo pitutur marang kowe carane miwiti nulis game cilik ing C / C ++, apa proses pembangunan kaya, lan ngendi aku golek wektu kanggo hobi ing lingkungan sibuk. Iku subyektif lan nggambarake proses wiwitan individu. Materi babagan nggatekke lan iman, babagan gambaran pribadiku ing jagad iki. Ing tembung liyane, "Administrasi ora tanggung jawab kanggo otak pribadi sampeyan!"

Praktek

"Kawruh tanpa laku iku ora ana gunane, laku tanpa kawruh iku mbebayani" Confucius

Notebook uripku!


Dadi, ing praktik, aku bisa ujar manawa kabeh diwiwiti kanthi notepad. Ora mung aku nulis tugas saben dina ing kana, aku uga nggambar, program, ngrancang flowchart lan ngrampungake masalah, kalebu matematika. Tansah nggunakake notepad lan nulis mung ing potlot. Iku resik, trep lan dipercaya, IMHO.

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Notebookku (wis diisi). Iki rupane. Isine tugas saben dina, gagasan, gambar, diagram, solusi, pembukuan ireng, kode lan liya-liyane

Ing tahap iki, aku bisa ngrampungake telung proyek (iki ing pangertenku babagan "kelengkapan", amarga produk apa wae bisa dikembangake kanthi relatif tanpa wates).

  • Proyek 0: Iki minangka adegan Demo Arsitek 3D sing ditulis ing C # nggunakake mesin game Unity. Kanggo platform macOS lan Windows.
  • Game 1: console game Simple Snake (dikenal kabeh wong minangka "Snake") kanggo Windows. Ditulis ing C.
  • Game 2: game console Crazy Tanks (dikenal kabeh wong minangka "Tanks"), ditulis ing C ++ (nggunakake kelas) lan uga kanggo Windows.

Proyek 0. Arsitek Demo

  • Platform: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Basa: C#
  • Game engine: Unity
  • Inspirasi: Darrin Lila
  • Repositori: GitHub

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Demo Arsitek Pemandangan 3D

Proyek pisanan dileksanakake ora ing C / C ++, nanging ing C # nggunakake mesin game Unity. Mesin iki ora nuntut hardware kaya Unreal Engine, lan uga katon luwih gampang kanggo nginstal lan nggunakake. Aku ora nimbang mesin liyane.

Tujuanku ing Unity ora ngembangake game. Aku wanted kanggo nggawe pemandangan 3D karo sawetara karakter. Dheweke, utawa rodo Dheweke (Aku model cah wadon aku iki ing katresnan karo =) kudu pindhah lan sesambungan karo donya watara wong. Iku mung penting kanggo ngerti apa Unity, apa proses pembangunan lan carane akeh gaweyan sing dibutuhake kanggo nggawe soko. Iki carane project Arsitek Demo lair (jeneng iki meh nemokke metu saka ora ono). Programming, modeling, animasi, texturing njupuk kula mbokmenawa rong sasi karya saben dina.

Aku miwiti karo video tutorial ing YouTube nggawe model 3D ing Blender. Blender minangka alat gratis sing apik banget kanggo pemodelan 3D (lan liyane) sing ora mbutuhake instalasi. Lan ing kene kaget nunggu aku ... Pranyata model, animasi, tekstur minangka topik sing kapisah sing bisa ditulis buku. Iki utamané bener kanggo karakter. Kanggo model driji, untu, mata lan bagean awak liyane, sampeyan kudu kawruh anatomi. Kepiye struktur otot rai? Carane wong pindhah? Aku kudu "nyisipake" balung menyang saben lengen, sikil, driji, phalanges driji!

Model tulang selangka lan balung tuas tambahan kanggo nggawe animasi katon alami. Sawise pawulangan kasebut, sampeyan ngerti sepira kerjane para pangripta film animasi mung kanggo nggawe video 30 detik. Nanging film 3D tahan nganti pirang-pirang jam! Banjur kita ninggalake bioskop lan ngomong kaya: "Iku kartun / film omong kosong! Dheweke bisa nindakake luwih apik ... "Bodho!

Lan siji liyane babagan program ing proyek iki. Ternyata, sing paling menarik kanggoku yaiku babagan matematika. Yen sampeyan mbukak pemandangan (link menyang repositori ing gambaran project), sampeyan bakal sok dong mirsani sing kamera muter sak karakter girl ing bal. Kanggo program rotasi kamera kasebut, aku kudu ngetung koordinat titik posisi ing bunder (2D), banjur ing bal (3D). Sing lucu iku aku sengit matématika ing sekolah lan ngerti karo C-minus. Sebagéyan, mbokmenawa, amarga ing sekolah, dheweke mung ora nerangake carane math iki ditrapake ing urip. Nanging nalika sampeyan kepengin banget karo tujuan sampeyan, impen sampeyan, pikiran sampeyan bakal mbukak lan mbukak! Lan sampeyan wiwit ngerteni tugas sing angel minangka petualangan sing nyenengake. Banjur sampeyan mikir: "Ya, kenapa ahli matematika * favorit * sampeyan ora bisa menehi katrangan babagan rumus kasebut biasane?"

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Pitungan rumus kanggo ngitung koordinat titik ing bunder lan ing bal (saka notebook)

Game 1. Simple Snake

  • Platform: Windows (dites ing Windows 7, 10)
  • Basa: Aku mikir aku nulis ing murni C
  • Game engine: Konsol Windows
  • Inspirasi: javidx9
  • Repositori: GitHub

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Game Ular sing prasaja

Pemandangan 3D dudu game. Kajaba iku, modeling lan animasi obyek 3D (utamane karakter) akeh wektu lan angel. Sawise muter-muter karo Unity, aku ngerti yen aku kudu nerusake, utawa luwih dhisik, saka dhasar. Soko prasaja lan cepet, nanging ing wektu sing padha global, kanggo ngerti struktur banget game.

Apa sing prasaja lan cepet? Sing bener, console lan 2D. Luwih tepate, malah console lan simbol. Maneh aku golek inspirasi ing Internet (umum, aku mikir Internet minangka penemuan paling revolusioner lan mbebayani ing abad XNUMXst). Aku ndudhuk munggah video saka programmer sing digawe console Tetris. Lan ing mirip game kang aku mutusaké kanggo nggawe "ula". Saka video aku sinau babagan rong perkara dhasar - daur ulang game (kanthi telung fungsi / bagean dhasar) lan output menyang buffer.

Game loop bisa katon kaya iki:

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

Kode presents kabeh fungsi utama () bebarengan. Lan siklus game wiwit sawise komentar cocok. Ana telung fungsi dhasar ing daur ulang: Input (), Logic (), Draw (). Pisanan, input data Input (utamane kontrol keystrokes), banjur ngolah data sing dilebokake Logika, banjur output menyang layar - Draw. Lan ing saben pigura. Iki carane animasi digawe. Kaya ing kartun. Biasane, ngolah data sing dilebokake njupuk wektu paling akeh lan, aku ngerti, nemtokake tingkat pigura game. Nanging ing kene fungsi Logic () dieksekusi kanthi cepet. Mulane, sampeyan kudu ngontrol tingkat pigura nggunakake fungsi Turu () karo parameter gameSpeed, sing nemtokake kacepetan iki.

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Siklus game. Programing "ula" ing notepad

Yen sampeyan ngembangaken game console basis karakter, sampeyan ora bakal bisa kanggo output data menyang layar nggunakake output stream biasa 'cout' - iku banget alon. Mulane, output kudu dikirim menyang buffer layar. Iki luwih cepet lan game bakal mbukak tanpa glitches. Jujur, aku ora ngerti apa buffer layar lan cara kerjane. Nanging aku bakal menehi conto kode ing kene, lan bisa uga ana sing bisa njlentrehake kahanan kasebut ing komentar.

Njupuk buffer layar (dadi ngomong):

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

Tampilan langsung saka string scoreLine tartamtu (garis tampilan skor):

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

Ing teori, ora ana sing rumit ing game iki; Aku iki minangka conto tingkat entri sing apik. Kode kasebut ditulis ing siji file lan diformat ing sawetara fungsi. Ora ana kelas, ora ana warisan. Sampeyan bisa ndeleng kabeh dhewe ing kode sumber game kanthi pindhah menyang repositori ing GitHub.

Game 2. Tank Edan

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Game Crazy Tanks

Nyetak karakter menyang konsol bisa uga paling gampang sampeyan bisa dadi game. Nanging banjur siji alangan katon: simbol duwe dhuwur lan jembaré beda (dhuwur luwih saka jembaré). Kanthi cara iki, kabeh bakal katon metu saka proporsi, lan obah mudhun utawa munggah bakal katon luwih cepet saka obah ngiwa utawa nengen. Efek iki katon banget ing Snake (Game 1). "Tanks" (Game 2) ora duwe drawback iki, wiwit output ana diatur liwat lukisan piksel layar karo werna. Sampeyan bisa ngomong aku nulis renderer. Bener, iki rada rumit, sanajan luwih menarik.

Kanggo game iki, bakal cukup kanggo njlèntrèhaké sistem sandi kanggo tampilan piksel ing layar. Aku nimbang iki bagéan utama saka game. Lan sampeyan bisa nggawe kabeh liyane dhewe.

Dadi, sing sampeyan deleng ing layar mung sakumpulan persegi dowo multi-warna sing obah.

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Set persegi panjang

Saben persegi panjang diwakili dening matriks sing diisi angka. Miturut cara, aku bisa nyorot siji nuansa menarik - kabeh matriks ing game diprogram minangka array siji-dimensi. Ora rong dimensi, nanging siji dimensi! Array siji-dimensi luwih gampang lan luwih cepet digarap.

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Tuladha matriks tank game

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Perwakilan saka matriks tank game minangka array siji-dimensi

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Conto sing luwih visual kanggo makili matriks minangka array siji-dimensi

Nanging akses menyang unsur array dumadi ing daur ulang ganda, kaya-kaya dudu array siji-dimensi, nanging rong dimensi. Iki rampung amarga kita isih bisa nggarap matriks.

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Nglewati array siji-dimensi ing daur ulang dobel. Y - pengenal baris, X - pengenal kolom

Wigati dimangerteni: tinimbang pengenal matriks i, j, aku nggunakake pengenal x lan y. Kanthi cara iki, misale jek kula, iku luwih nyenengake kanggo mripat lan luwih dingerteni kanggo otak. Kajaba iku, notasi kasebut ndadekake gampang nggambarake matriks sing digunakake ing sumbu koordinat gambar rong dimensi.

Saiki babagan piksel, warna lan output layar. Fungsi StretchDIBits digunakake kanggo output (Header: windows.h; Library: gdi32.lib). Fungsi iki, antara liya, nampa ing ngisor iki: piranti ing ngendi gambar ditampilake (ing kasusku, yaiku konsol Windows), koordinat wiwitan tampilan gambar, ambane / dhuwure, lan gambar kasebut dhewe ing wangun bitmap, diwakili dening Uploaded byte. Bitmap minangka array byte!

StretchDIBits() fungsi ing tumindak:

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

Memori diparengake ing advance kanggo bitmap iki nggunakake fungsi VirtualAlloc (). Yaiku, jumlah bita sing dibutuhake kanggo nyimpen informasi babagan kabeh piksel, sing banjur bakal ditampilake ing layar.

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

Secara kasar, bitmap kasusun saka koleksi piksel. Saben patang bita ing array minangka piksel RGB. Siji bait saben nilai werna abang, siji bait saben nilai werna ijo (G), lan siji bait saben nilai werna biru (B). Plus ana siji bita kiwa kanggo indentasi. Telung warna iki - Abang / Ijo / Biru (RGB) - dicampur karo siji liyane ing proporsi sing beda kanggo nggawe warna piksel sing diasilake.

Saiki, maneh, saben persegi panjang, utawa obyek game, diwakili dening matriks numerik. Kabeh obyek game iki diselehake ing koleksi. Banjur padha diselehake ing lapangan playing, mbentuk siji matriks angka gedhe. Aku digandhengake saben nomer ing matriks karo werna tartamtu. Contone, nomer 8 biru, nomer 9 kuning, nomer 10 abu-abu peteng, lan liya-liyane. Mangkono, kita bisa ngomong sing kita duwe matriks saka lapangan playing, ngendi saben nomer iku werna.

Dadi, kita duwe matriks numerik saka kabeh lapangan dolanan ing sisih siji lan bitmap kanggo nampilake gambar ing sisih liyane. Nganti saiki, bitmap "kosong" - durung ngemot informasi babagan piksel warna sing dikarepake. Iki tegese langkah pungkasan bakal populate bitmap karo informasi bab saben piksel adhedhasar matriks numerik saka lapangan playing. Conto sing jelas babagan transformasi kasebut ana ing gambar ing ngisor iki.

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Conto ngisi bitmap (matriks piksel) kanthi informasi adhedhasar matriks Digital lapangan (indeks warna ora cocog karo indeks ing game)

Aku uga bakal saiki Piece saka kode nyata saka game. Variabel colorIndex ing saben pengulangan daur ulang diwenehi nilai (indeks warna) saka matriks numerik saka lapangan dolanan (mainDigitalMatrix). Variabel werna banjur disetel menyang werna dhewe adhedhasar indeks. Werna sing diasilake banjur dipérang dadi rasio abang, ijo lan biru (RGB). Lan bebarengan karo pixelPadding, informasi iki ditulis ing piksel maneh lan maneh, mbentuk gambar werna ing bitmap.

Kode kasebut nggunakake penunjuk lan operasi bitwise, sing bisa angel dingerteni. Dadi aku menehi saran supaya sampeyan maca kanthi kapisah kepiye struktur kasebut.

Isi bitmap kanthi informasi adhedhasar matriks numerik saka lapangan dolanan:

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

Miturut cara sing diterangake ing ndhuwur, ing game Crazy Tanks siji gambar (pigura) kawangun lan ditampilake ing layar ing Draw () fungsi. Sawise ndhaptar keystrokes ing Input () fungsi lan Processing sakteruse ing Logic () fungsi, gambar anyar (pigura) kawangun. Bener, obyek game bisa uga duwe posisi sing beda ing lapangan dolanan lan, mula, digambar ing papan sing beda. Iki carane animasi (gerakan) kelakon.

Ing teori (yen aku wis ora lali apa-apa), ngerti daur ulang game saka game pisanan ("Snake") lan sistem kanggo nampilake piksel ing layar saka game kapindho ("Tanks") iku kabeh sing perlu kanggo nulis sembarang. game 2D sampeyan ing Windows. Tanpa swara! 😉 Bagean liyane mung penerbangan mewah.

Mesthi, game "Tanks" luwih rumit tinimbang "Snake". Aku wis digunakake C ++ basa, sing, Aku diterangake obyek game beda karo kelas. Aku nggawe koleksi dhewe - kode bisa dideleng ing header / Box.h. Miturut cara, koleksi kasebut kemungkinan duwe bocor memori. Pitunjuk digunakake. Digarap karo memori. Aku kudu ujar manawa buku kasebut mbantu aku Miwiti C++ Liwat Pemrograman Game. Iki minangka wiwitan sing apik kanggo pamula ing C ++. Iku cilik, menarik lan uga diatur.

Butuh babagan nem sasi kanggo ngembangake game iki. Aku nulis utamané nalika nedha awan lan cemilan ing karya. Dheweke lungguh ing pawon kantor, ngidak-idak panganan lan nulis kode. Utawa nedha bengi ing omah. Dadi aku rampung karo "perang pawon". Minangka tansah, aku aktif nggunakake notebook, lan kabeh konsep wis lair ing.

Kanggo ngrampungake bagean praktis, aku bakal njupuk sawetara pindai notebookku. Kanggo nuduhake apa persis sing daktulis, digambar, diitung, dirancang...

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Ngrancang gambar tank. Lan nemtokake jumlah piksel saben tank kudu manggoni ing layar

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Pitungan algoritma lan rumus kanggo rotasi tank watara sumbu

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Skema koleksiku (sing ana kebocoran memori, paling mungkin). Koleksi digawe miturut jinis Linked List

DevOps C ++ lan "perang pawon", utawa Carane aku miwiti nulis game nalika mangan
Lan iki usaha tanpa guna kanggo masang intelijen buatan ing game kasebut

Teori

"Malah perjalanan sewu mil diwiwiti kanthi langkah pisanan" (Kawicaksanan Cina Kuno)

Ayo pindhah saka praktik menyang teori! Kepiye golek wektu kanggo hobi sampeyan?

  1. Temtokake apa sing dikarepake (alas, iki sing paling angel).
  2. Setel prioritas.
  3. Ngorbanake kabeh "ekstra" kanggo prioritas sing luwih dhuwur.
  4. Pindhah menyang gol saben dina.
  5. Aja nyana rong utawa telung jam wektu luang kanggo nglampahi hobi.

Ing tangan siji, sampeyan kudu nemtokake apa sing dikarepake lan prioritas. Ing sisih liya, bisa uga nolak sawetara kegiatan / proyek sing cocog karo prioritas kasebut. Ing tembung liyane, sampeyan kudu kurban kabeh "ekstra". Aku krungu nang endi wae sing kudu maksimal telung aktivitas utama ing urip. Banjur sampeyan bakal bisa nindakake kanthi kualitas sing paling dhuwur. Lan proyek / arah tambahan mung bakal kakehan. Nanging iki kabeh mbokmenawa subyektif lan individu.

Ana aturan emas tartamtu: aja duwe dina 0%! Aku sinau babagan iki ing artikel dening pangembang indie. Yen sampeyan lagi nggarap proyek, tindakake saben dina. Lan ora ketompo carane sampeyan nindakake. Tulis siji tembung utawa siji baris kode, nonton video tutorial utawa palu siji kuku menyang Papan - mung nindakake soko. Sing paling angel yaiku miwiti. Sawise sampeyan miwiti, sampeyan bisa uga bakal nindakake luwih saka sing dikarepake. Kanthi cara iki sampeyan bakal terus-terusan pindhah menyang tujuan sampeyan lan, pracaya marang aku, cepet banget. Sawise kabeh, alangan utama kanggo kabeh iku procrastination.

Lan penting kanggo elinga yen sampeyan ora kudu ngremehake lan nglirwakake "sawdust" gratis saka wektu 5, 10, 15 menit, ngenteni sawetara "log" gedhe sing tahan siji utawa loro jam. Apa sampeyan ngadeg ing baris? Coba pikirake babagan proyek sampeyan. Numpak eskalator? Tulis soko mudhun ing notepad. Apa sampeyan lelungan ing bis? Apik, maca sawetara artikel. Njupuk kauntungan saka saben kesempatan. Mungkasi nonton kucing lan asu ing YouTube! Aja ngrusak otak!

Lan siji bab pungkasan. Yen, sawise maca artikel iki, sampeyan seneng gagasan nggawe game tanpa nggunakake mesin game, banjur elinga jeneng Casey Muratori. Wong iki wis situs web. Ing bagean "nonton -> EPISOD sadurunge" sampeyan bakal nemokake tutorial video gratis sing apik babagan nggawe game profesional saka awal. Ing limang pelajaran Intro to C kanggo Windows, sampeyan bakal bisa sinau luwih saka limang taun sinau ing universitas (ana sing nulis babagan iki ing komentar ing video).

Casey uga nerangake yen ngembangaken mesin game dhewe, sampeyan bakal duwe pangerten luwih saka sembarang mesin ana. Ing jagad kerangka sing saben wong nyoba ngotomatisasi, sampeyan sinau nggawe tinimbang nggunakake. Sampeyan ngerti banget alam saka komputer. Lan sampeyan uga bakal dadi programmer sing luwih cerdas lan diwasa - pro.

Good luck ing dalan sing dipilih! Lan ayo nggawe jagad iki luwih profesional.

Pengarang: Mbah Andrey, DevOps



Source: www.habr.com