DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам

"Ман медонам, ки ман чизе намедонам" Суқрот

Аз барои: барои одамони IT, ки ба ҳама таҳиягарон туф мекунанд ва мехоҳанд бозиҳои худро бозӣ кунанд!

Дар бораи чӣ: чӣ гуна бояд ба навиштани бозиҳо дар C/C++ оғоз кард, агар ба шумо лозим бошад!

Чаро шумо бояд инро хонед: Таҳияи барномаҳо ихтисоси кори ман нест, аммо ман кӯшиш мекунам ҳар ҳафта рамзгузорӣ кунам. Зеро ман бозиҳоро дӯст медорам!

Салом номи ман Андрей Гранкин, Ман як DevOps дар Luxoft ҳастам. Таҳияи барномаҳо ихтисоси кори ман нест, аммо ман кӯшиш мекунам ҳар ҳафта рамзгузорӣ кунам. Зеро ман бозиҳоро дӯст медорам!

Саноати бозиҳои компютерӣ бузург аст, ҳатто имрӯз овозаҳо бештар аз саноати филм аст. Бозиҳо аз ибтидои таҳияи компютерҳо бо истифода аз усулҳои мураккаб ва асосии таҳияи стандартҳои муосир навишта шудаанд. Бо гузашти вақт, муҳаррикҳои бозӣ бо графика, физика ва садои аллакай барномарезишуда пайдо шуданд. Онҳо ба шумо имкон медиҳанд, ки ба рушди худи бозӣ диққат диҳед ва дар бораи таҳкурсии он ташвиш надиҳед. Аммо дар баробари онҳо, бо муҳаррикҳо, таҳиягарон "кӯр мешаванд" ва таназзул мекунанд. Худи махсулоти бозеозй ба конвейер гузошта мешавад. Ва микдори махсулот аз сифати он бартарй пайдо мекунад.

Дар айни замон, ҳангоми бозӣ кардани бозиҳои одамони дигар, мо ҳамеша аз рӯи маконҳо, сюжетҳо, аломатҳо, механикаи бозӣ, ки одамони дигар бо онҳо сохтаанд, маҳдуд мешавем. Пас ман фаҳмидам, ки ...

... вақти он расидааст, ки ҷаҳонҳои шахсии худро эҷод кунед, танҳо ба ман итоат кунед. Ҷаҳонҳое, ки Ман Падар, Писар ва Рӯҳулқудс ҳастам!

Ва ман самимона боварӣ дорам, ки бо навиштани муҳаррики бозии худ ва бозӣ дар он шумо метавонед чашмони худро кушоед, тирезаҳоро пок кунед ва кабинаатонро насос кунед ва як барномасози ботаҷриба ва интегралӣ шавед.

Дар ин мақола ман кӯшиш мекунам ба шумо бигӯям, ки чӣ гуна ман навиштани бозиҳои хурдро дар C / C ++ оғоз кардам, раванди рушд чӣ гуна аст ва дар куҷо ман барои маҳфилӣ дар муҳити серодам вақт меёбам. Он субъективӣ аст ва раванди оғози инфиродиро тавсиф мекунад. Материал дар бораи љањолат ва имон, дар бораи тасвири шахсии ман дар бораи ҷаҳон дар айни замон. Ба ибораи дигар, «Маъмурият барои майнаи шахсии шумо масъул нест!».

Таҷҳизот

"Дониш бе амал бефоида аст, амал бе дониш хатарнок аст" Конфуций

Дафтарчаи ман ҳаёти ман аст!


Пас, дар амал гуфта метавонам, ки барои ман ҳама чиз аз дафтар оғоз мешавад. Ман дар он ҷо на танҳо вазифаҳои ҳаррӯзаи худро менависам, балки диаграммаҳо мекашам, барномарезӣ мекунам, тарҳрезӣ мекунам ва масъалаҳо, аз ҷумла риёзиро ҳал мекунам. Ҳамеша блокнотро истифода баред ва танҳо бо қалам нависед. Ин тоза, бароҳат ва боэътимод аст, IMHO.

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Дафтарчаи ман (аллакай пур карда шудааст). Чунин ба назар мерасад. Он дорои вазифаҳои ҳаррӯза, ғояҳо, расмҳо, диаграммаҳо, ҳалли онҳо, ҳисобдории сиёҳ, код ва ғайра мебошад.

