{"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\/hu\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","title":{"rendered":"Rust j\u00e1t\u00e9k 24 \u00f3ra alatt: a fejleszt\u00e9s szem\u00e9lyes tapasztalata","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Rust j\u00e1t\u00e9k 24 \u00f3ra alatt: a fejleszt\u00e9s szem\u00e9lyes tapasztalata\" src=\"\/wp-content\/uploads\/2019\/03\/ea25406c43ac90ce2e33e290168d1083.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEbben a cikkben megosztom a szem\u00e9lyes tapasztalataimat egy kis j\u00e1t\u00e9k fejleszt\u00e9s\u00e9r\u0151l Rust nyelven. A m\u0171k\u00f6d\u0151 verzi\u00f3 elk\u00e9sz\u00edt\u00e9se k\u00f6r\u00fclbel\u00fcl 24 \u00f3r\u00e1t vett ig\u00e9nybe (f\u0151k\u00e9nt est\u00e9nk\u00e9nt vagy h\u00e9tv\u00e9g\u00e9n dolgoztam). A j\u00e1t\u00e9k m\u00e9g messze van a befejez\u00e9st\u0151l, de \u00fagy gondolom, hogy a tapasztalat hasznos lesz. Elmondom, mit tanultam, \u00e9s n\u00e9h\u00e1ny megfigyel\u00e9st, amit a j\u00e1t\u00e9k null\u00e1r\u00f3l val\u00f3 fel\u00e9p\u00edt\u00e9se sor\u00e1n tettem.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>A Skillbox aj\u00e1nlja:<\/b> K\u00e9t\u00e9ves gyakorlati tanfolyam <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\">\u00c9n \u2013 PRO webfejleszt\u0151<\/a><\/noindex>.<\/p>\n<p><b>Eml\u00e9keztetj\u00fck:<\/b> <i>minden \u00abHabr\u00bb olvas\u00f3nak 10 000 rubeles kedvezm\u00e9ny j\u00e1r b\u00e1rmely Skillbox kurzus jelentkez\u00e9sekor a \u00abHabr\u00bb prom\u00f3ci\u00f3s k\u00f3d felhaszn\u00e1l\u00e1s\u00e1val.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Mi\u00e9rt Rust?<\/h3>\n<p>\nEzt a nyelvet v\u00e1lasztottam, mert sok j\u00f3t hallottam r\u00f3la, \u00e9s l\u00e1tom, hogy egyre n\u00e9pszer\u0171bb\u00e9 v\u00e1lik a j\u00e1t\u00e9kfejleszt\u00e9s ter\u00fclet\u00e9n. A j\u00e1t\u00e9k \u00edr\u00e1sa el\u0151tt volt n\u00e9mi tapasztalatom egyszer\u0171 alkalmaz\u00e1sok fejleszt\u00e9s\u00e9vel Rust nyelven. Ez pont elegend\u0151 volt ahhoz, hogy \u00e9rezzem a szabads\u00e1got a j\u00e1t\u00e9k \u00edr\u00e1sa k\u00f6zben.<\/p>\n<h3>Mi\u00e9rt j\u00e1t\u00e9k \u00e9s mi a j\u00e1t\u00e9k?<\/h3>\n<p>\nA j\u00e1t\u00e9kfejleszt\u00e9s sz\u00f3rakoztat\u00f3! Szeretn\u00e9m, ha t\u00f6bb okom lenne r\u00e1, de a \u201eh\u00e1zi\u201d projektekhez olyan t\u00e9m\u00e1kat v\u00e1lasztok, amelyek nem t\u00fal szorosan kapcsol\u00f3dnak a szok\u00e1sos munk\u00e1mhoz. Milyen j\u00e1t\u00e9k? Valami tennisz szimul\u00e1torf\u00e9l\u00e9t szerettem volna csin\u00e1lni, ahol a Cities Skylines, Zoo Tycoon, Prison Architect \u00e9s a tennisz kombin\u00e1l\u00f3dik. Sz\u00f3val, egy teniszakad\u00e9mia j\u00e1t\u00e9kot hoztam l\u00e9tre, ahova az emberek j\u00f6nnek j\u00e1tszani.<\/p>\n<h3>Technikai el\u0151k\u00e9sz\u00fcletek<\/h3>\n<p>\nSzerettem volna Rust-ot haszn\u00e1lni, de nem tudtam pontosan, hogy mennyire sz\u00fcks\u00e9ges a \u201enull\u00e1r\u00f3l\u201d val\u00f3 indul\u00e1s. Nem akartam pixel shadereket \u00edrni \u00e9s drag-n-drop-ot haszn\u00e1lni, ez\u00e9rt a legflexibilisebb megold\u00e1sokat kerestem.<\/p>\n<p>Hasznos forr\u00e1sokat tal\u00e1ltam, amelyeket megosztok veletek:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/arewegameyet.com\/\">Are we game yet<\/a><\/noindex> \u2013 a j\u00e1t\u00e9kfejleszt\u00e9shez sz\u00fcks\u00e9ges Rust elemek list\u00e1ja;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/rust_gamedev\">Rust game dev subreddit;<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kenney.nl\">Ingyenes pixel-art.<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nN\u00e9h\u00e1ny Rust j\u00e1t\u00e9kmotort tanulm\u00e1nyoztam, v\u00e9g\u00fcl a Piston \u00e9s a ggez mellett d\u00f6nt\u00f6ttem. Ezekkel tal\u00e1lkoztam a kor\u00e1bbi projektem sor\u00e1n. V\u00e9g\u00fcl a ggez t\u0171nt a legmegfelel\u0151bbnek egy kis 2D j\u00e1t\u00e9k megval\u00f3s\u00edt\u00e1s\u00e1hoz. A Piston modul\u00e1ris strukt\u00far\u00e1ja t\u00fal bonyolult a kezd\u0151 fejleszt\u0151 sz\u00e1m\u00e1ra (vagy annak, aki el\u0151sz\u00f6r dolgozik Rust-tal).<\/p>\n<h3>A j\u00e1t\u00e9k strukt\u00far\u00e1ja<\/h3>\n<p>\nKicsit id\u0151t sz\u00e1ntam a projekt architekt\u00far\u00e1j\u00e1nak \u00e1tgondol\u00e1s\u00e1ra. Az els\u0151 l\u00e9p\u00e9s, hogy elk\u00e9sz\u00edts\u00fck a \"f\u00f6ldet\", az embereket \u00e9s a teniszp\u00e1ly\u00e1kat. Az embereknek mozogniuk kell a p\u00e1ly\u00e1kon, \u00e9s v\u00e1rakozniuk kell. A j\u00e1t\u00e9kosoknak olyan k\u00e9szs\u00e9geik lesznek, amelyek az id\u0151 m\u00fal\u00e1s\u00e1val fejl\u0151dnek. Tov\u00e1bb\u00e1 sz\u00fcks\u00e9g van egy szerkeszt\u0151re, amely lehet\u0151v\u00e9 teszi \u00faj emberek \u00e9s p\u00e1ly\u00e1k hozz\u00e1ad\u00e1s\u00e1t, de ez m\u00e1r nem ingyenes.<\/p>\n<p>Miut\u00e1n mindent \u00e1tgondoltam, elkezdtem dolgozni. <\/p>\n<h3>J\u00e1t\u00e9k k\u00e9sz\u00edt\u00e9se<\/h3>\n<p>\n<b>Kezdet: k\u00f6r\u00f6k \u00e9s absztrakci\u00f3k<\/b><\/p>\n<p>Vettem egy p\u00e9ld\u00e1t a ggez-b\u0151l, \u00e9s egy k\u00f6rt kaptam a k\u00e9perny\u0151n. Csod\u00e1latos! Most egy kis absztrakci\u00f3. J\u00f3 \u00f6tletnek t\u0171nt elszakadni a j\u00e1t\u00e9kelemek \u00f6tlet\u00e9t\u0151l. Minden elemnek \u00fagy kell megjelenni \u00e9s friss\u00fclni, ahogy itt meg van hat\u00e1rozva:<\/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>\nEz a k\u00f3d r\u00e9sz lehet\u0151v\u00e9 tette, hogy kiv\u00e1l\u00f3 lista objektumokat kapjak, amelyeket friss\u00edthetek \u00e9s rajzolhatok egy legal\u00e1bb olyan nagyszer\u0171 ciklusban.<\/p>\n<pre><code class=\"rust\">mpl event::EventHandler for MainState {\n    fn update(&amp;mut self, context: &amp;mut Context) -&gt; GameResult {\n        \/\/ Friss\u00edtse az \u00f6sszes objektumot\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        \/\/ Rajzolja az \u00f6sszes objektumot\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>\nA main.rs sz\u00fcks\u00e9ges, mert itt van minden k\u00f3dsor. Egy kis id\u0151t t\u00f6lt\u00f6ttem azzal, hogy sz\u00e9tv\u00e1lasszam a f\u00e1jlokat \u00e9s optimaliz\u00e1ljam a k\u00f6nyvt\u00e1rstrukt\u00far\u00e1t. \u00cdgy n\u00e9zett ki minden ezut\u00e1n:<br \/>\n<i>resources -&gt; itt tal\u00e1lhat\u00f3ak az \u00f6sszes er\u0151forr\u00e1s (k\u00e9pek)<br \/>\nsrc<br \/>\n \u2014 entit\u00e1sok<br \/>\n \u2014 game_object.rs<br \/>\n \u2014 circle.rs<br \/>\n \u2014 main.rs -&gt; f\u0151 ciklus<\/i><\/p>\n<p><b>Emberek, p\u00e1ly\u00e1k \u00e9s k\u00e9pek<\/b><\/p>\n<p>A k\u00f6vetkez\u0151 l\u00e9p\u00e9s a Person j\u00e1t\u00e9kelem l\u00e9trehoz\u00e1sa \u00e9s a k\u00e9pek bet\u00f6lt\u00e9se. Minden 32*32-es csemp\u00e9k alapj\u00e1n kell \u00e9p\u00fclnie.<\/p>\n<p><img decoding=\"async\" alt=\"Rust j\u00e1t\u00e9k 24 \u00f3ra alatt: a fejleszt\u00e9s szem\u00e9lyes tapasztalata\" src=\"\/wp-content\/uploads\/2019\/03\/265ed79e6784ef0180cfdc5aa8d96a4c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Teniszp\u00e1ly\u00e1k<\/b><\/p>\n<p>Miut\u00e1n megn\u00e9ztem, hogy n\u00e9znek ki a teniszp\u00e1ly\u00e1k, \u00fagy d\u00f6nt\u00f6ttem, hogy 4*2 csemp\u00e9kb\u0151l k\u00e9sz\u00edtem \u0151ket. Kezdetben k\u00e9sz\u00edthettem volna egy olyan m\u00e9ret\u0171 k\u00e9pet, vagy \u00f6sszerakhattam volna 8 k\u00fcl\u00f6n csemp\u00e9t. De k\u00e9s\u0151bb r\u00e1j\u00f6ttem, hogy csak k\u00e9t egyedi csempe sz\u00fcks\u00e9ges, \u00e9s ennek oka van.<\/p>\n<p>\u00d6sszesen k\u00e9t ilyen csemp\u00e9nk van: 1 \u00e9s 2.<\/p>\n<p>A p\u00e1lya minden szakasza 1-es vagy 2-es csemp\u00e9b\u0151l \u00e1ll. Ezek elhelyezhet\u0151k norm\u00e1l m\u00f3don vagy 180 fokkal elforgatva.<\/p>\n<p><img decoding=\"async\" alt=\"Rust j\u00e1t\u00e9k 24 \u00f3ra alatt: a fejleszt\u00e9s szem\u00e9lyes tapasztalata\" src=\"\/wp-content\/uploads\/2019\/03\/90d07caea0dee8673ada5d44963ab347.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Alap\u00e9rtelmezett \u00e9p\u00edt\u00e9si (\u00f6sszeszerel\u00e9si) m\u00f3d<\/b><\/p>\n<p>Miut\u00e1n siker\u00fclt az ar\u00e9n\u00e1k, emberek \u00e9s t\u00e9rk\u00e9pek renderel\u00e9se, r\u00e1j\u00f6ttem, hogy sz\u00fcks\u00e9g van egy alap \u00f6sszeszerel\u00e9si m\u00f3dra is. Ezt \u00fagy val\u00f3s\u00edtottam meg, hogy amikor megnyomj\u00e1k a gombot - az elem kijel\u00f6l\u0151dik, a kattint\u00e1s pedig a megfelel\u0151 helyre teszi azt. \u00cdgy az 1-es gomb lehet\u0151v\u00e9 teszi a p\u00e1lya kiv\u00e1laszt\u00e1s\u00e1t, m\u00edg a 2-es gomb a j\u00e1t\u00e9kos kiv\u00e1laszt\u00e1s\u00e1t.<\/p>\n<p>De eml\u00e9kezn\u00fcnk kell arra is, mit jelentenek az 1 \u00e9s 2, ez\u00e9rt hozz\u00e1adtam egy dr\u00f3tv\u00e1zat, hogy vil\u00e1gos legyen, melyik elem van kijel\u00f6lve. \u00cdgy n\u00e9z ki ez.<\/p>\n<p><img decoding=\"async\" alt=\"Rust j\u00e1t\u00e9k 24 \u00f3ra alatt: a fejleszt\u00e9s szem\u00e9lyes tapasztalata\" src=\"\/wp-content\/uploads\/2019\/03\/09b92828fb9b8d4bfa5d5178ca99613c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>K\u00e9rd\u00e9sek az architekt\u00far\u00e1r\u00f3l \u00e9s a refaktor\u00e1l\u00e1sr\u00f3l<\/b><\/p>\n<p>Most m\u00e1r van n\u00e9h\u00e1ny j\u00e1t\u00e9kelem: emberek, p\u00e1ly\u00e1k \u00e9s emeletek. De ahhoz, hogy a dr\u00f3tv\u00e1zak m\u0171k\u00f6djenek, minden objektum entit\u00e1snak jeleznie kell, hogy az objektumok bemutat\u00f3 m\u00f3dban vannak-e, vagy csak egy keretet rajzoltak. Ez nem t\u00fal k\u00e9nyelmes.<\/p>\n<p>\u00dagy t\u0171nt, hogy \u00fajra kell gondolni az architekt\u00far\u00e1t, hogy n\u00e9h\u00e1ny korl\u00e1toz\u00e1s kiemelkedjen:<\/p>\n<ul>\n<li>az a t\u00e9ny, hogy van egy entit\u00e1s, amely megjelen\u00edti \u00e9s friss\u00edti \u00f6nmag\u00e1t, probl\u00e9m\u00e1t jelent, mivel ez az entit\u00e1s nem tudja \"megtudni\", mit kell renderelnie \u2013 k\u00e9pet vagy dr\u00f3tv\u00e1zat;<\/li>\n<li>hi\u00e1nyzik az eszk\u00f6z, amely lehet\u0151v\u00e9 teszi a tulajdons\u00e1gok \u00e9s viselked\u00e9s cser\u00e9j\u00e9t k\u00fcl\u00f6n\u00e1ll\u00f3 entit\u00e1sok k\u00f6z\u00f6tt (p\u00e9lda \u2013 is_build_mode tulajdons\u00e1g vagy a viselked\u00e9s rajzol\u00e1sa). Haszn\u00e1lhatn\u00e1nk az \u00f6r\u00f6kl\u0151d\u00e9st, b\u00e1r Rustban nincs norm\u00e1lis m\u00f3dja ennek megval\u00f3s\u00edt\u00e1s\u00e1ra. Amire t\u00e9nyleg sz\u00fcks\u00e9gem volt, az a kompoz\u00edci\u00f3;<\/li>\n<li>sz\u00fcks\u00e9ges volt egy eszk\u00f6z az entit\u00e1sok k\u00f6z\u00f6tti interakci\u00f3hoz, hogy embereket rendelhessek a p\u00e1ly\u00e1khoz;<\/li>\n<li>maga az entit\u00e1s adatok \u00e9s logika kever\u00e9ke volt, ami nagyon gyorsan kics\u00faszott az ir\u00e1ny\u00edt\u00e1s al\u00f3l.<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i>Tov\u00e1bbi kutat\u00e1st v\u00e9geztem, \u00e9s felfedeztem az architekt\u00far\u00e1t <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS \u2014 Entit\u00e1s-\u00f6sszetev\u0151 rendszer<\/a><\/noindex>, amelyet \u00e1ltal\u00e1ban j\u00e1t\u00e9kokban haszn\u00e1lnak. \u00cdme az ECS el\u0151nyei:<\/p>\n<ul>\n<li>az adatok elv\u00e1laszt\u00e1sa a logik\u00e1t\u00f3l;<\/li>\n<li>kompoz\u00edci\u00f3 az \u00f6r\u00f6kl\u0151d\u00e9s helyett;<\/li>\n<li>adatk\u00f6zpont\u00fa architekt\u00fara.<\/li>\n<\/ul>\n<p><\/i><\/p><\/blockquote>\n<p>\nAz ECS h\u00e1rom alapvet\u0151 fogalm\u00e1t jellemzi:<\/p>\n<ul>\n<li>entit\u00e1sok \u2013 az objektum t\u00edpusa, amelyre az azonos\u00edt\u00f3 hivatkozik (ez lehet j\u00e1t\u00e9kos, labda vagy m\u00e1s);<\/li>\n<li>\u00f6sszetev\u0151k \u2013 ezekb\u0151l \u00e1llnak az entit\u00e1sok. P\u00e9lda \u2013 renderel\u0151, elhelyezked\u00e9s \u00e9s m\u00e1s \u00f6sszetev\u0151k. Ezek adat t\u00e1rol\u00f3k;<\/li>\n<li>rendszerek \u2013 ezek haszn\u00e1lj\u00e1k tanto az objektumokat, mint az \u00f6sszetev\u0151ket, plusz tartalmazz\u00e1k a viselked\u00e9st \u00e9s logik\u00e1t, amelyek alapj\u00e1ul ezen adatok szolg\u00e1lnak. P\u00e9lda \u2013 egy renderel\u0151 rendszer, amely v\u00e9gigiter\u00e1lja az \u00f6sszes entit\u00e1st renderel\u0151 \u00f6sszetev\u0151kkel \u00e9s v\u00e9gzi a rajzol\u00e1st.<\/li>\n<\/ul>\n<p>\nAz \u00e1ttekint\u00e9s ut\u00e1n vil\u00e1goss\u00e1 v\u00e1lt, hogy az ECS az al\u00e1bbi probl\u00e9m\u00e1kat oldja meg:<\/p>\n<ul>\n<li>a kompoz\u00edci\u00f3 alkalmaz\u00e1sa az \u00f6r\u00f6kl\u0151d\u00e9s helyett az entit\u00e1sok rendszerszervez\u00e9s\u00e9ben; <\/li>\n<li>a k\u00f3d z\u0171rzavar\u00e1nak megsz\u00fcntet\u00e9se kezel\u0151 rendszerekkel; <\/li>\n<li>az olyan m\u00f3dszerek haszn\u00e1lata, mint az is_build_mode, hogy a dr\u00f3tv\u00e1z logik\u00e1j\u00e1t ugyanabban a helyen t\u00e1roljuk \u2013 a renderel\u0151 rendszerben.<\/li>\n<\/ul>\n<p>\n\u00cdme, mi lett az ECS bevezet\u00e9se ut\u00e1n.<\/p>\n<p><i>resources -&gt; itt tal\u00e1lhat\u00f3ak az \u00f6sszes er\u0151forr\u00e1s (k\u00e9pek)<br \/>\nsrc<br \/>\n \u2014 \u00f6sszetev\u0151k<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 forr\u00e1sok<br \/>\n \u2014 mouse.rs<br \/>\n \u2014 rendszerek<br \/>\n \u2014 rendering.rs<br \/>\n \u2014 constants.rs<br \/>\n \u2014 utils.rs<br \/>\n \u2014 world_factory.rs -&gt; vil\u00e1g gy\u00e1rt\u00f3 funkci\u00f3k<br \/>\n \u2014 main.rs -&gt; f\u0151 ciklus<\/i><\/p>\n<h3>Emberek kijel\u00f6l\u00e9se a p\u00e1ly\u00e1kra<\/h3>\n<p>\nAz ECS megk\u00f6nny\u00edtette az \u00e9letem. Most m\u00e1r volt egy rendszeres m\u00f3dszerem az adatok hozz\u00e1ad\u00e1s\u00e1ra az entit\u00e1sokhoz, valamint az ezekre az adatokra alapozott logika hozz\u00e1ad\u00e1s\u00e1ra. Ez pedig lehet\u0151v\u00e9 tette, hogy megszervezzem az emberek eloszt\u00e1s\u00e1t a p\u00e1ly\u00e1kra.<\/p>\n<p>Amit tettem:<\/p>\n<ul>\n<li>adatokat adtam a kijel\u00f6lt p\u00e1ly\u00e1kr\u00f3l a Szem\u00e9lyhez;<\/li>\n<li>adatokat adtam a sz\u00e9tosztott emberekr\u0151l a Teniszp\u00e1ly\u00e1hoz;<\/li>\n<li>hoztam l\u00e9tre egy CourtChoosingSystem-et, amely lehet\u0151v\u00e9 teszi az emberek \u00e9s p\u00e1ly\u00e1k elemz\u00e9s\u00e9t, a szabad p\u00e1ly\u00e1k felfedez\u00e9s\u00e9t \u00e9s a j\u00e1t\u00e9kosok eloszt\u00e1s\u00e1t r\u00e1juk;<\/li>\n<li>hoztam l\u00e9tre egy PersonMovementSystem-et, amely megkeresi a p\u00e1ly\u00e1kra kijel\u00f6lt embereket, \u00e9s ha ott nincsenek, eljuttatja \u0151ket ahov\u00e1 sz\u00fcks\u00e9ges.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Rust j\u00e1t\u00e9k 24 \u00f3ra alatt: a fejleszt\u00e9s szem\u00e9lyes tapasztalata\" src=\"\/wp-content\/uploads\/2019\/03\/f2e4632de2cb9d1c3ec7c9d9310b8170.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>\u00d6sszegz\u00e9s<\/h3>\n<p>\nNagyon \u00e9lveztem dolgozni ezen az egyszer\u0171 j\u00e1t\u00e9kon. S\u0151t, el\u00e9gedett vagyok azzal, hogy Rustot haszn\u00e1ltam a meg\u00edr\u00e1s\u00e1hoz, mivel:<\/p>\n<ul>\n<li>A Rust megadja, amire sz\u00fcks\u00e9ged van;<\/li>\n<li>kiv\u00e1l\u00f3 dokument\u00e1ci\u00f3val rendelkezik, a Rust nagyon eleg\u00e1ns;<\/li>\n<li>a konzisztencia men\u0151;<\/li>\n<li>nem kell kl\u00f3noznom, m\u00e1solnom vagy hasonl\u00f3 m\u0171veletekhez folyamodnom, amiket gyakran tettem C++-ban;<\/li>\n<li>Az Options nagyon k\u00e9nyelmesen haszn\u00e1lhat\u00f3, \u00e9s nagyszer\u0171en kezelik a hib\u00e1kat;<\/li>\n<li>ha a projekt le tudott fordulni, akkor 99%-ban m\u0171k\u00f6dik, \u00e9s \u00e9ppen \u00fagy, ahogyan kellene. A ford\u00edt\u00f3 hiba\u00fczenetei szerintem a legjobbak, amiket valaha l\u00e1ttam.<\/li>\n<\/ul>\n<p>\nA j\u00e1t\u00e9kfejleszt\u00e9s Ruston most kezd\u0151d\u00f6tt el. De m\u00e1r van egy stabil \u00e9s meglehet\u0151sen nagy k\u00f6z\u00f6ss\u00e9g, amely azon dolgozik, hogy a Rustot mindenki sz\u00e1m\u00e1ra el\u00e9rhet\u0151v\u00e9 tegye. Ez\u00e9rt optimist\u00e1n tekintek a nyelv j\u00f6v\u0151j\u00e9re, izgatottan v\u00e1rom a k\u00f6z\u00f6s munk\u00e1nk eredm\u00e9nyeit.<\/p>\n<blockquote><p><b>A Skillbox aj\u00e1nlja:<\/b><\/p>\n<ul>\n<li>Online kurzus <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\">\u201eFrontend fejleszt\u0151 szakma\u201d<\/a><\/noindex>.<\/li>\n<li>Gyakorlati kurzus <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\">\u00abMobilfejleszt\u0151 PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Gyakorlati \u00e9ves kurzus <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\">\u201ePHP fejleszt\u0151 a null\u00e1t\u00f3l a PROig\u201d<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\n<\/p><\/blockquote>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47J\u00e1t\u00e9k fejleszt\u00e9se Ruston 24 \u00f3ra alatt: szem\u00e9lyes fejleszt\u00e9si tapasztalat | ProHoster","description":"Ebben a cikkben a szem\u00e9lyes tapasztalataimr\u00f3l fogok besz\u00e9lni.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/29846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=29846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/29846\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=29846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=29846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=29846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}