{"id":29846,"date":"2019-10-31T21:32:19","date_gmt":"2019-10-31T18:32:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\/"},"modified":"2019-10-31T21:32:19","modified_gmt":"2019-10-31T18:32:19","slug":"igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","title":{"rendered":"M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus\" src=\"\/wp-content\/uploads\/2019\/03\/ea25406c43ac90ce2e33e290168d1083.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelles artiklis r\u00e4\u00e4gin ma oma isiklikust kogemusest v\u00e4ikese m\u00e4ngu arendamisel Rustis. T\u00f6\u00f6tava versiooni loomine v\u00f5ttis aega umbes 24 tundi (peamiselt t\u00f6\u00f6tasin \u00f5htuti v\u00f5i n\u00e4dalavahetustel). M\u00e4ng on endiselt kaugel valmimisest, kuid arvan, et kogemus tuleb kasuks. R\u00e4\u00e4gin, mida \u00f5ppisin, ja m\u00f5ningatest t\u00e4helepanekutest, mis tegin m\u00e4ngu nullist ehitamise k\u00e4igus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox soovitab:<\/b> Kaks aastat praktilist kursust <noindex><a rel=\"nofollow\" href=\"https:\/\/iamwebdev.skillbox.ru\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=WEBDEVPRO&amp;utm_content=articles&amp;utm_term=rust24\">\u201eMina \u2013 PRO veebiarendaja\u201c<\/a><\/noindex>.<\/p>\n<p><b>Tuletame meelde:<\/b> <i>k\u00f5igile \u00abHabr\u00bb lugejatele \u2013 10 000 rubla allahindlus igale Skillboxi kursusele, kasutades sooduskoodi \u00abHabr\u00bb.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Miks Rust?<\/h3>\n<p>\nValisin selle keele, kuna olin sellest palju head kuulnud ja n\u00e4en, et see muutub m\u00e4ngude arenduse alal \u00fcha populaarsemaks. Enne m\u00e4ngu kirjutamist oli mul natuke kogemust lihtsate rakenduste arendamisel Rustis. Seda oli just parajalt, et tunda teatud vabadust m\u00e4ngu kirjutamisel.<\/p>\n<h3>Miks just m\u00e4ng ja mis m\u00e4ng?<\/h3>\n<p>\nM\u00e4ngude loomine on l\u00f5bus! Sooviksin, et p\u00f5hjus oleks rohkem, kuid \u201ekodu\u201c projektide jaoks valin teemasid, mis ei ole liiga tihedalt seotud minu tavalise t\u00f6\u00f6ga. Mis m\u00e4ng see on? Soovisin teha midagi sarnast tennisem\u00e4ngimise simulaatorile, kus on \u00fchendatud Cities Skylines, Zoo Tycoon, Prison Architect ja tenis ise. L\u00fchidalt, tekkis tennisekadeemia m\u00e4ng, kuhu inimesed tulevad m\u00e4ngima.<\/p>\n<h3>Tehniline ettevalmistus<\/h3>\n<p>\nSoovisin kasutada Rusti, aga ei teadnud t\u00e4pselt, kui palju tuleb alustada \u201enullist\u201c. Ma ei tahtnud kirjutada piksel\u0161eedreid ja kasutada lohista-ja-droppa, seet\u00f5ttu otsisin k\u00f5ige paindlikumaid lahendusi.<\/p>\n<p>Leidsin kasulikke ressursse, millega jagan teiega:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/arewegameyet.com\/\">Are we game yet<\/a><\/noindex> \u2014 nimekiri vajalikest m\u00e4ngu arendamise elementidest Rustis;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/rust_gamedev\">Rusti m\u00e4ngu arendamise subreddiit;<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kenney.nl\">Tasuta pikselkunst.<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nUurisin mitmeid Rusti m\u00e4ngumootoreid, valides l\u00f5puks Piston ja ggez. Olen nende kahel varasemate projektide k\u00e4igus kokku puutunud. Otsustasin ggez'i kasuks, kuna see tundus sobivam v\u00e4ikese 2D-m\u00e4ngu realiseerimiseks. Pistoni modulaarne struktuur on liiga keeruline algavale arendajale (v\u00f5i kellelegi, kes t\u00f6\u00f6tab Rustiga esmakordselt).<\/p>\n<h3>M\u00e4ngu struktuur<\/h3>\n<p>\nK\u00e4isin veidi aega projekti arhitektuuri \u00fcle m\u00f5tlema. Esimene samm on luua \u201emaa\u201c, inimesed ja tennisekorterid. Inimesed peavad liikuma korterite vahel ja ootama. M\u00e4ngijatel peaks olema oskused, mis ajas paranevad. Lisaks peab olema redigeerija, mis v\u00f5imaldab uusi inimesi ja kortereid lisada, kuid see ei ole enam tasuta.<\/p>\n<p>P\u00e4rast k\u00f5ike l\u00e4bim\u00f5tlemist asusin t\u00f6\u00f6le. <\/p>\n<h3>M\u00e4ngu loomine<\/h3>\n<p>\n<b>Algus: ringid ja abstraktsioonid<\/b><\/p>\n<p>V\u00f5tsin eeskuju ggez'ist ja sain ringi ekraanile. \u00dcllatav! N\u00fc\u00fcd m\u00f5ned abstraktsioonid. Tundus, et oleks hea abstraktida m\u00e4nguobjekti ideest. Iga objekt peab olema joonistatud ja uuendatud, nagu siin n\u00e4idatud:<\/p>\n<pre><code class=\"rust\">\/\/ the game object trait\ntrait GameObject {\n    fn update(&amp;mut self, _ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt;;\n    fn draw(&amp;mut self, ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt;;\n}\n \n\/\/ a specific game object - Circle\nstruct Circle {\n    position: Point2,\n}\n \n impl Circle {\n    fn new(position: Point2) -&gt; Circle {\n        Circle { position }\n    }\n}\nimpl GameObject for Circle {\n    fn update(&amp;mut self, _ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt; {\n        Ok(())\n    }\n    fn draw(&amp;mut self, ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt; {\n        let circle =\n            graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;\n \n         graphics::draw(ctx, &amp;circle, na::Point2::new(0.0, 0.0), 0.0)?;\n        Ok(())\n    }\n}<\/code><\/pre>\n<p>\nSee koodil\u00f5ik v\u00f5imaldas mul saada suurep\u00e4rase objektiloendi, mida ma saan uuendada ja joonistada sama h\u00e4sti toimivas ts\u00fcklis.<\/p>\n<pre><code class=\"rust\">mpl event::EventHandler for MainState {\n    fn update(&amp;mut self, context: &amp;mut Context) -&gt; GameResult {\n        \/\/ Uuenda k\u00f5ik objektid\n        for object in self.objects.iter_mut() {\n            object.update(context)?;\n        }\n \n        Ok(())\n    }\n \n    fn draw(&amp;mut self, context: &amp;mut Context) -&gt; GameResult {\n        graphics::clear(context);\n \n        \/\/ Joonista k\u00f5ik objektid\n        for object in self.objects.iter_mut() {\n            object.draw(context)?;\n        }\n \n        graphics::present(context);\n \n        Ok(())\n    }\n}<\/code><\/pre>\n<p>\nmain.rs on vajalik, kuna seal on k\u00f5ik koodiread. Kulutasin natuke aega, et jagada failid ja optimeerida kaustastruktuuri. Nii see k\u00f5ik p\u00e4rast seda v\u00e4lja n\u00e4eb:<br \/>\n<i>resources -&gt; siia kogunevad k\u00f5ik varad (pildid)<br \/>\nsrc<br \/>\n \u2014 entities<br \/>\n \u2014 game_object.rs<br \/>\n \u2014 circle.rs<br \/>\n \u2014 main.rs -&gt; peats\u00fckkel<\/i><\/p>\n<p><b>Inimesed, platsid ja pildid<\/b><\/p>\n<p>J\u00e4rgmine etapp on m\u00e4nguobjekti Person loomine ja piltide laadimine. K\u00f5ik peab olema ehitatud 32*32 plaadi alusel.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus\" src=\"\/wp-content\/uploads\/2019\/03\/265ed79e6784ef0180cfdc5aa8d96a4c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Tennis platsid<\/b><\/p>\n<p>Uurides, millised tennisplatsid v\u00e4lja n\u00e4evad, otsustasin need valmistada 4*2 plaatidest. Alguses v\u00f5is teha sellise suurusega pildi v\u00f5i kokku panna 8 eraldi plaati. Kuid hiljem sain aru, et on vajalikud vaid kaks ainulaadset plaati ja siin on miks.<\/p>\n<p>Kokku on meil kaks sellist plaati: 1 ja 2.<\/p>\n<p>Iga platsiosa koosneb plaatidest 1 v\u00f5i 2. Need v\u00f5ivad olla paigutatud tavaliselt v\u00f5i p\u00f6\u00f6ratud 180 kraadi.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus\" src=\"\/wp-content\/uploads\/2019\/03\/90d07caea0dee8673ada5d44963ab347.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>P\u00f5hirakenduse (kokkupaneku) re\u017eiim<\/b><\/p>\n<p>P\u00e4rast seda, kui suudasin joonistada platsid, inimesed ja kaardid, m\u00f5istsin, et on vajalik ka p\u00f5hikokkupaneku re\u017eiim. Selle rakendasin j\u00e4rgmiselt: kui nuppu vajutada - objekt valitakse ja klikk asetab selle soovitud kohta. Nii v\u00f5imaldab nupp 1 valida plats, ja nupp 2 valida m\u00e4ngija.<\/p>\n<p>Kuid peame ka meeles pidama, mida 1 ja 2 t\u00e4hendavad, seega lisasin wireframe'i, et oleks selge, milline objekt on valitud. Nii see v\u00e4lja n\u00e4eb.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus\" src=\"\/wp-content\/uploads\/2019\/03\/09b92828fb9b8d4bfa5d5178ca99613c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>K\u00fcsimused arhitektuuri ja refaktoreerimise kohta<\/b><\/p>\n<p>N\u00fc\u00fcd on mul mitu m\u00e4nguobjekti: inimesed, v\u00e4ljakud ja korrused. Kuid et wireframe'id t\u00f6\u00f6taksid, tuleb iga objekti olemasolu kohta teada anda, kas objektid on demonstreerimisre\u017eiimis v\u00f5i on lihtsalt raami joonistatud. See ei ole eriti mugav.<\/p>\n<p>Mul tundus, et on vaja arhitektuuri \u00fcmber m\u00f5elda, et tuvastada teatud piirangud:<\/p>\n<ul>\n<li>olemasolu objekt, mis kuvab ja uuendab ennast, on probleem, kuna see objekt ei saa \u00abteada\u00bb, mida ta peaks renderdama \u2014 pilti ja wireframe'i;<\/li>\n<li>puudub t\u00f6\u00f6riist omaduste ja k\u00e4itumise jagamiseks eraldi objektide vahel (n\u00e4ide \u2014 omadus is_build_mode v\u00f5i k\u00e4itumise joonistamine). Saaks kasutada p\u00e4randit, kuigi Rustis ei ole selle rakendamiseks normaalseid viise. Mis mul t\u00f5eliselt vajalik oli \u2014 see oli kompositsioon;<\/li>\n<li>t\u00f6\u00f6riist objektidevaheliseks suhtlemiseks oli vajalik, et m\u00e4\u00e4rata inimesed v\u00e4ljakutele;<\/li>\n<li>iseendid olid andmete ja loogika segu, mis l\u00e4ks v\u00e4ga kiiresti kontrolli alt v\u00e4lja.<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i>Tegin lisauuringu ja avastasin arhitektuuri <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS \u2014 Entity Component System<\/a><\/noindex>, mida kasutatakse tavaliselt m\u00e4ngudes. Siin on ECS-i eelised:<\/p>\n<ul>\n<li>andmed on eraldatud loogikast;<\/li>\n<li>kompositsioon p\u00e4randi asemel;<\/li>\n<li>andmep\u00f5hine arhitektuur.<\/li>\n<\/ul>\n<p><\/i><\/p><\/blockquote>\n<p>\nECS-il on kolm p\u00f5hikontseptsiooni:<\/p>\n<ul>\n<li>olendid \u2014 objekti t\u00fc\u00fcp, millele viitab identifikaator (see v\u00f5ib olla m\u00e4ngija, pall v\u00f5i miski muu);<\/li>\n<li>komponendid \u2014 neist koosnevad olendid. N\u00e4ide \u2014 renderdamise, asukoha ja muud komponendid. Need on andmete hoidlad;<\/li>\n<li>s\u00fcsteemid \u2014 need kasutavad nii objekte kui ka komponente, pluss sisaldavad k\u00e4itumist ja loogikat, mis p\u00f5hineb nende andmete p\u00f5hjal. N\u00e4ide \u2014 renderdamise s\u00fcsteem, mis l\u00e4bib k\u00f5ik olendid koos renderdamise komponentidega ja tegeleb renderdamisega.<\/li>\n<\/ul>\n<p>\nP\u00e4rast uurimist selgus, et ECS lahendab j\u00e4rgmised probleemid:<\/p>\n<ul>\n<li>kompositsiooni rakendamine p\u00e4randi asemel objektide s\u00fcsteemse korraldamise jaoks; <\/li>\n<li>koodi segadusest vabanemine juhtimiss\u00fcsteemide abil; <\/li>\n<li>meetodite kasutamine nagu is_build_mode, et hoida wireframe'i loogikat samas kohas \u2014 renderdamise s\u00fcsteemis.<\/li>\n<\/ul>\n<p>\nNii n\u00e4gi v\u00e4lja p\u00e4rast ECS-i rakendamist.<\/p>\n<p><i>resources -&gt; siia kogunevad k\u00f5ik varad (pildid)<br \/>\nsrc<br \/>\n \u2014 komponendid<br \/>\n \u2014 position.rs<br \/>\n \u2014 person.rs<br \/>\n \u2014 tennis_court.rs<br \/>\n \u2014 floor.rs<br \/>\n \u2014 wireframe.rs<br \/>\n \u2014 mouse_tracked.rs<br \/>\n \u2014 ressursid<br \/>\n \u2014 mouse.rs<br \/>\n \u2014 s\u00fcsteemid<br \/>\n \u2014 rendering.rs<br \/>\n \u2014 constants.rs<br \/>\n \u2014 utils.rs<br \/>\n \u2014 world_factory.rs -&gt; maailmadehitusfunktsioonid<br \/>\n \u2014 main.rs -&gt; peats\u00fckkel<\/i><\/p>\n<h3>M\u00e4\u00e4rasime inimesed v\u00e4ljakutele<\/h3>\n<p>\nECS tegi elu lihtsamaks. N\u00fc\u00fcd oli mul s\u00fcsteemne viis andmete lisamiseks olenditesse ja nendele andmetele p\u00f5hineva loogika lisamiseks. See v\u00f5imaldas omakorda korraldada inimeste jaotust v\u00e4ljakutele.<\/p>\n<p>Mida ma tegin:<\/p>\n<ul>\n<li>lisasin m\u00e4\u00e4ratud v\u00e4ljakute andmed Isikule;<\/li>\n<li>lisasin jaotatud inimeste andmed Tenniservile;<\/li>\n<li>lisasin CourtChoosingSystem, mis anal\u00fc\u00fcsib inimesi ja v\u00e4ljakuid, tuvastab saadavalolevad v\u00e4ljakud ja jagab m\u00e4ngijad nende vahel;<\/li>\n<li>lisasin s\u00fcsteemi PersonMovementSystem, mis otsib inimesi, kes on m\u00e4\u00e4ratud v\u00e4ljakutele, ning kui neid seal pole, suunab inimesi vajalikku kohta.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus\" src=\"\/wp-content\/uploads\/2019\/03\/f2e4632de2cb9d1c3ec7c9d9310b8170.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Teeme kokkuv\u00f5tte<\/h3>\n<p>\nMulle v\u00e4ga meeldis t\u00f6\u00f6tada selle lihtsa m\u00e4ngu kallal. Veelgi enam, olen rahul, et kasutasin selle kirjutamiseks Rusti, kuna:<\/p>\n<ul>\n<li>Rust annab sulle selle, mida vajad;<\/li>\n<li>tal on suurep\u00e4rane dokumentatsioon, Rust on \u00e4\u00e4rmiselt elegantne;<\/li>\n<li>p\u00fcsivus on \u00e4ge;<\/li>\n<li>ei ole vaja kasutada t\u00fckeldamist, kopeerimist v\u00f5i muid sarnaseid tegevusi, mida ma sageli C++-s tegin;<\/li>\n<li>Options on v\u00e4ga mugavad, nad k\u00e4sitlevad vigu suurep\u00e4raselt;<\/li>\n<li>kui projekt \u00f5nnestub kompileerida, t\u00f6\u00f6tab see 99% ajast just nii, nagu peab. Compileri veateated on minu arvates parimad, mida olen n\u00e4inud.<\/li>\n<\/ul>\n<p>\nM\u00e4ngude arendamine Rustis on hetkel alles algusj\u00e4rgus. Kuid juba on olemas stabiilne ja \u00fcsna suur kogukond, mis t\u00f6\u00f6tab selle nimel, et avada Rust k\u00f5igile. Seet\u00f5ttu vaatan keele tulevikku optimistlikult, oodates meie \u00fchise t\u00f6\u00f6 tulemusi.<\/p>\n<blockquote><p><b>Skillbox soovitab:<\/b><\/p>\n<ul>\n<li>Veebikursus <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/frontend-developer\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=FRENDEV&amp;utm_content=articles&amp;utm_term=rust24\">\u00abFrontend-arendaja amet\u00bb<\/a><\/noindex>.<\/li>\n<li>Praktiline kursus <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/agima\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=AGIMA&amp;utm_content=articles&amp;utm_term=rust24\">\u00abMobiilne arendaja PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Praktiline aastakursus <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/php\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PHPDEV&amp;utm_content=articles&amp;utm_term=rust24\">\u00abPHP-arendaja 0-st PRO-ni\u00bb<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\n<\/p><\/blockquote>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/444364\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u0433\u0440\u044b \u043d\u0430 Rust. \u041d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 24 \u0447\u0430\u0441\u043e\u0432 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u043e \u0432\u0435\u0447\u0435\u0440\u0430\u043c \u0438\u043b\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445). \u0418\u0433\u0440\u0430 \u0435\u0449\u0435 \u0434\u0430\u043b\u0435\u043a\u0430 \u043e\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043e\u043f\u044b\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0435\u043c\u0443 \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c, \u0438 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u0445, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-29846","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0433\u0440\u0430 \u043d\u0430 Rust \u0437\u0430 24 \u0447\u0430\u0441\u0430: \u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:32:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:32:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47M\u00e4ng Rustis 24 tunni jooksul: isiklik arenduskogemus | ProHoster","description":"Selles artiklis r\u00e4\u00e4gin isiklikust kogemusest.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0433\u0440\u0430 \u043d\u0430 Rust \u0437\u0430 24 \u0447\u0430\u0441\u0430: \u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435.","og:url":"https:\/\/prohoster.info\/et\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:32:19+00:00","article:modified_time":"2019-10-31T18:32:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"29846","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-20 22:43:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:47:36","updated":"2026-01-20 22:43:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/29846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=29846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/29846\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=29846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=29846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=29846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}