{"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\/az\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","title":{"rendered":"Rust oynayaraq 24 saat: \u015f\u0259xsi inki\u015faf t\u0259cr\u00fcb\u0259si","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Rust oynayaraq 24 saat: \u015f\u0259xsi inki\u015faf t\u0259cr\u00fcb\u0259si\" src=\"\/wp-content\/uploads\/2019\/03\/ea25406c43ac90ce2e33e290168d1083.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBu m\u0259qal\u0259d\u0259 m\u0259n Rust-da ki\u00e7ik bir oyun inki\u015faf etdirm\u0259k haqq\u0131nda \u015f\u0259xsi t\u0259cr\u00fcb\u0259mi payla\u015faca\u011fam. \u0130\u015fl\u0259k versiyan\u0131 yaratmaq \u00fc\u00e7\u00fcn t\u0259xmin\u0259n 24 saat vaxt s\u0259rf olunub (\u0259sas\u0259n ax\u015famlar v\u0259 ya h\u0259ft\u0259 sonlar\u0131 \u00e7al\u0131\u015fd\u0131m). Oyun h\u0259l\u0259 tamamlanmay\u0131b, amma d\u00fc\u015f\u00fcn\u00fcr\u0259m ki, t\u0259cr\u00fcb\u0259 faydal\u0131 olacaq. M\u0259n n\u0259 \u00f6yr\u0259ndiyimi v\u0259 oyunu s\u0131f\u0131rdan qurark\u0259n \u0259ld\u0259 etdiyim b\u0259zi m\u00fc\u015fahid\u0259l\u0259ri payla\u015faca\u011fam.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox t\u00f6vsiy\u0259 edir:<\/b> \u0130ki illik praktiki kurs <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\">\u00abM\u0259n - PRO veb inki\u015faf\u00e7\u0131s\u0131yam\u00bb<\/a><\/noindex>.<\/p>\n<p><b>Xat\u0131rlad\u0131r\u0131q:<\/b> <i>b\u00fct\u00fcn \u00abHabr\u00bb oxucular\u0131na \u2014 \u00abHabr\u00bb promo kodu il\u0259 Skillbox-dak\u0131 h\u0259r hans\u0131 kursa qeydiyyat zaman\u0131 10 000 rubl endirim.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Niy\u0259 Rust?<\/h3>\n<p>\nBu dili se\u00e7dim, \u00e7\u00fcnki onun haqq\u0131nda \u00e7ox \u015fey e\u015fitmi\u015fdim v\u0259 oyun inki\u015faf etdirm\u0259 sah\u0259sind\u0259 getdikc\u0259 daha \u00e7ox populyarla\u015fd\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcr\u0259m. Oyun yazmadan \u0259vv\u0259l Rust-da sad\u0259 t\u0259tbiql\u0259rin inki\u015faf\u0131nda ki\u00e7ik bir t\u0259cr\u00fcb\u0259m var idi. Bu, oyunu yazark\u0259n m\u00fc\u0259yy\u0259n bir azadl\u0131\u011f\u0131n oldu\u011funu hiss etm\u0259k \u00fc\u00e7\u00fcn kifay\u0259t q\u0259d\u0259r idi.<\/p>\n<h3>Niy\u0259 m\u0259hz oyun v\u0259 hans\u0131 oyun?<\/h3>\n<p>\nOyun yaratmaq \u0259yl\u0259nc\u0259lidir! Daha \u00e7ox s\u0259b\u0259b olsun ist\u0259rdim, amma \u00abev\u00bb layih\u0259l\u0259ri \u00fc\u00e7\u00fcn m\u00f6vzular se\u00e7\u0259rk\u0259n, adi i\u015fiml\u0259 \u00e7ox s\u0131x ba\u011fl\u0131 olmayanlar\u0131 se\u00e7ir\u0259m. Hansi oyun? M\u0259n Cities Skylines, Zoo Tycoon, Prison Architect v\u0259 tennisin birl\u0259\u015fdiyi bir tennis simulyatorunun bir versiyas\u0131n\u0131 yaratmaq ist\u0259yirdim. Y\u0259ni, n\u0259tic\u0259d\u0259 insanlar\u0131n oynamaq \u00fc\u00e7\u00fcn g\u0259ldiyi bir tennis akademiyas\u0131 haqq\u0131nda bir oyun ortaya \u00e7\u0131xd\u0131.<\/p>\n<h3>Texniki haz\u0131rl\u0131q<\/h3>\n<p>\nRust istifad\u0259 etm\u0259k ist\u0259yirdim, amma n\u0259 q\u0259d\u0259r \u00abs\u0131f\u0131rdan\u00bb ba\u015flamaq laz\u0131m oldu\u011funu d\u0259qiq bilmir\u0259dim. Piksel \u015feyderl\u0259ri yazmaq v\u0259 drag-n-drop istifad\u0259 etm\u0259k ist\u0259mirdim, ona g\u00f6r\u0259 d\u0259 \u0259n \u00e7evik h\u0259ll\u0259ri axtar\u0131rd\u0131m.<\/p>\n<p>Sizinl\u0259 b\u00f6l\u00fc\u015fd\u00fcy\u00fcm faydal\u0131 resurslar tapd\u0131m:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/arewegameyet.com\/\">Are we game yet<\/a><\/noindex> \u2014 oyun inki\u015faf\u0131 \u00fc\u00e7\u00fcn laz\u0131m olan Rust elementl\u0259rinin siyah\u0131s\u0131;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/rust_gamedev\">Rust oyun inki\u015faf\u0131 subredditi;<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kenney.nl\">Pulsuz piksel inc\u0259s\u0259n\u0259t.<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nBir ne\u00e7\u0259 Rust oyun motorunu \u00f6yr\u0259ndim, n\u0259tic\u0259d\u0259 Piston v\u0259 ggez-i se\u00e7dim. Onlarla \u0259vv\u0259lki layih\u0259md\u0259 rastla\u015fm\u0131\u015fd\u0131m. N\u0259tic\u0259d\u0259 ggez-i se\u00e7dim, \u00e7\u00fcnki o ki\u00e7ik bir 2D oyunun h\u0259yata ke\u00e7irilm\u0259si \u00fc\u00e7\u00fcn daha uy\u011fun g\u00f6r\u00fcn\u00fcrd\u00fc. Piston-un modul strukturu yeni ba\u015flayan bir inki\u015faf\u00e7\u0131 (v\u0259 ya Rust il\u0259 ilk d\u0259f\u0259 i\u015fl\u0259y\u0259n biri) \u00fc\u00e7\u00fcn h\u0259dd\u0259n art\u0131q m\u00fcr\u0259kk\u0259bdir.<\/p>\n<h3>Oyun strukturu<\/h3>\n<p>\nM\u0259n layih\u0259nin arxitekturas\u0131 \u00fcz\u0259rind\u0259 d\u00fc\u015f\u00fcnd\u00fcm. \u0130lk add\u0131m \u00abtorpaq\u00bb, insanlar v\u0259 tennis kortlar\u0131n\u0131 yaratmaqd\u0131r. \u0130nsanlar kortlar \u00fczr\u0259 h\u0259r\u0259k\u0259t etm\u0259li v\u0259 g\u00f6zl\u0259m\u0259lidir. Oyun\u00e7ular\u0131n zamanla inki\u015faf ed\u0259n bacar\u0131qlar\u0131 olmal\u0131d\u0131r. \u00dcst\u0259lik, yeni insanlar v\u0259 kortlar \u0259lav\u0259 etm\u0259y\u0259 imkan ver\u0259n bir redaktor olmal\u0131d\u0131r, amma bu art\u0131q pulsuz deyil.<\/p>\n<p>Ham\u0131s\u0131 d\u00fc\u015f\u00fcn\u00fcld\u00fckd\u0259n sonra, i\u015f\u0259 ba\u015flad\u0131m. <\/p>\n<h3>Oyun yaratmaq<\/h3>\n<p>\n<b>Ba\u015flan\u011f\u0131c: dair\u0259l\u0259r v\u0259 abstraksiyalar<\/b><\/p>\n<p>ggez-d\u0259n bir n\u00fcmun\u0259 g\u00f6t\u00fcrd\u00fcm v\u0259 ekranda bir dair\u0259 meydana g\u0259tirdim. T\u0259\u0259cc\u00fcbl\u00fcd\u00fcr! \u0130ndi bir az abstraxiyalar. M\u0259n oyun obyektinin ideyas\u0131ndan uzaqla\u015fma\u011f\u0131n yax\u015f\u0131 olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fcm. H\u0259r bir obyekt burada qeyd olundu\u011fu kimi render edilm\u0259li v\u0259 yenil\u0259nm\u0259lidir:<\/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>\nBu kod par\u00e7as\u0131 m\u0259n\u0259 yenil\u0259n\u0259 bil\u0259n v\u0259 render edil\u0259n \u0259la obyektl\u0259rin siyah\u0131s\u0131n\u0131 \u0259ld\u0259 etm\u0259y\u0259 imkan verdi, eyni d\u0259r\u0259c\u0259d\u0259 \u0259la bir d\u00f6vr\u0259d\u0259.<\/p>\n<pre><code class=\"rust\">mpl event::EventHandler for MainState {\n    fn update(&amp;mut self, context: &amp;mut Context) -&gt; GameResult {\n        \/\/ B\u00fct\u00fcn obyektl\u0259ri g\u00fcnc\u0259ll\u0259\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        \/\/ B\u00fct\u00fcn obyektl\u0259ri \u00e7\u0259km\u0259k\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 t\u0259l\u0259b olunur, \u00e7\u00fcnki burada b\u00fct\u00fcn kod s\u0259tirl\u0259ri var. Fayllar\u0131 b\u00f6lm\u0259y\u0259 v\u0259 direktoriyalar\u0131n strukturunu optimalla\u015fd\u0131rma\u011fa bir az vaxt s\u0259rf etdim. Budur, prosesd\u0259n sonra h\u0259r \u015fey nec\u0259 g\u00f6r\u00fcn\u00fcr:<br \/>\n<i>resources -&gt; burada b\u00fct\u00fcn resurslar (\u015f\u0259kill\u0259r) saxlan\u0131l\u0131r<br \/>\nsrc<br \/>\n \u2014 entities<br \/>\n \u2014 game_object.rs<br \/>\n \u2014 circle.rs<br \/>\n \u2014 main.rs -&gt; \u0259sas d\u00f6ng\u0259<\/i><\/p>\n<p><b>\u0130nsanlar, m\u0259kanlar v\u0259 \u015f\u0259kill\u0259r<\/b><\/p>\n<p>N\u00f6vb\u0259ti m\u0259rh\u0259l\u0259 \u2014 oyun obyekti Person yaratmaq v\u0259 \u015f\u0259kill\u0259ri y\u00fckl\u0259m\u0259k. H\u0259r \u015fey 32*32 \u00f6l\u00e7\u00fcl\u00fc plit\u0259l\u0259r \u0259sas\u0131nda in\u015fa olunmal\u0131d\u0131r.<\/p>\n<p><img decoding=\"async\" alt=\"Rust oynayaraq 24 saat: \u015f\u0259xsi inki\u015faf t\u0259cr\u00fcb\u0259si\" src=\"\/wp-content\/uploads\/2019\/03\/265ed79e6784ef0180cfdc5aa8d96a4c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Tennis kortlar\u0131<\/b><\/p>\n<p>Tennis kortlar\u0131n\u0131n nec\u0259 g\u00f6r\u00fcnd\u00fcy\u00fcn\u00fc \u00f6yr\u0259ndikd\u0259n sonra, onlar\u0131 4*2 plit\u0259l\u0259rd\u0259n haz\u0131rlama\u011fa q\u0259rar verdim. Ba\u015flan\u011f\u0131cda bel\u0259 \u00f6l\u00e7\u00fcd\u0259 \u015f\u0259kil yaratmaq m\u00fcmk\u00fcnd\u00fc ya da 8 ayr\u0131 plit\u0259ni birl\u0259\u015fdirm\u0259k olard\u0131. Lakin sonra anlad\u0131m ki, yaln\u0131z iki unikal plit\u0259 laz\u0131md\u0131r v\u0259 s\u0259b\u0259b budur.<\/p>\n<p>\u00dcmumilikd\u0259 bizd\u0259 iki bel\u0259 plit\u0259 var: 1 v\u0259 2.<\/p>\n<p>H\u0259r kortun b\u00f6lm\u0259si ya plit\u0259 1, ya da plit\u0259 2-d\u0259n ibar\u0259tdir. Onlar normal \u015f\u0259kild\u0259 yerl\u0259\u015f\u0259 bil\u0259r v\u0259 ya 180 d\u0259r\u0259c\u0259 \u00e7evril\u0259 bil\u0259r.<\/p>\n<p><img decoding=\"async\" alt=\"Rust oynayaraq 24 saat: \u015f\u0259xsi inki\u015faf t\u0259cr\u00fcb\u0259si\" src=\"\/wp-content\/uploads\/2019\/03\/90d07caea0dee8673ada5d44963ab347.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>\u018fsas in\u015faat rejimi (montaj)<\/b><\/p>\n<p>M\u0259ni meydan\u00e7alar\u0131n, insanlar\u0131n v\u0259 x\u0259rit\u0259l\u0259rin renderinqini \u0259ld\u0259 etdikd\u0259n sonra, \u0259sas montaj rejiminin d\u0259 oldu\u011funu anlad\u0131m. Bel\u0259 h\u0259yata ke\u00e7irdim: d\u00fcym\u0259 bas\u0131ld\u0131\u011f\u0131nda - obyekt se\u00e7ilir, klik is\u0259 onu laz\u0131m olan yerd\u0259 yerl\u0259\u015fdirir. Bel\u0259likl\u0259, 1 d\u00fcym\u0259si kortu se\u00e7m\u0259 imkan\u0131 verir, 2 d\u00fcym\u0259si is\u0259 oyun\u00e7unu se\u00e7ir.<\/p>\n<p>Ancaq 1 v\u0259 2-nin n\u0259yi ifad\u0259 etdiyini qeyd etm\u0259k laz\u0131m oldu\u011fu \u00fc\u00e7\u00fcn se\u00e7il\u0259n obyektin hans\u0131 oldu\u011funu anlamaq \u00fc\u00e7\u00fcn bir wireframe \u0259lav\u0259 etdim. Budur, bu nec\u0259 g\u00f6r\u00fcn\u00fcr.<\/p>\n<p><img decoding=\"async\" alt=\"Rust oynayaraq 24 saat: \u015f\u0259xsi inki\u015faf t\u0259cr\u00fcb\u0259si\" src=\"\/wp-content\/uploads\/2019\/03\/09b92828fb9b8d4bfa5d5178ca99613c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Arxitektura v\u0259 refaktorizasiya il\u0259 ba\u011fl\u0131 suallar<\/b><\/p>\n<p>\u0130ndi bir ne\u00e7\u0259 oyun obyekti var: insanlar, kortlar v\u0259 m\u0259rt\u0259b\u0259l\u0259r. Ancaq wireframe-l\u0259rin i\u015fl\u0259m\u0259si \u00fc\u00e7\u00fcn h\u0259r bir obyektin \u00f6z\u00fcn\u00fcn n\u00fcmayi\u015f rejimind\u0259 oldu\u011funu ya da yaln\u0131z kontur \u00e7\u0259kildiyini bildirm\u0259k laz\u0131md\u0131r. Bu, \u00e7ox rahatd\u0131r.<\/p>\n<p>Arxitekturan\u0131 bir az yenid\u0259n d\u00fc\u015f\u00fcnm\u0259yin laz\u0131m oldu\u011fu fikrin\u0259 g\u0259ldim ki, b\u0259zi m\u0259hdudiyy\u0259tl\u0259r ortaya \u00e7\u0131xs\u0131n:<\/p>\n<ul>\n<li>\u00f6z\u00fcn\u00fc g\u00f6st\u0259r\u0259n v\u0259 yenil\u0259y\u0259 bil\u0259n obyektin olmas\u0131 \u2014 problem, \u00e7\u00fcnki bu obyekt 'n\u0259yi' render etm\u0259li oldu\u011funu bil\u0259 bilm\u0259z \u2014 \u015f\u0259kil v\u0259 wireframe;<\/li>\n<li>ayr\u0131-ayr\u0131 obyektl\u0259r aras\u0131nda m\u00fclkiyy\u0259t v\u0259 davran\u0131\u015flar\u0131 b\u00f6l\u00fc\u015fm\u0259k \u00fc\u00e7\u00fcn al\u0259t yoxdur (m\u0259s\u0259l\u0259n \u2014 is_build_mode xass\u0259si ya da render etm\u0259 davran\u0131\u015f\u0131). \u0130rsd\u0259n istifad\u0259 etm\u0259k olard\u0131, amma Rust-da bunu h\u0259yata ke\u00e7irm\u0259k \u00fc\u00e7\u00fcn normal bir yol yoxdur. M\u0259nim ehtiyac\u0131m olan \u0259slind\u0259 kompozisiyad\u0131r;<\/li>\n<li>obyektl\u0259r aras\u0131nda qar\u015f\u0131l\u0131ql\u0131 \u0259laq\u0259 \u00fc\u00e7\u00fcn bir al\u0259t laz\u0131md\u0131r ki, insanlar\u0131 kortlara t\u0259yin ed\u0259 bilsin;<\/li>\n<li>varl\u0131qlar m\u0259lumatlar\u0131n v\u0259 m\u0259ntiqin qar\u0131\u015f\u0131\u011f\u0131n\u0131 t\u0259msil edirdi ki, bu da \u00e7ox tez kontroldan \u00e7\u0131x\u0131rd\u0131.<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i>M\u0259n \u0259lav\u0259 \u00f6yr\u0259nm\u0259 apard\u0131m v\u0259 arxitekturu k\u0259\u015ff etdim <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS \u2014 Varl\u0131q-Komponent Sistemi<\/a><\/noindex>, ad\u0259t\u0259n oyunlarda istifad\u0259 olunur. ECS-nin \u00fcst\u00fcnl\u00fckl\u0259ri bunlard\u0131r:<\/p>\n<ul>\n<li>m\u0259lumat m\u0259ntiqd\u0259n ayr\u0131l\u0131r;<\/li>\n<li>t\u0259sis etm\u0259 \u0259v\u0259zin\u0259 t\u0259rkib;<\/li>\n<li>m\u0259lumatlara y\u00f6n\u0259ldilmi\u015f arxitektura.<\/li>\n<\/ul>\n<p><\/i><\/p><\/blockquote>\n<p>\nECS-nin \u00fc\u00e7 \u0259sas konsepsiyas\u0131 var:<\/p>\n<ul>\n<li>varl\u0131qlar - identifikatorla istinad olunan obyektin n\u00f6v\u00fcd\u00fcr (bu oyun\u00e7u, top v\u0259 ya bir \u015fey ola bil\u0259r);<\/li>\n<li>komponentl\u0259r - varl\u0131qlar\u0131 yaranan t\u0259rkib hiss\u0259l\u0259ridir. M\u0259s\u0259l\u0259n - render komponenti, yerl\u0259\u015fm\u0259 v\u0259 ba\u015fqalar\u0131. Bunlar m\u0259lumatlar\u0131n anbarlar\u0131d\u0131r;<\/li>\n<li>sisteml\u0259r - h\u0259m obyektl\u0259ri, h\u0259m d\u0259 komponentl\u0259ri istifad\u0259 edir, plus bu m\u0259lumatlar \u0259sas\u0131nda davran\u0131\u015f v\u0259 m\u0259ntiqi ehtiva edir. M\u0259s\u0259l\u0259n - b\u00fct\u00fcn render komponentl\u0259ri olan varl\u0131qlar\u0131 d\u00f6vr ed\u0259n render sistemi v\u0259 onun renderl\u0259nm\u0259si il\u0259 m\u0259\u015f\u011fuldur.<\/li>\n<\/ul>\n<p>\nAra\u015fd\u0131rma n\u0259tic\u0259sind\u0259 ayd\u0131n oldu ki, ECS bel\u0259 probleml\u0259ri h\u0259ll edir:<\/p>\n<ul>\n<li>varl\u0131qlar\u0131n sistematik t\u0259\u015fkilati sxemi \u00fc\u00e7\u00fcn t\u0259rkibi istifad\u0259 etm\u0259k; <\/li>\n<li>idar\u0259etm\u0259 sisteml\u0259ri il\u0259 kodun qar\u0131\u015f\u0131\u011f\u0131ndan xilas olmaq; <\/li>\n<li>is_build_mode kimi metodlar\u0131 istifad\u0259 ed\u0259r\u0259k, m\u0259ntiqi eyni yerd\u0259 - render sistemind\u0259 saxlamaq.<\/li>\n<\/ul>\n<p>\nECS-i t\u0259tbiq etdikd\u0259n sonra g\u00f6r\u00fcn\u0259n n\u0259tic\u0259 budur.<\/p>\n<p><i>resources -&gt; burada b\u00fct\u00fcn resurslar (\u015f\u0259kill\u0259r) saxlan\u0131l\u0131r<br \/>\nsrc<br \/>\n \u2014 komponentl\u0259r<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 resurslar<br \/>\n \u2014 mouse.rs<br \/>\n \u2014 sisteml\u0259r<br \/>\n \u2014 rendering.rs<br \/>\n \u2014 constants.rs<br \/>\n \u2014 utils.rs<br \/>\n \u2014 world_factory.rs -&gt; d\u00fcnya fabriki funksiyalar\u0131<br \/>\n \u2014 main.rs -&gt; \u0259sas d\u00f6ng\u0259<\/i><\/p>\n<h3>\u0130nsanlar\u0131 kortlara t\u0259yin edirik<\/h3>\n<p>\nECS, h\u0259yat\u0131 asanla\u015fd\u0131rd\u0131. \u0130ndi m\u0259nim varl\u0131qlara m\u0259lumat \u0259lav\u0259 etm\u0259k v\u0259 bu m\u0259lumatlara \u0259saslanaraq m\u0259ntiq \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn sistematik bir yolum var idi. Bu da, insanlar\u0131n kortlara t\u0259yinat\u0131n\u0131 t\u0259\u015fkil etm\u0259y\u0259 imkan tan\u0131d\u0131.<\/p>\n<p>M\u0259n n\u0259 etdim:<\/p>\n<ul>\n<li>T\u0259yin olunan kortlar haqq\u0131nda m\u0259lumat\u0131 Person-a \u0259lav\u0259 etdim;<\/li>\n<li>TennisCourt-da paylanm\u0131\u015f insanlar haqq\u0131nda m\u0259lumat \u0259lav\u0259 etdim;<\/li>\n<li>\u0130nsanlar\u0131 v\u0259 sah\u0259l\u0259ri analiz etm\u0259k, m\u00f6vcud kortlar\u0131 a\u015fkar etm\u0259k v\u0259 oyun\u00e7ular\u0131 onlara t\u0259yin etm\u0259k imkan\u0131 ver\u0259n CourtChoosingSystem-i \u0259lav\u0259 etdim;<\/li>\n<li>Kortlara t\u0259yin olunmu\u015f insanlar\u0131 axtaran v\u0259 olmad\u0131qda insanlar\u0131 laz\u0131m olan yer\u0259 g\u00f6nd\u0259r\u0259n PersonMovementSystem-i \u0259lav\u0259 etdim.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Rust oynayaraq 24 saat: \u015f\u0259xsi inki\u015faf t\u0259cr\u00fcb\u0259si\" src=\"\/wp-content\/uploads\/2019\/03\/f2e4632de2cb9d1c3ec7c9d9310b8170.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>N\u0259tic\u0259l\u0259ri yekunla\u015fd\u0131r\u0131r\u0131q<\/h3>\n<p>\nBu sad\u0259 oyun \u00fcz\u0259rind\u0259 i\u015fl\u0259m\u0259k m\u0259nim \u00fc\u00e7\u00fcn \u00e7ox xo\u015f oldu. \u00dcst\u0259lik, onu yazmaq \u00fc\u00e7\u00fcn Rust-dan istifad\u0259 etdiyim \u00fc\u00e7\u00fcn m\u0259mnun qald\u0131m, \u00e7\u00fcnki:<\/p>\n<ul>\n<li>Rust siz\u0259 laz\u0131m olan\u0131 t\u0259qdim edir;<\/li>\n<li>onun \u0259la s\u0259n\u0259dl\u0259ri var, Rust olduqca z\u0259rifdir;<\/li>\n<li>davaml\u0131l\u0131q - bu, m\u00fck\u0259mm\u0259ldir;<\/li>\n<li>klonlama, kopyalama v\u0259 ya C++-da tez-tez etdiyim dig\u0259r ox\u015far h\u0259r\u0259k\u0259tl\u0259r\u0259 ba\u015f vurma\u011fa ehtiyac yoxdur;<\/li>\n<li>Options i\u015fl\u0259m\u0259k \u00fc\u00e7\u00fcn \u00e7ox rahatd\u0131r, h\u0259m\u00e7inin x\u0259talar\u0131 m\u00fck\u0259mm\u0259l idar\u0259 edirl\u0259r;<\/li>\n<li>\u0259g\u0259r layih\u0259ni t\u0259rtib etm\u0259k m\u00fcmk\u00fcnd\u00fcrs\u0259, 99% hallarda d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131r. Kompilyator x\u0259talar\u0131n\u0131n mesajlar\u0131, g\u00f6rd\u00fcy\u00fcm \u0259n yax\u015f\u0131lar\u0131d\u0131r.<\/li>\n<\/ul>\n<p>\nRust dilind\u0259 oyun inki\u015faf\u0131 h\u0259l\u0259 yeni ba\u015flan\u0131r. Ancaq art\u0131q Rust-u h\u0259r k\u0259s \u00fc\u00e7\u00fcn a\u00e7maq \u00fc\u00e7\u00fcn \u00e7al\u0131\u015fan sabit v\u0259 xeyli b\u00f6y\u00fck bir icma var. Buna g\u00f6r\u0259 d\u0259, dilin g\u0259l\u0259c\u0259yin\u0259 optimist yana\u015f\u0131ram, ortaq i\u015fimizin n\u0259tic\u0259l\u0259rini s\u0259birsizlikl\u0259 g\u00f6zl\u0259yir\u0259m.<\/p>\n<blockquote><p><b>Skillbox t\u00f6vsiy\u0259 edir:<\/b><\/p>\n<ul>\n<li>Onlayn-kurs <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 \u0130nki\u015faf\u00e7\u0131 Pe\u015f\u0259si\u00bb<\/a><\/noindex>.<\/li>\n<li>Praktik kurs <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\">\u00abMobil \u0130nki\u015faf\u00e7\u0131 PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Praktik illik kurs <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\">\"PHP T\u0259tbiq\u00e7isi s\u0131f\u0131rdan PRO-ya\"<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\n<\/p><\/blockquote>\n<p>M\u0259nb\u0259: <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.0.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\/az\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"az_AZ\" \/>\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\/az\/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\udd47Rust-da 24 saat \u0259rzind\u0259 oyun: inki\u015faf m\u00fcdd\u0259tim | ProHoster","description":"Bu m\u0259qal\u0259d\u0259 \u015f\u0259xsi t\u0259cr\u00fcb\u0259mi payla\u015faca\u011fam.","canonical_url":"https:\/\/prohoster.info\/az\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"az_AZ","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\/az\/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\/az\/wp-json\/wp\/v2\/posts\/29846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/comments?post=29846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/posts\/29846\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/media?parent=29846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/categories?post=29846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/az\/wp-json\/wp\/v2\/tags?post=29846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}