ProHoster > Blogs > AdministrÄcija > DevOps C++ un "virtuves kari" jeb KÄ es sÄku rakstÄ«t spÄles ÄÅ”anas laikÄ
DevOps C++ un "virtuves kari" jeb KÄ es sÄku rakstÄ«t spÄles ÄÅ”anas laikÄ
"Es zinu, ka es neko nezinu." Sokrats
PriekÅ” kura: IT cilvÄkiem, kuri nospļaujas uz visiem izstrÄdÄtÄjiem un vÄlas spÄlÄt savas spÄles!
Par ko: kÄ sÄkt rakstÄ«t spÄles C/C++, ja nepiecieÅ”ams!
KÄpÄc jums vajadzÄtu lasÄ«t Å”o: LietotÅu izstrÄde nav mana darba specialitÄte, bet cenÅ”os kodÄt katru nedÄļu. Jo man patÄ«k spÄles!
Sveiki, mans vÄrds ir Andrejs Grankins, Es esmu DevOps uzÅÄmumÄ Luxoft. Lietojumprogrammu izstrÄde nav mana darba specialitÄte, bet cenÅ”os kodÄt katru nedÄļu. Jo man patÄ«k spÄles!
DatorspÄļu industrija ir milzÄ«ga, mÅ«sdienÄs tiek baumots pat vairÄk nekÄ filmu industrija. SpÄles tiek rakstÄ«tas kopÅ” datoru izstrÄdes sÄkuma, izmantojot, pÄc mÅ«sdienu standartiem, sarežģītas un pamata izstrÄdes metodes. Laika gaitÄ sÄka parÄdÄ«ties spÄļu dzinÄji ar jau ieprogrammÄtu grafiku, fiziku un skaÅu. Tie ļauj koncentrÄties uz paÅ”as spÄles attÄ«stÄ«bu un neuztraukties par tÄs pamatiem. Bet kopÄ ar tiem, ar dzinÄjiem, izstrÄdÄtÄji "akli" un degradÄjas. Pati spÄļu ražoÅ”ana tiek uzlikta uz konveijera. Un produkcijas kvantitÄte sÄk dominÄt pÄr tÄs kvalitÄti.
TajÄ paÅ”Ä laikÄ, spÄlÄjot citu cilvÄku spÄles, mÅ«s pastÄvÄ«gi ierobežo atraÅ”anÄs vietas, sižets, varoÅi, spÄļu mehÄnika, ko izdomÄjuÅ”i citi cilvÄki. TÄpÄc es sapratu, ka...
ā¦ ir pienÄcis laiks izveidot savas pasaules, kas ir pakļautas tikai man. Pasaules, kur es esmu TÄvs un DÄls un SvÄtais Gars!
Un es patiesi ticu, ka, uzrakstot savu spÄles dzinÄju un uz tÄ spÄli, jÅ«s varÄsiet atvÄrt acis, noslaucÄ«t logus un sÅ«knÄt savu salonu, kļūstot par pieredzÄjuÅ”Äku un neatÅemamu programmÄtÄju.
Å ajÄ rakstÄ es mÄÄ£inÄÅ”u pastÄstÄ«t, kÄ es sÄku rakstÄ«t mazÄs spÄles C / C ++, kÄds ir izstrÄdes process un kur es atrodu laiku hobijam rosÄ«gÄ vidÄ. Tas ir subjektÄ«vs un apraksta individuÄlÄ starta procesu. MateriÄls par neziÅu un ticÄ«bu, par manu personÄ«go Ŕī brīža pasaules ainu. Citiem vÄrdiem sakot, "AdministrÄcija nav atbildÄ«ga par jÅ«su personÄ«gajÄm smadzenÄm!".
Prakse
"ZinÄÅ”anas bez prakses ir bezjÄdzÄ«gas, prakse bez zinÄÅ”anÄm ir bÄ«stama." KonfÅ«cijs
Mana piezÄ«mju grÄmatiÅa ir mana dzÄ«ve!
TÄtad praksÄ varu teikt, ka man viss sÄkas ar piezÄ«mju grÄmatiÅu. Es tur pierakstu ne tikai savus ikdienas darbus, bet arÄ« zÄ«mÄju, programmÄju, veidoju blokshÄmas un risinu uzdevumus, arÄ« matemÄtiskos. VienmÄr izmantojiet piezÄ«mju grÄmatiÅu un rakstiet tikai ar zÄ«muli. Tas ir tÄ«rs, Ärts un uzticams, IMHO.
Mana (jau aizpildÄ«ta) piezÄ«mju grÄmatiÅa. Tas izskatÄs Å”Ädi. TajÄ ir ikdienas uzdevumi, idejas, zÄ«mÄjumi, diagrammas, risinÄjumi, melnÄ grÄmatvedÄ«ba, kods utt.
Å ajÄ posmÄ man izdevÄs pabeigt trÄ«s projektus (tas ir manÄ izpratnÄ par āgalÄ«gumuā, jo jebkuru produktu var attÄ«stÄ«t salÄ«dzinoÅ”i bezgalÄ«gi).
Projekts 0: Ŕī ir arhitekta demonstrÄcijas 3D aina, kas rakstÄ«ta C#, izmantojot Unity spÄles dzinÄju. MacOS un Windows platformÄm.
Pirmais projekts tika realizÄts nevis C/C++, bet gan C#, izmantojot Unity spÄļu dzinÄju. Å is dzinÄjs nebija tik prasÄ«gs pret aparatÅ«ru kÄ Unreal Engine, kÄ arÄ« man Ŕķita vieglÄk uzstÄdÄ«t un lietot. Es nedomÄju par citiem dzinÄjiem.
MÄrÄ·is VienotÄ«bÄ man nebija attÄ«stÄ«t kaut kÄdu spÄli. Es gribÄju izveidot 3D ainu ar sava veida raksturu. ViÅam vai, pareizÄk sakot, ViÅai (es modelÄju meiteni, kurÄ biju iemÄ«lÄjusies =) bija jÄkustas un jÄsadarbojas ar Ärpasauli. Bija svarÄ«gi tikai saprast, kas ir VienotÄ«ba, kÄds ir izstrÄdes process un cik daudz pūļu, lai kaut ko izveidotu. TÄ radÄs Arhitektu Demo projekts (nosaukums tika izdomÄts gandrÄ«z no muļķības). ProgrammÄÅ”ana, modelÄÅ”ana, animÄcija, teksturÄÅ”ana man prasÄ«ja, iespÄjams, divus mÄneÅ”us ilga ikdienas darba.
Es sÄku ar mÄcÄ«bu video vietnÄ YouTube par 3D modeļu izveidi blenderis. Blenderis ir lielisks bezmaksas rÄ«ks 3D modelÄÅ”anai (un citiem), kam nav nepiecieÅ”ama instalÄÅ”ana. Un te mani sagaidÄ«ja Å”oks... IzrÄdÄs, modelÄÅ”ana, animÄcija, teksturÄÅ”ana ir milzÄ«gas atseviŔķas tÄmas, par kurÄm var rakstÄ«t grÄmatas. ÄŖpaÅ”i tas attiecas uz varoÅiem. Lai modelÄtu pirkstus, zobus, acis un citas Ä·ermeÅa daļas, jums bÅ«s nepiecieÅ”amas zinÄÅ”anas par anatomiju. KÄ ir sakÄrtoti sejas muskuļi? KÄ cilvÄki pÄrvietojas? Man vajadzÄja āieliktā kaulus katrÄ rokÄ, kÄjÄ, pirkstÄ, pirkstu locÄ«tavÄs!
ModelÄjiet atslÄgas kaulu, papildu kaula sviras, lai animÄcija izskatÄ«tos dabiski. PÄc Å”ÄdÄm nodarbÄ«bÄm saproti, kÄdu milzÄ«gu darbu paveic animÄcijas filmu veidotÄji, lai tikai izveidotu 30 sekunžu video. Bet 3D filmas ilgst stundas! Un tad mÄs iznÄkam no kinoteÄtriem un sakÄm kaut ko lÄ«dzÄ«gu: āTa, sÅ«dÄ«ga multfilma/filma! ViÅi varÄja darÄ«t labÄkā¦ā Muļķi!
Un vÄl viena lieta par programmÄÅ”anu Å”ajÄ projektÄ. KÄ izrÄdÄ«jÄs, man visinteresantÄkÄ bija matemÄtiskÄ daļa. Ja palaižat ainu (projekta aprakstÄ ir saite uz repozitoriju), pamanÄ«sit, ka kamera griežas ap meitenes varoni sfÄrÄ. Lai ieprogrammÄtu Å”Ädu kameras rotÄciju, man vispirms bija jÄaprÄÄ·ina pozÄ«cijas punkta koordinÄtas uz apļa (2D), bet pÄc tam uz sfÄras (3D). SmieklÄ«gÄkais ir tas, ka es ienÄ«du matemÄtiku skolÄ un zinÄju to ar mÄ«nusu. DaļÄji, iespÄjams, tÄpÄc, ka skolÄ jums vienkÄrÅ”i nepaskaidro, kÄ Å”Ä« matemÄtika tiek pielietota dzÄ«vÄ. Bet, kad esi apsÄsts ar savu mÄrÄ·i, sapni, tad prÄts iztÄ«rÄs, atklÄjas! Un jÅ«s sÄkat uztvert sarežģītus uzdevumus kÄ aizraujoÅ”u piedzÄ«vojumu. Un tad jÅ«s domÄjat: "KÄpÄc *mīļotais* matemÄtiÄ·is nevarÄja normÄli pateikt, kur Ŕīs formulas var izmantot?".
Formulu aprÄÄ·ins apļa un sfÄras punkta koordinÄtu aprÄÄ·inÄÅ”anai (no manas piezÄ«mju grÄmatiÅas)
1. spÄle
Platforma: Windows (pÄrbaudÄ«ts operÄtÄjsistÄmÄ Windows 7, 10)
Valoda: Es domÄju, ka tas bija rakstÄ«ts tÄ«rÄ C valodÄ
3D aina nav spÄle. TurklÄt 3D objektu (Ä«paÅ”i rakstzÄ«mju) modelÄÅ”ana un animÄÅ”ana ir ilga un sarežģīta. PaspÄlÄjoties ar VienotÄ«bu, sapratu, ka jÄturpina, pareizÄk sakot, jÄsÄk no pamatiem. Kaut kas vienkÄrÅ”s un Ätrs, bet tajÄ paÅ”Ä laikÄ globÄls, lai saprastu paÅ”u spÄļu uzbÅ«vi.
Un kas mums ir vienkÄrÅ”s un Ätrs? TieÅ”i tÄ, konsole un 2D. PrecÄ«zÄk, pat konsole un simboli. Atkal sÄku meklÄt iedvesmu internetÄ (vispÄr internetu uzskatu par XNUMX. gadsimta revolucionÄrÄko un bÄ«stamÄko izgudrojumu). Es izraku video ar vienu programmÄtÄju, kurÅ” izveidoja konsoli Tetris. Un savas spÄles lÄ«dzÄ«bÄ viÅÅ” nolÄma nocirst "ÄÅ«sku". No video es uzzinÄju par divÄm fundamentÄlÄm lietÄm - spÄles cilpu (ar trim pamatfunkcijÄm / daļÄm) un izvadi uz buferi.
SpÄles cilpa varÄtu izskatÄ«ties Å”Ädi:
int main()
{
Setup();
// a game loop
while (!quit)
{
Input();
Logic();
Draw();
Sleep(gameSpeed); // game timing
}
return 0;
}
Kods vienlaikus parÄda visu galveno () funkciju. Un spÄles cikls sÄkas pÄc atbilstoÅ”Ä komentÄra. CiklÄ ir trÄ«s pamatfunkcijas: Input (), Logic (), Draw (). PirmkÄrt, ievades datu ievade (galvenokÄrt taustiÅu nospieÅ”anas kontrole), pÄc tam ievadÄ«to datu apstrÄde LoÄ£ika, pÄc tam attÄloÅ”ana uz ekrÄna - Draw. Un tÄ katrs kadrs. AnimÄcija tiek veidota Å”ÄdÄ veidÄ. Tas ir kÄ karikatÅ«ras. Parasti ievades datu apstrÄde aizÅem visvairÄk laika un, cik man zinÄms, nosaka spÄles kadru Ätrumu. Bet Å”eit funkcija Logic () ir ļoti Ätra. TÄpÄc kadru nomaiÅas Ätrums ir jÄkontrolÄ, izmantojot funkciju Sleep() ar parametru gameSpeed, kas nosaka Å”o Ätrumu.
Ja izstrÄdÄjat simbolisku konsoles spÄli, tad datu parÄdÄ«Å”ana ekrÄnÄ, izmantojot parasto straumes izvadi 'cout', nedarbosies - tas ir ļoti lÄns. TÄpÄc izvade jÄveic ekrÄna buferÄ«. Tik daudz ÄtrÄk, un spÄle darbosies bez traucÄjumiem. GodÄ«gi sakot, es Ä«sti nesaprotu, kas ir ekrÄna buferis un kÄ tas darbojas. Bet es te doÅ”u koda piemÄru, un varbÅ«t kÄds komentÄros varÄs noskaidrot situÄciju.
TieÅ”a izvade uz noteiktas lÄ«nijas scoreLine ekrÄnu (rinda rezultÄtu parÄdÄ«Å”anai):
// draw the score
WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);
TeorÄtiski Å”ajÄ spÄlÄ nav nekÄ sarežģīta, man tas Ŕķiet labs sÄkuma lÄ«meÅa spÄles piemÄrs. Kods ir ierakstÄ«ts vienÄ failÄ un sakÄrtots vairÄkÄs funkcijÄs. Nav Ŕķiru, nav mantojuma. JÅ«s pats varat redzÄt visu spÄles avota kodÄ, dodoties uz GitHub repozitoriju.
2. spÄle Trakie tanki
Platforma: Windows (pÄrbaudÄ«ts operÄtÄjsistÄmÄ Windows 7, 10)
RakstzÄ«mju drukÄÅ”ana konsolÄ, iespÄjams, ir vienkÄrÅ”ÄkÄ lieta, ko varat pÄrvÄrst par spÄli. Bet tad parÄdÄs viena problÄma: rakstzÄ«mÄm ir atŔķirÄ«gs augstums un platums (augstums ir lielÄks par platumu). TÄdÄjÄdi viss izskatÄ«sies nesamÄrÄ«gi, un kustÄ«ba uz leju vai augÅ”up ŔķitÄ«s daudz ÄtrÄka nekÄ kustÄ«ba pa kreisi vai pa labi. Å is efekts ir ļoti pamanÄms "ÄÅ«skÄ" (1. spÄle). "Tankiem" (2. spÄle) nav Å”Äda trÅ«kuma, jo tur izvade tiek organizÄta, krÄsojot ekrÄna pikseļus ar dažÄdÄm krÄsÄm. VarÄtu teikt, ka uzrakstÄ«ju renderÄtÄju. Tiesa, Å”is jau ir nedaudz sarežģītÄks, lai gan daudz interesantÄks.
Å ai spÄlei pietiks, lai aprakstÄ«tu manu sistÄmu pikseļu parÄdÄ«Å”anai ekrÄnÄ. ManuprÄt, Ŕī ir spÄles galvenÄ daļa. Un visu pÄrÄjo jÅ«s varat izdomÄt pats.
TÄtad ekrÄnÄ redzamais ir tikai kustÄ«gu krÄsainu taisnstÅ«ru kopums.
Taisnstūra komplekts
Katru taisnstÅ«ri attÄlo matrica, kas piepildÄ«ta ar cipariem. Starp citu, varu izcelt vienu interesantu niansi ā visas matricas spÄlÄ ir ieprogrammÄtas kÄ viendimensionÄls masÄ«vs. Nevis divdimensionÄls, bet viendimensionÄls! Ar viendimensijas masÄ«viem ir daudz vieglÄk un ÄtrÄk strÄdÄt.
SpÄles tvertnes matricas piemÄrs
SpÄles tvertnes matricas attÄlojums ar viendimensiju masÄ«vu
IlustratÄ«vÄks piemÄrs matricas attÄlojumam ar viendimensijas masÄ«vu
Bet piekļuve masÄ«va elementiem notiek dubultÄ cilpÄ, it kÄ tas nebÅ«tu viendimensionÄls, bet gan divdimensiju masÄ«vs. Tas tiek darÄ«ts, jo mÄs joprojÄm strÄdÄjam ar matricÄm.
Viendimensijas masÄ«va ŔķÄrsoÅ”ana dubultÄ cilpÄ. Y ir rindas ID, X ir kolonnas ID
LÅ«dzu, Åemiet vÄrÄ, ka parasto matricas identifikatoru i, j vietÄ es izmantoju identifikatorus x un y. TÄtad, man Ŕķiet, acij tÄ«kamÄk un smadzenÄm skaidrÄk. TurklÄt Å”Äds apzÄ«mÄjums ļauj Ärti projicÄt izmantotÄs matricas uz divdimensiju attÄla koordinÄtu asÄ«m.
Tagad par pikseļiem, krÄsÄm un displeju. Izvadei tiek izmantota funkcija StretchDIBits (galvene: windows.h; bibliotÄka: gdi32.lib). Cita starpÄ Å”ai funkcijai tiek nodots: ierÄ«ce, kurÄ tiek parÄdÄ«ts attÄls (manÄ gadÄ«jumÄ tÄ ir Windows konsole), attÄla parÄdÄ«Å”anas sÄkuma koordinÄtas, tÄ platums/augstums un attÄls pati bitkartes (bitkartes) formÄ, ko attÄlo baitu masÄ«vs. Bitkarte kÄ baitu masÄ«vs!
Funkcija StretchDIBits() darbojas:
// 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
);
AtmiÅa Å”ai bitkartei tiek pieŔķirta iepriekÅ”, izmantojot funkciju VirtualAlloc(). Tas ir, nepiecieÅ”amais baitu skaits ir rezervÄts, lai saglabÄtu informÄciju par visiem pikseļiem, kas pÄc tam tiks parÄdÄ«ti ekrÄnÄ.
Aptuveni runÄjot, bitkarte sastÄv no pikseļu kopas. Katrs Äetri baiti masÄ«vÄ ir RGB pikseļi. Viens baits katrai sarkanajai vÄrtÄ«bai, viens baits katrai zaļajai vÄrtÄ«bai (G) un viens baits katrai zilajai krÄsai (B). TurklÄt katrÄ ievilkumÄ ir viens baits. Å Ä«s trÄ«s krÄsas - Red / Green / Blue (RGB) - tiek sajauktas savÄ starpÄ dažÄdÄs proporcijÄs - un tiek iegÅ«ta iegÅ«tÄ pikseļu krÄsa.
Tagad atkal katrs taisnstÅ«ris vai spÄles objekts tiek attÄlots ar skaitļu matricu. Visi Å”ie spÄles objekti ir ievietoti kolekcijÄ. Un tad tie tiek novietoti spÄles laukumÄ, veidojot vienu lielu skaitlisku matricu. Es kartÄju katru matricas skaitli ar noteiktu krÄsu. PiemÄram, cipars 8 ir zils, cipars 9 ir dzeltens, cipars 10 ir tumÅ”i pelÄks utt. TÄdÄjÄdi mÄs varam teikt, ka mums ir spÄles lauka matrica, kur katrs skaitlis ir sava veida krÄsa.
TÄtad, no vienas puses, mums ir visa spÄles lauka skaitliskÄ matrica un, no otras puses, bitkarte attÄla parÄdÄ«Å”anai. PagaidÄm bitkarte ir "tukÅ”a" ā tajÄ vÄl nav informÄcijas par vÄlamÄs krÄsas pikseļiem. Tas nozÄ«mÄ, ka pÄdÄjais solis bÅ«s bitkartes aizpildÄ«Å”ana ar informÄciju par katru pikseļu, pamatojoties uz spÄles lauka skaitlisko matricu. IlustratÄ«vs Å”Ädas transformÄcijas piemÄrs ir attÄlÄ zemÄk.
PiemÄrs bitkartes (pikseļu matricas) aizpildÄ«Å”anai ar informÄciju, kuras pamatÄ ir spÄles lauka skaitliskÄ matrica (digitÄlÄ matrica) (krÄsu indeksi nesakrÄ«t ar spÄles rÄdÄ«tÄjiem)
Es arÄ« iepazÄ«stinÄÅ”u ar reÄlu kodu no spÄles. MainÄ«gajam colorIndex katrÄ cilpas iterÄcijÄ tiek pieŔķirta vÄrtÄ«ba (krÄsu indekss) no spÄles lauka skaitliskÄs matricas (mainDigitalMatrix). PÄc tam pati krÄsa tiek ierakstÄ«ta krÄsu mainÄ«gajÄ, pamatojoties uz indeksu. TurklÄt iegÅ«tÄ krÄsa tiek sadalÄ«ta sarkanÄs, zaļÄs un zilÄs (RGB) attiecÄ«bÄs. Un kopÄ ar atkÄpi (pixelPadding) Ŕī informÄcija tiek ierakstÄ«ta pikselÄ« atkal un atkal, veidojot krÄsainu attÄlu bitkartÄ.
Kods izmanto norÄdes un bitu darbÄ«bas, kuras var bÅ«t grÅ«ti saprast. TÄpÄc iesaku kaut kur atseviŔķi izlasÄ«t, kÄ Å”Ädas struktÅ«ras darbojas.
Bitkartes aizpildÄ«Å”ana ar informÄciju, pamatojoties uz spÄles lauka skaitlisko matricu:
// 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;
}
SaskaÅÄ ar iepriekÅ” aprakstÄ«to metodi Crazy Tanks spÄlÄ tiek izveidots viens attÄls (rÄmis), kas tiek parÄdÄ«ts ekrÄnÄ funkcijÄ Draw(). PÄc taustiÅsitienu reÄ£istrÄÅ”anas funkcijÄ Input() un to turpmÄkÄs apstrÄdes funkcijÄ Logic() veidojas jauns attÄls (rÄmis). Tiesa, spÄles objektiem jau var bÅ«t cita pozÄ«cija spÄles laukumÄ un attiecÄ«gi tie tiek zÄ«mÄti citÄ vietÄ. TÄ notiek animÄcija (kustÄ«ba).
TeorÄtiski (ja jÅ«s neko neesat aizmirsis), lai izprastu spÄles cilpu no pirmÄs spÄles (āSnakeā) un pikseļu parÄdÄ«Å”anas sistÄmu ekrÄnÄ no otrÄs spÄles (āTanksā), ir viss, kas jums nepiecieÅ”ams, lai uzrakstÄ«tu jebkuru no jÅ«su 2D spÄlÄm operÄtÄjsistÄmai Windows. Bez skaÅas! š PÄrÄjÄs daļas ir tikai iedomas lidojums.
Protams, spÄle "Tanks" ir izstrÄdÄta daudz sarežģītÄk nekÄ "ÄÅ«ska". Es jau izmantoju C++ valodu, tas ir, aprakstÄ«ju dažÄdus spÄļu objektus ar klasÄm. Es izveidoju savu kolekciju - kodu var redzÄt headers/Box.h. Starp citu, kolekcijai, visticamÄk, ir atmiÅas noplÅ«de. Lietotas norÄdes. StrÄdÄja ar atmiÅu. JÄsaka, ka grÄmata man ļoti palÄ«dzÄja. C++ sÄkums, izmantojot spÄļu programmÄÅ”anu. Å is ir lielisks sÄkums C++ iesÄcÄjiem. Tas ir mazs, interesants un labi organizÄts.
Å Ä«s spÄles izstrÄde aizÅÄma apmÄram seÅ”us mÄneÅ”us. RakstÄ«ju galvenokÄrt pusdienu un uzkodu laikÄ darbÄ. ViÅÅ” sÄdÄja biroja virtuvÄ, stutÄja ar Ädienu un rakstÄ«ja kodu. Vai arÄ« mÄjÄs vakariÅÄs. TÄ nu man sanÄca tÄdi "virtuves kari". KÄ vienmÄr aktÄ«vi izmantoju piezÄ«mju grÄmatiÅu, un tajÄ dzima visas konceptuÄlÄs lietas.
PraktiskÄs daļas beigÄs izvilkÅ”u dažus savas piezÄ«mju grÄmatiÅas skenÄjumus. ParÄdÄ«t, ko tieÅ”i es pierakstÄ«ju, zÄ«mÄju, skaitÄ«ju, projektÄju...
Tvertnes attÄla dizains. Un definÄ«cija par to, cik pikseļu katrai tvertnei vajadzÄtu aizÅemt ekrÄnÄ
Algoritma un formulu aprÄÄ·ins tvertnes grieÅ”anai ap savu asi
Manas kolekcijas diagramma (visticamÄk, ar atmiÅas noplÅ«di). Kolekcija ir izveidota kÄ saistÄ«tais saraksts
Un tie ir veltÄ«gi mÄÄ£inÄjumi ieskrÅ«vÄt spÄlÄ mÄkslÄ«go intelektu
Š¢ŠµŠ¾ŃŠøŃ
"Pat tÅ«kstoÅ” jÅ«džu ceļojums sÄkas ar pirmo soli" (SenÄs Ä·Ä«nieÅ”u gudrÄ«bas)
PÄrejam no prakses uz teoriju! KÄ atrodi laiku savam hobijam?
Nosakiet, ko jÅ«s patieÅ”Äm vÄlaties (diemžÄl tas ir visgrÅ«tÄkais).
Nosakiet prioritÄtes.
UpurÄ visu "lieko" augstÄku prioritÄÅ”u vÄrdÄ.
Katru dienu virzieties uz saviem mÄrÄ·iem.
Negaidiet, ka hobijam būs divas vai trīs stundas brīva laika.
No vienas puses, jums ir jÄnosaka, ko vÄlaties, un jÄnosaka prioritÄte. No otras puses, ir iespÄjams atteikties no dažiem gadÄ«jumiem / projektiem par labu Ŕīm prioritÄtÄm. Citiem vÄrdiem sakot, jums bÅ«s jÄupurÄ viss "liekais". Kaut kur dzirdÄju, ka dzÄ«vÄ jÄbÅ«t maksimÄli trim galvenajÄm aktivitÄtÄm. Tad jÅ«s varÄsiet ar tiem tikt galÄ vislabÄkajÄ iespÄjamajÄ veidÄ. Un papildu projekti/virzieni sÄks pÄrslodzes. Bet tas viss, iespÄjams, ir subjektÄ«vi un individuÄli.
Ir zinÄms zelta likums: nekad nav 0% dienas! Es par to uzzinÄju indie izstrÄdÄtÄja rakstÄ. Ja strÄdÄjat pie projekta, dariet kaut ko lietas labÄ katru dienu. Un tas nav svarÄ«gi, cik daudz jÅ«s nopelnÄt. Uzrakstiet vienu vÄrdu vai vienu koda rindiÅu, noskatieties vienu mÄcÄ«bu video vai ieduriet vienu naglu tÄfelÄ ā vienkÄrÅ”i dariet kaut ko. GrÅ«tÄkais ir sÄkt. Kad sÄksit, iespÄjams, darÄ«sit nedaudz vairÄk, nekÄ gribÄjÄt. TÄtad jÅ«s pastÄvÄ«gi virzÄ«sities uz savu mÄrÄ·i un, ticiet man, ļoti Ätri. Galu galÄ galvenÄ visu lietu bremze ir vilcinÄÅ”anÄs.
Un ir svarÄ«gi atcerÄties, ka nevajadzÄtu par zemu novÄrtÄt un ignorÄt brÄ«vÄs laika "zÄÄ£u skaidas" 5, 10, 15 minÅ«tÄs, gaidÄ«t kÄdu lielu "baļķi", kas ilgst stundu vai divas. Vai jÅ«s stÄvat rindÄ? PadomÄjiet par kaut ko savam projektam. Vai jÅ«s dodaties augÅ”Ä pa eskalatoru? Pierakstiet kaut ko piezÄ«mju grÄmatiÅÄ. Vai tu Äd autobusÄ? Labi, izlasi kÄdu rakstu. Izmantojiet katru iespÄju. PÄrtrauciet skatÄ«ties kaÄ·us un suÅus pakalpojumÄ YouTube! Nejauciet smadzenes!
Un pÄdÄjais. Ja pÄc Ŕī raksta izlasÄ«Å”anas jums patika ideja izveidot spÄles, neizmantojot spÄļu dzinÄjus, atcerieties vÄrdu Keisijs Muratori. Å im puisim ir mÄjas lapa. SadaÄ¼Ä "skatÄ«ties -> IEPRIEKÅ ÄJÄS SÄRIJAS" jÅ«s atradÄ«siet pÄrsteidzoÅ”as bezmaksas video pamÄcÄ«bas par to, kÄ izveidot profesionÄlu spÄli no nulles. JÅ«s varat uzzinÄt vairÄk piecÄs C intro nodarbÄ«bÄs operÄtÄjsistÄmai Windows nekÄ piecu gadu laikÄ, mÄcoties universitÄtÄ (kÄds par to rakstÄ«ja komentÄros zem videoklipa).
Keisijs arÄ« paskaidro, ka, izstrÄdÄjot savu spÄļu dzinÄju, jÅ«s labÄk izpratÄ«sit visus esoÅ”os dzinÄjus. Ietvaru pasaulÄ, kur visi cenÅ”as automatizÄt, jÅ«s uzzinÄsiet, kÄ izveidot, nevis izmantot. Izprast datoru bÅ«tÄ«bu. Un jÅ«s kļūsiet arÄ« daudz inteliÄ£entÄks un nobrieduÅ”Äks programmÄtÄjs - profesionÄlis.
Veiksmi izvÄlÄtajÄ ceļÄ! Un padarÄ«sim pasauli profesionÄlÄku.