Дар ин марҳила, ман тавонистам се лоиҳаро анҷом диҳам (ин дар фаҳмиши ман дар бораи "ниҳоят" аст, зеро ҳама гуна маҳсулотро нисбатан беохир таҳия кардан мумкин аст).

  • Лоиҳаи 0: ин як саҳнаи Architect Demo 3D аст, ки дар C# бо истифода аз муҳаррики бозии Unity навишта шудааст. Барои платформаҳои macOS ва Windows.
  • Бозии 1: бозии консолӣ Simple Snake (ба ҳама ҳамчун "Санак" маълум аст) барои Windows. дар C навишта шудааст.
  • Бозии 2: бозии консолии Crazy Tanks (ба ҳама ҳамчун "Танкҳо" маълум аст), ки аллакай дар C ++ (бо истифода аз синфҳо) ва инчунин дар зери Windows навишта шудааст.

Лоиҳаи 0 Архитектор намоиш

  • Платформа: Windows (Windows 7, 10), Mac OS (OS X El Capitan v. 10.11.6)
  • Забон: C#
  • Муҳаррики бозӣ: ягона
  • Илҳом: Даррин Лил
  • Анбор: GitHub

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Намоиши меъмори 3D саҳна

Лоиҳаи аввал на дар C/C++, балки дар C# бо истифода аз муҳаррики бозии Unity амалӣ карда шуд. Ин муҳаррик нисбат ба сахтафзор он қадар серталаб набуд Engine цайриҳащищӣ, ва инчунин ба назарам насб ва истифода осонтар менамуд. Ман дигар муҳаррикҳоро ба назар нагирифтам.

Ҳадаф дар Unity барои ман таҳияи ягон намуди бозӣ набуд. Ман мехостам, ки як саҳнаи 3D бо як навъ хислат эҷод кунам. Ӯ, ё дурусттараш, Вай (ман духтареро, ки ман ба ӯ ошиқ будам, модел кардам =) бояд ҳаракат кунад ва бо ҷаҳони беруна муошират кунад. Фақат фаҳмидани он муҳим буд, ки Ягонагӣ чист, раванди рушд чӣ гуна аст ва барои эҷоди чизе чӣ қадар заҳмат лозим аст. Ҳамин тавр лоиҳаи Demo Architect таваллуд шудааст (ном тақрибан аз ғазаб ихтироъ шудааст). Барномасозӣ, моделсозӣ, аниматсия, матнсозӣ ба ман шояд ду моҳи кори ҳаррӯзаро сарф мекард.

Ман бо видеоҳои дарсӣ дар YouTube дар бораи чӣ гуна сохтани моделҳои 3D дар он оғоз кардам Блэнент. Blender як абзори ройгони бепул барои моделсозии 3D (ва бештар), ки насбро талаб намекунад. Ва дар ин ҷо маро як зарбае интизор буд ... Маълум мешавад, ки моделсозӣ, аниматсия, матнҳо мавзӯъҳои азими ҷудогона мебошанд, ки шумо метавонед дар онҳо китоб нависед. Ин махсусан ба персонажхо дахл дорад. Барои моделсозии ангуштҳо, дандонҳо, чашмҳо ва дигар қисмҳои бадан ба шумо дониши анатомия лозим аст. Мушакҳои рӯй чӣ гуна ҷойгир шудаанд? Одамон чӣ гуна ҳаракат мекунанд? Ман маҷбур будам, ки устухонҳоро ба ҳар як даст, по, ангушт, буғумҳо "даровардам"!

Модели клавиатура, фишангҳои устухони иловагӣ, то ки аниматсия табиӣ ба назар расад. Пас аз чунин дарсҳо шумо мефаҳмед, ки эҷодкорони филмҳои тасвирӣ чӣ кори бузургеро анҷом медиҳанд, танҳо барои эҷоди 30 сония видео. Аммо филмҳои 3D соатҳо давом мекунанд! Ва он гоҳ мо аз театрҳо мебароем ва чунин мегӯем: "Та, мультфилм / филми зишт! Онҳо метавонистанд беҳтар кор кунанд ..." Аблаҳон!

