{"id":1192,"date":"2019-06-11T17:57:34","date_gmt":"2019-06-11T17:57:34","guid":{"rendered":"http:\/\/www.yazilimperver.com\/?p=1192"},"modified":"2019-06-12T21:48:52","modified_gmt":"2019-06-12T21:48:52","slug":"basit-coklu-oyuncu-motoru-snake-v2-0-giris","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/","title":{"rendered":"Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/images.unsplash.com\/photo-1523346889551-06a8879f5c71?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1000&amp;q=80\" alt=\"close-up photography of human's hand tattoo\" width=\"437\" height=\"655\" \/><\/p>\n<p style=\"text-align: left;\">Bu sefer farkl\u0131 bir yaz\u0131 ile kar\u015f\u0131n\u0131zday\u0131m. Bu yaz\u0131 ile birlikte daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m oyun projelerine devam edece\u011fiz. Daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m \u00f6rnek oyun projelerinin ikisi de <span style=\"color: #008000;\"><strong>(<a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2018\/04\/23\/tetris-v1-0\/\">Tetris v1.0<\/a>,\u00a0<a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2018\/07\/25\/tetris-v2-0\/\">Tetris v2.0<\/a>, <a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/01\/06\/snake-v1-0\/\">Snake v1.0<\/a>)<\/strong><\/span> tek oyuncu deste\u011fi sunmaktayd\u0131 ve \u00e7oklu oyuncu deste\u011fini de eklemeyi istedi\u011fimi s\u00f6ylemi\u015ftim. Burada amac\u0131m basit bir \u00e7oklu oyuncu deste\u011fini\u00a0(oyuncular, lobi, mesajla\u015fma, senkronizasyon ve oyun mekanikleri) modern C++ kabiliyetlerini ve k\u00fct\u00fcphanelerini kullanarak nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 sizlere g\u00f6stermekti. Asl\u0131na bakarsan\u0131z, bir s\u00fcre \u00f6nce, bu anlamda da, basit bir a\u011f alt yap\u0131s\u0131 geli\u015ftirmeye ba\u015flam\u0131\u015ft\u0131m ve bu ama\u00e7la da POCO k\u00fct\u00fcphanelerini kullanmaya ba\u015flad\u0131m (<strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2018\/11\/29\/vcpkg-araci\/\">Vcpkg Arac\u0131<\/a><\/span><\/strong>\u00a0yaz\u0131mda da de\u011finmi\u015ftim). Asl\u0131nda, <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/pocoproject.org\/\">POCO k\u00fct\u00fcphanelerini<\/a><\/strong><\/span> daha \u00f6nce herhangi bir ama\u00e7 ile kullanmam\u0131\u015ft\u0131m ama genel de\u011ferlendirmeler fena de\u011fildi. Hem k\u00fct\u00fcphaneyi \u00f6\u011frenmek hem de h\u0131zl\u0131 bir \u015fekilde a\u011f alt yap\u0131s\u0131n\u0131 geli\u015ftirmek i\u00e7in bu k\u00fct\u00fcphaneye y\u00f6neldim. Bunu kullanarak da, basit istemci, sunucu aras\u0131ndaki haberle\u015fmeyi ger\u00e7ekle\u015ftiren s\u0131n\u0131flar\u0131 yazd\u0131m. Kullan\u0131m\u0131 nispeten kolay, dok\u00fcmantasyonu fena olmayan bir k\u00fct\u00fcphaneydi. Fakat gel g\u00f6r ki, bu k\u00fct\u00fcphaneyi Android i\u00e7in kullanman\u0131n pek kolay olmayaca\u011f\u0131n\u0131 fark ettim ve bu a\u011f alt yap\u0131s\u0131n\u0131 <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.qt.io\/\">QT<\/a> <\/span><\/strong>ile geli\u015ftirmeye karar verdim.<\/p>\n<p style=\"text-align: left;\">QT&#8217;yi \u00e7ok uzun bir s\u00fcredir, farkl\u0131 ama\u00e7lar i\u00e7in kullan\u0131lacak grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip C++ uygulamalar\u0131 geli\u015ftirmek i\u00e7in hem i\u015fte hem de ki\u015fisel projelerimde kullan\u0131yorum. Olduk\u00e7a kapsaml\u0131, bir \u00e7ok kabiliyeti i\u00e7erisinde bar\u0131nd\u0131ran, \u00e7ok g\u00fc\u00e7l\u00fc bir topluluk deste\u011fi\u00a0 ve kullan\u0131m alan\u0131 olan (Wiki&#8217;ye g\u00f6re 1 milyondan fazla kullan\u0131c\u0131s\u0131 ve 70 den fazla alanda kullan\u0131l\u0131yor) bu k\u00fct\u00fcphaneyi (asl\u0131nda k\u00fct\u00fcphaneden \u00e7ok fazlas\u0131, kendi ifadeleri ile &#8220;cross-platform application development framework&#8221;), bence her C++ yaz\u0131l\u0131mc\u0131s\u0131n\u0131n \u00f6\u011frenmesinde fayda var. Eee ben de buna vesile olay\u0131m istedim \ud83d\ude42<\/p>\n<p style=\"text-align: left;\">Qt se\u00e7imi yan\u0131nda, \u00e7oklu oyuncu deste\u011fi getirirken ba\u015fka neleri bu kapsama alabilirim diye d\u00fc\u015f\u00fcnd\u00fcn ve art\u0131k <em>de facto<\/em> her yaz\u0131l\u0131mc\u0131n\u0131n bilmesi gereken birim test <em>(unit tests),<\/em> s\u00fcrekli entegrasyon (<em>continous integration)<\/em>\u00a0kavram ve kabiliyetlerini, bu oyun arac\u0131l\u0131\u011f\u0131 ile C++ d\u00fcnyas\u0131nda nas\u0131l uygulanabilece\u011fini sizlerle payla\u015fmaya karar verdim. Bunun yan\u0131nda, daha \u00f6nce de ama\u00e7lad\u0131\u011f\u0131m\u0131 \u00e7oklu platform deste\u011fini de her zaman g\u00f6z \u00f6n\u00fcnde bulunduraca\u011f\u0131z, geli\u015ftirdi\u011fimiz yaz\u0131l\u0131mlar\u0131n \u00f6zellikle android platformu i\u00e7in de \u00e7al\u0131\u015fabilir olmas\u0131 benim i\u00e7in \u00f6nemli.<\/p>\n<p style=\"text-align: left;\">Anlayaca\u011f\u0131n\u0131z \u00fczere, \u00e7ar\u015f\u0131 biraz kar\u0131\u015ft\u0131 \ud83d\ude42 \u015eaka bir yana, yaz\u0131l\u0131m m\u00fchendisli\u011fi kavramlar\u0131n\u0131 ve bu tarz ara\u00e7 ve teknolojileri (bu durumda QT, s\u00fcrekli entegrasyon, birim test, vb.), \u00f6\u011frenmenin en iyi yolunun, birebir kullanmak oldu\u011funa inanan bir insan\u0131m. Onun i\u00e7in her ne kadar Snake v 2.0&#8217;\u0131n \u00e7\u0131k\u0131\u015f\u0131 biraz uzasa da, e\u011flenceli bir yaz\u0131 dizisine yelken a\u00e7t\u0131\u011f\u0131m\u0131za inan\u0131yorum. Bu kapsamda sizlere aktaraca\u011f\u0131m konular, tabi buradakilerle muhtemelen s\u0131n\u0131rl\u0131 kalmayacak, akl\u0131ma gelen veya ho\u015fuma giden kavram ve hususlar\u0131 da sizler ile payla\u015faca\u011f\u0131m. Elbette, \u00f6nceki konular\u0131m\u0131za ili\u015fkin yaz\u0131lara (<strong><em>std::any<\/em><\/strong> ve <strong><em>SOLID<\/em><\/strong> yaz\u0131lar\u0131 gelecek \ud83d\ude09 devam edece\u011fim ama birinci \u00f6nceli\u011fim bu konu olacak. Bu arada ingilizce \u00e7eviriler de biraz aksad\u0131, fark\u0131nday\u0131m \ud83d\ude41 f\u0131rsat bulduk\u00e7a eksikleri giderece\u011fim ama \u00f6ncelikli a\u00e7\u0131k\u00e7as\u0131 \u00e7ok fazla de\u011fil, tabi bir omuz atabilirim diyen olursa her zaman kap\u0131m, e-posta kutum, a\u00e7\u0131k \ud83d\ude00<\/p>\n<p>Peki yaz\u0131lar\u0131 ve i\u00e7erikleri nas\u0131l planlad\u0131m, bundan sonra nas\u0131l ilerleyece\u011fiz ve mevcut durum nedir konusuna gelecek olursak. A\u00e7\u0131k\u00e7as\u0131 ilk etapta bahsetti\u011fim bu yeni teknoloji ve kavramlara ili\u015fkin k\u0131sa ve sizlere yol g\u00f6sterici ufak yaz\u0131lar yazmay\u0131 planl\u0131yorum. Bu yaz\u0131lar\u0131n hepsi bir yandan GitHub&#8217;da geli\u015ftirmeye devam etti\u011fim kod ile de paralel devam ediyor olacak. Teknolojilere h\u0131zl\u0131ca bakt\u0131ktan sonra veya arada koda ili\u015fkin de bir tak\u0131m yaz\u0131lar sizler ile payla\u015faca\u011f\u0131m. Yaz\u0131m\u0131n sonunda bu ba\u011flamda yazmay\u0131 planlad\u0131\u011f\u0131m yaz\u0131lar\u0131n olas\u0131 ba\u015fl\u0131klar\u0131n\u0131 (kuvvetle muhtemel bunlar yolda de\u011fi\u015fecekler) listeledim, ileride yaz\u0131lar\u0131 yazd\u0131k\u00e7a, ba\u011flant\u0131lar\u0131n\u0131 g\u00fcncelleyece\u011fim. Elbette, <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/kodlar\/\">Yaz\u0131 Dizileri ve \u00d6rnek Kodlar<\/a><\/span><\/strong> sayfas\u0131 alt\u0131nda da kendilerine ait bir ba\u015fl\u0131klar\u0131 olacak. Bu yaz\u0131lar\u0131 <strong>Basit \u00c7oklu Oyuncu Motoru (B\u00c7OM)<\/strong> &#8211; &#8220;<em><strong>Simple Multiplayer Game Engine (SMGE)<\/strong><\/em>&#8221; ba\u015fl\u0131\u011f\u0131 alt\u0131nda toplayaca\u011f\u0131m. Tabi motor dedi\u011fime bakmay\u0131n, \u00f6yle \u00e7ok kapsaml\u0131 bir \u015fey olmayacak ama yine de sizlere fikir verece\u011fini umuyorum \ud83d\ude42<\/p>\n<p>Asl\u0131nda bakarsan\u0131z \u00e7oklu oyuncu i\u00e7in temel te\u015fkil edecek istemci\/sunucu alt yap\u0131s\u0131 i\u00e7in bir tak\u0131m kodlar\u0131 geli\u015ftirdim. Bunlara, a\u015fa\u011f\u0131daki <span style=\"color: #0000ff;\"><strong>SimpleMultiplayerGame<\/strong><\/span><strong><span style=\"color: #0000ff;\">Engine<\/span> <\/strong>git repository&#8217;sinden ula\u015fabilirsiniz, hemen bir g\u00f6z at\u0131n derim \ud83d\ude09<\/p>\n<p><a href=\"https:\/\/github.com\/yazilimperver\/SimpleMultiplayerGameEngine\"><strong><span style=\"color: #008000;\">https:\/\/github.com\/yazilimperver\/SimpleMultiplayerGameEngine\u00a0<\/span><\/strong><\/a><\/p>\n<p>Dedi\u011fim gibi bunlar, birim test ve s\u00fcrekli entegrasyon kavramlar\u0131n\u0131, basit\u00e7e g\u00f6sterebilecek seviyede. Bunun ile birlikte, \u00e7al\u0131\u015f\u0131r ve kullan\u0131labilir durumda ve daha da \u00f6nemlisi sizlere a\u011f programlama ve\u00a0 QT&#8217;nin kabiliyetleri hakk\u0131nda da fikir verecek seviyede. QT ve soket programlamaya ili\u015fkin ayr\u0131 bir yaz\u0131m da olacak in\u015fallah.<\/p>\n<p>\u015eimdi gelelim bu \u00e7oklu oyuncu deste\u011fi olay\u0131na. A\u00e7\u0131k\u00e7as\u0131 ilk etapta basit\u00e7e bir k\u00fct\u00fcphane arac\u0131l\u0131\u011f\u0131 ile bunu geli\u015ftirip, daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m y\u0131lan oyununa eklemeyi planl\u0131yordum. \u015eimdiki plan, \u00f6ncelikle en altta haberle\u015fmeden sorumlu bir alt yap\u0131, \u00fcst\u00fcne bunu kullan\u0131p, basit \u00e7oklu oyuncu kabiliyetlerini ger\u00e7ekleyen \u00fcst bir yap\u0131 ve son olarak da, bunlar\u0131 kullanan uygulamalar geli\u015ftirmek olacak. Bu uygulamalar: konsol tabanl\u0131 ve grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip QT tabanl\u0131 oyuncu uygulamalar\u0131, yine QT tabanl\u0131 soket haberle\u015fmelerini ve \u00e7oklu oyuncu kabiliyetlerini test ve takip etmek i\u00e7in uygulamalar olacak.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">B\u00c7OM Yaz\u0131lar\u0131:<\/span><\/strong><\/h2>\n<ul>\n<li>Qt nedir?<\/li>\n<li>SMGE haberle\u015fme altyap\u0131s\u0131 ve\u00a0Qt ile soket programlama<\/li>\n<li>SMGE \u00e7oklu oyuncu kabiliyetleri<\/li>\n<li>S\u00fcrekli entegrasyon<\/li>\n<li>CMake betiklerinin olu\u015fturulmas\u0131<\/li>\n<li>Birim testler<\/li>\n<li>SMGE oyuncu istemcileri<\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Bu sefer farkl\u0131 bir yaz\u0131 ile kar\u015f\u0131n\u0131zday\u0131m. Bu yaz\u0131 ile birlikte daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m oyun projelerine devam edece\u011fiz. Daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m \u00f6rnek oyun projelerinin ikisi de (Tetris v1.0,\u00a0Tetris v2.0, Snake v1.0) tek oyuncu deste\u011fi sunmaktayd\u0131 ve \u00e7oklu oyuncu deste\u011fini de eklemeyi istedi\u011fimi s\u00f6ylemi\u015ftim. Burada amac\u0131m basit bir \u00e7oklu oyuncu deste\u011fini\u00a0(oyuncular, lobi,&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":1208,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41,25,188],"tags":[155,472,470,42,469,262,471,391,474,213,331,473],"class_list":["post-1192","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","category-oyun-gelistirme","category-yazilim-muhendisligi","tag-cmake","tag-continous-integration","tag-game-engine","tag-modern-c","tag-multiplayer","tag-poco","tag-qt","tag-series","tag-smge","tag-snake","tag-software-engineering","tag-unit-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Basit \u00c7oklu Oyuncu Motoru - Snake v2.0 - Giri\u015f - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]Basit \u00c7oklu Oyuncu Motoru - Snake v2.0 - Giri\u015f[:en]Simple Multiplayer Game Engine - Snake v2.0 - Introduction[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Bu sefer farkl\u0131 bir yaz\u0131 ile kar\u015f\u0131n\u0131zday\u0131m. Bu yaz\u0131 ile birlikte daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m oyun projelerine devam edece\u011fiz. Daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m \u00f6rnek oyun projelerinin ikisi de (Tetris v1.0,\u00a0Tetris v2.0, Snake v1.0) tek oyuncu deste\u011fi sunmaktayd\u0131 ve \u00e7oklu oyuncu deste\u011fini de eklemeyi istedi\u011fimi s\u00f6ylemi\u015ftim. Burada amac\u0131m basit bir \u00e7oklu oyuncu deste\u011fini\u00a0(oyuncular, lobi,... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-11T17:57:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-12T21:48:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/06\/multiplayer-667413.png\" \/>\n\t<meta property=\"og:image:width\" content=\"128\" \/>\n\t<meta property=\"og:image:height\" content=\"128\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f\",\"datePublished\":\"2019-06-11T17:57:34+00:00\",\"dateModified\":\"2019-06-12T21:48:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\"},\"wordCount\":1873,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"CMAKE\",\"Continous Integration\",\"Game Engine\",\"Modern C++\",\"Multiplayer\",\"POCO\",\"Qt\",\"Series\",\"SMGE\",\"Snake\",\"software engineering\",\"Unit Test\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Oyun Geli\u015ftirme\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\",\"name\":\"[:tr]Basit \u00c7oklu Oyuncu Motoru - Snake v2.0 - Giri\u015f[:en]Simple Multiplayer Game Engine - Snake v2.0 - Introduction[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2019-06-11T17:57:34+00:00\",\"dateModified\":\"2019-06-12T21:48:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]Basit \u00c7oklu Oyuncu Motoru - Snake v2.0 - Giri\u015f[:en]Simple Multiplayer Game Engine - Snake v2.0 - Introduction[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]Basit \u00c7oklu Oyuncu Motoru - Snake v2.0 - Giri\u015f[:en]Simple Multiplayer Game Engine - Snake v2.0 - Introduction[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Bu sefer farkl\u0131 bir yaz\u0131 ile kar\u015f\u0131n\u0131zday\u0131m. Bu yaz\u0131 ile birlikte daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m oyun projelerine devam edece\u011fiz. Daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m \u00f6rnek oyun projelerinin ikisi de (Tetris v1.0,\u00a0Tetris v2.0, Snake v1.0) tek oyuncu deste\u011fi sunmaktayd\u0131 ve \u00e7oklu oyuncu deste\u011fini de eklemeyi istedi\u011fimi s\u00f6ylemi\u015ftim. Burada amac\u0131m basit bir \u00e7oklu oyuncu deste\u011fini\u00a0(oyuncular, lobi,... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2019-06-11T17:57:34+00:00","article_modified_time":"2019-06-12T21:48:52+00:00","og_image":[{"width":128,"height":128,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/06\/multiplayer-667413.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"9 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f","datePublished":"2019-06-11T17:57:34+00:00","dateModified":"2019-06-12T21:48:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/"},"wordCount":1873,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["CMAKE","Continous Integration","Game Engine","Modern C++","Multiplayer","POCO","Qt","Series","SMGE","Snake","software engineering","Unit Test"],"articleSection":["C++","Modern C++","Oyun Geli\u015ftirme","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/","name":"[:tr]Basit \u00c7oklu Oyuncu Motoru - Snake v2.0 - Giri\u015f[:en]Simple Multiplayer Game Engine - Snake v2.0 - Introduction[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2019-06-11T17:57:34+00:00","dateModified":"2019-06-12T21:48:52+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=1192"}],"version-history":[{"count":14,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1192\/revisions"}],"predecessor-version":[{"id":1215,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1192\/revisions\/1215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/1208"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=1192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}