{"id":35689,"date":"2025-12-02T19:31:26","date_gmt":"2025-12-02T16:31:26","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/"},"modified":"2025-12-02T19:31:26","modified_gmt":"2025-12-02T16:31:26","slug":"goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/","title":{"rendered":"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>\n  G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.\n<\/p>\n<p>\n  Oyun d\u00fcnyas\u0131, oyunculara benzersiz deneyimler sunmak i\u00e7in s\u00fcrekli olarak yenilik\u00e7i yollar ar\u0131yor. Geleneksel klavye ve fare kontrol\u00fcn\u00fcn \u00f6tesine ge\u00e7erek, oyuncunun fizyolojik tepkilerini oyun mekani\u011fine entegre etmek, bu aray\u0131\u015f\u0131n heyecan verici bir \u00f6rne\u011fidir. &#8220;G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr&#8221; konseptine sahip bir korku yazma oyunu, bu ba\u011flamda olduk\u00e7a dikkat \u00e7ekici bir potansiyele sahip. Peki, bu denli yenilik\u00e7i bir oyunun temelinde neler yatar?\n<\/p>\n<p>\n  \u00d6ncelikle, oyunun merkezinde korku ve gerilim unsurlar\u0131 bulunuyor. Oyuncu, ekranda beliren kelimeleri veya c\u00fcmleleri belirli bir s\u00fcre i\u00e7inde do\u011fru bir \u015fekilde yazmakla g\u00f6revli. Ancak i\u015fin as\u0131l zorlay\u0131c\u0131 ve korkutucu k\u0131sm\u0131, oyunun arka planda oyuncunun g\u00f6z k\u0131rp\u0131p k\u0131rpmad\u0131\u011f\u0131n\u0131 bir web kameras\u0131 arac\u0131l\u0131\u011f\u0131yla s\u00fcrekli olarak denetlemesi. E\u011fer oyuncu, oyunun izin vermedi\u011fi bir anda g\u00f6z k\u0131rparsa, bu durum an\u0131nda &#8220;\u00f6l\u00fcm&#8221; veya oyun i\u00e7i bir ceza ile sonu\u00e7lan\u0131yor. Bu mekanik, oyuncunun \u00fczerinde s\u00fcrekli bir bask\u0131 olu\u015fturarak, korku deneyimini doruklara \u00e7\u0131kar\u0131yor. \u00c7\u00fcnk\u00fc g\u00f6z k\u0131rpmak gibi istemsiz bir fizyolojik tepkiyi kontrol etmeye \u00e7al\u0131\u015fmak, insan do\u011fas\u0131na ayk\u0131r\u0131 ve son derece stresli bir durum yarat\u0131yor.\n<\/p>\n<p>\n  Bu t\u00fcr bir oyunun teknolojik altyap\u0131s\u0131, genellikle modern web teknolojileri \u00fczerine kurulur. WebRTC (Web Real-Time Communication) ile kamera eri\u015fimi sa\u011flan\u0131rken, MediaPipe veya OpenCV.js gibi k\u00fct\u00fcphaneler y\u00fcz ve g\u00f6z alg\u0131lama i\u015flemlerini ger\u00e7ekle\u015ftirir. JavaScript ise t\u00fcm oyun mant\u0131\u011f\u0131n\u0131, aray\u00fcz etkile\u015fimlerini ve bu alg\u0131lama verilerini birle\u015ftiren ana programlama dilidir. Konseptin benzersizli\u011fi, sadece bir klavye becerisi testi olmaktan \u00f6te, oyuncunun psikolojik s\u0131n\u0131rlar\u0131n\u0131 zorlayan, gerginli\u011fi s\u00fcrekli y\u00fcksek tutan interaktif bir korku deneyimi sunmas\u0131nda yat\u0131yor. Bu, oyuncunun oyunla olan ba\u011f\u0131n\u0131 derinle\u015ftiren ve ona unutulmaz bir deneyim ya\u015fatan \u00f6nemli bir yeniliktir. Oyunun bu temel dinamikleri, di\u011fer korku oyunlar\u0131ndan ayr\u0131\u015fmas\u0131n\u0131 sa\u011flarken, geli\u015ftirme s\u00fcrecinde de heyecan verici teknik zorluklar sunar.\n<\/p>\n<h2>Y\u00fcz ve G\u00f6z Alg\u0131lama Teknolojileri: Hangi K\u00fct\u00fcphaneler \u0130\u015finizi G\u00f6r\u00fcr?<\/h2>\n<p>\n  Oyunumuzun kalbinde, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 do\u011fru ve g\u00fcvenilir bir \u015fekilde alg\u0131layabilen bir teknoloji yat\u0131yor. Bu noktada, web tabanl\u0131 uygulamalar i\u00e7in kullan\u0131labilecek \u00e7e\u015fitli y\u00fcz ve g\u00f6z alg\u0131lama k\u00fct\u00fcphaneleri bulunmaktad\u0131r. En pop\u00fcler ve etkili se\u00e7enekler aras\u0131nda MediaPipe ve OpenCV.js \u00f6ne \u00e7\u0131kar. Her iki k\u00fct\u00fcphane de g\u00fc\u00e7l\u00fc yeteneklere sahip olsa da, kullan\u0131m kolayl\u0131\u011f\u0131, performans ve topluluk deste\u011fi a\u00e7\u0131s\u0131ndan farkl\u0131l\u0131klar g\u00f6sterirler.\n<\/p>\n<p>\n  <strong>OpenCV.js<\/strong>, geni\u015f kapsaml\u0131 bir bilgisayar g\u00f6r\u00fc\u015f\u00fc k\u00fct\u00fcphanesi olan OpenCV&#8217;nin JavaScript&#8217;e derlenmi\u015f halidir. Y\u00fcz alg\u0131lama, nesne takibi, g\u00f6r\u00fcnt\u00fc i\u015fleme ve \u00e7ok daha fazlas\u0131 i\u00e7in zengin bir fonksiyon seti sunar. G\u00f6z alg\u0131lama i\u00e7in Haar Cascades veya derin \u00f6\u011frenme tabanl\u0131 modeller kullanabilir. Olduk\u00e7a esnektir ve d\u00fc\u015f\u00fck seviyeli kontroller sa\u011flar. Ancak, web ortam\u0131nda kurulumu ve entegrasyonu, MediaPipe&#8217;a g\u00f6re biraz daha karma\u015f\u0131k olabilir ve taray\u0131c\u0131da \u00e7al\u0131\u015fmak i\u00e7in WebAssembly mod\u00fcllerinin y\u00fcklenmesini gerektirir. Performans a\u00e7\u0131s\u0131ndan g\u00fc\u00e7l\u00fc olsa da, do\u011fru modellerin se\u00e7ilmesi ve optimizasyon \u00f6nemlidir.\n<\/p>\n<p>\n  Di\u011fer yandan, <strong>MediaPipe<\/strong>, Google taraf\u0131ndan geli\u015ftirilen ve \u00e7oklu platform deste\u011fi sunan, makine \u00f6\u011frenimi tabanl\u0131 bir \u00e7er\u00e7evedir. Y\u00fcz alg\u0131lama, el takibi, poz tahmini gibi bir\u00e7ok haz\u0131r \u00e7\u00f6z\u00fcm sunar. \u00d6zellikle &#8220;Face Mesh&#8221; \u00e7\u00f6z\u00fcm\u00fc, bir y\u00fczdeki 468 farkl\u0131 noktay\u0131 (landmark) ger\u00e7ek zamanl\u0131 olarak tespit ederek g\u00f6zlerin a\u00e7\u0131l\u0131p kapanma durumunu belirlemek i\u00e7in idealdir. MediaPipe&#8217;\u0131n kullan\u0131m\u0131 genellikle daha basittir \u00e7\u00fcnk\u00fc \u00e7o\u011fu karma\u015f\u0131k i\u015fleme ad\u0131m\u0131 dahili olarak y\u00f6netilir. Performans\u0131 y\u00fcksek ve taray\u0131c\u0131 entegrasyonu olduk\u00e7a kolayd\u0131r. K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli web tabanl\u0131 projelerde h\u0131zl\u0131 bir \u015fekilde sonu\u00e7 almak i\u00e7in MediaPipe genellikle tercih edilen bir \u00e7\u00f6z\u00fcmd\u00fcr. Oyunumuz i\u00e7in, g\u00f6z k\u0131rpma alg\u0131lama hassasiyeti ve kullan\u0131m kolayl\u0131\u011f\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, MediaPipe&#8217;\u0131n &#8220;Face Mesh&#8221; \u00f6zelli\u011fi en uygun se\u00e7eneklerden biridir. Bu sayede, oyuncunun g\u00f6zlerinin kapan\u0131p kapanmad\u0131\u011f\u0131n\u0131 milisaniyeler i\u00e7inde tespit edebilir ve oyun mant\u0131\u011f\u0131na entegre edebiliriz.\n<\/p>\n<h3>MediaPipe ile G\u00f6z K\u0131rpma Nas\u0131l Tespit Edilir? Pratik Bir Uygulama<\/h3>\n<p>\n  G\u00f6z k\u0131rpma alg\u0131lama mekani\u011fini MediaPipe ile hayata ge\u00e7irmek i\u00e7in \u00f6ncelikle web kameras\u0131 eri\u015fimine ihtiyac\u0131m\u0131z var. Bunu WebRTC API&#8217;si ile kolayca sa\u011flayabiliriz. Ard\u0131ndan, MediaPipe k\u00fct\u00fcphanesini projemize dahil ederek, y\u00fczdeki belirli noktalar\u0131 (landmarks) tespit etmesini sa\u011flayaca\u011f\u0131z. G\u00f6z k\u0131rpman\u0131n tespiti i\u00e7in Eye Aspect Ratio (EAR) ad\u0131 verilen bir metrik kullan\u0131l\u0131r. EAR, g\u00f6z kapaklar\u0131n\u0131n a\u00e7\u0131kl\u0131\u011f\u0131n\u0131 say\u0131sal bir de\u011ferle ifade eden bir orand\u0131r. G\u00f6z kapal\u0131yken bu de\u011fer d\u00fc\u015fer, a\u00e7\u0131kken y\u00fckselir.\n<\/p>\n<p>\n  EAR hesaplamas\u0131, g\u00f6z \u00e7evresindeki belirli landmark noktalar\u0131n\u0131n mesafelerine dayan\u0131r. \u00d6rne\u011fin, bir g\u00f6z\u00fcn dikey ve yatay mesafeleri \u00f6l\u00e7\u00fclerek bir oran elde edilir. Bu oran belirli bir e\u015fik de\u011ferinin alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde, g\u00f6z k\u0131rpma olarak kabul edilir. Bu e\u015fik de\u011feri, farkl\u0131 kamera kaliteleri ve y\u00fcz yap\u0131lar\u0131 i\u00e7in deneme yan\u0131lma yoluyla optimize edilmelidir. \u0130\u015fte basit bir MediaPipe entegrasyonu ve g\u00f6z k\u0131rpma alg\u0131lama mant\u0131\u011f\u0131na dair bir kod blo\u011fu:\n<\/p>\n<pre><code>\n<!-- index.html -->\n<video id=\"video\" autoplay><\/video>\n<canvas id=\"canvas\"><\/canvas>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@mediapipe\/camera_utils\/camera_utils.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@mediapipe\/control_utils\/control_utils.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@mediapipe\/drawing_utils\/drawing_utils.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@mediapipe\/face_mesh\/face_mesh.js\"><\/script>\n\n<script>\n  const videoElement = document.getElementById('video');\n  const canvasElement = document.getElementById('canvas');\n  const canvasCtx = canvasElement.getContext('2d');\n\n  let blinkCount = 0;\n  let isBlinking = false;\n  const EAR_THRESHOLD = 0.2; \/\/ G\u00f6z k\u0131rpma e\u015fik de\u011feri\n  const BLINK_FRAME_COUNT = 3; \/\/ Ka\u00e7 kare boyunca kapal\u0131 kal\u0131rsa g\u00f6z k\u0131rpma say\u0131lacak\n  let closedFrames = 0;\n\n  function distance(p1, p2) {\n    return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n  }\n\n  function calculateEAR(landmarks, eyeIndices) {\n    \/\/ eyeIndices: [p1, p2, p3, p4, p5, p6] gibi g\u00f6z \u00e7evresi noktalar\u0131\n    const p1 = landmarks[eyeIndices[0]];\n    const p2 = landmarks[eyeIndices[1]];\n    const p3 = landmarks[eyeIndices[2]];\n    const p4 = landmarks[eyeIndices[3]];\n    const p5 = landmarks[eyeIndices[4]];\n    const p6 = landmarks[eyeIndices[5]];\n\n    const A = distance(p2, p6);\n    const B = distance(p3, p5);\n    const C = distance(p1, p4);\n\n    return (A + B) \/ (2.0 * C);\n  }\n\n  const faceMesh = new FaceMesh({locateFile: (file) => {\n    return <code>https:\/\/cdn.jsdelivr.net\/npm\/@mediapipe\/face_mesh\/${file}<\/code>;\n  }});\n\n  faceMesh.setOptions({\n    maxNumFaces: 1,\n    refineLandmarks: true,\n    minDetectionConfidence: 0.5,\n    minTrackingConfidence: 0.5\n  });\n\n  faceMesh.onResults((results) => {\n    canvasCtx.save();\n    canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height);\n    canvasCtx.drawImage(results.image, 0, 0, canvasElement.width, canvasElement.height);\n\n    if (results.multiFaceLandmarks) {\n      for (const landmarks of results.multiFaceLandmarks) {\n        \/\/ Sol g\u00f6z i\u00e7in MediaPipe landmark indeksleri\n        const LEFT_EYE_INDICES = [362, 385, 387, 263, 373, 380];\n        \/\/ Sa\u011f g\u00f6z i\u00e7in MediaPipe landmark indeksleri\n        const RIGHT_EYE_INDICES = [33, 160, 158, 133, 153, 144];\n\n        const leftEar = calculateEAR(landmarks, LEFT_EYE_INDICES);\n        const rightEar = calculateEAR(landmarks, RIGHT_EYE_INDICES);\n\n        const avgEar = (leftEar + rightEar) \/ 2;\n\n        if (avgEar < EAR_THRESHOLD) {\n          closedFrames++;\n          if (closedFrames >= BLINK_FRAME_COUNT && !isBlinking) {\n            isBlinking = true;\n            blinkCount++;\n            console.log('G\u00f6z K\u0131rpma Alg\u0131land\u0131! Toplam:', blinkCount);\n            \/\/ Burada oyun i\u00e7i \u00f6l\u00fcm mekani\u011fini tetikleyebilirsiniz\n            triggerGameOver(); \/\/ \u00d6rnek fonksiyon\n          }\n        } else {\n          closedFrames = 0;\n          isBlinking = false;\n        }\n\n        drawConnectors(canvasCtx, landmarks, FACEMESH_TESSELATION, {color: '#C0C0C070', lineWidth: 1});\n        drawConnectors(canvasCtx, landmarks, FACEMESH_RIGHT_EYE, {color: '#FF3030'});\n        drawConnectors(canvasCtx, landmarks, FACEMESH_LEFT_EYE, {color: '#30FF30'});\n      }\n    }\n    canvasCtx.restore();\n  });\n\n  const camera = new Camera(videoElement, {\n    onFrame: async () => {\n      await faceMesh.send({image: videoElement});\n    },\n    width: 640,\n    height: 480\n  });\n  camera.start();\n\n  function triggerGameOver() {\n    console.log(\"Oyun Bitti! G\u00f6z K\u0131rpt\u0131n\u0131z!\");\n    \/\/ Oyun durumunu g\u00fcncelle, ekranda 'Game Over' g\u00f6ster vb.\n    alert(\"G\u00f6z K\u0131rpt\u0131n! Game Over!\");\n    \/\/ Kameray\u0131 durdurabilirsiniz\n    camera.stop();\n  }\n<\/script>\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Eye Aspect Ratio (EAR) e\u015fik de\u011feri (<code>EAR_THRESHOLD<\/code>) ve ard\u0131\u015f\u0131k kapal\u0131 kare say\u0131s\u0131 (<code>BLINK_FRAME_COUNT<\/code>) oyununuzun dinamiklerine g\u00f6re dikkatlice ayarlanmal\u0131d\u0131r. Bu de\u011ferler, yanl\u0131\u015f pozitifleri azalt\u0131rken ger\u00e7ek g\u00f6z k\u0131rpmalar\u0131 do\u011fru bir \u015fekilde yakalamak i\u00e7in kritik \u00f6neme sahiptir.<\/div>\n<h2>Oyun Mekani\u011fi Geli\u015ftirme: Korku ve Yazma Unsurlar\u0131n\u0131 Nas\u0131l Birle\u015ftirirsiniz?<\/h2>\n<p>\n  G\u00f6z k\u0131rpma alg\u0131lama teknolojisini kurduktan sonra s\u0131ra, bu teknolojiyi oyunun temel mekaniklerine entegre etmeye gelir. Oyunumuz, \"korku yazma oyunu\" temal\u0131 oldu\u011fu i\u00e7in, oyuncunun odaklanma becerisini ve h\u0131z\u0131n\u0131 test eden bir yazma sistemi ile s\u00fcrekli gerilim yaratan korku \u00f6\u011felerini ba\u015far\u0131l\u0131 bir \u015fekilde birle\u015ftirmelidir. Bu birle\u015fim, oyuncuyu iki farkl\u0131 tehdit alt\u0131nda tutarak benzersiz bir deneyim sunar: kelimeleri do\u011fru yazma bask\u0131s\u0131 ve g\u00f6z k\u0131rpmama m\u00fccadelesi.\n<\/p>\n<p>\n  Oyunun yazma mekani\u011fi, ekranda beliren rastgele kelimeler, c\u00fcmleler veya hikaye par\u00e7ac\u0131klar\u0131 \u00fczerine kurulabilir. Oyuncunun g\u00f6revi, bu metinleri belirli bir s\u00fcre (\u00f6rne\u011fin 5-10 saniye) i\u00e7inde hatas\u0131z bir \u015fekilde yazmakt\u0131r. S\u00fcre doldu\u011funda veya hata yap\u0131ld\u0131\u011f\u0131nda, bu durum oyun i\u00e7i bir ceza ile sonu\u00e7lanabilir; \u00f6rne\u011fin, can puan\u0131 d\u00fc\u015febilir, skor azalabilir veya korku \u00f6\u011feleri daha agresif hale gelebilir. Kelime listesi, oyunun zorluk seviyesine g\u00f6re dinamik olarak ayarlanabilir; ba\u015flang\u0131\u00e7ta basit kelimelerle ba\u015flan\u0131p, ilerleyen seviyelerde daha uzun ve karma\u015f\u0131k c\u00fcmlelere ge\u00e7ilebilir. Bu sayede oyun, oyuncunun becerilerini kademeli olarak geli\u015ftirir.\n<\/p>\n<p>\n  Korku unsurlar\u0131 ise g\u00f6z k\u0131rpma mekani\u011fiyle i\u00e7 i\u00e7e ge\u00e7melidir. Oyuncu g\u00f6z k\u0131rpt\u0131\u011f\u0131nda aniden ortaya \u00e7\u0131kan bir \"jump scare\" (ani korkutma), ekran\u0131n k\u0131sa s\u00fcreli\u011fine bozulmas\u0131 (glitch effect), \u00fcrk\u00fct\u00fcc\u00fc ses efektleri veya karanl\u0131k bir g\u00f6r\u00fcnt\u00fcn\u00fcn belirip kaybolmas\u0131 gibi tepkiler verilebilir. Bu tepkiler, oyuncunun hata yapman\u0131n bedelini fiziksel olarak deneyimlemesini sa\u011flar ve g\u00f6zlerini a\u00e7\u0131k tutma bask\u0131s\u0131n\u0131 art\u0131r\u0131r. Ayr\u0131ca, oyunun genel atmosferi, lo\u015f \u0131\u015f\u0131klar, rahats\u0131z edici arka plan sesleri ve gizemli g\u00f6rsellerle desteklenmelidir. Oyuncunun dikkatini da\u011f\u0131tmak ve gerilimi art\u0131rmak i\u00e7in yazma g\u00f6revi s\u0131ras\u0131nda ekranda ani g\u00f6lgeler veya hareketli nesneler de belirebilir. T\u00fcm bu unsurlar, oyuncunun hem zihinsel hem de fizyolojik olarak s\u0131n\u0131rlar\u0131n\u0131 zorlayarak unutulmaz bir korku deneyimi sunar. Oyunun bu katmanl\u0131 mekani\u011fi, oyuncunun s\u00fcrekli tetikte olmas\u0131n\u0131 gerektirir ve her an bir g\u00f6z k\u0131rpma hatas\u0131n\u0131n veya yazma yanl\u0131\u015f\u0131n\u0131n \u00f6l\u00fcmle sonu\u00e7lanabilece\u011fi gerilimiyle dolu bir atmosfer yarat\u0131r.\n<\/p>\n<h3>Etkileyici Bir Oyun D\u00f6ng\u00fcs\u00fc ve Geri Bildirim Sistemleri Nas\u0131l Tasarlan\u0131r?<\/h3>\n<p>\n  Bir oyunun ba\u015far\u0131s\u0131, sa\u011flam bir oyun d\u00f6ng\u00fcs\u00fcne ve oyuncuya anl\u0131k geri bildirim sa\u011flayan etkili sistemlere ba\u011fl\u0131d\u0131r. \"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr\" oyunumuz i\u00e7in, her iki mekani\u011fi (yazma ve g\u00f6z k\u0131rpma) senkronize eden, ak\u0131c\u0131 ve gerilimli bir d\u00f6ng\u00fc tasarlamak kritik \u00f6neme sahiptir. Bu d\u00f6ng\u00fc, oyunun ba\u015flang\u0131c\u0131ndan sonuna kadar oyuncuyu me\u015fgul etmeli ve s\u00fcrekli bir ilerleme hissi vermelidir.\n<\/p>\n<p>\n  Oyun d\u00f6ng\u00fcs\u00fc \u015fu ad\u0131mlardan olu\u015fabilir:\n<\/p>\n<ol>\n<li><strong>Oyun Ba\u015flang\u0131c\u0131 ve Haz\u0131rl\u0131k:<\/strong> Oyuncu kameraya eri\u015fim izni verir. Aray\u00fczde kamera g\u00f6r\u00fcnt\u00fcs\u00fc, yazma alan\u0131, skor ve \"can\" g\u00f6stergesi belirir. K\u0131sa bir talimat veya hikaye giri\u015fi ile oyuncu atmosfere \u00e7ekilir.<\/li>\n<li><strong>Kelime\/C\u00fcmle Sunumu:<\/strong> Belirli bir zorluk seviyesinden rastgele bir kelime veya c\u00fcmle ekranda belirir. Bir zamanlay\u0131c\u0131 geri saymaya ba\u015flar.<\/li>\n<li><strong>Oyuncu Giri\u015fi ve G\u00f6z K\u0131rpma Takibi:<\/strong> Oyuncu, metni klavyeden yazmaya ba\u015flar. Her tu\u015f vuru\u015fu kontrol edilir. Bu s\u0131rada, MediaPipe s\u00fcrekli olarak g\u00f6z k\u0131rpma alg\u0131lamay\u0131 s\u00fcrd\u00fcr\u00fcr.<\/li>\n<li><strong>Geri Bildirim ve Durum G\u00fcncellemesi:<\/strong>\n<ul>\n<li><strong>Ba\u015far\u0131l\u0131 Yazma:<\/strong> Kelime do\u011fru ve zaman\u0131nda yaz\u0131ld\u0131\u011f\u0131nda, oyuncu puan kazan\u0131r. Yeni bir kelime belirir ve d\u00f6ng\u00fc tekrarlan\u0131r. K\u00fc\u00e7\u00fck bir \"ba\u015far\u0131l\u0131\" g\u00f6rsel\/ses efekti eklenebilir.<\/li>\n<li><strong>Hatal\u0131 Yazma\/Zaman A\u015f\u0131m\u0131:<\/strong> Metin hatal\u0131 yaz\u0131l\u0131rsa veya zamanlay\u0131c\u0131 biterse, oyuncu ceza al\u0131r (can kayb\u0131, puan d\u00fc\u015f\u00fc\u015f\u00fc). Hata an\u0131nda hafif bir g\u00f6rsel\/i\u015fitsel uyar\u0131 (ekran titremesi, yanl\u0131\u015f tu\u015f sesi) verilir.<\/li>\n<li><strong>G\u00f6z K\u0131rpma Alg\u0131lamas\u0131:<\/strong> E\u011fer g\u00f6z k\u0131rpma alg\u0131lan\u0131rsa, oyun an\u0131nda \"Game Over\" durumuna ge\u00e7er veya oyuncuyu a\u011f\u0131r bir cezayla kar\u015f\u0131la\u015ft\u0131r\u0131r. Bu an, en \u015fiddetli geri bildirimin verildi\u011fi yerdir: ani bir jump scare, y\u00fcksek sesli bir \u00e7\u0131\u011fl\u0131k, ekran\u0131n kararmas\u0131 ve ard\u0131ndan \"YOU BLINKED!\" gibi bir mesaj.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Oyun Sonu ve Yeniden Ba\u015flatma:<\/strong> Oyuncunun can\u0131 biterse veya g\u00f6z k\u0131rpt\u0131\u011f\u0131nda oyun sona erer. Bir \"Game Over\" ekran\u0131 belirir ve oyuncuya puan\u0131 g\u00f6sterilir. Yeniden ba\u015flama veya \u00e7\u0131k\u0131\u015f se\u00e7enekleri sunulur.<\/li>\n<\/ol>\n<p>\n  Bu d\u00f6ng\u00fc, oyuncuyu s\u00fcrekli bir bask\u0131 alt\u0131nda tutarken, h\u0131zl\u0131 ve net geri bildirimlerle ne yapmas\u0131 gerekti\u011fini an\u0131nda anlamas\u0131n\u0131 sa\u011flar. \u00d6zellikle g\u00f6z k\u0131rpma an\u0131ndaki ani ve sert geri bildirim, oyunun korku ve gerilimini peki\u015ftiren en \u00f6nemli unsurdur. G\u00f6rsel ve i\u015fitsel efektlerin bu anlarda do\u011fru senkronize edilmesi, deneyimi daha da etkileyici hale getirecektir.\n<\/p>\n<h2>Web Tabanl\u0131 Oyunlarda Performans, Optimizasyon ve Mobil Uyum \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h2>\n<p>\n  Web tabanl\u0131 bir oyun geli\u015ftirirken, \u00f6zellikle MediaPipe gibi yo\u011fun hesaplama gerektiren k\u00fct\u00fcphaneler kullan\u0131ld\u0131\u011f\u0131nda, performans ve optimizasyon kritik \u00f6neme sahiptir. Oyuncular\u0131n farkl\u0131 cihazlarda (masa\u00fcst\u00fc, diz\u00fcst\u00fc, mobil) ve farkl\u0131 taray\u0131c\u0131larda sorunsuz bir deneyim ya\u015famas\u0131n\u0131 sa\u011flamak, projenizin ba\u015far\u0131s\u0131n\u0131 do\u011frudan etkiler. Performans sorunlar\u0131, oyunun tak\u0131lmas\u0131na, gecikmelere ve dolay\u0131s\u0131yla oyuncu kayb\u0131na neden olabilir.\n<\/p>\n<p>\n  <strong>Performans Optimizasyonu \u0130\u00e7in Stratejiler:<\/strong>\n<\/p>\n<ol>\n<li><strong>Web Workers Kullan\u0131m\u0131:<\/strong> MediaPipe gibi a\u011f\u0131r y\u00fcz alg\u0131lama i\u015flemlerini ana taray\u0131c\u0131 i\u015f par\u00e7ac\u0131\u011f\u0131ndan (main thread) ay\u0131rmak i\u00e7in Web Workers kullanmak en etkili y\u00f6ntemlerden biridir. Ana i\u015f par\u00e7ac\u0131\u011f\u0131 UI g\u00fcncellemeleri, animasyonlar ve kullan\u0131c\u0131 etkile\u015fimlerinden sorumluyken, Web Worker kamera g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc i\u015fleyip g\u00f6z k\u0131rpma verilerini ana i\u015f par\u00e7ac\u0131\u011f\u0131na geri g\u00f6nderebilir. Bu, oyunun aray\u00fcz\u00fcn\u00fcn ak\u0131c\u0131l\u0131\u011f\u0131n\u0131 korurken arka planda y\u00fcz alg\u0131laman\u0131n devam etmesini sa\u011flar.<\/li>\n<li><strong>Video \u00c7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc ve Kare H\u0131z\u0131:<\/strong> Kamera ak\u0131\u015f\u0131n\u0131n \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc ve kare h\u0131z\u0131n\u0131 optimize edin. \u00c7ok y\u00fcksek \u00e7\u00f6z\u00fcn\u00fcrl\u00fckler veya kare h\u0131zlar\u0131 gereksiz i\u015flem y\u00fck\u00fc olu\u015fturabilir. Genellikle 640x480 piksel \u00e7\u00f6z\u00fcn\u00fcrl\u00fck ve 20-30 FPS, g\u00f6z alg\u0131lama i\u00e7in yeterli ve performans\u0131 d\u00fc\u015f\u00fcrmeyecek bir denge sunar.<\/li>\n<li><strong>Gereksiz Yeniden \u00c7izimleri Engelleme:<\/strong> Canvas \u00fczerinde sadece de\u011fi\u015fen alanlar\u0131 yeniden \u00e7izmeye \u00f6zen g\u00f6sterin. T\u00fcm canvas'\u0131 her karede yeniden \u00e7izmek yerine, ak\u0131ll\u0131 render teknikleri kullan\u0131n.<\/li>\n<li><strong>Taray\u0131c\u0131 Deste\u011fi ve Fallback:<\/strong> Her taray\u0131c\u0131n\u0131n WebRTC veya WebAssembly performans\u0131nda farkl\u0131l\u0131klar g\u00f6sterebilece\u011fini unutmay\u0131n. Eski veya daha az g\u00fc\u00e7l\u00fc taray\u0131c\u0131lar i\u00e7in daha basit bir \"fallback\" modu veya oyuncuya taray\u0131c\u0131 y\u00fckseltmesi \u00f6neren bir mesaj g\u00f6sterebilirsiniz.<\/li>\n<\/ol>\n<p>\n  <strong>Mobil Uyumluluk \u0130\u00e7in Yakla\u015f\u0131mlar:<\/strong>\n<\/p>\n<p>\n  Mobil cihazlar, genellikle daha s\u0131n\u0131rl\u0131 i\u015flem g\u00fcc\u00fcne ve farkl\u0131 ekran boyutlar\u0131na sahiptir. Oyununuzun mobil cihazlarda da oynanabilir olmas\u0131 i\u00e7in responsive tasar\u0131m prensiplerini uygulamak \u015fartt\u0131r.\n<\/p>\n<ol>\n<li><strong>Responsive CSS Tasar\u0131m\u0131:<\/strong> CSS Media Query'leri kullanarak ekran boyutuna g\u00f6re oyun aray\u00fcz\u00fcn\u00fc dinamik olarak yeniden d\u00fczenleyin. Buton boyutlar\u0131n\u0131, yaz\u0131 tiplerini ve oyun alan\u0131n\u0131n genel d\u00fczenini mobil cihazlara uygun hale getirin.\n<pre><code>\n\/* Mobil cihazlar i\u00e7in \u00f6rnek media query *\/\n@media (max-width: 768px) {\n  body {\n    font-size: 14px;\n  }\n  .game-container {\n    flex-direction: column; \/* Dikey d\u00fczen *\/\n    width: 98%;\n    padding: 10px;\n  }\n  #video, #canvas {\n    width: 100%;\n    height: auto;\n    margin-bottom: 15px;\n  }\n  .typing-area {\n    width: 100%;\n  }\n}\n\n\/* K\u00fc\u00e7\u00fck telefonlar i\u00e7in *\/\n@media (max-width: 480px) {\n  h2 {\n    font-size: 1.2em;\n  }\n  input[type=\"text\"] {\n    font-size: 1.1em;\n  }\n}\n    <\/pre>\n<p><\/code>\n  <\/li>\n<li><strong>Dokunmatik Ekran Etkile\u015fimleri:<\/strong> Klavye giri\u015fine ek olarak, sanal klavye veya dokunmatik ekran optimizasyonlar\u0131 gerekebilir. Ancak bir yazma oyunu oldu\u011fu i\u00e7in fiziksel klavye deneyimi \u00f6ncelikli olmal\u0131d\u0131r; mobil oyuncular\u0131n harici klavye kullanmas\u0131n\u0131 bekleyebilirsiniz.<\/li>\n<li><strong>Kamera \u0130zni Y\u00f6netimi:<\/strong> Mobil taray\u0131c\u0131larda kamera izni alma s\u00fcre\u00e7leri farkl\u0131l\u0131k g\u00f6sterebilir. Kullan\u0131c\u0131ya net talimatlar verin ve izin al\u0131nana kadar oyunun ba\u015flamas\u0131n\u0131 engelleyin.<\/li>\n<li><strong>Pil T\u00fcketimi:<\/strong> S\u00fcrekli kamera kullan\u0131m\u0131 pil t\u00fcketimini art\u0131racakt\u0131r. Oyuncuyu bu konuda bilgilendirmek veya uzun oyun seanslar\u0131ndan sonra mola vermesini te\u015fvik etmek iyi bir kullan\u0131c\u0131 deneyimi sa\u011flar.<\/li>\n<\/ol>\n<div class=\"expert-tip\">Uzman \u0130pucu: Oyununuzun performans\u0131n\u0131 d\u00fczenli olarak test etmek i\u00e7in taray\u0131c\u0131 geli\u015ftirici ara\u00e7lar\u0131ndaki \"Performance\" ve \"Memory\" sekmelerini kullan\u0131n. \u00d6zellikle CPU kullan\u0131m\u0131n\u0131 ve FPS d\u00fc\u015f\u00fc\u015flerini izleyerek darbo\u011fazlar\u0131 tespit edebilirsiniz.<\/div>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131, \u0130leri D\u00fczey Geli\u015ftirme ve Etik De\u011ferlendirmeler Nelerdir?<\/h2>\n<p>\n  G\u00f6z k\u0131rpman\u0131n \u00f6l\u00fcmle cezaland\u0131r\u0131ld\u0131\u011f\u0131 bir korku yazma oyunu konsepti, sadece teknik bir ba\u015far\u0131dan ibaret de\u011fildir; ayn\u0131 zamanda ger\u00e7ek d\u00fcnya senaryolar\u0131na ve etik de\u011ferlendirmelere de kap\u0131 aralar. Bu t\u00fcr bir oyun, interaktif medya deneyimlerini bir \u00fcst seviyeye ta\u015f\u0131sa da, geli\u015ftiricilerin dikkat etmesi gereken baz\u0131 \u00f6nemli noktalar bulunmaktad\u0131r.\n<\/p>\n<p>\n  <strong>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve \u0130leri D\u00fczey Geli\u015ftirme:<\/strong>\n<\/p>\n<ol>\n<li><strong>Vaka Analizi: 'The Looker' ve Benzeri Deneyimler:<\/strong> G\u00f6z takibi teknolojilerini kullanan oyunlar daha \u00f6nce de denenmi\u015ftir. \u00d6rne\u011fin, mobil platformlarda 'The Looker' gibi basit g\u00f6z takibi oyunlar\u0131, belirli bir s\u00fcre ekrandan g\u00f6z\u00fcn\u00fc ay\u0131rmama veya bir nesneye odaklanma gibi mekanikleri kullanm\u0131\u015ft\u0131r. Bizim projemiz, bu konsepti korku ve yazma unsurlar\u0131yla birle\u015ftirerek daha karma\u015f\u0131k ve s\u00fcr\u00fckleyici bir deneyim sunuyor. Baz\u0131 ba\u011f\u0131ms\u0131z geli\u015ftiriciler, Twitch yay\u0131nc\u0131lar\u0131 i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f, izleyici etkile\u015fimini g\u00f6z k\u0131rpma ile birle\u015ftiren deneyler de yapm\u0131\u015ft\u0131r. Bu, oyunun sadece tekil bir oyuncu deneyimi olmakla kalmay\u0131p, izleyici kitlesiyle de interaktif hale gelebilece\u011fini g\u00f6sterir.<\/li>\n<li><strong>Ki\u015fiselle\u015ftirilmi\u015f Korku Deneyimi:<\/strong> \u0130leri d\u00fczey bir \u00f6zellik olarak, oyuncunun ge\u00e7mi\u015f performans\u0131na ve fizyolojik tepkilerine (\u00f6rn. kalp at\u0131\u015f h\u0131z\u0131 alg\u0131lamas\u0131 i\u00e7in ak\u0131ll\u0131 saat entegrasyonu) dayal\u0131 olarak korku \u00f6\u011felerini dinamik olarak ayarlayabilirsiniz. \u00d6rne\u011fin, oyuncu \u00e7ok rahat g\u00f6r\u00fcn\u00fcyorsa jump scare'lerin s\u0131kl\u0131\u011f\u0131 art\u0131r\u0131labilir, stres seviyesi y\u00fckseliyorsa biraz ara verilebilir.<\/li>\n<li><strong>Hile Engelleme ve G\u00fcvenilirlik:<\/strong> Oyuncular\u0131n kameray\u0131 kapatmas\u0131, ekran\u0131 engellemesi veya farkl\u0131 bir y\u00fcz\u00fc kameraya g\u00f6stermesi gibi hile giri\u015fimleri olabilir. Bunu engellemek i\u00e7in, kamera ak\u0131\u015f\u0131nda s\u00fcrekli bir y\u00fcz alg\u0131lamas\u0131 yap\u0131lmal\u0131 ve ak\u0131\u015f kesildi\u011finde oyun duraklat\u0131lmal\u0131 veya cezaland\u0131r\u0131lmal\u0131d\u0131r. Ayr\u0131ca, farkl\u0131 \u0131\u015f\u0131k ko\u015fullar\u0131nda veya farkl\u0131 y\u00fcz tipleri i\u00e7in alg\u0131lama hassasiyetini kalibre etme se\u00e7enekleri sunmak, g\u00fcvenilirli\u011fi art\u0131r\u0131r.<\/li>\n<\/ol>\n<p>\n  <strong>Etik ve Kullan\u0131c\u0131 Gizlili\u011fi De\u011ferlendirmeleri:<\/strong>\n<\/p>\n<ol>\n<li><strong>Veri Gizlili\u011fi:<\/strong> Kamera verileri son derece hassast\u0131r. Oyununuzun hi\u00e7bir \u015fekilde video ak\u0131\u015f\u0131n\u0131 kaydetmedi\u011finden, sunuculara g\u00f6ndermedi\u011finden veya \u00fc\u00e7\u00fcnc\u00fc taraflarla payla\u015fmad\u0131\u011f\u0131ndan emin olun. T\u00fcm i\u015fleme taray\u0131c\u0131 i\u00e7inde (istemci taraf\u0131nda) yap\u0131lmal\u0131d\u0131r. Kullan\u0131c\u0131ya bu konuda \u015feffaf bir gizlilik politikas\u0131 sunun.<\/li>\n<li><strong>Sa\u011fl\u0131k ve G\u00fcvenlik:<\/strong> Uzun s\u00fcre g\u00f6z k\u0131rpmamaya \u00e7al\u0131\u015fmak g\u00f6z yorgunlu\u011funa, ba\u015f a\u011fr\u0131s\u0131na ve g\u00f6z kurulu\u011funa neden olabilir. Oyuncular\u0131 d\u00fczenli molalar vermeye te\u015fvik eden ve potansiyel sa\u011fl\u0131k riskleri hakk\u0131nda uyar\u0131da bulunan bir disclaimer (sorumluluk reddi) mesaj\u0131 eklemek \u00f6nemlidir.<\/li>\n<li><strong>Eri\u015filebilirlik:<\/strong> G\u00f6z k\u0131rpmay\u0131 kontrol edemeyen veya belirli motor beceri bozukluklar\u0131 olan oyuncular i\u00e7in alternatif kontrol mekanizmalar\u0131 veya \"rahat mod\" sunmak, oyununuzu daha kapsay\u0131c\u0131 hale getirecektir.<\/li>\n<\/ol>\n<p>\n  Bu t\u00fcr bir oyunun ba\u015far\u0131s\u0131, sadece teknik uygulaman\u0131n sa\u011flaml\u0131\u011f\u0131na de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 deneyimi, etik standartlar ve s\u00fcrd\u00fcr\u00fclebilirlik prensiplerine de ba\u011fl\u0131d\u0131r.\n<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular ve Proje Sonu\u00e7lar\u0131<\/h2>\n<p>\n  Bu makalede, g\u00f6z k\u0131rpman\u0131n \u00f6l\u00fcmle cezaland\u0131r\u0131ld\u0131\u011f\u0131 web tabanl\u0131 bir korku yazma oyunu geli\u015ftirmenin teknik temellerini, MediaPipe ile g\u00f6z alg\u0131lamay\u0131, oyun mekaniklerini, performans optimizasyonlar\u0131n\u0131 ve etik konular\u0131 derinlemesine inceledik. Modern web teknolojilerinin sundu\u011fu imkanlarla, oyuncunun fizyolojik tepkilerini oyunun bir par\u00e7as\u0131 haline getiren, s\u00fcr\u00fckleyici ve gerilim dolu deneyimler yaratman\u0131n ne kadar heyecan verici oldu\u011funu g\u00f6rd\u00fck. Art\u0131k kendi yenilik\u00e7i korku yazma oyununuzu in\u015fa etmek i\u00e7in gerekli bilgi ve ara\u00e7lara sahipsiniz.\n<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n<p><strong>S: G\u00f6z alg\u0131lama ne kadar g\u00fcvenilir \u00e7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>C: Modern k\u00fct\u00fcphaneler (MediaPipe, OpenCV.js) iyi \u0131\u015f\u0131k ko\u015fullar\u0131nda ve do\u011fru kalibrasyonla olduk\u00e7a y\u00fcksek do\u011fruluk sunar. Ancak farkl\u0131 y\u00fcz tipleri, g\u00f6zl\u00fck kullan\u0131m\u0131 ve kamera kaliteleri i\u00e7in e\u015fik de\u011ferlerinin (EAR_THRESHOLD, BLINK_FRAME_COUNT) dikkatlice ayarlanmas\u0131 ve geni\u015f testler yap\u0131lmas\u0131 gerekebilir. Karanl\u0131k ortamlar veya d\u00fc\u015f\u00fck kaliteli kameralar performans\u0131 olumsuz etkileyebilir.<\/p>\n<\/li>\n<li>\n<p><strong>S: Oyunu geli\u015ftirmek i\u00e7in hangi programlama dillerini ve teknolojilerini bilmeliyim?<\/strong><\/p>\n<p>C: Ba\u015flang\u0131\u00e7 seviyesinde HTML ve CSS bilgisiyle birlikte iyi derecede JavaScript bilgisi temel gereksinimdir. Y\u00fcz alg\u0131lama k\u00fct\u00fcphaneleri (MediaPipe) ve WebRTC API'si JavaScript ile entegre edilir. Ayr\u0131ca, web performans optimizasyonlar\u0131 ve responsive tasar\u0131m konular\u0131nda bilgi sahibi olmak da faydal\u0131 olacakt\u0131r.<\/p>\n<\/li>\n<li>\n<p><strong>S: Mobil cihazlarda performans sorunlar\u0131 ya\u015far m\u0131y\u0131m ve nas\u0131l \u00e7\u00f6zerim?<\/strong><\/p>\n<p>C: Evet, mobil cihazlar\u0131n i\u015flem g\u00fcc\u00fc ve kamera \u00e7\u00f6z\u00fcn\u00fcrl\u00fckleri farkl\u0131l\u0131k g\u00f6sterebilir, bu da performans sorunlar\u0131na yol a\u00e7abilir. Bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in Web Workers kullanarak y\u00fcz alg\u0131lama i\u015flemlerini ayr\u0131 bir i\u015f par\u00e7ac\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131rmak, kamera ak\u0131\u015f\u0131n\u0131n \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc d\u00fc\u015f\u00fcrmek ve CSS media query'leri ile mobil uyumlu aray\u00fcz tasarlamak gibi y\u00f6ntemler kritik \u00f6neme sahiptir.<\/p>\n<\/li>\n<li>\n<p><strong>S: Oyuncular\u0131n kameray\u0131 kapatmas\u0131n\u0131 veya hile yapmas\u0131n\u0131 nas\u0131l engellerim?<\/strong><\/p>\n<p>C: Tamamen engellemek m\u00fcmk\u00fcn olmasa da, kamera ak\u0131\u015f\u0131 kesildi\u011finde (<code>videoElement.readyState !== 4<\/code> kontrol\u00fc ile) veya kamera g\u00f6r\u00fcnt\u00fcs\u00fcnde yeterli parlakl\u0131k veya y\u00fcz alg\u0131lanmad\u0131\u011f\u0131nda oyunun duraklamas\u0131, bir uyar\u0131 vermesi veya otomatik olarak \"Game Over\" durumuna ge\u00e7mesi gibi mekanikler ekleyebilirsiniz. Bu, hile yapma iste\u011fini cayd\u0131r\u0131c\u0131 hale getirecektir.<\/p>\n<\/li>\n<li>\n<p><strong>S: Oyunun korku unsurlar\u0131n\u0131 nas\u0131l daha etkili hale getirebilirim?<\/strong><\/p>\n<p>C: G\u00f6rsel ve i\u015fitsel uyaranlar\u0131 senkronize kullan\u0131n. Ani ekran kararmalar\u0131, \u00fcrk\u00fct\u00fcc\u00fc ses efektleri, g\u00f6rsel bozukluklar (glitch effect) ve oyuncunun g\u00f6z k\u0131rpma durumuna veya hatal\u0131 yazmas\u0131na ba\u011fl\u0131 tetiklenen jump-scare'ler etkileyici olabilir. Ayr\u0131ca, lo\u015f ve kasvetli bir aray\u00fcz tasar\u0131m\u0131 ile atmosferi s\u00fcrekli canl\u0131 tutun.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p&hellip;","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-35689","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>G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi<\/title>\n<meta name=\"description\" content=\"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.\" \/>\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\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi\" \/>\n<meta property=\"og:description\" content=\"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-02T16:31:26+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi\",\"datePublished\":\"2025-12-02T16:31:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\"},\"wordCount\":3486,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\",\"name\":\"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-02T16:31:26+00:00\",\"description\":\"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi\"}]},{\"@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":"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi","description":"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.","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\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi","og_description":"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-02T16:31:26+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi","datePublished":"2025-12-02T16:31:26+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/"},"wordCount":3486,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/","name":"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-02T16:31:26+00:00","description":"G\u00f6z k\u0131rpmay\u0131 unutturan, adrenalin dolu bir korku yazma oyunu geli\u015ftirmeye haz\u0131r m\u0131s\u0131n\u0131z? Bu makalede, oyuncunun g\u00f6z k\u0131rpmas\u0131n\u0131 alg\u0131lay\u0131p \u00f6l\u00fcmle cezaland\u0131ran, s\u00fcr\u00fckleyici bir oyunun teknik altyap\u0131s\u0131n\u0131 ad\u0131m ad\u0131m in\u015fa etmeyi \u00f6\u011freneceksiniz. Web tabanl\u0131 teknolojilerle nas\u0131l \u00fcrpertici bir deneyim yarataca\u011f\u0131n\u0131z\u0131 ve projenizi hayata ge\u00e7irirken kar\u015f\u0131la\u015fabilece\u011finiz teknik zorluklar\u0131n \u00fcstesinden nas\u0131l gelece\u011finizi ke\u015ffedin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/goz-kirpmak-oldurur-korku-yazma-oyunu-gelistirme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"G\u00f6z K\u0131rpmak \u00d6ld\u00fcr\u00fcr: Korku Yazma Oyunu Geli\u015ftirme Rehberi"}]},{"@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\/35689","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=35689"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35689\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}