Neon Tetris'i AI ile Üretmek
İçin Prompt Zinciri
Aşağıdaki 12 prompt, sıfırdan tam çalışan bir Neon Tetris üretmek için
yapay zekâya (ChatGPT, Claude, Gemini, DeepSeek) adım adım verilecek talimatlardır.
Her adım bir öncekinin çıktısı üzerine inşa edilir. Her prompt kartının yanındaki
"Prompt Studyosunda Aç" butonu sizi doğrudan
/p/yapay-zeka-prompt-studyosu-pro.html sayfasına yönlendirir.
Önerilen Akış
K1 Katman 1 — Temel & İskelet
// Rol tanımı, mimari kararlar, ilk çalışan iskelet
K2 Katman 2 — Mekanik & Oynanış
// SRS, lock delay, scoring, combo, line clear
K3 Katman 3 — Sunum & Dayanıklılık
// Neon UI, mobil, kalıcılık, optimizasyon, debug
ℹ Prompt Zinciri Kullanım Rehberi
/p/yapay-zeka-prompt-studyosu-pro.html sayfasına yönlendirir.
Orada promptları düzenleyebilir, kaydedebilir, versiyonlayabilirsin.
"Promptu Kopyala" butonu ise doğrudan panoya kopyalar.
Zaman Tahmini
| Prompt | Konu | Tahmini Süre | Zorluk |
|---|---|---|---|
| P1-P2 | Rol + İskelet | 5 dk | ⭐ |
| P3 | Grid motoru | 10 dk | ⭐⭐ |
| P4 | SRS rotasyon | 15 dk | ⭐⭐⭐⭐ |
| P5 | Scoring & line clear | 12 dk | ⭐⭐⭐ |
| P6 | Web Audio | 10 dk | ⭐⭐⭐ |
| P7 | Neon UI | 15 dk | ⭐⭐⭐ |
| P8 | Mobil girdi | 12 dk | ⭐⭐⭐ |
| P9 | localStorage | 5 dk | ⭐⭐ |
| P10 | Optimizasyon | 8 dk | ⭐⭐⭐ |
| P11 | Debug | 10 dk | ⭐⭐⭐⭐ |
| P12 | Final | 5 dk | ⭐⭐ |
| TOPLAM | ~2 saat | ⭐⭐⭐ | |
Neon Tetris'in Tasarım Kararları
& Sektörel Uygulama Rehberi
Bu doküman iki katmanlıdır: (1) oyunu neden o şekilde kodladığımı, her kararın arkasındaki mühendislik gerekçesini; (2) bu kodun içindeki desenlerin — canvas render, Web Audio, SRS, RAF loop, state machine, localStorage, pointer events — hangi farklı sektörlerde (e-ticaret, sağlık görüntüleme, fintech, lojistik, eğitim) nasıl davrandığını açıklar.
01 Mimari Temel Kararlar
Neden Tek Dosya (Self-Contained)?
Blogger gibi platformlarda harici .js / .css yüklemek çoğu zaman
CSP (Content Security Policy) ve cross-origin kısıtlarına takılır.
Tek dosya yaklaşımı:
- Sıfır ağ gecikmesi: Ek HTTP isteği yok, ilk render daha hızlı.
- Dağıtım kolaylığı: Kopyala-yapıştır ile her yerde çalışır.
- Versiyon bütünlüğü: JS ile CSS asla birbiriyle uyumsuz kalmaz.
- Güvenlik: Harici script enjeksiyon vektörü ortadan kalkar.
Neden Zero-Library?
| Katman | Seçim | Gerekçe |
|---|---|---|
| Render | Canvas 2D | DOM güncellemesi yerine tek paint; 200 hücre aynı anda sorunsuz. |
| State | Plain Object | Framework gerekmez; tek state nesnesi tüm oyunu taşır. |
| Loop | requestAnimationFrame | Tarayıcı vsync ile senkron; arka planda otomatik durur. |
| Ses | Web Audio API | Örnek dosya yok, osilatörle üretilir → 0 KB ses varlığı. |
| Depolama | localStorage | Sunucu gerekmez, çevrimdışı çalışır, 5 MB yeterli. |
| Girdi | Keyboard + Pointer | Tek aksiyon soyutlaması ile iki farklı kaynağı birleştirir. |
Varsayımlar (Assumptions)
- Modern tarayıcı (Chrome 90+, Safari 14+, Firefox 88+) hedeflenir.
- Kullanıcı en az bir kez ekrana dokunur/klavye kullanır → AudioContext açılır (autoplay policy).
- Cihaz dikey veya yatay olabilir;
aspect-ratioile tahta her zaman 1:2 kalır. - Retina ekranlar
devicePixelRatioile keskin render alır.
02 Oyun Motoru Prensipleri
2.1 Fixed-Timestep Gravity (Sabit Zaman Adımlı Yerçekimi)
requestAnimationFrame 60 Hz'de çağrılır ama taş düşme hızı
zaman bazlıdır. Kare hızı düşse bile oyun aynı hızda akar:
// dt = geçen milisaniye (max 64ms — sekme değişiminde patlamasın)
const dt = Math.min(64, now - state.lastTime);
state.dropTimer += dt;
if (state.dropTimer >= interval) {
state.dropTimer = 0;
stepDown();
}
dt gelebilir. Cap koymazsan taş aniden dipte belirir (tunneling).
2.2 SRS (Super Rotation System) + Wall Kick
Modern Tetris standardı. Bir taş duvara/dayanağa çarptığında 5 farklı offset denenir; biri boşsa rotasyon başarılı sayılır. J/L/S/T/Z için ayrı, I için ayrı tablo gerekir.
const KICKS_JLSTZ = {
"0>1": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],
// ... 8 yön kombinasyonu
};
2.3 Lock Delay (Kilit Gecikmesi)
Taş yere değdiğinde anında kilitlenmez; 500 ms bekleme + 15 kez sıfırlama hakkı vardır. Bu, oyuncuya "son anda kaydırma" şansı verir.
2.4 7-Bag Randomizer
Yedi taş karıştırılıp torbaya atılır, hepsi tükenmeden yenisi gelmez. Böylece en kötü senaryo (arka arkaya 13 S/Z) matematiksel olarak imkânsız hale gelir.
2.5 Aksiyon Soyutlaması (Action Abstraction)
Klavye de, ekran tuşu da, swipe da aynı fonksiyonu çağırır:
function performAction(action) {
switch (action) {
case "left": move(-1); break;
case "rotateCW": tryRotate(1); break;
case "hardDrop": hardDrop(); break;
// ...
}
}
addToCart(productId) fonksiyonuna bağlanır. Aynı ürün farklı kanallardan
geldiğinde iş kuralı bir kez yazılır.
03 Görsel Katman & Canvas
3.1 Neden Canvas, DOM Değil?
Tek Paint
200 hücre için 200 DOM elemanı oluşturmak yerine tek canvas üzerine çizim. Layout/reflow yok.
Piksel Kontrolü
Neon glow, gradient, ghost outline — CSS'in yapamayacağı efektler doğrudan çizilir.
DPR Uyumu
devicePixelRatio ile ölçekleyerek retina ekranda bulanıklığı sıfırlar.
3.2 Glow Efekti Nasıl Çalışıyor?
ctx.shadowColor = glow;
ctx.shadowBlur = size * 0.6; // hücre boyutuna orantılı
ctx.fillStyle = gradient;
roundRect(ctx, x0, y0, w, h, r);
ctx.fill();
shadowBlur pahalı bir işlemdir. Bu yüzden
hücre başına değil, parça grubu başına uygulanır; her karede yeniden hesaplanmaz.
3.3 Ghost Piece (Hayalet Taş)
Aktif taşın düşeceği yeri ghostY() hesaplar; aynı matris alçak opaklıkla
alt tarafta çizilir. Bu, oyuncunun hata payını azaltır — kullanılabilirlik kararıdır.
3.4 Particle & Screen Shake
Satır temizlendiğinde her hücreden 6 parçacık fışkırır; shake değeri
canvas translate()'ine beslenir. Bunlar juice (oyun hissi) içindir.
04 Ses Mimarisi (Web Audio API)
4.1 Osilatör Tabanlı Ses
Hiçbir .mp3 / .wav yok. Her efekt bir osilatör + gain envelope:
const osc = ctx.createOscillator();
osc.type = "square";
osc.frequency.setValueAtTime(380, t0);
osc.frequency.exponentialRampToValueAtTime(520, t0 + dur);
const g = ctx.createGain();
g.gain.setValueAtTime(0.0001, t0);
g.gain.exponentialRampToValueAtTime(0.20, t0 + 0.008);
4.2 Autoplay Policy Uyumu
Tarayıcılar kullanıcı etkileşimi olmadan sesi bloke eder. Bu yüzden
AudioContext lazy initialize edilir — sadece ilk tıklama/dokunuşta açılır.
getUserMedia çağrılmaz.
4.3 Ses Efekti Türleri
| Olay | Dalga | Frekans | Etki |
|---|---|---|---|
| Hareket | square | 220 Hz | Kısa, klik |
| Rotasyon | square (slide) | 380→520 Hz | Yukarı kayma |
| Hard Drop | sawtooth (slide) | 140→60 Hz | Aşağı çakılma |
| Line Clear | triangle chord | C-E-G | Yükselen akor |
| Tetris | sawtooth chord | C-E-G-C-E | Epik 5'li |
| Game Over | sawtooth iniş | 330→131 Hz | Dramatik düşüş |
05 Girdi Sistemi & Dokunmatik
5.1 DAS / ARR (Delayed Auto Shift / Auto Repeat Rate)
Klavye veya buton basılı tutulduğunda önce DAS (160 ms) beklenir, sonra ARR (50 ms) aralıklarla tekrarlanır. Bu, profesyonel oyunlardaki standarttır.
5.2 Pointer Events (Unified Input)
pointerdown / pointerup hem fare hem dokunmatik hem stylus'u kapsar.
touchstart + mousedown ayrı ayrı dinlemeye gerek yok.
5.3 Swipe Algılama
if (Math.abs(dx) > threshold && Math.abs(dx) > Math.abs(dy)) {
performAction(dx > 0 ? "right" : "left");
} else if (dy > threshold) {
performAction("softDrop");
}
5.4 Passive vs Non-Passive Listeners
Scroll'u bloklamayan olaylar { passive: true } ile dinlenir → tarayıcı
scroll thread'ini beklemez, FPS korunur.
06 Durum Yönetimi & Kalıcılık
6.1 Tek State Nesnesi
Tüm oyun state nesnesinde yaşar: grid, aktif taş, skor, seviye, partiküller,
animasyon sayaçları. Bu, hata ayıklamayı kolaylaştırır — tek bir yerde bakar her şeyi görürsün.
6.2 Güvenli localStorage
function safeStorageGet(key, fallback) {
try { return localStorage.getItem(key) ?? fallback; }
catch (_) { return fallback; }
}
SecurityError fırlatır. Uygulama
çökmemeli, sadece "kayıt yok" gibi davranmalı.
6.3 Versioned Keys
neon_tetris_v1_high gibi versiyonlu anahtarlar, ileride skor tablosu
formatı değişirse eski verinin yeni kodu bozmasını engeller.
6.4 visibilitychange ile Auto-Pause
document.addEventListener("visibilitychange", () => {
if (document.hidden && state.running && !state.paused) {
togglePause();
}
});
07 E-Ticarette Davranış Modelleri
E-Ticaret — Tetris Kodundan Öğrenilecek Desenler
7.1 Sepet = Grid (State Machine)
Tetris grid'i 10×20 hücreden oluşur; her hücre null veya { color, glow }.
E-ticarette sepet de benzer: her slot boş, ürün,
rezerve veya hediye durumundan birinde olur.
| Tetris | E-Ticaret | Davranış |
|---|---|---|
grid[r][c] = null | Boş sepet slotu | Yeni ürün eklenebilir |
grid[r][c] = {color} | Dolu slot (ürün) | Fiyat hesaplanır |
clearing (satır animasyonu) | Ürün sepete eklenirken skeleton | Async yükleme animasyonu |
| Satır dolunca silinir | Sepet ödeme sonrası boşalır | Transaction commit |
combo sayacı | Kampanya çarpanı (3 al 2 öde) | Fiyat katlanması |
7.2 Fiyatlandırma = Scoring Sistemi
Tetris'te score = base × level + comboBonus. E-ticarette:
total = sum(itemPrice × qty) − discount + shipping + tax.
İkisi de deterministik, test edilebilir, saf fonksiyon olmalıdır.
// Oyun
state.score += (base * level) + comboBonus;
// E-ticaret (aynı iskelet)
order.total = items.reduce(fn) - coupon.value + shipping;
7.3 7-Bag Randomizer = Ürün Öneri Motoru
Tetris'te ardışık aynı taş gelmez. E-ticarette de recommendation engine aynı mantıkla çalışır: kullanıcının son 7 etkileşimine bakıp henüz önerilmemiş kategorilerden ürün seçer → çeşitlilik + tekrar önleme.
7.4 Ghost Piece = "Bunu alırsan ne olur?"
Ghost taş, aktif taşın nereye düşeceğini gösterir. E-ticarette bu:
- Sepet önizleme: Ürün sepete girince toplam ne olur?
- Kargo tahmini: Bu ürünü alırsam teslim tarihi ne?
- Stok rezervasyonu: Şimdi alırsam stok 15 dk tutulur.
7.5 Particle & Toast = Conversion Micro-Feedback
Satır temizlendiğinde partikül patlar, toast çıkar. E-ticarette: "Sepete eklendi ✓" animasyonu, kalp atışı efekti, konfeti. Bunlar dopamin döngüsü yaratır ve satın alma davranışını artırır.
7.6 localStorage = Sepet Kalıcılığı
Skor localStorage'a yazılır. E-ticarette aynı pattern misafir kullanıcının
sepetini tarayıcıda tutar; kullanıcı login olunca sunucuya merge edilir.
08 Sağlık & Röntgen Görüntüleme
Radyoloji & Tıbbi Görüntüleme — Canvas & State Desenleri
8.1 Canvas Render = DICOM Viewer Temeli
Hastane PACS yazılımları (Orthanc, OHIF Viewer, RadiAnt) tarayıcıda
<canvas> kullanır. Bizim grid çizimimiz (cellSize,
roundRect, shadowBlur) aynı API ile çalışır.
| Tetris Kodu | Radyoloji Karşılığı | Neden Aynı? |
|---|---|---|
resizeBoard() + DPR | Pencere boyutuna göre DICOM ölçekleme | Keskin görüntü şart |
drawCell() gradient + glow | Windowing / leveling (pencere ayarı) | Kontrast/brightness kontrolü |
ghostY() | Önceki çekimle overlay (karşılaştırma) | Zaman içi değişim takibi |
| Particle efekti | Lezyon marker animasyonu | Doktor dikkatini çekme |
state.flash | Anormal bulgu uyarısı (kırmızı flash) | Acil müdahale sinyali |
8.2 SRS Wall Kick = Anatomik Uyum
Bir taş dönerken çarparsa en yakın geçerli pozisyona kayar. Röntgende bu: otomatik anatomik landmark tespitidir. Yapay zekâ akciğer sınırını bulamazsa 5 farklı hipotez dener, en uygununu seçer.
8.3 Lock Delay = Radyolog Onay Süresi
Tetris'te taş yere değdiğinde 500 ms bekler. Radyolojide de AI bir lezyon tespit ettiğinde anında rapor etmez; radyolog 5–15 saniye içinde onaylar/reddeder. Aynı "buffer" mantığı — hata payı için.
8.4 Web Audio = Alarm & Monitör Sesi
Yoğun bakım monitörleri, MR cihazları belirli frekanslarda bip üretir. Web Audio API ile bu sesler tarayıcıda üretilebilir:
// Kalp monitörü bip'i
tone({ freq: 880, type: "sine", dur: 0.08, gain: 0.3 });
// Kritik alarm (iki tonlu)
tone({ freq: 1200, dur: 0.15 });
tone({ freq: 900, dur: 0.15, delay: 0.18 });
8.5 visibilitychange = Hasta Mahremiyeti
Sekme arka plana atılınca oyun durur. Radyoloji görüntüleyicide de ekran kilidi aynı pattern ile çalışır: sekme gizlenince hasta bilgisi blur'lanır.
8.6 localStorage = Radyolog Tercihleri
Skor kaydeder gibi, radyolog pencere ayarları (windowing preset), son
baktığı hasta ID'si, ekran düzeni localStorage'a yazılır.
Sunucu çağrısı gerekmez, anında yüklenir.
8.7 Undo / Redo (Tetris'te Yok Ama Eklenebilir)
SRS rotasyon geçmişi tutulabilir. Röntgende bu: annotasyon geri alma.
Her marker bir {x, y, type, timestamp} nesnesidir; stack'e push/pop.
09 Diğer Sektörler
Fintech & Bankacılık
- Fixed-timestep: Borsa emirleri milisaniye hassasiyetinde işlenir;
dtbazlı zamanlama şart. - SRS wall kick: Ödeme reddedilirse alternatif rota denenir (3D Secure → SMS → biyometrik).
- Lock delay: Şüpheli işlem 500 ms–5 sn arası "beklemede" tutulur, müşteri onayı istenir.
- Particle + toast: Başarılı transfer konfeti animasyonu, güven verir.
- localStorage: Son işlemler önbelleği, çevrimdışı bakiye gösterimi.
- visibilitychange: Sekme değişince oturum zaman aşımı sayacı başlar (PCI-DSS gereği).
Lojistik & Depo Yönetimi
- Grid state: Depo rafları 10×20 değil ama aynı 2D matris mantığı — her hücre dolu/boş/rezerve.
- Hard drop: Forkliftin en kısa mesafede paleti bırakması = greedy algorithm.
- Line clear: Sevkiyat tamamlanınca raf boşalır, yer açılır.
- Combo: Aynı bölgeden 3 sipariş → toplu indirim.
- Web Audio: Forklift geri vites bip'i, konveyör alarmı.
- RAF loop: Gerçek zamanlı filo takip haritası, saniyede 60 kez güncellenir.
Eğitim & Uzaktan Öğrenme
- Level progression: Tetris'te 10 satırda bir seviye. Eğitimde her 5 derste bir modül.
- localStorage: Öğrenci ilerlemesi çevrimdışı kaydedilir, bağlantı gelince senkronize edilir.
- Combo bonus: Ardışık doğru cevaplar → ekstra puan (streak).
- Toast feedback: "Doğru!", "Tekrar dene" mikro-animasyonları motivasyonu artırır.
- visibilitychange: Sınav sırasında sekme değişirse uyarı + süre dondurma.
- Ses efektleri: Doğru cevap akoru (C-E-G), yanlış cevap düşük ton (sawtooth).
Oyun & Eğlence (Genel)
- 7-bag: Her bulmaca oyununda rastgelelik + adalet dengesi.
- Lock delay: Yarış oyunlarında viraj öncesi "son fren" penceresi.
- Ghost piece: Golf oyunlarında top yörüngesi önizlemesi.
- Particle + shake: Patlama, çarpışma, kritik vuruş geri bildirimi.
- Web Audio: Prosedürel müzik (osilatörlerle anlık üretim).
Endüstriyel Kontrol & IoT
- Canvas render: Sensör verisi grafikleri, fabrika zemin planı üzerinde robot konumları.
- Fixed-timestep: PLC tarama döngüsü (scan cycle) sabit zamanlıdır.
- Web Audio: Makine arıza alarmı, üretim hattı bip'i.
- State machine: Her makine idle/running/fault/maintenance durumlarından birinde.
- localStorage: Son konfigürasyon yedeği, çevrimdışı log buffer'ı.
10 Kod Parçalarının Genel Kullanım Haritası
Aşağıdaki tablo, Tetris kodundaki her teknik bloğun hangi sektörlerde doğrudan yeniden kullanılabileceğini özetler.
| Kod Bloğu | Ne Yapar? | Kullanılabilecek Sektörler |
|---|---|---|
| RAF + dt clamp | 60 FPS oyun döngüsü | Fintech dashboard, IoT izleme, canlı yayın, simülasyon |
| SRS wall kick | Çarpışma sonrası alternatif pozisyon | CAD/CAM, robotik yol planlama, cerrahi navigasyon |
| 7-bag randomizer | Adil rastgele sıralama | E-ticaret öneri motoru, sınav soru dağıtımı, quiz uygulaması |
| Lock delay | Karar öncesi bekleme | Ödeme onayı, AI teşhis onayı, otonom araç fren kararı |
| Canvas + DPR | Keskin piksel render | DICOM viewer, harita, veri görselleştirme, grafik editör |
| Web Audio osilatör | Sıfır dosyalı ses | Hastane monitörü, fabrika alarmı, e-öğrenme bildirim, oyun |
| Pointer events | Birleşik fare/dokunma | Her mobil uygulama, POS terminali, kiosk, imza paneli |
| localStorage + try/catch | Güvenli yerel kayıt | Sepet, ilerleme, tercihler, çevrimdışı form, oturum token'ı |
| visibilitychange | Sekme durumu dinleme | Video konferans, sınav gözetimi, batarya tasarrufu, PACS |
| Action abstraction | Tek fonksiyon, çok kaynak | Çok kanallı e-ticaret, sesli asistan, chat bot, CLI + GUI |
| Particle & toast | Mikro geri bildirim | Conversion optimizasyonu, gamification, eğitim, sağlık uyarı |
| State machine | Merkezi durum yönetimi | Sipariş akışı, hasta takip, makine durumu, oyun, workflow |
Sonuç: Kod Neden Evrensel?
Tetris küçük görünür ama içinde gerçek zamanlı sistemlerin tüm temel problemlerini barındırır:
- Zaman yönetimi (fixed-timestep, lock delay)
- Uzaysal çarpışma (grid, wall kick)
- Kullanıcı girdisi (klavye, pointer, swipe)
- Durum yönetimi (state machine, persistence)
- Görsel render (canvas, DPR, glow)
- Ses (Web Audio, prosedürel)
- Geri bildirim (particle, toast, shake)
- Güvenlik & dayanıklılık (try/catch, cap, visibility)
Bu sekiz problem, hangi sektörde olursanız olun yazılımın omurgasıdır. Tetris'i anlamak, bu omurgayı anlamaktır.