test
Prompt
Aşağıdaki prompt, yaptığımız oyunun tüm kurallarını ve sayılarını içeriyor. Bir yapay zekaya yapıştırırsan aynı oyunu baştan çıkarabilir. En sonda “sonraki sürüm” bölümü var, istersen oradaki maddeleri değiştir. Sen deneyimli bir oyun geliştiricisisin. Tek bir HTML dosyasında (HTML + CSS + JavaScript bir arada, dış kütüphane yok) telefonda ve bilgisayarda çalışan bir 2D yan görünüşlü sandbox oyunu yaz. Oyunun adı "Çöp Adam Skyblock". Arayüz metinleri Türkçe olsun. Önce kısa bir plan yaz, sonra tüm kodu tek seferde, eksiksiz ve çalışır halde ver. Kodu ben test edeceğim, bu yüzden hata olmamasına özellikle dikkat et. ## 1. Oyunun fikri Boşlukta süzülen küçük adalar var. Oyuncu çöp adam bir karakter. Blokları kırar, blok koyarak köprüler kurar, altın ve maden toplar, geceleri gelen zombilere karşı savaşır, topladığı coinle kılıcını geliştirir. Hedef: tüm adaları keşfetmek ve dev zombiyi yenmek. Ton: neşeli, çizgi film gibi, çocuklara uygun, kan ve şiddet görseli yok. ## 2. Teknik kurallar - Tek dosya, canvas ile çiz. Dış resim, ses dosyası veya CDN kullanma. Her şey kodla çizilsin. - Sabit zaman adımı: 60 adım/saniye (birikimli sayaç kullan, 120 Hz ekranda oyun hızlanmasın). Render her karede. - Canvas tam ekran, devicePixelRatio'ya uygun. Görüntü ölçeği = min(genişlik, yükseklik)/380, 1 ile 2 arasına sıkıştırılmış. - Kamera oyuncuyu yumuşakça takip etsin (her karede farkın %15'i). Kamera konumunu tam sayıya yuvarla ki bloklar arasında çizgi oluşmasın. - Viewport meta etiketi viewport-fit=cover olsun. Butonlar telefon çentiği ve alt çubuğu için env(safe-area-inset-*) kullansın. Sayfa kaydırılmasın, çift dokunuşla yakınlaştırma olmasın (touch-action: none). - Açık ve koyu tema için CSS değişkenleri kullan (prefers-color-scheme). Oyun alanı hep aynı renkte kalabilir. - Veri kaydı: localStorage, her okuma ve yazma try/catch içinde. Her 5 saniyede bir ve sayfa gizlenince kaydet. - Metinlerde kesme işareti ve tırnak sorunu çıkarmamak için Türkçe cümleleri sade kur. ## 3. Dünya - Karo boyutu 32 piksel. Dünya 72 x 28 karo. Karoları tek boyutlu Uint8Array'de tut (indeks = y*genişlik + x). 0 = boş. - Blok türleri: 1 toprak, 2 çimen (kırılınca toprak verir), 3 taş, 4 odun, 5 yaprak, 6 tahta, 7 altın cevheri, 8 demir cevheri, 9 elmas cevheri. - Cevherler envantere girmez, kırılınca coin verir: altın +5, demir +8, elmas +20. - Dünya sabit ve elle tasarlanmış olsun: 1. Ana ada (x 14-29, üst yüzey y=14): çimen, 3 kat toprak, altta daralarak 2 kat taş, adanın üstünde bir ağaç (4 odun gövde, yapraklı tepe), taşın içinde 2 altın. 2. İkinci ada (x 34-38, y=12): altın cevheri içeren küçük ada. Ana adaya 4 karo boşlukla bağlı, köprü gerekir. 3. Küçük havada asılı mini ada (x 40-41, y 7-8), üstünde altın. 4. Üçüncü ada (x 46-52, y=10): demir ve altın. 5. Dördüncü ada (x 56-62, y=15): ağaç, demir, elmas, altın. 6. Gökyüzü adası (x 66-70, y=6): elmas ve altın. Oraya çıkmak için yukarı doğru blok kule kurmak gerekir. - Oyuncu y > (yükseklik+4)*32 olursa boşluğa düşmüş sayılır: başlangıç noktasına ışınla, 3 can kaybet, "Boşluğa düştün!" yaz. ## 4. Oyuncu ve fizik - Çöp adam: beyaz yuvarlak kafa, çizgi gövde, kol ve bacaklar yürürken sallansın, boynunda renkli atkı. Çarpışma kutusu 18 x 30 piksel, y ayak noktası. - Yerçekimi 0.5/kare, maksimum düşüş hızı 12. Yürüme hızı 2.6. Zıplama başlangıç hızı -9.5 (yaklaşık 2.8 blok yükseklik). Sadece yerdeyken zıplayabilir. - Çarpışma: önce yatay hareket + çözüm, sonra dikey hareket + çözüm (eksen eksen AABB). Düşerken zemine, zıplarken tavana çarpma doğru çalışsın. - Can 10. Hasar sonrası 45 kare dokunulmazlık (karakter yanıp sönsün) ve küçük sıçrama. Can 0 olursa coinlerin yarısını kaybet, canı doldur, başlangıca dön, zombileri temizle. - Gündüz her 10 saniyede (600 kare) 1 can kendiliğinden yenilensin. ## 5. Kontroller Dokunmatik: - Sol altta ◀ ▶ (basılı tutma), sağ altta ⚔️ saldırı ve ⤊ zıplama. - Ekrana dokunma: ⛏️ modunda dokunulan bloğu kır, 🧱 modunda dokunulan boş karoya blok koy. Erişim mesafesi oyuncu merkezinden 4.5 karo, daha uzaksa "Çok uzak" uyarısı. Üstünde durduğun karoya blok koyamazsın. - Üstte sağda: mod değiştirme (⛏️/🧱), 🔨 craft, kılıç yükseltme (üzerinde maliyet yazsın), 🎨 karakter rengi, 🗑️ sıfırla (yanlışlıkla silmemek için iki kez basmak gerekir, ilk basışta uyarı çıksın). - Alttaki blok çubuğu: toprak, taş, odun, tahta, yaprak. Her biri renkli kare + adet gösterir, seçilince otomatik 🧱 moduna geçer. - Fare ile üzerine gelinen karoyu sarı çerçeveyle vurgula (erişim dışıysa soluk). Klavye: ok tuşları veya A/D yürü, W/boşluk/yukarı zıpla, F veya Enter saldır, Q mod, C craft, 1-5 blok seçimi. Tuşlar basılı tutulduğunda takılma olmasın, ekran dışına çıkan parmakta buton "basılı" kalmasın (pointerup, pointerleave, pointercancel). ## 6. Craft ve gelişim - Craft: 1 odun → 4 tahta. - Kılıç seviye atlaması: maliyet = 10 x (mevcut seviye + 1) coin. Hasar = 1 + kılıç seviyesi. Kılıç rengi seviyeyle değişsin (gri, mavi, altın, pembe). - Başlangıç envanteri: 8 toprak. Başlangıç coin 0. ## 7. Gece, gündüz ve düşmanlar - Tam gün döngüsü 120 saniye (7200 kare). Güneş ve ay gökyüzünde yay çizerek hareket etsin, geceleri gökyüzü kararsın, yıldızlar çıksın, bulutlar yavaşça kaysın. Başlangıç saati sabah olsun. - Gece yoğunluğu > 0.7 iken her 150 karede bir, en fazla 4 düşman olacak şekilde, oyuncudan en az 150 piksel uzakta ve ±14 karo içinde bir sütunun en üst bloğu üzerinde düşman doğsun. - Düşman türleri: zombi (3 can, hız 1.1, yeşil, ödül 2 coin), örümcek (2 can, hız 1.9, küçük ve kırmızı, ödül 3, %35 olasılık), dev zombi (15 can, hız 0.8, 1.45 kat büyük, mor, 2 hasar verir, can barı görünür, ödül 25 coin; her 3. gecenin başında doğar ve "Dev zombi geldi!" yazısı çıkar). - Düşman yapay zekası: oyuncuya doğru yürü, duvara çarparsa zıpla, yakınlaşınca (16 piksel yatay) 50 karede bir hasar ver. Gündüz olunca yavaşça yanıp ölsünler. Boşluğa düşenler silinsin. - Saldırı: ⚔️ 14 karelik sallama animasyonu, ön tarafta 46 piksel menzil. Vurulan düşman geri tepsin. Saldırı bekleme süresi animasyon bitene kadar. - Tavuklar: ana adada 3 tane gezer (rastgele dur-yürü), vurulunca +3 can verir ve kaybolur. 10 saniyede bir sayı 3'ün altındaysa yenisi çıkar. ## 8. Görünüm - Her blok türünün kendine özgü basit dokusu olsun (çimen üst şerit, taşta benekler, altında sarı noktalar, odunda dikey çizgiler, tahtada yatay çizgiler, yaprakta koyu kareler) ve hafif kenar çizgisi. - Üstte sol: ❤ can, 🪙 coin, ⚔ seviye ve ☀️/🌙 durumu gösteren küçük panel. - Mesajlar alt ortada kısa süre görünüp solsun (örn. "+5 🪙", "Elinde bu blok yok"). - Karakter için 5 renk seti (gövde rengi + atkı rengi) olsun, 🎨 ile sırayla değişsin ve kaydedilsin. - İlk açılışta kısa yönerge: "Adadaki ağacı kır, köprü kurup sağdaki adaya git. Geceleri zombiler gelir!" ## 9. Kod kalitesi - Okunabilir, düzenli ve yorum satırı az ama yeterli. Sihirli sayıları sabit olarak üstte topla. - Tüm fonksiyonlar tek dosyada, global değişkenler az ve anlaşılır. - Çalıştırınca konsol hatası vermesin. Kaydedilmiş veri bozuksa oyun yeni dünya ile açılsın. ## 10. Sonraki sürümde eklenecekler (şimdilik yapma, kodu buna uygun genişletilebilir yaz) Sandıklar, meşale, inek ve koyun gibi daha çok hayvan, kıyafet ve şapka eşyaları, daha fazla blok, ses efektleri ve müzik, rastgele oluşturulan sonsuz dünya, başarımlar. İşe yarayacak birkaç ipucu: Bu prompt’u önce Claude’a yapıştırmak en iyi sonucu verir, çünkü kodu o yazdı. Başka bir yapay zekada tek seferde bazı kısımlar eksik gelebilir. O zaman “eksik kalan 8. ve 9. maddeleri de tamamla” diye devam et. Büyük istekleri parça parça vermek daha sağlam çalışır. Önce 1-5. maddeleri verip oynanabilir hâli test et, sonra gece ve düşmanları (7) ekle. Yeni özellik istersen 10. maddedeki listeyi güncelleyip “sadece şunu ekle” diye yaz.
Response not available