Ва як чизи дигар дар бораи барномасозӣ дар ин лоиҳа. Тавре маълум шуд, барои ман аз ҳама ҷолиб бахши риёзӣ буд. Агар шумо саҳнаро иҷро кунед (пайванд ба анбори тавсифи лоиҳа), шумо хоҳед дид, ки камера дар атрофи қаҳрамони духтар дар сфера давр мезанад. Барои барномарезии чунин гардиши камера, ба ман лозим омад, ки аввал координатаҳои нуқтаи мавқеъро дар доира (2D) ва баъд дар сфера (3D) ҳисоб кунам. Аҷиб ин аст, ки ман математикаро дар мактаб бад медоштам ва онро бо минус медонистам. Қисман, эҳтимол, аз он сабаб, ки дар мактаб онҳо ба шумо намефаҳмонанд, ки ин математика дар ҳаёт чӣ гуна истифода мешавад. Аммо вақте ки шумо ба ҳадафи худ банд ҳастед, орзу мекунед, он гоҳ ақл тоза мешавад, ошкор мешавад! Ва шумо вазифаҳои мураккабро ҳамчун як саёҳати ҳаяҷонбахш қабул мекунед. Ва он гоҳ шумо фикр мекунед: "Хуб, чаро математики * маҳбуб * одатан гуфта натавонист, ки ин формулаҳоро ба куҷо такя кардан мумкин аст?".

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Ҳисоб кардани формулаҳо барои ҳисоб кардани координатаҳои нуқта дар доира ва кура (аз дафтари ман)

Бозии 1

  • Платформа: Windows (дар Windows 7, 10 озмуда шудааст)
  • Забон: Ман фикр мекунам, ки он бо C пок навишта шудааст
  • Муҳаррики бозӣ: консол Windows
  • Илҳом: javidx9
  • Анбор: GitHub

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Бозии оддии мор

Саҳнаи 3D бозӣ нест. Илова бар ин, моделсозӣ ва аниматсия кардани объектҳои 3D (хусусан аломатҳо) тӯлонӣ ва душвор аст. Пас аз бозӣ кардан бо Unity, ман фаҳмидам, ки ман бояд аз асосҳо идома диҳам, ё дурусттараш, оғоз кунам. Як чизи оддӣ ва зуд, аммо ҳамзамон глобалӣ, барои фаҳмидани сохтори бозиҳо.

Ва мо чӣ содда ва зуд дорем? Ин дуруст аст, консол ва 2D. Аниқтараш, ҳатто консол ва рамзҳо. Боз ба ҷустуҷӯи илҳом дар интернет шурӯъ кардам (дар маҷмӯъ, ман интернетро инқилобтарин ва хатарноктарин ихтирооти асри XNUMX медонам). Ман як видеои як барномасозеро, ки консол Tetris сохтааст, кофтам. Ва ба мисли бозии худ тасмим гирифт, ки "мор"-ро бибурад. Аз видео, ман дар бораи ду чизи асосӣ омӯхтам - ҳалқаи бозӣ (бо се функсия / қисм) ва баромад ба буфер.

Давраи бозӣ метавонад чунин бошад:

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

Рамз якбора тамоми функсияи main() -ро пешниҳод мекунад. Ва давраи бозӣ пас аз шарҳи мувофиқ оғоз мешавад. Дар давра се функсияи асосӣ мавҷуданд: Input(), Logic(), Draw(). Аввалан, вуруди додаҳо Вуруд (асосан назорати пахши клавиатура), баъд коркарди маълумоти воридшуда Мантиқ, сипас дар экран намоиш дода мешавад - кашидан. Ва ҳамин тавр, ҳар як кадр. Аниматсия бо ин роҳ сохта мешавад. Ин мисли мультфильмҳост. Одатан коркарди маълумоти воридотӣ вақти бештарро мегирад ва то ҷое ки ман медонам, суръати чаҳорчӯбаи бозиро муайян мекунад. Аммо дар ин ҷо функсияи Logic() хеле зуд аст. Аз ин рӯ, суръати чаҳорчӯба бояд аз ҷониби функсияи Sleep() бо параметри gameSpeed, ки ин суръатро муайян мекунад, назорат карда шавад.

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
даври бозӣ. Барномасозии мор дар блокнот

