{"id":2710,"date":"2022-12-11T18:33:41","date_gmt":"2022-12-11T18:33:41","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2710"},"modified":"2022-12-23T20:14:56","modified_gmt":"2022-12-23T20:14:56","slug":"uengine4-matrix-dusen-harf-uygulamasi","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/","title":{"rendered":"uEngine4 &#8211; Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 &#8211; G\u00fcncelleme"},"content":{"rendered":"<p><span style=\"color: #ff0000;\">G\u00dcNCELLEME:<\/span><\/p>\n<p>Evet dostlar CMake betikleri de geldi art\u0131k Linux ve di\u011fer platformlar i\u00e7in de derleyebilirsiniz. A\u015fa\u011f\u0131da, WSL&#8217;den ald\u0131\u011f\u0131m ekran g\u00f6r\u00fcnt\u00fcs\u00fc mevcut (evet WSL \u00fczerinden grafiksel uygulamalar\u0131 da \u00e7al\u0131\u015ft\u0131rabilirsiniz, wsl2 sa\u011folsun \ud83d\ude09<\/p>\n<p id=\"ShSUeOA\"><img loading=\"lazy\" decoding=\"async\" width=\"1488\" height=\"958\" class=\"alignnone size-full wp-image-2714 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb.png 1488w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-300x193.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-1024x659.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-768x494.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-500x322.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-150x97.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-1200x773.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-400x258.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-800x515.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb-200x129.png 200w\" sizes=\"auto, (max-width: 1488px) 100vw, 1488px\" \/><\/p>\n<p>A\u00e7\u0131k\u00e7as\u0131 as\u0131l vakit alan SDL k\u00fct\u00fcphanelerini adam etmek oldu. Bunun i\u00e7in de, <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/uEngine4\/blob\/main\/code\/src\/ext\/sdl2_linux\/\">https:\/\/github.com\/yazilimperver\/uEngine4\/blob\/main\/code\/src\/ext\/sdl2_linux\/<\/a><\/strong><\/span>PrepareSDL2ForLinux.sh beti\u011fini ekledim. Bu betikle, SDL&#8217; yi indirip, kurabilirsiniz.<\/p>\n<p>ORJ\u0130NAL YAZI:<\/p>\n<p>Bir s\u00fcredir muzdarip oldu\u011fum rahats\u0131zl\u0131ktan \u00f6t\u00fcr\u00fc sizler ile payla\u015f\u0131m yapamad\u0131m ama bug\u00fcn bunu bozuyoruz.\u00a0 Evet sevgili dostlar bir s\u00fcre \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m uEngine4 ile \u00f6rnek uygulamalar geli\u015ftirmenin zaman\u0131 geldi. Bu yaz\u0131m bunlardan ilki olacak. Bu \u00f6rnek uygulaman\u0131n amac\u0131, \u00e7ok karma\u015f\u0131k olmayan ama elle de tutulur bir \u00f6rnek ile uEngine4 taraf\u0131ndan sunulan kabiliyetleri ke\u015ffediyor olmak.<\/p>\n<p>\u00d6rnek uygulama, 90&#8217;lar\u0131n sonunda hepimizin hayat\u0131na giren Matrix filmindeki akan yaz\u0131lar animasyonu olacak. Bu uygulamada, Matrix filmindeki kayan yaz\u0131lara benzer bir animasyonu nas\u0131l elde edebilece\u011fimize bak\u0131yor olaca\u011f\u0131z ve bunu nas\u0131l \u00f6zelle\u015ftirebilece\u011fimize. \u00d6ncelikle hemen bir ekran g\u00f6r\u00fcnt\u00fcs\u00fc koyal\u0131m a\u015fa\u011f\u0131ya:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium\" src=\"https:\/\/github.com\/yazilimperver\/uEngine4\/blob\/main\/records\/FallingLetters.gif?raw=true\" width=\"720\" height=\"406\" \/><\/p>\n<p>Arkada\u015flar, herhangi bir proje yaparken, bu proje ile neyi yapmay\u0131 hedefledi\u011finizi, s\u0131n\u0131rlar\u0131n\u0131z\u0131 belirlemenizi \u015fiddetle \u00f6neririm. \u00c7ok basit uygulamalarda bile bazen kendinizi, kaybolmu\u015f bulabilirsiniz. Bu da size zaman ve motivasyon kaybettirir. \u015eimdi bu \u00f6rnek i\u00e7in kapsam\u0131m\u0131z\u0131 k\u0131saca bir s\u0131ralayal\u0131m:<\/p>\n<ul>\n<li>D\u00fc\u015fen harfler olsun \ud83d\ude0a,<\/li>\n<li>Harfler Matriks filmindeki font olsun,<\/li>\n<li>Ekranda her s\u00fctun boyunca, harfker rastgele bir \u015fekilde olu\u015fsun, gittik\u00e7e silikle\u015fsin ve bir s\u00fcre sonra kaybolsun,<\/li>\n<li>H\u0131zlar\u0131 farkl\u0131 olsun,<\/li>\n<li>Alpha (trasnparanl\u0131k) de\u011ferleri de farkl\u0131 olsun,<\/li>\n<li>Harfler d\u00fc\u015ferken de\u011fi\u015fsin,<\/li>\n<li>Parlama efekti olsun,<\/li>\n<li>H\u0131z, uzunluk, renk gibi parametreler de\u011fi\u015ftirilebilsin.<\/li>\n<\/ul>\n<h2><span style=\"color: #0000ff;\"><strong>Giri\u015f<\/strong><\/span><\/h2>\n<p>\u015eimdi, k\u00fct\u00fcphanemiz ile nas\u0131l uygulama geli\u015ftirece\u011fimize bir bakal\u0131m. Bu ve benzeri yaz\u0131lar\u0131mda, kod ile metin aras\u0131ndaki ili\u015fkiyi kurman\u0131za yard\u0131mc\u0131 olmas\u0131 ad\u0131na parantez i\u00e7erisinde say\u0131lar\u0131 hem metine hem de koda koyuyor olaca\u011f\u0131m. Koda, a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz, k\u0131sa b\u00f6l\u00fcmleri yaz\u0131 i\u00e7erisine de ekliyor olaca\u011f\u0131m:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/uEngine4\/tree\/main\/code\/src\/apps\/falling_letters\">https:\/\/github.com\/yazilimperver\/uEngine4\/tree\/main\/code\/src\/apps\/falling_letters<\/a><\/strong><\/span><\/p>\n<p>\u015eimdi koda d\u00f6nelim. \u0130lk olarak bir uygulama s\u0131n\u0131f\u0131 yaz\u0131yoruz. Bu s\u0131n\u0131f <em>SdlApplication<\/em>&#8216;dan t\u00fcretiliyor olacak (1). Bu temel s\u0131n\u0131f bizler i\u00e7in, SDL ilklendirme, d\u00f6ng\u00fc y\u00f6netimi, girdi kontrol\u00fc ve benzeri ortak i\u015flevleri ger\u00e7ekliyor. Asl\u0131na bakarsan\u0131z, main.cpp dosyas\u0131 i\u00e7erisine de bakarsan\u0131z, sadece bu s\u0131n\u0131f\u0131n olu\u015fturularak ba\u015flat\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n<pre class=\"lang:c++ decode:true \">class FallingLettersApp \r\n\t: public SdlApplication, \/\/ (1)\r\n\t  public KeyboardEventListener  { \/\/ (2)\r\npublic:\r\n\tFallingLettersApp();\r\n\r\n\t\/\/! @brief Klavye girdileri i\u00e7in kullanaca\u011f\u0131m\u0131z fonksiyon (3)\r\n\tvirtual void KeyboardEvent(KeyboardCodes key, int32_t scancode, InputActions action, KeyboardModifier mods) override;\r\nprivate:\r\n\t\/** @brief Grafik uygulamam\u0131z. As\u0131l i\u015flevler bu s\u0131n\u0131f i\u00e7erisinde tan\u0131mlan\u0131yor olacak (4) *\/\r\n\tstd::shared_ptr&lt;FallingLettersGraphicApp&gt; mApp{ std::make_shared&lt;FallingLettersGraphicApp&gt;() };\r\n};<\/pre>\n<p><em>SdlApplication<\/em> ve yard\u0131mc\u0131 s\u0131n\u0131flar\u0131, <em>sdl_application<\/em> k\u00fct\u00fcphanesi ile sunulmakta. Bu k\u00fct\u00fcphane i\u00e7erisinde, SDL&#8217;e \u00f6zel tipler, SDL uyarlama parametreleri ve okuma\/yazma s\u0131n\u0131flar\u0131 bulunuyor. Bu s\u0131n\u0131f da asl\u0131nda ApplicationBase s\u0131n\u0131f\u0131ndan t\u00fcretilmekte (<em>application_base<\/em> k\u00fct\u00fcphanesi) ve ortak olaylar, tipler de bu k\u00fct\u00fcphanede. \u015eu an i\u00e7in sadece <em>SdlApplication<\/em> s\u0131n\u0131f\u0131 var ama kendi uygulama s\u0131n\u0131flar\u0131n\u0131z\u0131 da kullanabilirsiniz.<\/p>\n<p>Bunun ile birlikte ihtiya\u00e7 duyaca\u011f\u0131m\u0131z girdilere ili\u015fkin olaylar\u0131 da dinleyebilmek i\u00e7in aray\u00fcz s\u0131n\u0131f\u0131m\u0131z\u0131 t\u00fcretti\u011fimiz s\u0131n\u0131flara ekliyor olaca\u011f\u0131z. Bu \u00f6rnek i\u00e7in \u015fimdilik sadece klavye girdilerine ihtiya\u00e7 duydu\u011fumuz i\u00e7in KeyboardEventListener&#8217;dan t\u00fcretiyor olaca\u011f\u0131z (2).<\/p>\n<p>Klavye girdileri (ve benzeri di\u011fer girdiler), basit\u00e7e <em>XXXXEvent()<\/em> fonksiyonlar\u0131n\u0131 (klavye i\u00e7in <em>KeyboardEvent<\/em>) tan\u0131mlayarak elde edebilirsiniz (3). Tabi, \u00f6ncelikle dinlemeye y\u00f6nelik iste\u011finizi beyan edip, abone olman\u0131z gerekmekte. Bunu da yine yap\u0131c\u0131 i\u00e7erisinde hallediyoruz (3)<\/p>\n<p>\u015eimdi gelelim uygulamam\u0131z\u0131n en \u00f6nemli bile\u015fenine ki o da grafiksel unsurlar oluyor. Bunun i\u00e7in <em>ClientGraphicApplication<\/em> s\u0131n\u0131f\u0131ndan t\u00fcretilen <em>FallingLettersGraphicApp<\/em> s\u0131n\u0131f\u0131n\u0131 olu\u015fturarak (4), SDL uygulamas\u0131na veriyor olaca\u011f\u0131z (5). Uygulama \u00e7al\u0131\u015f\u0131rken de, asl\u0131nda kullan\u0131lan grafiksel uygulaman\u0131z\u0131 de\u011fi\u015ftirebilirsiniz, bunun i\u00e7in de (5)&#8217;de sunulan <em>UpdateGraphicApplication() <\/em>API&#8217;sini kullanabilirsiniz.<\/p>\n<p>\u015eimdi burada neden iki farkl\u0131 s\u0131n\u0131f ile bunu yap\u0131yoruz sorusu akl\u0131n\u0131za geliyor ki bu gayet normal asl\u0131nda her zaman SDL ile grafiksel uygulama yap\u0131yor olaca\u011f\u0131m\u0131z farz ederek, <em>SdlApplication<\/em> arac\u0131l\u0131\u011f\u0131 ile de uygulamalar\u0131m\u0131z\u0131 geli\u015ftiriyor olabilirdik. A\u00e7\u0131k\u00e7as\u0131 bu benim ba\u015fta ald\u0131\u011f\u0131mz tasar\u0131m kararlar\u0131ndan birisiydi. Bu sayede sadece grafiksel de\u011fil, konsol uygulamalar\u0131 i\u00e7in de bu alt yap\u0131 kullan\u0131labilecek ama \u00e7ok da elzem de\u011fil.<\/p>\n<p>Sonu\u00e7 olarak, grafik uygulamas\u0131na ili\u015fkin s\u0131n\u0131f\u0131m\u0131z a\u015fa\u011f\u0131daki gibi olacak:<\/p>\n<pre class=\"lang:c++ decode:true \">class FallingLettersGraphicApp  \/\/ (4)\r\n\t: public ClientGraphicApplication {\r\npublic:\r\n\tvirtual void Initialize(SdlApplication&amp; sdlApplication) override;\r\n\tvirtual void Update(double tickTimeInMsec) override;\r\n\tvirtual void Display(double tickTimeInMsec) override;\r\n\tvoid SwitchRandomSource();\r\nprotected:\r\n\tstruct LetterDrop {  \/\/ (6)\r\n\t\tPoint2d Position;\r\n\t\tchar    Letters[cDropletterCount][2];\r\n\t\tbool    IsExist{false};\t\/\/ \u015eu an aktif mi, de\u011fil mi\r\n\t\tint16_t Speed { 5 };\r\n\t\tint16_t UpdateCount{ 0 };\r\n\t\tint16_t InitialAlpha{ 255 };\r\n\t\tColor   Color {0, 0xFF, 0x41}; \/\/ Matriks ye\u015fili\r\n\t};\r\n\r\n\tstd::vector&lt;LetterDrop&gt; mDrops;\r\n\r\n\tstruct FontData {          \/\/ (7)\r\n\t\tint32_t FontWidth{ 14 };\r\n\t\tint32_t FontHeight{ 20 };\r\n\t\tstd::string FontLabel{ \"MatrixFont\" };\r\n\t\tstd::string FontPath{ \"fonts\/MatrixFont.ttf\" };\r\n\t}mFontData;\r\n\r\n\tint16_t mAlphaDecrement{ 2 }; \/\/ (8)\r\n\tint16_t mWhenToUpdateLetter{ 6 }; \/\/ (9)\r\n\tstd::unique_ptr&lt;std::mt19937&gt; mRandEngine; \/\/ (10)\r\n\tbool mUseMT{ true }; \/\/ (10)\r\n\tSDL_Renderer* mRenderer{ nullptr }; \/\/ (11)\r\n\tWindowParameter mParameters; \/\/ (12)\r\n\tbasic_engine::Painter mPainter; \/\/ (13)\r\nprivate:\r\n\tint32_t RandomInBetween(int32_t a, int32_t b); \/\/ (16)\r\n};<\/pre>\n<p>Haydi \u015fimdi piksellere biraz raks ettirelim \ud83d\ude0a. \u00d6ncelikle temel bir tak\u0131m i\u015flevlere bakal\u0131m. Daha \u00f6nce geli\u015ftirme yaz\u0131lar\u0131m\u0131 takip edenler hat\u0131rlayacakt\u0131r, asl\u0131nda, bu uygulamalarda i\u015flevleri temel olarak ikiye b\u00f6l\u00fcyorduk. Bunlar, veri\/durum g\u00fcncelleme -&gt; g\u00f6rselle\u015ftirme \u015feklindeydi. Grafik uygulamas\u0131 s\u0131n\u0131f\u0131 da, sizden g\u00fcncelleme ve g\u00f6rselle\u015ftirme i\u015flevlerinizi Update\/Display i\u00e7erisine g\u00f6menizi istiyor.<br \/>\nBu fonksiyonlar da girdi olarak, bir \u00f6nceki \u00e7a\u011fr\u0131dan bu yana ge\u00e7en s\u00fcreyi milisaniye cinsinden sunuyor. \u015eimdi art\u0131k uygulama \u00f6zel i\u015flevlere e\u011filebiliriz.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kabiliyetler<\/span><\/strong><\/h2>\n<p>San\u0131r\u0131m yeterince kabiliyet ekledik. \u015eimdi bunlar\u0131 nas\u0131l ger\u00e7ekledi\u011fimize bir g\u00f6z atal\u0131m. \u0130lk olarak <em>FallingLettersGraphicApp<\/em> s\u0131n\u0131f\u0131na g\u00f6z atal\u0131m.<\/p>\n<p>\u00d6ncelikle her bir harf s\u00fctununu temsil edecek bir veri yap\u0131s\u0131 tan\u0131mlayal\u0131m: <em>LetterDrop<\/em> (6). Burada a\u00e7\u0131k\u00e7as\u0131, harfleri ayr\u0131 modellemedim (modellenebilir), mevcut veri yap\u0131s\u0131 i\u015f g\u00f6r\u00fcyor gibi. Peki, ne laz\u0131m bize:<\/p>\n<ul>\n<li>Harf s\u00fctunu ba\u015flang\u0131\u00e7 konumu. Di\u011fer harflerin konumunu bu konumdan bulabiliriz,<\/li>\n<li>Harfler,<\/li>\n<li>\u015eu an aktfi mi de\u011fil mi?<\/li>\n<li>D\u00fc\u015f\u00fc\u015f h\u0131z\u0131 (asl\u0131nda y\u00f6n i\u00e7in de kullan\u0131labilir),<\/li>\n<li>\u0130lk saydaml\u0131k de\u011feri,<\/li>\n<li>Rengi. Tabi renk sabit ama saydaml\u0131k bilgisi de renk \u00fczerinden verilir,<\/li>\n<li>G\u00fcncelleme adeti. Bu de\u011fi\u015fkeni, harfi ne zaman g\u00fcncelleyece\u011fimizi y\u00f6netmek i\u00e7in kullanaca\u011f\u0131z.<\/li>\n<\/ul>\n<p>Bu s\u00fctunlar\u0131 da STL vector konteyneri i\u00e7erisinde tutaca\u011f\u0131z.<\/p>\n<p>Tabi, harfler ile i\u015f yap\u0131p font bilgisinden kopuk olamay\u0131z. En \u00f6nemli verileri de: Font dosyas\u0131 ve boyut bilgileri. Bunlar da <em>FontData<\/em> veri yap\u0131s\u0131 ve <em>mFontData<\/em> de\u011fi\u015fkeninde tutulmakta (7). Bunlar\u0131, g\u00f6rselle\u015ftirme k\u00fct\u00fcphanesi ve konum benzeri hesaplamalarda kullan\u0131yor olaca\u011f\u0131z.<\/p>\n<p>Geri kalan de\u011fi\u015fkenlere bakt\u0131\u011f\u0131m\u0131zda, her g\u00fcncellemede, saydaml\u0131\u011f\u0131 ne kadar azaltaca\u011f\u0131m\u0131za ili\u015fkin de\u011fi\u015fken (8), karakterleri ka\u00e7 g\u00fcncelleme sonras\u0131nda g\u00fcncelleyece\u011fiz (9).<\/p>\n<p>Rastgelelik i\u00e7in kulland\u0131\u011f\u0131m\u0131z <em>std::mersenne_twister_engine<\/em> motoru (10). Bu arada bu konuya da C++ 11 yaz\u0131lar\u0131mda detayl\u0131 de\u011finmedi\u011fimi fark ettim.<\/p>\n<p>K\u0131saca de\u011finmek gerekirse, <em>mersenne_twister_engine<\/em>, Mersenne Twister algoritmas\u0131na dayal\u0131 bir rastgele say\u0131 motorudur. Verilen aral\u0131kta y\u00fcksek kaliteli i\u015faretsiz tamsay\u0131 \u00fcretir. Bunu nas\u0131l kulland\u0131\u011f\u0131m\u0131z\u0131 anlat\u0131yor olaca\u011f\u0131m. Ayr\u0131ca bir de\u011fi\u015fken ile, bu \u00f6rnek kapsam\u0131nda, daha \u00f6nce sunulan <em>rand()<\/em> API&#8217;si ile Mersenne Twister aras\u0131nda ge\u00e7i\u015fe de izin veriyor olaca\u011f\u0131z.<\/p>\n<p><em>mRenderer<\/em> de\u011fi\u015fkeni SDL kullanarak \u00e7izim yapmak i\u00e7in kullanaca\u011f\u0131m\u0131z bir nesne, buna \u00e7ok kafa yorman\u0131za gerek yok (11). SDL detaylar\u0131na girmek isteyenler ise, SDL dok\u00fcmanlar\u0131na g\u00f6z atabilirler.<\/p>\n<p><em>mParameters<\/em> de\u011fi\u015fkeni uygulamam\u0131z i\u00e7in kulland\u0131\u011f\u0131m\u0131z pencere \u00f6zelliklerini i\u00e7eriyor. Bunu <em>SdlApplication<\/em> s\u0131n\u0131f\u0131 arka planda okuyarak uygulamalara sunuyor olacak (12). Peki, bunlar\u0131 nas\u0131l de\u011fi\u015ftirebilirim? Bu da kolay <em>sdl_application_configuration.json<\/em> beti\u011fi i\u00e7erisinden, ilgili parametreler ile uygulaman\u0131za ili\u015fkin bu parametreleri de\u011fi\u015ftirebilir ve <em>GetWindowParametrs<\/em>() ile bunlara ula\u015fabilirsiniz.<\/p>\n<p>Gelelim son de\u011fi\u015fkenimize, <em>mPainter<\/em> (13). Evet dostlar, Painter s\u0131n\u0131f\u0131, SDL kabiliyetleri kullanarak ihtiya\u00e7 duyabilece\u011finiz temel g\u00f6rselle\u015ftirme i\u015flevlerini sunan bir s\u0131n\u0131ft\u0131r. <em>painter<\/em> k\u00fct\u00fcphanesi i\u00e7erisinde tan\u0131mlanan bu s\u0131n\u0131f, Qt ile sunulan <em>QPainter<\/em>&#8216;a benzer i\u015flevler sunuyor. bunu yaparken, ayr\u0131ca SDL yan k\u00fct\u00fcpahnelerinden olan gfx ve fontcache k\u00fct\u00fcphanelerini de kullan\u0131yor. Bu \u00f6rnek kapsam\u0131nda ise asl\u0131nda sadece metin g\u00f6rselle\u015ftirmesi yap\u0131yor olaca\u011f\u0131z. Bu s\u0131n\u0131f ile sunulan b\u00fct\u00fcn \u00f6zellikleri g\u00f6rmek i\u00e7in, <em>sdl_example<\/em> uygulamas\u0131 i\u00e7erisindeki, <em>SdlPainterSample<\/em>, grafik uygulamas\u0131na g\u00f6z atabilirsiniz.<\/p>\n<p>Bunu ilklendirmek i\u00e7in de Initialize i\u00e7erisinde:<\/p>\n<ul>\n<li><em>SDL_Renderer<\/em> nesnesini ge\u00e7iriyoruz,<\/li>\n<li>Matrix font verisine ili\u015fkin bilgileri veriyoruz,<\/li>\n<li>Kullan\u0131lacak fontu at\u0131yoruz.<\/li>\n<\/ul>\n<p>S\u0131n\u0131f \u00fcyelerine bakt\u0131ktan sonra \u015fimdi geldik temel i\u015flevlere: ilklendirme, g\u00fcncelleme, g\u00f6rselleme ve sonra olarak da verilen aral\u0131k i\u00e7erisinde rastgele say\u0131 \u00fcretme.<\/p>\n<h3><span style=\"color: #0000ff;\"><strong>\u0130lklendirme<\/strong><\/span><\/h3>\n<p>\u0130lklendirmeye dair i\u015flevleri, <em>Initialize()<\/em> fonksiyonu i\u00e7erisinde yap\u0131yoruz. Bunlar\u0131n bir k\u0131sm\u0131ndan yukar\u0131da bahsettik. Gelelim bahsetmediklerimize.<br \/>\n\u0130lk \u00f6nce, rastgele say\u0131 \u00fcretme motoru \u00fcretme nesnesini ilklendiriyoruz (14). Bunun i\u00e7in de <em>std::random_device<\/em> nesnesini, mRandEngine nesnesine veriyoruz. Bunu &#8220;seed&#8221; olarak d\u00fc\u015f\u00fcnebilirsiniz. Bu nesne her platform i\u00e7in farkl\u0131 y\u00f6ntemler kullansa da, rastgele motorlar\u0131 i\u00e7in ihtiya\u00e7 duyulan &#8220;seed&#8221; bilgisini standart bir \u015fekilde sunmakta. C++ 11 \u00f6ncesinde, rastgeleli\u011fi sa\u011flamak ad\u0131na &#8220;seed&#8221; olarak <em>time(NULL)<\/em> kullan\u0131rd\u0131k. Detayl\u0131 bilgi i\u00e7in <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/numeric\/random\/random_device\">https:\/\/en.cppreference.com\/w\/cpp\/numeric\/random\/random_device<\/a><\/span><\/strong>&#8216;e g\u00f6z atabilirsiniz.<\/p>\n<p>\u015eimdi gelelim, harf s\u00fctunlar\u0131m\u0131z\u0131 ilklendirmeye (15). \u00d6ncelikle s\u00fctun say\u0131s\u0131n\u0131 buluyoruz. Bunun i\u00e7in font geni\u015fli\u011fi ve ekran geni\u015fli\u011fini kullan\u0131yoruz. Bir di\u011fer ifade ile, uygulama, pencere geni\u015fli\u011fine g\u00f6re s\u00fctun say\u0131s\u0131n\u0131 ayarl\u0131yor, daha sonra da dolduruyoruz. Bunun i\u00e7in de, yine C++ 11 ile sunulan <em>std::generate_n<\/em> API&#8217;sini kullan\u0131yoruz. Bu API, kendisine verilen fonksiyonu kullanarak, ki bizim durumumuzda lambda ifadesi oluyor, ge\u00e7irilen konteyneri dolduruyor. Doldurmay\u0131 da, sona ekleyerek, <em>std::back_inserter<\/em> ile yap\u0131yoruz. \u015eu an i\u00e7in sadece x konumlar\u0131n\u0131 girip b\u0131rak\u0131yoruz.<\/p>\n<h3><strong><span style=\"color: #0000ff;\">G\u00fcncelleme<\/span><\/strong><\/h3>\n<p>G\u00fcncellemeye dair i\u015flevleri, <em>Update()<\/em> fonksiyonu i\u00e7erisinde yap\u0131yoruz. Buna ili\u015fkin hususlara ge\u00e7meden \u00f6nce s\u0131k\u00e7a kullanaca\u011f\u0131m\u0131z ve verilen aral\u0131kta rastgele say\u0131 \u00fcretme konusuna bakaca\u011f\u0131z. Ba\u015fta da bahsetti\u011fim gibi, uygulaman\u0131n do\u011fas\u0131 gere\u011fi, rastgeleli\u011fi olduk\u00e7a s\u0131k kullan\u0131yor olaca\u011f\u0131z. C++ 11 \u00f6ncesi direk bir aral\u0131kta rastgele say\u0131 \u00fcretmek i\u00e7in <em>RandomInBetween<\/em> fonksiyonu i\u00e7erisindeki else k\u0131sm\u0131 gibi bir yakla\u015f\u0131m izlemeniz gerekiyordu (16). C++ 11 ile sunulan k\u00fct\u00fcphane kabiliyetleri ile aral\u0131kl\u0131 rastgele say\u0131 \u00fcretebiliyoruz. Bunun i\u00e7in de <em>std::uniform_int_distribution<\/em>&#8216;\u0131 kullan\u0131yoruz. Di\u011fer da\u011f\u0131t\u0131mlar i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/numeric\/random\">https:\/\/en.cppreference.com\/w\/cpp\/numeric\/random<\/a><\/strong><\/span> adresine ba\u015fvurabilirsiniz. Hatta, uygulama i\u00e7erisinde onlar\u0131 kullanarak, davran\u0131\u015f\u0131n nas\u0131l de\u011fi\u015fti\u011fine bakabilirsiniz.<\/p>\n<p>Harfleri g\u00fcncellemek i\u00e7in ilk bakaca\u011f\u0131m\u0131z, \u015fu an ilgili s\u00fctunda bir harf damlas\u0131n\u0131n aktif olup\/olmad\u0131\u011f\u0131. Bu k\u0131s\u0131mlar a\u00e7\u0131k\u00e7as\u0131 biraz uygulamaya y\u00f6nelik oldu\u011fu i\u00e7in k\u0131saca de\u011finip ge\u00e7ece\u011fim. Zaten koda bakarak da genel ak\u0131\u015f\u0131 g\u00f6rebilirsiniz. E\u011fer, ilgili harf damlas\u0131 aktif ise?<\/p>\n<ul>\n<li>Dikey konum g\u00fcncellenir (yani a\u015fa\u011f\u0131 inmesi),<\/li>\n<li>Saydaml\u0131k azalt\u0131l\u0131r,<\/li>\n<li>E\u011fer g\u00fcncelleme s\u0131ras\u0131 geldi ise de harf g\u00fcncellenir,<\/li>\n<li>Ve en \u00f6nemlisi e\u011fer pencerenin alt\u0131na geldiyse ya da saydaml\u0131k belirli bir seviyenin alt\u0131na d\u00fc\u015ferse, art\u0131k aktif de\u011fil olarak g\u00fcncellenir.<\/li>\n<\/ul>\n<p>E\u011fer, ilgili harf damlas\u0131 aktif de\u011fil ise?<\/p>\n<ul>\n<li>Dikeyde rastgele bir konum ata,<\/li>\n<li>Rastgele bir harf, saydaml\u0131k ve h\u0131z ata,<\/li>\n<li>Aktifle\u015ftir ve g\u00fcncelleme s\u0131ras\u0131n\u0131 s\u0131f\u0131rla.<\/li>\n<\/ul>\n<p>Evet sevgili dostlar. \u00d6rnek uygulamam\u0131z\u0131n b\u00fct\u00fcn mekani\u011fi bu. \u015eimdi de g\u00f6rselle\u015ftirme k\u0131sm\u0131na bakal\u0131m.<\/p>\n<h3><strong><span style=\"color: #0000ff;\">G\u00f6rselle\u015ftirme<\/span><\/strong><\/h3>\n<p>Motorun sundu\u011fu Painter s\u0131n\u0131f\u0131n\u0131n kendini g\u00f6sterdi\u011fi k\u0131sma geldik. G\u00f6rselle\u015ftirmeye dair i\u015flevleri, <em>Display()<\/em> fonksiyonu i\u00e7erisinde yap\u0131yoruz.<br \/>\n\u00d6ncelikle, \u00f6nceki \u00e7izimleri bir silelim (evet bu \u00f6rnek i\u00e7in bir anlam\u0131 olmayabilir ama \u00e7izim i\u015flevleri \u00f6ncesinde bu tarz bir kullan\u0131mda fayda var). Harf damlas\u0131 i\u00e7erisindeki harfleri, alttan \u00fcste do\u011fru \u00e7iziyoruz. Her aktif harf i\u00e7in (aktif olmayanlar\u0131 \u00e7izmiyoruz):<\/p>\n<ul>\n<li>\u0130lk \u00e7izilen harfin saydaml\u0131\u011f\u0131n\u0131 di\u011ferlerinden daha d\u00fc\u015f\u00fck yap\u0131yoruz ve bunu <em>Pen<\/em> nesnesi ile <em>Painter<\/em>&#8216;a ge\u00e7iriyoruz. <em>Painter<\/em> her zaman en son atanan <em>Pen<\/em> ve <em>Brush<\/em> nesnesini kullanmakta. \u015eekil ve metin \u00e7izimlerde <em>Pen<\/em> nesnesi, doldurma i\u015flemlerinde de <em>Brush<\/em> nesnesi kullan\u0131l\u0131yor,<\/li>\n<li>\u0130lk harfi <em>Text()<\/em> API&#8217;si ile \u00e7izdiriyoruz,<\/li>\n<li>Di\u011fer harfleri ise azalan saydaml\u0131k ile benzer \u015fekilde \u00e7izdiriyoruz,<\/li>\n<li>Tamamen transparan harfleri \u00e7izdirmiyoruz.<\/li>\n<\/ul>\n<p>Uygulamam\u0131z\u0131n g\u00f6rselle\u015ftirme k\u0131sm\u0131 da bu kadar. Umar\u0131m, faydal\u0131 olmu\u015ftur. \u00d6rnek uygulamay\u0131 alarak \u00e7e\u015fitli g\u00fcncellemeler ya da uyarlamalar yapabilirsiniz. \u00d6r. ayn\u0131 s\u00fctunda birden fazla harf damlas\u0131 ya da farkl\u0131 renkler ya da yatay ak\u0131\u015flar, vb. Bunlar\u0131 da payla\u015f\u0131rsan\u0131z sevinirim.<\/p>\n<p>Bu arada \u00f6rnek uygulamaya ili\u015fkin hen\u00fcz CMake betiklerini eklemedim ama en k\u0131sa s\u00fcrede ekliyor olaca\u011f\u0131m. \u015eimdilik VS2022 proje dosyalar\u0131 ile uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Buna da a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz:<\/p>\n<p><strong><span style=\"color: #008000;\">https:\/\/github.com\/yazilimperver\/uEngine4\/tree\/main\/code\/project\/vs2022\/uengine4\/app\/falling_letters<\/span><\/strong><\/p>\n<p>Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle. Kendinize iyi bak\u0131n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>G\u00dcNCELLEME: Evet dostlar CMake betikleri de geldi art\u0131k Linux ve di\u011fer platformlar i\u00e7in de derleyebilirsiniz. A\u015fa\u011f\u0131da, WSL&#8217;den ald\u0131\u011f\u0131m ekran g\u00f6r\u00fcnt\u00fcs\u00fc mevcut (evet WSL \u00fczerinden grafiksel uygulamalar\u0131 da \u00e7al\u0131\u015ft\u0131rabilirsiniz, wsl2 sa\u011folsun \ud83d\ude09 A\u00e7\u0131k\u00e7as\u0131 as\u0131l vakit alan SDL k\u00fct\u00fcphanelerini adam etmek oldu. Bunun i\u00e7in de, https:\/\/github.com\/yazilimperver\/uEngine4\/blob\/main\/code\/src\/ext\/sdl2_linux\/PrepareSDL2ForLinux.sh beti\u011fini ekledim. Bu betikle, SDL&#8217; yi indirip, kurabilirsiniz. ORJ\u0130NAL YAZI: Bir&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"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],"tags":[1060,1059,1054,1056,1057,1058,1055,1042,1041,1061,217],"class_list":["post-2710","post","type-post","status-publish","format-standard","hentry","category-c","category-modern-c","category-oyun-gelistirme","tag-back_inserter","tag-generate_n","tag-matrix","tag-mersenne_twister_engine","tag-rand","tag-random_device","tag-sample","tag-sdl2","tag-uengine4","tag-uniform_int_distribution","tag-vector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>uEngine4 - Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 - G\u00fcncelleme - 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\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"uEngine4 - Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 - G\u00fcncelleme - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"G\u00dcNCELLEME: Evet dostlar CMake betikleri de geldi art\u0131k Linux ve di\u011fer platformlar i\u00e7in de derleyebilirsiniz. A\u015fa\u011f\u0131da, WSL&#8217;den ald\u0131\u011f\u0131m ekran g\u00f6r\u00fcnt\u00fcs\u00fc mevcut (evet WSL \u00fczerinden grafiksel uygulamalar\u0131 da \u00e7al\u0131\u015ft\u0131rabilirsiniz, wsl2 sa\u011folsun \ud83d\ude09 A\u00e7\u0131k\u00e7as\u0131 as\u0131l vakit alan SDL k\u00fct\u00fcphanelerini adam etmek oldu. Bunun i\u00e7in de, https:\/\/github.com\/yazilimperver\/uEngine4\/blob\/main\/code\/src\/ext\/sdl2_linux\/PrepareSDL2ForLinux.sh beti\u011fini ekledim. Bu betikle, SDL&#8217; yi indirip, kurabilirsiniz. ORJ\u0130NAL YAZI: Bir... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-11T18:33:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-23T20:14:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb.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=\"11 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\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"uEngine4 &#8211; Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 &#8211; G\u00fcncelleme\",\"datePublished\":\"2022-12-11T18:33:41+00:00\",\"dateModified\":\"2022-12-23T20:14:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\"},\"wordCount\":2266,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"back_inserter\",\"generate_n\",\"matrix\",\"mersenne_twister_engine\",\"rand\",\"random_device\",\"sample\",\"sdl2\",\"uengine4\",\"uniform_int_distribution\",\"vector\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Oyun Geli\u015ftirme\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\",\"name\":\"uEngine4 - Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 - G\u00fcncelleme - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2022-12-11T18:33:41+00:00\",\"dateModified\":\"2022-12-23T20:14:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uEngine4 &#8211; Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 &#8211; G\u00fcncelleme\"}]},{\"@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":"uEngine4 - Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 - G\u00fcncelleme - 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\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/","og_locale":"tr_TR","og_type":"article","og_title":"uEngine4 - Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 - G\u00fcncelleme - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"G\u00dcNCELLEME: Evet dostlar CMake betikleri de geldi art\u0131k Linux ve di\u011fer platformlar i\u00e7in de derleyebilirsiniz. A\u015fa\u011f\u0131da, WSL&#8217;den ald\u0131\u011f\u0131m ekran g\u00f6r\u00fcnt\u00fcs\u00fc mevcut (evet WSL \u00fczerinden grafiksel uygulamalar\u0131 da \u00e7al\u0131\u015ft\u0131rabilirsiniz, wsl2 sa\u011folsun \ud83d\ude09 A\u00e7\u0131k\u00e7as\u0131 as\u0131l vakit alan SDL k\u00fct\u00fcphanelerini adam etmek oldu. Bunun i\u00e7in de, https:\/\/github.com\/yazilimperver\/uEngine4\/blob\/main\/code\/src\/ext\/sdl2_linux\/PrepareSDL2ForLinux.sh beti\u011fini ekledim. Bu betikle, SDL&#8217; yi indirip, kurabilirsiniz. ORJ\u0130NAL YAZI: Bir... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2022-12-11T18:33:41+00:00","article_modified_time":"2022-12-23T20:14:56+00:00","og_image":[{"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2022\/12\/img_63a60be1c83cb.png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"uEngine4 &#8211; Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 &#8211; G\u00fcncelleme","datePublished":"2022-12-11T18:33:41+00:00","dateModified":"2022-12-23T20:14:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/"},"wordCount":2266,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["back_inserter","generate_n","matrix","mersenne_twister_engine","rand","random_device","sample","sdl2","uengine4","uniform_int_distribution","vector"],"articleSection":["C++","Modern C++","Oyun Geli\u015ftirme"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/","name":"uEngine4 - Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 - G\u00fcncelleme - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2022-12-11T18:33:41+00:00","dateModified":"2022-12-23T20:14:56+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/12\/11\/uengine4-matrix-dusen-harf-uygulamasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"uEngine4 &#8211; Matrix, D\u00fc\u015fen Harf Uygulamas\u0131 &#8211; G\u00fcncelleme"}]},{"@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\/2710","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=2710"}],"version-history":[{"count":4,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2710\/revisions"}],"predecessor-version":[{"id":2715,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2710\/revisions\/2715"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}