尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Kale Taşıma — hazineyi bul, kalene taşı, 60 sn koru (Three.js), botlarla ya da 5v5 çevrim içi · carry-the-treasure action game
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗EN: Three-storey castles, hidden treasures and fights around the golden tree, in the browser (Three.js); solo against bots or 5v5 online rooms.
TR: Tarayıcıda (Three.js) üç katlı kaleler, saklı hazineler ve altın ağacının çevresinde dövüş; botlara karşı tek başına ya da 5v5 çevrim içi oda.
Play / Oyna: https://kaletasima.josephuz.com · Source / Kaynak: https://github.com/JosephUz/kaletasima · Android: Google Play
Üç katlı kaleler, saklı hazineler ve altın ağacının çevresinde dövüş.
Docker Desktop açıkken Baslat.cmd dosyasına çift tıkla. Oyun http://localhost:5185 adresindedir.
docker compose up -d --build
docker compose ps
docker compose logs --tail 50
Konteyner adı kale-tasima; otomatik yeniden başlatma ve /health sağlık kontrolü vardır. Port yalnız bu bilgisayara açılır. Docker olmadan geliştirme: npm ci ardından npm start (aynı porttaki konteyneri önce durdur).
josephuz/docs/oda-standardi.md). Giriş ekranı sırası:
ADIN · Bot zorluğu + TEK BAŞINA ↗ · ÇEVRİM İÇİ (● N çevrim içi): HIZLI KATIL →, ODA KUR, ODAYA KATIL
(altında ODA KODU + KATIL, Enter de katılır), durum satırı · AÇIK ODALAR listesi. Sunucuya bağlanılamazken (ya da
Android uygulamasında, ONLINE.app = false) üç düğme YAKINDA yazar, liste gizlenir.KPRT-4 biçimindedir (4 harf ABCDEFGHJKLMNPRSTUVYZ + tire + 1 rakam 23456789, benzersiz); kprt4 yazılırsa
KPRT-4 olur. Davet linki https://kaletasima.josephuz.com/?oda=KPRT-4 açılınca sunucuya bağlanır bağlanmaz odaya girilir;
odadayken adres çubuğu ?oda=KOD gösterir, çıkınca silinir. Sayfa yenilenirse sekmedeki jetonla (kale.token, oda kodu
kale.oda) aynı koltuğa dönülür. Hatalar: Böyle bir oda yok, Oda dolu.5v5 · Zorluk · n/10 oyuncu, LOBİDE / MAÇTA ve KATIL → (dolu
odada DOLU); satıra basan kodsuz katılır. Hızlı katıl en kalabalık bekleyen odaya, yoksa sürmekte olan maçın boş koltuğuna
oturtur, o da yoksa seçili zorlukla herkese açık yeni oda kurar. Sunucu listeyi (rooms) giriş ekranındaki bağlantılara
bağlanınca, odadan çıkınca ve liste değişince (~250 ms toplanır) kendisi gönderir; testi: tests/oda-listesi.test.mjs.ODA · 5v5 · Zorluk, kod, Linki kopyala, AÇIK ODA · listede görünür / ÖZEL ODA · yalnız kodla;
koltuklarda kuran / sen / koptu, boş koltuk Bot · boş koltuk (Buraya otur). Kuran bir oyuncuyu sürükleyip başka
koltuğa bırakır ya da oyuncuya sonra koltuğa tıklar; dolu koltukta yer değiştirirler. N insan · M bot ve Co-op / PvP notu;
kuranda MAÇI BAŞLAT ↗, ötekilerde Kuranın başlatması bekleniyor; Odadan çık.Bot zorluğu giriş ekranında seçilir (Kolay / Normal / Zor, varsayılan Normal; tarayıcı hatırlar). Çevrim içi odada başlangıç zorluğudur; kuran lobide değiştirir.
Kuran maçı başlatır. Maç devam ederken odaya (kodla, linkle, listeden, hızlı katılla) gelen doğrudan maça girer, bir botun koltuğunu alır. Kopan oyuncuyu bot devralır; 60 saniye içinde aynı sekmeden yeniden bağlanırsa koltuğuna döner. Kuran ayrılırsa kuranlık sıradaki bağlı oyuncuya geçer. Esc menüsünde çevrim içiyken Odadan çık yazar. Maç bitince oda sunucuda kendiliğinden lobiye döner; karnede çevrim içiyken herkes LOBİYE DÖN ile bekleme odasına geçer, kuran yeniden başlatır (tek başınayken Yeni maç).
Dokunmatik (telefon, tablet, uygulama; masaüstünde ?touch): dokunmatik ekran algılanınca açılır, ekran yataydır (dik tutunca "yan çevir" uyarısı). Sol yarıda parmağın değdiği yerde joystick belirir, sonuna kadar itmek koşudur; sağ yarıda parmak kaydırmak kamerayı çevirir. Telefonda izometrik kamerayla başlar (yukarıdan eğik, oyuncu ortada; kale içindeyken üst katlar ve duvarlar silikleşir): VUR / FIRLAT aynı kattaki en yakın rakibe, yoksa baktığın yöne nişan alır. Üstteki 🎥 omuz üstüne geçirir (artıyla nişan; seçim hatırlanır); masaüstünde omuz üstüyle başlar, V ya da 🎥 ile geçilir. Ayarlar ISO (config.js). Sağ altta VUR (basılı tutunca vurmaya devam eder), FIRLAT, TAŞI (yakında alınacak eşya varken parlar) ve ZIPLA; Eşya al ve kat düğmeleri ekrandakilerdir. Skor tablosu Skor düğmesiyle açılır. Kod: src/touch.js (joystick, düğmeler), src/input.js (eşleme), src/platform.js. Test: node tests/touch-smoke.mjs (telefon taklidi, GAME_URL).
Telefonda üst kısım: oyun kökü (body) src/gorunur-alan.js ile visualViewport'un bıraktığı görünür alana kilitlenir (--vv-h / --vv-top, style.css → html.vv): adres çubuğu açıkken üst çubuk (.top), giriş ekranının üst şeridi ve lobideki oda kodu çubuğun altında kalmaz. vh ile ölçülen yükseklikler (kart, karne, skor yığını) kökün boyuna (--sp-h) göre hesaplanır, üstteki boşluklara --sp-top (çentik / durum çubuğu) eklenir. Three.js görünümü pencereyi değil tuvali ölçer (GameView.olcu()), böylece kadraj ve dünya etiketleri kök kısalınca uyar. Giriş ekranı kendisi kaymaz (kaydırma .home-contenttedir), yoksa "Odaya katıl" açılınca uzayan içerik üst şeridi çubuğun altına iterdi; perde kartlarının genişliği vw değil 100%tür, yoksa dar telefonda sağdan taşarlardı. Doğrulama: npm run test:mobil — iki çubuk kipi (ios: çubuk üstü örter · android: 100vh görünenden uzundur, düzen alttan taşar) × iki telefon görünümü; ana ekran, klavye açıkken oda kodu, oda kurulmuş lobi ve maç ölçülür (artifacts/mobil-*.png), kendi sunucusunu açar.
Çok oyunculu anahtarı: src/config.js → ONLINE = { web, app }: tarayıcıda (web) ve Android uygulamasında (app) oda kur / odaya katıl açık mı. Uygulamada kapalı: sunucuya hiç bağlanılmaz, oda düğmelerinde YAKINDA yazar, tek başına oyun aynen oynanır. Tarayıcıda ?app ile uygulama kipi denenir.
Android APK (Android Studio gerekmez): JDK 21 ve Android SDK komut satırı araçları %USERPROFILE%\android altında taşınabilir kurulu (başka yerdeyse JAVA_HOME / ANDROID_HOME). npm run apk oyun dosyalarını dist/e toplar, Capacitor ile android/ projesine kopyalar, Gradle ile derler: telefona kurulacak imzalı apk/KaleTasima.apk, Play Store için apk/KaleTasima.aab, incelemek için apk/KaleTasima-debug.apk. USB hata ayıklama açık telefona doğrudan kurmak için npm run apk -- --install. Uygulama (com.josephuz.kaletasima) oyunu kendi içinden açar (internetsiz oynanır), yatay ve tam ekrandır, Android geri tuşu menü / geri olur. Yayın anahtarı android/*-release.jks, şifresi android/keystore.properties (git'e girmez; yedeklenmeli). Simge ve açılış görseli node scripts/icons.mjs; Play Store görselleri store/.
| Tuş | İşlev |
|---|---|
| WASD / oklar | Kameraya göre hareket |
| Shift | Koş |
| Boşluk, havadayken tekrar Boşluk | Zıpla / çift zıpla |
| Sol tık / F | Sopa; altın ağacına vur, rakibin canını götür |
| Sağ tık / Q | Sopa fırlat |
| E | Eşyayı al / bırak / odada sakla |
| B | Kendi kalende 15 altına eşya |
| 1 / 2 / 3 | Salonun arkasındaki tek merdivende kat seç (0,8 sn tırmanma: karakter ve kamera kata kayar, "↑ 2. KAT" yazısı çıkar; bu sırada yürünmez) |
| Tab | Omuz kamerasında fareyi bırak / kilitle |
| F1 / Esc | Kontroller / menü |
Merdivenin yanında kat düğmeleri de görünür. Çevrim içi maç menü açıkken devam eder.
Standart üst araç çubuğu ve Esc menüsü (bütün JosephUz oyunlarında aynı): giriş ekranının sağ üstünde tek satır hâlinde ← josephuz.com · Ses: açık/kapalı · Müzik: açık/kapalı · Kontroller F1. Duraklatma (Esc) menüsünde aynı sırayla DEVAM ET → · Kontroller F1 · Ses: … · Müzik: … (altında müzik ses sürgüsü) · oyuna özgü Grafik: … · Ana menü (çevrim içi maçta Odadan çık) · josephuz.com'a dön. İki yerdeki Ses ve Müzik düğmesi aynı durumu gösterir (src/screens.js → syncMenu) ve ayarlar tarayıcıda kalır: kale.sound, kale.muzik, kale.muzik.ses. Dar ekranda yazılar kısalır (josephuz.com düşer, ← kalır) ama sıra ve dört düğme aynı kalır.
Müzik henüz yok. Kale Taşıma'nın parçaları bestelenmedi: src/muzik.js bugün yalnız Müzik düğmesinin durumunu ve ses düzeyini (varsayılan %35) tutar, çalan bir şey yoktur. ?muzik=0 / ?muzik=1 saklanan ayarı ezer. Parçalar gelince çalma bölümü aynı dosyaya eklenir; düğmeler ve saklanan anahtarlar hazır bekliyor.
Dosya düzeni Çayır Muhafızı ile aynıdır: kökte index.html, style.css, game.js (giriş noktası) ve server.mjs; sunucu odaları server/, oyun kodu src/ altındadır. three.js npm paketinden (node_modules/three/build) /vendor/ yolundan sunulur; sunucu bunlar dışında hiçbir dosyayı vermez.
| Dosya | İçerik |
|---|---|
src/config.js | Kurallar (RULES), kale ölçüleri (CASTLE), zorluklar, renkler, adlar |
src/castle.js | Kale geometrisi: yerel/dünya koordinatı, duvarlar ve çarpışma, görüş, merdiven, rota |
src/rules.js | Ortak yardımcılar: mesafe, kale içi, skor, kale alarmı, olay kuyruğu |
src/items.js | Eşya, altın, sopa kasaları, E ile al / bırak / sakla, satın alma, altın ağacı |
src/combat.js | Sopa (can), fırlatılan sopa (bayıltır), zıplama, bayılma ve kalede doğma |
src/ai.js | Botlar: hedef seçimi, hedef paylaşımı, yürüme, dövüş ve kaçınma |
src/world.js | Dünya kurulumu, oyuncu girdisi, simülasyon adımı (hareket, altın toplama, kazanma) |
src/net/snapshot.js | Sunucu paketleri: oyuncuya yalnız gördüğü durum, girdi sınırlama |
src/net/client.js | Tarayıcı bağlantısı, yeniden bağlanma |
src/view/gameview.js | Three.js sahnesi, omuz üstü kamera, çizim |
src/view/models.js, effects.js | Arena / kale / karakter / eşya modelleri; parçacık ve uçan yazılar |
src/main.js | İstemci uygulaması: tek başına ve çevrim içi döngü |
src/input.js, ui.js, screens.js | Girdi ve fare kilidi; oyun içi arayüz; menüler, lobi, maç karnesi |
src/gorunur-alan.js | Telefonda oyun kökünü visualViewport'un görünür alanına kilitler (üst kısım adres çubuğunun altında kalmaz); dört oyunda da aynı dosya |
server/rooms.mjs | Odalar ve lobi, 30 Hz otoriter simülasyon |
Simülasyon (world.js ve bağımlıları) hem tarayıcıda (tek başına) hem sunucuda (çevrim içi) aynen koşar.
Sunucu 30 Hz simülasyon, 15 Hz kişiye göre filtrelenmiş durum gönderir. Görüş dışındaki rakip konumları ve eşyalar gönderilmez. İstemci ara değerlerle hareketi yumuşatır. Görüş dışındaki kale modelleri çizilmez; geometri/malzeme paylaşımı, yeniden kullanılan nişan geometrisi, sınırlı piksel oranı, grafik ayarları ve düşük kare hızında otomatik kalite azaltma kullanılır.
npm test
npm run test:mobil
node tests/network-smoke.mjs
node tests/browser-smoke.mjs
Son iki test çalışan sunucu ister; npm run test:mobil (telefonda üst kısım, bkz. yukarısı) kendi sunucusunu boş bir portta açar. Tarayıcı testleri Playwright'ın kendi başsız Chromium'unu kullanır (kurulu Chrome'a dokunmaz; başka bir tarayıcı için CHROME_PATH). Playwright depoya bağımlılık olarak eklenmez, isteğe bağlıdır: npm i -D playwright ile kurulur ya da komşu bir depodaki kurulum kullanılır — tests/playwright-bul.mjs önce bu depoya, sonra üst klasörlerdeki komşu depolara bakar ve istediği Chromium yapısı indirilmiş olanı seçer, böylece npm test ortam değişkeni olmadan da koşar. Başka bir kurulumu PLAYWRIGHT_MODULE ile (klasör yolu ya da file:// URL'si) elle verebilirsin. npm test içindeki düzen testi (tests/duzen.test.mjs) ve standart araç çubuğu testi (tests/standart-cubuk.test.mjs) da aynı yolu kullanır; sunucularını kendileri açar (tests/yerel-sunucu.mjs), hiçbir yerde Playwright yoksa yalnız tarayıcı isteyen bölümler sessizce atlanır. Araç çubuğu testi önce sırayı ve yazıları kaynaktan denetler, sonra masaüstü ve üç telefon tutuşunda (667x375, 844x390, 390x844) çubuğun tek satırda kaldığını, taşmadığını ve oyun adına binmediğini, Esc menüsünün de kaydırmasız sığdığını ölçer; görüntüler artifacts/standart-cubuk-*.png. Ağ testi 10 gerçek WebSocket istemcisi, koltuk doluluğu, yeniden bağlanma ve yetki devrini kontrol eder. Tarayıcı testi iki bağımsız oturumla modları ve oynanışı doğrular. Ekran görüntüleri artifacts/ içine yazılır. Çok oyunculu internet gecikmesi ve insanlarla oyun dengesi bu yerel kontrollerin kapsamı dışındadır.
Three.js (MIT lisanslı) npm paketinden gelir: node_modules/three/LICENSE. Görseller ve sesler prosedürel üretilir.
Sıralama eşya sayısı ve eldeki altını gösterir. Görülen 30+ altınlı rakipler botların yağma hedefidir.
Sersemleme 10 saniyedir; süre bitince oyuncu kendi kalesinin zemin katında elinde sopayla ayılır, taşıdığı eşya vurulduğu yerde kalır. Ardından 2,5 saniye yeniden sersemleme koruması vardır. Sersemken sopa kullanılabilir ve başlamış savuruş iptal olmaz. Botlar sopadan kusursuz zıplamaz; dövüş kararları 220–400 ms aralıklıdır.
Her kale iki eşya ile başlar; takımlı maçta başlangıç toplamı takım başına 10 eşyadır.
Kalene rakip girdiğinde ekran kenarları kırmızı yanıp söner. Son rakip çıkınca ya da kaledeki rakiplerin hepsi baygınken uyarı kapanır; baygın davetsiz ve dost oyuncular alarmı tetiklemez. Çevrim içi maçta uzakta olsan da kendi kalenin alarmını alırsın.
Sağ tık / Q eldeki tek sopayı fırlatır. Sopa isabette, duvarda veya menzil sonunda kaybolur; geri dönmez ve süreyle yenilenmez. Silahsızken herhangi bir kalenin kapısının önündeki kasaya yaklaş ve E ile ücretsiz yeni sopa al. Botlar da en yakın kasaya gider. Kalede doğmak / ayılmak yeni sopa verir.
Sis ve uzaklık temelli görünürlük sınırı kaldırıldı. Tüm kaleler ve açık alandaki oyuncular/eşyalar uzaklık sınırı olmadan görünür. Kale içinden de dışarısı görünür. Kale içindeki kat gizliliği korunur.
Sopa fırlatma menzili 24 birimdir. Botlar gelen sopaya 350–550 ms sonra, her sopa için tek seferde %35 olasılıkla zıplamayı dener.
Her bayılışta (fırlatılan sopa ya da can bitmesi, kendi kalesinde de) 5 altın yere düşer; bayılanın altını yetmese de düşer (eksik tutar üretilir, bakiye eksiye inmez). Rakibi bayıltmak her zaman altın kazandırır; bunun dışında yeni altın yalnız altın ağacından çıkar. Kale içinde düşen altını yalnız o kalenin takımı toplar.
store/, android/app/src/main/res/). Ayrıntı: TRADEMARKS.md.In English: The code is licensed under MIT. The name "Kale Taşıma", the name "JosephUz", the logo and icons (
store/,android/app/src/main/res/) are not covered by MIT and are all rights reserved; see TRADEMARKS.md. Forks must use a different name and logo.
Hata bildirimi, öneri ve pull request'e açığız. Büyük bir değişiklikten önce bir issue açıp konuşalım; oyunun dengesi ve yönü JosephUz'da. Kod ve oyun Türkçe: değişken, işlev ve mesaj adları Türkçe, çevresindeki kodun düzenine uy; npm test geçmeli. Gönderdiğin katkı bu deponun MIT lisansıyla yayımlanır. Müzik, ses ya da görsel eklemeden önce issue'da sor. Güvenlik açıklarını issue yerine SECURITY.md'deki yoldan bildir.
In English: Issues and pull requests are welcome; please open an issue before large changes. Contributions are accepted under the MIT license of this repository. Report security issues privately as described in SECURITY.md.