Агар шумо бозии консолии рамзӣ таҳия карда истода бошед, пас намоиш додани маълумот дар экран бо истифода аз баромади муқаррарии ҷараёни 'cout' кор намекунад - ин хеле суст аст. Аз ин рӯ, натиҷа бояд дар буфери экран анҷом дода шавад. Ин қадар тезтар ва бозӣ бе хато кор хоҳад кард. Ростӣ, ман намефаҳмам, ки буфери экран чист ва он чӣ гуна кор мекунад. Аммо ман дар ин ҷо як мисоли рамзӣ медиҳам ва шояд касе дар шарҳҳо вазъиятро равшан кунад.

Гирифтани буфери экран (агар чунин бигӯям):

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

Натиҷаи мустақим ба экрани хати муайяни scoreLine (хат барои нишон додани холҳо):

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

Дар назария, дар ин бозӣ ҳеҷ чизи мушкиле нест, ба назари ман як намунаи хуби бозии сатҳи ибтидоӣ ба назар мерасад. Рамз дар як файл навишта шуда, дар якчанд вазифаҳо ҷойгир карда шудааст. На синфҳо, на мерос. Шумо худатон метавонед ҳама чизро дар коди сарчашмаи бозӣ тавассути рафтан ба анбори GitHub бубинед.

Бозии 2 Танкҳои девона

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Бозии Crazy Tanks

Чоп кардани аломатҳо дар консол шояд соддатарин чизест, ки шумо метавонед ба бозӣ табдил диҳед. Аммо баъд як мушкилӣ пайдо мешавад: аломатҳо баландӣ ва паҳнои гуногун доранд (баландӣ аз паҳнои калонтар аст). Ҳамин тариқ, ҳама чиз номутаносиб ба назар мерасад ва ба поён ё боло ҳаракат кардан назар ба чап ё рост ҳаракат кардан тезтар ба назар мерасад. Ин таъсир дар «Мор» (бозии 1) хеле намоён аст. "Танкҳо" (Бозии 2) чунин камбудӣ надоранд, зеро натиҷа дар он ҷо тавассути ранг кардани пикселҳои экран бо рангҳои гуногун ташкил карда мешавад. Шумо метавонед бигӯед, ки ман рендерер навиштаам. Дуруст аст, ки ин аллакай каме мураккабтар аст, гарчанде ки хеле ҷолибтар аст.

Барои ин бозӣ тавсиф кардани системаи ман барои намоиши пикселҳо дар экран кофӣ хоҳад буд. Ман фикр мекунам, ки ин қисми асосии бозӣ аст. Ва ҳама чизи дигаре, ки шумо метавонед бо худ биёед.

Ҳамин тавр, он чизе, ки шумо дар экран мебинед, танҳо маҷмӯи росткунҷаҳои рангаи ҳаракаткунанда аст.

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Маҷмӯи росткунҷа

Ҳар як росткунҷа бо матритсаи пур аз рақамҳо ифода карда мешавад. Дар омади гап, ман метавонам як нозуки ҷолибро қайд кунам - ҳамаи матритсаҳо дар бозӣ ҳамчун массиви якченака барномарезӣ шудаанд. На дучанд, балки якченака! Массивҳои якченака кор кардан бо онҳо хеле осонтар ва тезтар аст.

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Намунаи матритсаи танки бозӣ

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Намояндагии матритсаи як танки бозӣ бо массиви якченака

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Намунаи бештари тасвирии муаррифии матритса бо массиви якченака

Аммо дастрасӣ ба элементҳои массив дар як ҳалқаи дучандон сурат мегирад, ки гӯё он массиви якченака не, балки массиви дученака бошад. Ин барои он анҷом дода мешавад, ки мо то ҳол бо матритсаҳо кор мекунем.

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Гузаронидани массиви якченака дар даври дукарата. Y ID сатр, X ID сутун аст

Лутфан таваҷҷӯҳ намоед, ки ба ҷои идентификаторҳои муқаррарии матритсаи i, j, ман идентификаторҳои x ва y -ро истифода мебарам. Ҳамин тавр, ба назари ман, бештар ба чашм писанд ва ба майна равшантар менамояд. Илова бар ин, чунин қайд имкон медиҳад, ки матритсаҳои истифодашаванда ба меҳварҳои координатавии тасвири дученака қулай проексия карда шаванд.

