{"id":37927,"date":"2026-01-18T18:00:43","date_gmt":"2026-01-18T15:00:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/"},"modified":"2026-01-18T18:00:43","modified_gmt":"2026-01-18T15:00:43","slug":"pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/","title":{"rendered":"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)"},"content":{"rendered":"<h2>Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)<\/h2>\n<p>Pyxel, Python programlama diliyle retro tarzda 2D oyunlar geli\u015ftirmek i\u00e7in tasarlanm\u0131\u015f, kullan\u0131m\u0131 kolay ve e\u011flenceli bir oyun motorudur. Bu serinin on be\u015finci b\u00f6l\u00fcm\u00fcnde, daha \u00f6nce ele ald\u0131\u011f\u0131m\u0131z t\u00fcnel ka\u00e7ma oyununun geli\u015fmi\u015f bir versiyonunu, &#8220;T\u00fcnel Ka\u00e7ma Oyunu 2&#8243;yi inceleyece\u011fiz. Bu \u00f6rnek, dinamik engeller, s\u00fcrekli kayan bir t\u00fcnel ve oyuncu etkile\u015fimleri gibi temel oyun mekaniklerini bir araya getirerek, Pyxel&#8217;in sundu\u011fu olanaklar\u0131 daha derinlemesine ke\u015ffetmenizi sa\u011flayacak. Bu makalede, oyunun temel bile\u015fenlerini, kod yap\u0131s\u0131n\u0131 ve geli\u015ftirme s\u00fcrecini ad\u0131m ad\u0131m ele alaca\u011f\u0131z, b\u00f6ylece kendi t\u00fcnel ka\u00e7ma oyununuzu olu\u015fturmak i\u00e7in sa\u011flam bir temel edineceksiniz.<\/p>\n<h3>T\u00fcnel Ka\u00e7ma Oyunu 2&#8217;nin Temelleri ve Pyxel Mimarisi<\/h3>\n<p>Bu b\u00f6l\u00fcmde, Pyxel ile geli\u015ftirece\u011fimiz T\u00fcnel Ka\u00e7ma Oyunu 2&#8217;nin temel konseptini, Pyxel&#8217;in oyun d\u00f6ng\u00fcs\u00fc mimarisini ve bu t\u00fcr bir oyun i\u00e7in gerekli olan mod\u00fclleri detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Oyunun genel yap\u0131s\u0131n\u0131 anlamak, geli\u015ftirme s\u00fcrecinde bize yol g\u00f6sterecektir.<\/p>\n<h4>Oyun Konsepti ve Hedefler<\/h4>\n<p>T\u00fcnel Ka\u00e7ma Oyunu 2, oyuncunun s\u00fcrekli ileri do\u011fru hareket eden bir t\u00fcnelde, rastgele beliren engellerden ka\u00e7\u0131narak en y\u00fcksek skoru elde etmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131 bir oyundur. Oyunun temel hedefleri aras\u0131nda, ak\u0131c\u0131 bir t\u00fcnel kayd\u0131rma efekti, dinamik ve \u00e7e\u015fitli engel \u00fcretimi, hassas \u00e7arp\u0131\u015fma alg\u0131lama ve kullan\u0131c\u0131 dostu bir kontrol mekanizmas\u0131 bulunmaktad\u0131r. Bu versiyonda, \u00f6nceki t\u00fcnel ka\u00e7ma oyununa g\u00f6re daha karma\u015f\u0131k engel desenleri ve artan zorluk seviyesi gibi geli\u015ftirmeler hedeflenmi\u015ftir.<\/p>\n<h4>Pyxel&#8217;in <code>init<\/code>, <code>update<\/code>, <code>draw<\/code> D\u00f6ng\u00fcs\u00fc<\/h4>\n<p>Pyxel&#8217;deki her oyun, temel olarak \u00fc\u00e7 ana fonksiyondan olu\u015fan bir oyun d\u00f6ng\u00fcs\u00fc etraf\u0131nda d\u00f6ner: <code>init()<\/code>, <code>update()<\/code> ve <code>draw()<\/code>. <code>init()<\/code> fonksiyonu oyun ba\u015flad\u0131\u011f\u0131nda bir kez \u00e7a\u011fr\u0131l\u0131r ve oyunun ba\u015flang\u0131\u00e7 ayarlar\u0131n\u0131 (de\u011fi\u015fkenler, kaynaklar vb.) yapar. <code>update()<\/code> fonksiyonu saniyede 30 veya 60 kez \u00e7a\u011fr\u0131larak oyunun mant\u0131\u011f\u0131n\u0131 (oyuncu hareketi, engel konumu, \u00e7arp\u0131\u015fma kontrol\u00fc) g\u00fcnceller. <code>draw()<\/code> fonksiyonu ise her <code>update()<\/code> \u00e7a\u011fr\u0131s\u0131ndan sonra \u00e7al\u0131\u015farak oyunun g\u00f6rsel \u00f6\u011felerini (t\u00fcnel, oyuncu, engeller, skor) ekrana \u00e7izer. Bu d\u00f6ng\u00fc, oyunun dinamik ve etkile\u015fimli olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code>\nimport pyxel\n\nclass TunnelDodgeGame:\n    def __init__(self):\n        pyxel.init(256, 256, title=\"Tunnel Dodge Game 2\")\n        self.reset_game()\n        pyxel.run(self.update, self.draw)\n\n    def reset_game(self):\n        self.player_x = pyxel.width \/\/ 2\n        self.player_y = pyxel.height - 30\n        self.tunnels = [] # T\u00fcnel par\u00e7alar\u0131\n        self.obstacles = [] # Engeller\n        self.score = 0\n        self.game_state = \"playing\" # \"playing\", \"game_over\"\n\n    def update(self):\n        # Oyun mant\u0131\u011f\u0131 burada i\u015flenir\n        pass\n\n    def draw(self):\n        # Oyun \u00e7izimleri burada yap\u0131l\u0131r\n        pass\n\nTunnelDodgeGame()\n<\/pre>\n<p><\/code><\/p>\n<h4>Gerekli Pyxel Mod\u00fclleri<\/h4>\n<p>T\u00fcnel Ka\u00e7ma Oyunu 2'yi geli\u015ftirmek i\u00e7in Pyxel'in temel mod\u00fcllerini kullanaca\u011f\u0131z. Bunlar aras\u0131nda grafik \u00e7izimi i\u00e7in <code>pyxel.rect()<\/code>, <code>pyxel.line()<\/code>, <code>pyxel.circ()<\/code>; giri\u015f kontrol\u00fc i\u00e7in <code>pyxel.btnp()<\/code>, <code>pyxel.btn()<\/code>; ses efektleri i\u00e7in <code>pyxel.play()<\/code>, <code>pyxel.sound()<\/code> ve ekran temizli\u011fi i\u00e7in <code>pyxel.cls()<\/code> gibi fonksiyonlar yer almaktad\u0131r. Ayr\u0131ca, oyun kaynaklar\u0131n\u0131 (sprite'lar, sesler) y\u00f6netmek i\u00e7in <code>pyxel.load()<\/code> veya do\u011frudan kod i\u00e7inde tan\u0131mlama y\u00f6ntemlerini kullanabiliriz. Bu mod\u00fcller, oyunun g\u00f6rsel ve i\u015fitsel deneyimini zenginle\u015ftirmemizi sa\u011flar.<\/p>\n<h3>Dinamik T\u00fcnel ve Engel Olu\u015fturma Mekanikleri<\/h3>\n<p>Oyunun merkezinde, s\u00fcrekli kayan bir t\u00fcnel ve bu t\u00fcnel i\u00e7inde beliren engeller yer al\u0131r. Bu b\u00f6l\u00fcmde, t\u00fcnelin nas\u0131l dinamik olarak olu\u015fturulup kayd\u0131r\u0131ld\u0131\u011f\u0131n\u0131 ve engellerin nas\u0131l rastgele \u00fcretilip y\u00f6netildi\u011fini detayland\u0131raca\u011f\u0131z.<\/p>\n<h4>Sonsuz T\u00fcnel Kayd\u0131rma Efekti<\/h4>\n<p>T\u00fcnel, asl\u0131nda ekranda s\u00fcrekli yukar\u0131 do\u011fru kayd\u0131r\u0131lan bir dizi dikd\u00f6rtgen veya \u00e7izgi par\u00e7ac\u0131\u011f\u0131ndan olu\u015fur. Her <code>update<\/code> d\u00f6ng\u00fcs\u00fcnde, t\u00fcnel par\u00e7ac\u0131klar\u0131n\u0131n Y koordinatlar\u0131 azalt\u0131larak yukar\u0131 do\u011fru hareket etmeleri sa\u011flan\u0131r. Ekran\u0131n alt\u0131na yeni t\u00fcnel par\u00e7ac\u0131klar\u0131 eklenirken, ekran\u0131n \u00fcst\u00fcnden \u00e7\u0131kanlar kald\u0131r\u0131l\u0131r. Bu, oyuncuya s\u00fcrekli ilerliyormu\u015f hissi veren \"sonsuz t\u00fcnel\" efektini yarat\u0131r. T\u00fcnelin geni\u015fli\u011fi, oyuncunun t\u00fcneldeki konumuna g\u00f6re perspektif bir etki yaratacak \u015fekilde ayarlanabilir.<\/p>\n<pre><code>\n# update i\u00e7inde t\u00fcnel kayd\u0131rma mant\u0131\u011f\u0131\nfor tunnel_part in self.tunnels:\n    tunnel_part[\"y\"] -= self.tunnel_speed\n    # T\u00fcnel par\u00e7alar\u0131n\u0131 gerekti\u011finde yenile\n    if tunnel_part[\"y\"] < -10: # Ekran d\u0131\u015f\u0131na \u00e7\u0131kanlar\u0131 kald\u0131r\n        self.tunnels.remove(tunnel_part)\n        # Yeni t\u00fcnel par\u00e7as\u0131 ekle (geni\u015fli\u011fi rastgele de\u011fi\u015febilir)\n        self.tunnels.append({\n            \"x\": 0, \n            \"y\": pyxel.height + 10, \n            \"width\": pyxel.width, \n            \"height\": 10,\n            \"gap_x\": pyxel.rndi(30, pyxel.width - 60), # T\u00fcnel bo\u015flu\u011fu\n            \"gap_width\": pyxel.rndi(40, 80)\n        })\n<\/pre>\n<p><\/code><\/p>\n<h4>Rastgele Engel \u00dcretimi ve Konumland\u0131rma<\/h4>\n<p>Engeller, t\u00fcnel par\u00e7ac\u0131klar\u0131yla birlikte veya ba\u011f\u0131ms\u0131z olarak belirli aral\u0131klarla rastgele \u00fcretilir. Engellerin t\u00fcr\u00fc (tek blok, duvar, hareketli engel), boyutu ve t\u00fcnel i\u00e7indeki konumu rastgele belirlenir. Bu rastgelelik, oyunun her oynan\u0131\u015fta farkl\u0131 bir deneyim sunmas\u0131n\u0131 sa\u011flar. Engellerin Y koordinatlar\u0131 da t\u00fcnel gibi s\u00fcrekli azalt\u0131larak oyuncuya do\u011fru hareket etmeleri sa\u011flan\u0131r. Engellerin belirli bir mesafeden sonra ekrandan \u00e7\u0131kmas\u0131 ve yenilerinin \u00fcretilmesi, oyunun ak\u0131\u015f\u0131n\u0131 devam ettirir.<\/p>\n<h4>Engellerin Hareket Y\u00f6netimi<\/h4>\n<p>Engellerin sadece dikey olarak hareket etmesi yeterli de\u011fildir; baz\u0131 engellerin yatayda da hareket etmesi veya belirli desenlerde belirmesi oyunun zorlu\u011funu ve \u00e7e\u015fitlili\u011fini art\u0131r\u0131r. \u00d6rne\u011fin, bir engel sa\u011fdan sola do\u011fru kayabilir veya t\u00fcnelin ortas\u0131nda aniden belirebilir. Bu hareket desenleri, engellerin <code>update<\/code> fonksiyonunda kendi i\u00e7 mant\u0131klar\u0131yla y\u00f6netilmesini gerektirir. Her engel nesnesi, kendi konumunu, h\u0131z\u0131n\u0131 ve hareket tipini bar\u0131nd\u0131ran \u00f6zelliklere sahip olabilir.<\/p>\n<h3>Oyuncu Kontrol\u00fc ve \u00c7arp\u0131\u015fma Alg\u0131lama<\/h3>\n<p>Oyuncunun t\u00fcnel i\u00e7inde hareket etmesi ve engellerden ka\u00e7\u0131nmas\u0131, oyunun temel etkile\u015fimini olu\u015fturur. Bu b\u00f6l\u00fcmde, oyuncu kontrol\u00fcn\u00fc nas\u0131l y\u00f6netece\u011fimizi ve \u00e7arp\u0131\u015fmalar\u0131 nas\u0131l alg\u0131layaca\u011f\u0131m\u0131z\u0131 inceleyece\u011fiz.<\/p>\n<h4>Klavye Giri\u015flerini \u0130\u015fleme<\/h4>\n<p>Pyxel, klavye giri\u015flerini i\u015flemek i\u00e7in basit ve etkili fonksiyonlar sunar. <code>pyxel.btn(pyxel.KEY_LEFT)<\/code> gibi fonksiyonlar, belirli bir tu\u015fun bas\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol ederken, <code>pyxel.btnp(pyxel.KEY_SPACE)<\/code> gibi fonksiyonlar ise tu\u015fa bas\u0131lma an\u0131n\u0131 (press) alg\u0131lar. T\u00fcnel ka\u00e7ma oyununda, genellikle sol ve sa\u011f ok tu\u015flar\u0131 oyuncunun yatay hareketini kontrol etmek i\u00e7in kullan\u0131l\u0131r. Oyuncunun h\u0131z\u0131 ve hassasiyeti, oyunun oynanabilirli\u011fi a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<pre><code>\n# update i\u00e7inde oyuncu kontrol\u00fc\nif pyxel.btn(pyxel.KEY_LEFT):\n    self.player_x = max(0, self.player_x - self.player_speed)\nif pyxel.btn(pyxel.KEY_RIGHT):\n    self.player_x = min(pyxel.width - self.player_width, self.player_x + self.player_speed)\n<\/pre>\n<p><\/code><\/p>\n<h4>Oyuncu Hareketi ve S\u0131n\u0131rlar<\/h4>\n<p>Oyuncu, t\u00fcnelin geni\u015fli\u011fi i\u00e7inde yatayda hareket edebilir. Oyuncunun ekran s\u0131n\u0131rlar\u0131n\u0131n d\u0131\u015f\u0131na \u00e7\u0131kmas\u0131n\u0131 engellemek i\u00e7in <code>max()<\/code> ve <code>min()<\/code> fonksiyonlar\u0131 kullan\u0131larak hareket alan\u0131 k\u0131s\u0131tlan\u0131r. Oyuncunun h\u0131z\u0131, oyunun zorluk seviyesine g\u00f6re ayarlanabilir. Ayr\u0131ca, oyuncunun g\u00f6rsel temsilinin (bir dikd\u00f6rtgen, daire veya sprite) do\u011fru konumda \u00e7izilmesi \u00f6nemlidir.<\/p>\n<h4>Piksel Tabanl\u0131 \u00c7arp\u0131\u015fma Kontrol\u00fc<\/h4>\n<p>\u00c7arp\u0131\u015fma alg\u0131lama, t\u00fcnel ka\u00e7ma oyununun kritik bir par\u00e7as\u0131d\u0131r. Oyuncunun bir engelle \u00e7arp\u0131\u015f\u0131p \u00e7arp\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in genellikle dikd\u00f6rtgen tabanl\u0131 \u00e7arp\u0131\u015fma (AABB - Axis-Aligned Bounding Box) alg\u0131lama y\u00f6ntemi kullan\u0131l\u0131r. Bu y\u00f6ntem, iki dikd\u00f6rtgenin birbirine de\u011fip de\u011fmedi\u011fini kontrol eder. Pyxel'de, oyuncunun ve engellerin koordinatlar\u0131 ve boyutlar\u0131 kullan\u0131larak bu kontrol kolayca yap\u0131labilir. \u00c7arp\u0131\u015fma durumunda oyun biter veya oyuncu hasar al\u0131r.<\/p>\n<pre><code>\n# update i\u00e7inde \u00e7arp\u0131\u015fma kontrol\u00fc\nplayer_rect = (self.player_x, self.player_y, self.player_width, self.player_height)\nfor obstacle in self.obstacles:\n    obstacle_rect = (obstacle[\"x\"], obstacle[\"y\"], obstacle[\"width\"], obstacle[\"height\"])\n    if (player_rect[0] < obstacle_rect[0] + obstacle_rect[2] and\n        player_rect[0] + player_rect[2] > obstacle_rect[0] and\n        player_rect[1] < obstacle_rect[1] + obstacle_rect[3] and\n        player_rect[1] + player_rect[3] > obstacle_rect[1]):\n        self.game_state = \"game_over\"\n        # pyxel.play(3, 3) # \u00c7arp\u0131\u015fma sesi\n        break\n<\/pre>\n<p><\/code><\/p>\n<h3>G\u00f6rsel ve \u0130\u015fitsel Geri Bildirimler<\/h3>\n<p>Bir oyunun \u00e7ekicili\u011fi, sadece mekaniklerinden de\u011fil, ayn\u0131 zamanda sundu\u011fu g\u00f6rsel ve i\u015fitsel deneyimden de gelir. Pyxel, retro tarzda grafikler ve sesler olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar.<\/p>\n<h4>T\u00fcnel ve Oyuncu \u00c7izimi<\/h4>\n<p>T\u00fcnel, <code>pyxel.rect()<\/code> veya <code>pyxel.line()<\/code> fonksiyonlar\u0131 kullan\u0131larak \u00e7izilebilir. T\u00fcnel par\u00e7ac\u0131klar\u0131n\u0131n farkl\u0131 renklerde veya g\u00f6lgelerde \u00e7izilmesi, derinlik ve h\u0131z hissi katabilir. Oyuncu ise basit bir dikd\u00f6rtgen, daire veya daha \u00f6nceden haz\u0131rlanm\u0131\u015f bir sprite olarak \u00e7izilebilir. Pyxel'in renk paleti, retro esteti\u011fe uygun canl\u0131 renkler sunar. <code>pyxel.cls()<\/code> fonksiyonu, her karede ekran\u0131 temizleyerek \u00f6nceki \u00e7izimlerin kalmamas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code>\n# draw i\u00e7inde \u00e7izim \u00f6rnekleri\npyxel.cls(0) # Ekran\u0131 siyahla temizle\n\n# T\u00fcnel \u00e7izimi\nfor tunnel_part in self.tunnels:\n    # Sol duvar\n    pyxel.rect(tunnel_part[\"x\"], tunnel_part[\"y\"], tunnel_part[\"gap_x\"], tunnel_part[\"height\"], 7) \n    # Sa\u011f duvar\n    pyxel.rect(tunnel_part[\"gap_x\"] + tunnel_part[\"gap_width\"], tunnel_part[\"y\"], \n               tunnel_part[\"width\"] - (tunnel_part[\"gap_x\"] + tunnel_part[\"gap_width\"]), tunnel_part[\"height\"], 7)\n\n# Engelleri \u00e7iz\nfor obstacle in self.obstacles:\n    pyxel.rect(obstacle[\"x\"], obstacle[\"y\"], obstacle[\"width\"], obstacle[\"height\"], 8) # K\u0131rm\u0131z\u0131 engel\n\n# Oyuncuyu \u00e7iz\npyxel.rect(self.player_x, self.player_y, self.player_width, self.player_height, 11) # Sar\u0131 oyuncu\n<\/pre>\n<p><\/code><\/p>\n<h4>Ses Efektleri ve M\u00fczik Kullan\u0131m\u0131<\/h4>\n<p>Pyxel, basit ses efektleri ve m\u00fczik olu\u015fturmak i\u00e7in yerle\u015fik bir edit\u00f6re sahiptir. <code>pyxel.sound()<\/code> ve <code>pyxel.music()<\/code> fonksiyonlar\u0131 ile bu kaynaklar\u0131 oyunda kullanabiliriz. Oyuncu hareketleri, engel \u00e7arp\u0131\u015fmalar\u0131 veya skor art\u0131\u015f\u0131 gibi olaylar i\u00e7in k\u0131sa ses efektleri (SFX) eklemek, oyunun etkile\u015fimini art\u0131r\u0131r. Arka plan m\u00fczi\u011fi ise oyunun atmosferini zenginle\u015ftirir. <code>pyxel.play()<\/code> fonksiyonu, belirli bir ses veya m\u00fczi\u011fi \u00e7almak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code>\n# Ses kaynaklar\u0131n\u0131 Pyxel edit\u00f6r\u00fcnde olu\u015fturun veya kodda tan\u0131mlay\u0131n\n# pyxel.sound(0).set(\"a3c2\", \"p\", \"7\", \"vffn\", 10) # \u00d6rnek ses tan\u0131m\u0131\n\n# Oyuncu \u00e7arpt\u0131\u011f\u0131nda veya skor artt\u0131\u011f\u0131nda ses \u00e7almak i\u00e7in\n# pyxel.play(0, 0) # Kanal 0'da sound 0'\u0131 \u00e7al\n<\/pre>\n<p><\/code><\/p>\n<h4>Kullan\u0131c\u0131 Aray\u00fcz\u00fc (Skor, Oyun Durumu)<\/h4>\n<p>Oyun s\u0131ras\u0131nda oyuncuya bilgi sa\u011flamak i\u00e7in basit bir kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) gereklidir. Skor, ekran\u0131n \u00fcst k\u00f6\u015fesinde g\u00f6sterilebilir. Oyun ba\u015flad\u0131\u011f\u0131nda \"Ba\u015flamak \u0130\u00e7in SPACE Tu\u015funa Bas\u0131n\" gibi bir mesaj veya oyun bitti\u011finde \"Oyun Bitti! Skorunuz: X\" gibi bir ekran \u00e7izilebilir. <code>pyxel.text()<\/code> fonksiyonu, ekrana metin yazmak i\u00e7in kullan\u0131l\u0131r ve farkl\u0131 renklerde ve konumlarda g\u00f6sterilebilir.<\/p>\n<h3>Oyun Ak\u0131\u015f\u0131, Skorlama ve Zorluk Seviyesi<\/h3>\n<p>Bir oyunun dinamik ve s\u00fcr\u00fckleyici olmas\u0131 i\u00e7in ak\u0131\u015f\u0131n\u0131n iyi y\u00f6netilmesi, oyuncunun ba\u015far\u0131s\u0131n\u0131 \u00f6l\u00e7en bir skorlama sistemine sahip olmas\u0131 ve zorluk seviyesinin ayarlanabilir olmas\u0131 \u00f6nemlidir.<\/p>\n<h4>Oyun Durumlar\u0131 (Ba\u015flang\u0131\u00e7, Oynan\u0131yor, Bitti)<\/h4>\n<p>Oyunun farkl\u0131 durumlar\u0131n\u0131 (\u00f6rne\u011fin, ba\u015flang\u0131\u00e7 ekran\u0131, oyun oynan\u0131rken, oyun bitti ekran\u0131) y\u00f6netmek, oyun ak\u0131\u015f\u0131n\u0131 d\u00fczenli tutar. <code>game_state<\/code> gibi bir de\u011fi\u015fken kullanarak bu durumlar\u0131 kontrol edebiliriz. Her durumda, <code>update()<\/code> ve <code>draw()<\/code> fonksiyonlar\u0131 farkl\u0131 mant\u0131k ve \u00e7izimler uygulayabilir. \u00d6rne\u011fin, \"game_over\" durumunda oyuncu hareket etmez ve sadece \"Oyun Bitti\" mesaj\u0131 g\u00f6sterilir.<\/p>\n<pre><code>\n# update fonksiyonu i\u00e7inde durum y\u00f6netimi\nif self.game_state == \"playing\":\n    # Oyuncu hareketi, engel g\u00fcncelleme, \u00e7arp\u0131\u015fma kontrol\u00fc\n    self.score += 1 # Skor art\u0131\u015f\u0131\nelif self.game_state == \"game_over\":\n    if pyxel.btnp(pyxel.KEY_R): # R tu\u015funa bas\u0131nca oyunu yeniden ba\u015flat\n        self.reset_game()\n<\/pre>\n<p><\/code><\/p>\n<h4>Skor Takibi ve Y\u00fcksek Skorlar<\/h4>\n<p>Oyuncunun hayatta kald\u0131\u011f\u0131 s\u00fcre veya ka\u00e7 engelden ka\u00e7t\u0131\u011f\u0131na g\u00f6re skorunu takip etmek, rekabet\u00e7i bir element ekler. Her ba\u015far\u0131l\u0131 ka\u00e7\u0131\u015f veya belirli bir zaman dilimi i\u00e7in skor art\u0131r\u0131labilir. Y\u00fcksek skorlar\u0131 kaydetmek i\u00e7in Pyxel'in dosya okuma\/yazma yetenekleri kullan\u0131labilir (ancak Pyxel'in do\u011frudan bir kal\u0131c\u0131 depolama \u00e7\u00f6z\u00fcm\u00fc yoktur, bu nedenle basit bir metin dosyas\u0131 kullan\u0131labilir). Bu, oyuncular\u0131n kendilerini geli\u015ftirmeleri i\u00e7in bir te\u015fvik sa\u011flar.<\/p>\n<h4>Zorluk Seviyesini Dinamik Olarak Ayarlama<\/h4>\n<p>Oyunun ilerlemesiyle birlikte zorluk seviyesini art\u0131rmak, oyuncunun ilgisini canl\u0131 tutar. Bu, t\u00fcnelin kayd\u0131rma h\u0131z\u0131n\u0131 art\u0131rarak, engellerin ortaya \u00e7\u0131kma s\u0131kl\u0131\u011f\u0131n\u0131 veya h\u0131z\u0131n\u0131 art\u0131rarak, ya da daha karma\u015f\u0131k engel desenleri tan\u0131tarak yap\u0131labilir. \u00d6rne\u011fin, her 100 skorda bir oyun h\u0131z\u0131n\u0131 biraz art\u0131rabiliriz. Bu dinamik zorluk ayar\u0131, oyunun tekrar oynanabilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<pre><code>\n# update i\u00e7inde zorluk art\u0131rma\nif self.score > 0 and self.score % 500 == 0: # Her 500 skorda bir h\u0131z art\u0131r\n    self.tunnel_speed += 0.5\n    self.obstacle_speed += 0.2\n    pyxel.play(0, 1) # H\u0131z art\u0131\u015f\u0131 sesi\n<\/pre>\n<p><\/code><\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Pyxel ile \"T\u00fcnel Ka\u00e7ma Oyunu 2\" geli\u015ftirme s\u00fcrecinde, 2D oyunlar\u0131n temel mekaniklerini, Pyxel'in basit ama g\u00fc\u00e7l\u00fc API'sini kullanarak nas\u0131l hayata ge\u00e7irebilece\u011fimizi g\u00f6rd\u00fck. Dinamik t\u00fcnel olu\u015fturma, rastgele engel \u00fcretimi, hassas \u00e7arp\u0131\u015fma alg\u0131lama, oyuncu kontrol\u00fc ve oyun durumu y\u00f6netimi gibi konular\u0131 ele alarak, kapsaml\u0131 bir oyun geli\u015ftirme deneyimi ya\u015fad\u0131k. Bu \u00f6rnek, Pyxel'in h\u0131zl\u0131 prototipleme ve retro oyun geli\u015ftirme i\u00e7in ne kadar uygun oldu\u011funu bir kez daha g\u00f6sterdi. Kendi oyunlar\u0131n\u0131z\u0131 tasarlarken bu temel prensipleri kullanarak yarat\u0131c\u0131l\u0131\u011f\u0131n\u0131z\u0131 konu\u015fturmaktan \u00e7ekinmeyin. Unutmay\u0131n, oyun geli\u015ftirme bir deneme yan\u0131lma s\u00fcrecidir ve her ad\u0131mda yeni \u015feyler \u00f6\u011frenirsiniz. Bu bilgiler \u0131\u015f\u0131\u011f\u0131nda, Pyxel ile daha karma\u015f\u0131k ve e\u011flenceli oyunlar geli\u015ftirmek i\u00e7in ilk ad\u0131m\u0131 atm\u0131\u015f oldunuz. Gelecek b\u00f6l\u00fcmlerde, Pyxel'in daha ileri \u00f6zelliklerini ve farkl\u0131 oyun t\u00fcrlerini ke\u015ffetmeye devam edece\u011fiz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Pyxel neden bu t\u00fcr t\u00fcnel ka\u00e7ma oyunlar\u0131 i\u00e7in idealdir?<\/h4>\n<p>Pyxel, basit ve retro tarz\u0131 2D oyunlar i\u00e7in tasarlanm\u0131\u015f hafif bir motor oldu\u011fu i\u00e7in t\u00fcnel ka\u00e7ma oyunlar\u0131 gibi h\u0131zl\u0131 prototipleme ve piksel tabanl\u0131 grafikler gerektiren oyunlar i\u00e7in \u00e7ok uygundur. Kolay \u00f6\u011frenilebilir API'si sayesinde, temel mekanikleri h\u0131zla uygulayabilir ve oyunun \u00e7ekirdek oynan\u0131\u015f\u0131na odaklanabilirsiniz.<\/p>\n<h4>T\u00fcnel ka\u00e7ma oyununda en \u00f6nemli mekanik nedir?<\/h4>\n<p>T\u00fcnel ka\u00e7ma oyununda en \u00f6nemli mekanik, oyuncuya s\u00fcrekli ilerliyormu\u015f hissi veren ak\u0131c\u0131 t\u00fcnel kayd\u0131rma efekti ve dinamik, rastgele engel \u00fcretimidir. Bu iki mekani\u011fin uyumlu \u00e7al\u0131\u015fmas\u0131, oyunun tekrar oynanabilirli\u011fini ve s\u00fcr\u00fckleyicili\u011fini do\u011frudan etkiler.<\/p>\n<h4>Engelleri daha \u00e7e\u015fitli hale getirmek i\u00e7in ne yap\u0131labilir?<\/h4>\n<p>Engelleri daha \u00e7e\u015fitli hale getirmek i\u00e7in farkl\u0131 \u015fekillerde (\u00fc\u00e7gen, daire), farkl\u0131 boyutlarda ve farkl\u0131 hareket desenlerinde (yatayda kayan, d\u00f6nen) engeller olu\u015fturabilirsiniz. Ayr\u0131ca, engelleri birle\u015ftirerek daha karma\u015f\u0131k \"engel duvarlar\u0131\" veya \"labirent par\u00e7alar\u0131\" tasarlayabilirsiniz. Her engel tipine \u00f6zel davran\u0131\u015flar eklemek oyunun stratejik derinli\u011fini art\u0131racakt\u0131r.<\/p>\n<h4>Oyunu daha performansl\u0131 hale getirmek i\u00e7in ipu\u00e7lar\u0131 var m\u0131?<\/h4>\n<p>Pyxel genellikle d\u00fc\u015f\u00fck kaynak t\u00fcketimine sahiptir, ancak daha performansl\u0131 bir oyun i\u00e7in \u015funlar\u0131 yapabilirsiniz: gereksiz \u00e7izim \u00e7a\u011fr\u0131lar\u0131ndan ka\u00e7\u0131n\u0131n, \u00f6zellikle <code>draw()<\/code> fonksiyonunda karma\u015f\u0131k hesaplamalar yapmaktan ziyade sadece \u00e7izime odaklan\u0131n. B\u00fcy\u00fck listeler yerine daha optimize edilmi\u015f veri yap\u0131lar\u0131 kullan\u0131n ve \u00e7arp\u0131\u015fma alg\u0131lamay\u0131 sadece potansiyel \u00e7arp\u0131\u015fma alanlar\u0131yla s\u0131n\u0131rlay\u0131n. Sprite'lar yerine basit \u015fekiller kullanmak da performans\u0131 art\u0131rabilir.<\/p>\n","protected":false},"excerpt":{"rendered":"Bu b\u00f6l\u00fcmde, Pyxel ile geli\u015ftirece\u011fimiz T\u00fcnel Ka\u00e7ma Oyunu 2&#8217;nin temel konseptini, Pyxel&#8217;in oyun d\u00f6ng\u00fcs\u00fc mimarisini ve bu t\u00fcr bir oyun i\u00e7in gerekli &#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-37927","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek) - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)\" \/>\n<meta property=\"og:description\" content=\"Bu b\u00f6l\u00fcmde, Pyxel ile geli\u015ftirece\u011fimiz T\u00fcnel Ka\u00e7ma Oyunu 2&#039;nin temel konseptini, Pyxel&#039;in oyun d\u00f6ng\u00fcs\u00fc mimarisini ve bu t\u00fcr bir oyun i\u00e7in gerekli ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-18T15:00:43+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)\",\"datePublished\":\"2026-01-18T15:00:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\"},\"wordCount\":2079,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\",\"name\":\"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-18T15:00:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek) - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/","og_locale":"tr_TR","og_type":"article","og_title":"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)","og_description":"Bu b\u00f6l\u00fcmde, Pyxel ile geli\u015ftirece\u011fimiz T\u00fcnel Ka\u00e7ma Oyunu 2'nin temel konseptini, Pyxel'in oyun d\u00f6ng\u00fcs\u00fc mimarisini ve bu t\u00fcr bir oyun i\u00e7in gerekli ...","og_url":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-18T15:00:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)","datePublished":"2026-01-18T15:00:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/"},"wordCount":2079,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/","url":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/","name":"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-18T15:00:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/pyxel-ile-2d-oyunlara-baslangic-bolum-15-tunel-kacma-oyunu-2-ornek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pyxel ile 2D Oyunlara Ba\u015flang\u0131\u00e7 (B\u00f6l\u00fcm 15): T\u00fcnel Ka\u00e7ma Oyunu 2 (\u00d6rnek)"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37927"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37927\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}