Акнун дар бораи пикселҳо, ранг ва намоиш. Функсияи StretchDIBits (Сарлавҳа: windows.h; Китобхона: gdi32.lib) барои баромад истифода мешавад. Дар байни чизҳои дигар, ба ин функсия инҳо интиқол дода мешаванд: дастгоҳе, ки дар он тасвир намоиш дода мешавад (дар ҳолати ман, ин консол Windows аст), координатаҳои оғози намоиши тасвир, паҳнӣ / баландии он ва тасвир худ дар шакли bitmap (bitmap), ки бо массиви байтҳо муаррифӣ шудааст. Bitmap ҳамчун массиви байтҳо!

Функсияи StretchDIBits() дар кор:

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

Хотира барои ин bitmap бо истифода аз функсияи VirtualAlloc() пешакӣ ҷудо карда мешавад. Яъне миқдори зарурии байтҳо барои нигоҳ доштани маълумот дар бораи ҳамаи пикселҳо ҷудо карда мешавад, ки баъдан дар экран намоиш дода мешаванд.

Сохтани харитаи bitmapMemory m_p_bitmap:

// create bitmap
   int bitmapMemorySize = (PMATRIX_WIDTH * PMATRIX_HEIGHT) * BYTES_PER_PIXEL;
   void* m_p_bitmapMemory = VirtualAlloc(0, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);

Тахминан, битмап аз маҷмӯи пикселҳо иборат аст. Ҳар чор байт дар массив як пиксели RGB аст. Як байт барои як арзиши сурх, як байт барои як арзиши сабз (G) ва як байт барои ранги кабуд (B). Илова бар ин, дар як абзор як байт мавҷуд аст. Ин се ранг - Сурх / Сабз / Кабуд (RGB) - бо ҳамдигар дар таносуби гуногун омехта мешаванд - ва ранги пиксел дар натиҷа ба даст меояд.

Акнун, боз, ҳар як росткунҷа ё объекти бозӣ бо матритсаи ададҳо ифода карда мешавад. Ҳамаи ин объектҳои бозӣ дар маҷмӯа ҷойгир карда шудаанд. Ва он гоҳ онҳо дар майдони бозӣ ҷойгир карда, як матритсаи бузурги ададӣ ташкил медиҳанд. Ман ҳар як рақами матритсаро ба ранги мушаххас харита кардам. Масалан, рақами 8 кабуд, рақами 9 зард, рақами 10 хокистарии тира ва ғайра аст. Ҳамин тариқ, мо гуфта метавонем, ки мо матритсаи майдони бозӣ дорем, ки дар он ҳар як рақам як навъ ранг аст.

Ҳамин тавр, мо аз як тараф матритсаи ададии тамоми майдони бозӣ ва аз тарафи дигар харитаи бит барои намоиши тасвир дорем. То ҳол, bitmap "холӣ" аст - он ҳанӯз дар бораи пикселҳои ранги дилхоҳ маълумот надорад. Ин маънои онро дорад, ки қадами охирин пур кардани харитаи bitmap бо маълумот дар бораи ҳар як пиксел дар асоси матритсаи ададии майдони бозӣ хоҳад буд. Намунаи равшани чунин тағирот дар расми зер оварда шудааст.

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Намунаи пур кардани харитаи bitmap (матрисаи пиксел) бо маълумот дар асоси матритсаи ададӣ (матрисаи рақамӣ) майдони бозӣ (индексҳои рангҳо ба индексҳои бозӣ мувофиқат намекунанд)

Ман инчунин як пораи рамзи воқеиро аз бозӣ пешниҳод мекунам. Ба тағирёбандаи colorIndex дар ҳар як такрори давра аз матритсаи ададии майдони бозӣ (mainDigitalMatrix) арзиш (индекси ранг) таъин карда мешавад. Сипас худи ранг ба тағирёбандаи ранг дар асоси индекс навишта мешавад. Ғайр аз он, ранги натиҷа ба таносуби сурх, сабз ва кабуд (RGB) тақсим карда мешавад. Ва дар якҷоягӣ бо абзор (pixelPadding), ин маълумот ба пиксел такрор ба такрор навишта мешавад ва дар харитаи бит тасвири ранга ташкил медиҳад.

Рамз нишондиҳандаҳо ва амалиёти битвиро истифода мебарад, ки фаҳмидани онҳо душвор буда метавонад. Аз ин рӯ, ман ба шумо маслиҳат медиҳам, ки дар ҷое алоҳида хонед, ки чӣ гуна чунин сохторҳо кор мекунанд.

Пур кардани харитаи bitmap бо маълумот дар асоси матритсаи ададии майдони бозӣ:

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

Тибқи усули дар боло тавсифшуда, дар бозии Crazy Tanks як расм (чорчӯба) ташкил карда мешавад ва дар экран дар функсияи Draw() намоиш дода мешавад. Пас аз бақайдгирии клавиатураҳо дар функсияи Input() ва коркарди минбаъдаи онҳо дар функсияи Logic() расми нав (рамка) ба вуҷуд меояд. Дуруст аст, ки объектҳои бозӣ аллакай дар майдони бозӣ мавқеи дигар дошта метавонанд ва мувофиқан дар ҷои дигар кашида мешаванд. Аниматсия (ҳаракат) ҳамин тавр сурат мегирад.

Дар назария (агар шумо чизеро фаромӯш накарда бошед), фаҳмидани ҳалқаи бозӣ аз бозии аввал ("Мор") ва системаи намоиши пикселҳо дар экран аз бозии дуюм ("Танкҳо") танҳо барои навиштани ҳама чиз лозим аст. бозиҳои 2D-и шумо барои Windows. Бесадо! 😉 Қисмҳои боқимонда танҳо як парвози афсонавӣ мебошанд.

Албатта, бозии "Танкҳо" нисбат ба "Мор" хеле мураккабтар тарҳрезӣ шудааст. Ман аллакай забони C++-ро истифода кардам, яъне ман объектҳои гуногуни бозиро бо синфҳо тавсиф кардам. Ман коллексияи шахсии худро офаридаам - шумо метавонед кодро дар headers/Box.h бубинед. Дар омади гап, коллексия эҳтимолан ихроҷи хотира дорад. Нишондиҳандаҳои истифодашуда. Бо хотира кор мекард. Бояд гуям, ки китоб ба ман ёрии калон расонд. Оғози C++ тавассути барномасозии бозӣ. Ин оғози хубест барои шурӯъкунандагон дар C++. Он хурд, ҷолиб ва хуб ташкил карда шудааст.

Барои таҳияи ин бозӣ тақрибан шаш моҳ лозим шуд. Ман асосан ҳангоми хӯроки нисфирӯзӣ ва хӯрокхӯрӣ дар ҷои кор менависам. Дар ошхонаи офис нишаста, хӯрокро пой зада, код навишт. Ё дар хона барои хӯроки шом. Ҳамин тавр, ман чунин "ҷангҳои ошхона" гирифтам. Чун ҳамеша, ман аз дафтар фаъолона истифода мебурдам ва ҳама чизҳои консептуалӣ дар он таваллуд шудаанд.

Дар охири қисми амалӣ, ман якчанд сканҳои дафтарамро мебарорам. Барои нишон додани он ки ман маҳз чиро навишта, кашида, ҳисоб, тарҳрезӣ мекардам…

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Тарҳрезии тасвири танк. Ва таърифи он, ки ҳар як танк бояд дар экран чанд пикселро ишғол кунад

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Ҳисоб кардани алгоритм ва формулаҳои гардиши зарф дар атрофи меҳвари он

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Диаграммаи коллексияи ман (яке бо ихроҷи хотира, эҳтимоли зиёд). Маҷмӯа ҳамчун Рӯйхати алоқаманд сохта шудааст

DevOps C++ ва "ҷангҳои ошхона", ё чӣ гуна ман ҳангоми хӯрокхӯрӣ ба навиштани бозиҳо шурӯъ кардам
Ва ин кӯшишҳои бефоида барои ворид кардани зеҳни сунъӣ ба бозӣ мебошанд

Теория

"Ҳатто як сафари ҳазор мил аз қадами аввал оғоз мешавад" (Ҳикмати Чини қадим)

Биёед аз амалия ба назария гузарем! Чӣ тавр шумо барои маҳфилҳои худ вақт пайдо мекунед?

  1. Муайян кунед, ки шумо дар ҳақиқат чӣ мехоҳед (афсус, ин мушкилтарин аст).
  2. Афзалиятҳоро муқаррар кунед.
  3. Барои афзалиятҳои олӣ ҳама "зиёдатӣ" -ро қурбон кунед.
  4. Ҳар рӯз ба сӯи ҳадафҳои худ ҳаракат кунед.
  5. Интизор нашавед, ки барои як маҳфил ду ё се соат вақти холӣ хоҳад буд.

Аз як тараф, шумо бояд муайян кунед, ки чӣ мехоҳед ва афзалият диҳед. Аз тарафи дигар, ба манфиати ин афзалиятҳо аз баъзе парвандаҳо / лоиҳаҳо даст кашидан мумкин аст. Ба ибораи дигар, шумо бояд ҳама чизи "зиёдатӣ" -ро қурбон кунед. Ман дар ҷое шунидам, ки дар зиндагӣ ҳадди аксар се фаъолияти асосӣ вуҷуд дошта бошад. Он гоҳ шумо метавонед бо онҳо ба таври беҳтарин мубориза баред. Ва лоиҳаҳо / самтҳои иловагӣ ба корни изофабор оғоз мекунанд. Аммо ин ҳама, шояд субъективӣ ва фардӣ бошад.

Як қоидаи тиллоӣ вуҷуд дорад: ҳеҷ гоҳ рӯзи 0% надоред! Ман дар ин бора дар мақолаи як таҳиягари Indi фаҳмидам. Агар шумо дар болои лоиҳа кор карда истода бошед, пас ҳар рӯз дар бораи он коре кунед. Ва муҳим нест, ки шумо чӣ қадар кор мекунед. Як калима ё як сатри рамз нависед, як видеои дарсӣ тамошо кунед ё як мехро ба тахта гузоред - танҳо коре кунед. Қисмати душвортарин оғоз аст. Вақте ки шумо оғоз мекунед, шумо эҳтимол каме бештар аз он ки мехостед, кор хоҳед кард. Ҳамин тавр, шумо ҳамеша ба сӯи ҳадафи худ ҳаракат хоҳед кард ва ба ман бовар кунед, хеле зуд. Охир, тормози асосии хама чиз кашолкорй аст.

Ва бояд дар хотир дошт, ки шумо набояд аз "савора"-и ройгони вақт дар 5, 10, 15 дақиқа беэътиноӣ кунед, интизор шавед, ки як ё ду соат тӯл мекашад. Оё шумо дар навбат истодаед? Дар бораи чизе барои лоиҳаи худ фикр кунед. Оё шумо ба эскалатор меравед? Дар дафтар чизе нависед. Оё шумо дар автобус хӯрок мехӯред? Хуб, як мақола хонед. Ҳар як имкониятро истифода баред. Дар YouTube тамошои сагу гурбаро бас кунед! Бо майнаи худ кор накунед!

Ва охирин. Агар пас аз хондани ин мақола ба шумо идеяи эҷоди бозиҳо бе истифодаи муҳаррикҳои бозӣ маъқул бошад, пас номи Кейси Мураториро дар хотир доред. Ин бача дорад сомона. Дар бахши "тамошо -> ЭПИСОДҲОИ ПЕШИН" шумо дарсҳои аҷиби видеоиро дар бораи чӣ гуна аз сифр сохтани бозии касбӣ хоҳед ёфт. Шумо метавонед дар панҷ дарси Intro to C for Windows назар ба панҷ соли таҳсил дар донишгоҳ бештар маълумот гиред (касе дар ин бора дар шарҳҳои зери видео навиштааст).

Кейси инчунин мефаҳмонад, ки тавассути таҳияи муҳаррики бозии худ, шумо дар бораи ҳама гуна муҳаррикҳои мавҷуда фаҳмиши беҳтар хоҳед дошт. Дар ҷаҳони чаҳорчӯба, ки дар он ҳама кӯшиш мекунанд, ки автоматизатсия кунанд, шумо чӣ гуна эҷод карданро меомӯзед, на истифода. Фаҳмидани худи табиати компютерҳо. Ва шумо инчунин як барномасози оқилтар ва баркамолтар хоҳед шуд - профессионал.

Дар роҳи интихобкардаатон барори кор! Ва биёед ҷаҳонро бештар касбӣ гардонем.

Муаллиф: Гранкин Андрей, DevOps



Манбаъ: will.com