/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // Saldırgan hayvan (düşman) - çoklu tür desteği var Enemy = Container.expand(function (type) { var self = Container.call(this); // Tür seçimi: yoksa rastgele seç var types = ['lion', 'tiger', 'leopard', 'bear']; if (!type || types.indexOf(type) === -1) { type = types[Math.floor(Math.random() * types.length)]; } var assetId = 'enemy_' + type; var enemyAsset = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 1 }); self.type = type; self.speed = 26; // px/frame self.getHitbox = function () { // Düşmanın hitbox'ı assetten biraz küçük olsun var w = enemyAsset.width * 0.7; var h = enemyAsset.height * 0.7; var x = self.x - w / 2; var y = self.y - h; return { x: x, y: y, width: w, height: h }; }; self.update = function () { self.x -= self.speed; }; return self; }); // Engeller (kütük) var Obstacle = Container.expand(function () { var self = Container.call(this); var obsAsset = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 1 }); self.speed = 22; // px/frame self.getHitbox = function () { // Engelin hitbox'ı assetten biraz küçük olsun var w = obsAsset.width * 0.7; var h = obsAsset.height * 0.7; var x = self.x - w / 2; var y = self.y - h; return { x: x, y: y, width: w, height: h }; }; self.update = function () { self.x -= self.speed; }; return self; }); // Koşucu karakter (ayak animasyonu eklendi) var Runner = Container.expand(function () { var self = Container.call(this); var runnerAsset = self.attachAsset('runner', { anchorX: 0.5, anchorY: 1 }); // Ayak animasyonu için parametreler var feetAnimTime = 0; var feetAnimSpeed = 0.25 + Math.random() * 0.1; var feetAnimAmplitude = 18; // px // Zıplama parametreleri self.isJumping = false; self.jumpVelocity = 0; self.gravity = 3.2; self.jumpPower = -54; self.groundY = 0; // Oyun başında ayarlanacak // Triple jump için sayaç ve efekt self.jumpCount = 0; self.maxJumps = 3; // Daha adil çarpışma için hitbox fonksiyonu self.getHitbox = function () { // Assetin ortasından, assetten biraz küçük bir dikdörtgen döndür var w = runnerAsset.width * 0.55; var h = runnerAsset.height * 0.7; var x = self.x - w / 2; var y = self.y - h; return { x: x, y: y, width: w, height: h }; }; // intersects fonksiyonunu override et self.intersects = function (obj) { var a = self.getHitbox(); var b; if (typeof obj.getHitbox === "function") { b = obj.getHitbox(); } else { // fallback: obj'nin x,y,width,height'i varsa kullan b = { x: obj.x - (obj.width || 0) / 2, y: obj.y - (obj.height || 0), width: obj.width || 0, height: obj.height || 0 }; } // Basit AABB çarpışma return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y; }; // Güncelleme fonksiyonu self.update = function () { // Ayak animasyonu: zıplamıyorsa veya havadaysa farklı if (!self.isJumping && self.y === self.groundY) { feetAnimTime += feetAnimSpeed; // Koşarken ayaklar yukarı-aşağı oynar (sinüs hareketi) runnerAsset.y = Math.sin(feetAnimTime) * feetAnimAmplitude; } else { // Havada ise ayaklar sabit (hafif yukarıda) runnerAsset.y = -feetAnimAmplitude * 0.5; } if (self.isJumping) { self.y += self.jumpVelocity; self.jumpVelocity += self.gravity; // Yere inme kontrolü if (self.y >= self.groundY) { self.y = self.groundY; self.isJumping = false; self.jumpVelocity = 0; self.jumpCount = 0; // Yere inince tekrar sıfırla } } }; // Zıplama fonksiyonu self.jump = function () { if (self.jumpCount < self.maxJumps) { self.isJumping = true; self.jumpVelocity = self.jumpPower; self.jumpCount++; // 3. zıplamada ekstra efekt yok (ateş kaldırıldı) } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x7ec850 // Orman yeşili }); /**** * Game Code ****/ // Alevin üst kısmı // Alevin orta kısmı // Alevin tabanı // Ateş efektleri için örnek assetler (id'leri kendi ekleyeceğin görsellere göre değiştir) // Orman arka planı (örnek: orman görseli, tam ekran) // Karakter (oyuncu) // Zemin // Engeller (kütük) // Saldırgan hayvan (örnek: ayı) // Puan göstergesi için // (Text2 kullanılacak, ayrıca asset gerek yok) // Orman arka planı için tam ekran bir görsel asseti (örnek id, uygun bir orman görseliyle değiştirilebilir) // Hızlı tempolu arka plan müziği (örnek id, uygun bir müzikle değiştirilebilir) var forestBg = LK.getAsset('forestBg', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChild(forestBg); // Uçan kuşlar (sadece görsel, çarpışma yok) var flyingBirds = []; function spawnBird() { var birdTypes = ['bird1', 'bird2', 'bird3']; var birdType = birdTypes[Math.floor(Math.random() * birdTypes.length)]; var bird = LK.getAsset(birdType, { anchorX: 0.5, anchorY: 0.5, x: 2048 + 100 + Math.random() * 200, y: 120 + Math.random() * 180, scaleX: 0.8 + Math.random() * 0.5, scaleY: 0.8 + Math.random() * 0.5 }); bird.speed = 6 + Math.random() * 4; flyingBirds.push(bird); game.addChild(bird); } // Başlangıçta birkaç kuş oluştur for (var i = 0; i < 3; i++) { spawnBird(); } // Zemin var ground = LK.getAsset('ground', { anchorX: 0, anchorY: 1, x: 0, y: 2732 - 0 }); game.addChild(ground); // Hızlı tempolu arka plan müziği başlat LK.playMusic('fastForestMusic'); // Runner karakteri var runner = new Runner(); runner.x = 420; runner.groundY = 2732 - 120; // Zemin yüksekliği kadar yukarıda runner.y = runner.groundY; game.addChild(runner); // Puan var score = 0; // Basit skor metni (üstte, ortada) var scoreTxt = new Text2('0', { size: 150, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // En yüksek skor paneli (üstte, sağda) var highScore = storage.highScore || 0; var highScoreTxt = new Text2('Rekor: ' + highScore, { size: 80, fill: 0xffe066 }); highScoreTxt.anchor.set(1, 0); highScoreTxt.x = LK.gui.width - 40; highScoreTxt.y = 10; LK.gui.top.addChild(highScoreTxt); // Ayarlar butonu (sağ üstte, rekorun yanında) var settingsBtn = new Text2('⚙️', { size: 90, fill: 0xffffff }); settingsBtn.anchor.set(1, 0); settingsBtn.x = LK.gui.width - 160; settingsBtn.y = 10; LK.gui.top.addChild(settingsBtn); // Ayarlar paneli (basit, ortada) var settingsPanel = new Container(); var panelBg = LK.getAsset('Puan', { anchorX: 0.5, anchorY: 0, x: LK.gui.width / 2, y: 120, width: 800, height: 600 }); panelBg.alpha = 0.96; settingsPanel.addChild(panelBg); var settingsTitle = new Text2('Ayarlar', { size: 100, fill: 0x222222 }); settingsTitle.anchor.set(0.5, 0); settingsTitle.x = LK.gui.width / 2; settingsTitle.y = 150; settingsPanel.addChild(settingsTitle); var closeBtn = new Text2('Kapat', { size: 70, fill: 0xb00b28 }); closeBtn.anchor.set(0.5, 0); closeBtn.x = LK.gui.width / 2; closeBtn.y = 600; settingsPanel.addChild(closeBtn); settingsPanel.visible = false; LK.gui.top.addChild(settingsPanel); // Ayarlar butonuna basınca paneli aç settingsBtn.interactive = true; settingsBtn.down = function () { settingsPanel.visible = true; }; // Kapat butonuna basınca paneli kapat closeBtn.interactive = true; closeBtn.down = function () { settingsPanel.visible = false; }; // Engeller ve düşmanlar var obstacles = []; var enemies = []; // Oyun durumu var isGameOver = false; // Rastgele engel/düşman oluşturma zamanlayıcıları var nextObstacleTick = 60 + Math.floor(Math.random() * 60); // 1-2 sn arası var nextEnemyTick = 180 + Math.floor(Math.random() * 120); // 3-5 sn arası // Oyun alanı sınırları var groundY = 2732 - 120; // Oyun kontrolleri (tek dokunuşla zıplama) game.down = function (x, y, obj) { if (!isGameOver) { runner.jump(); } }; // Oyun güncelleme fonksiyonu game.update = function () { if (isGameOver) return; // Uçan kuşları güncelle for (var b = flyingBirds.length - 1; b >= 0; b--) { var bird = flyingBirds[b]; bird.x -= bird.speed; // Hafif yukarı-aşağı dalgalanma efekti bird.y += Math.sin(LK.ticks * 0.04 + b) * 0.7; if (bird.x < -200) { bird.destroy(); flyingBirds.splice(b, 1); } } // Belirli aralıklarla yeni kuş ekle (her 120 tickte bir, ekranda 4'ten az varsa) if (LK.ticks % 120 === 0 && flyingBirds.length < 4) { spawnBird(); } // Runner güncelle runner.update(); // Engelleri güncelle var _loop = function _loop() { obs = obstacles[i]; obs.update(); // Çarpışma kontrolü if (runner.intersects(obs)) { isGameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return { v: void 0 }; } // Ekran dışına çıktıysa sil if (obs.x < -200) { obs.destroy(); obstacles.splice(i, 1); // Puanı artır (engel başarıyla geçildi) score++; scoreTxt.setText(score); // Rekor güncelle if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreTxt.setText('Rekor: ' + highScore); } } }, obs, _ret; for (var i = obstacles.length - 1; i >= 0; i--) { _ret = _loop(); if (_ret) return _ret.v; } // Düşmanları güncelle for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; enemy.update(); // Çarpışma kontrolü if (runner.intersects(enemy)) { isGameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Ekran dışına çıktıysa sil if (enemy.x < -220) { enemy.destroy(); enemies.splice(j, 1); // Puanı artır (düşman başarıyla geçildi) score++; scoreTxt.setText(score); // Rekor güncelle if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreTxt.setText('Rekor: ' + highScore); } } } // Yeni engel oluşturma if (LK.ticks % nextObstacleTick === 0) { var obs = new Obstacle(); obs.x = 2048 + 100; obs.y = groundY; obstacles.push(obs); game.addChild(obs); // Sonraki engel için yeni zaman: skor arttıkça daha kısa aralık, ama minimum mesafe korunur var minObstacleTick = 80 + Math.floor(score * 0.7); // skor arttıkça min aralık artar if (minObstacleTick > 300) minObstacleTick = 300; // çok açılmasın nextObstacleTick = minObstacleTick + Math.floor(Math.random() * 80) + 60; } // Yeni düşman oluşturma if (LK.ticks % nextEnemyTick === 0) { // Rastgele hayvan türüyle düşman oluştur var enemyTypes = ['lion', 'tiger', 'leopard', 'bear']; var type = enemyTypes[Math.floor(Math.random() * enemyTypes.length)]; var enemy = new Enemy(type); enemy.x = 2048 + 180; enemy.y = groundY; enemies.push(enemy); game.addChild(enemy); // Sonraki düşman için yeni zaman: skor arttıkça daha kısa aralık, ama minimum mesafe korunur var minEnemyTick = 220 + Math.floor(score * 1.2); if (minEnemyTick > 500) minEnemyTick = 500; nextEnemyTick = minEnemyTick + Math.floor(Math.random() * 120) + 100; } // Hız arttırma: skor arttıkça engel ve düşmanlar hızlanır var baseObsSpeed = 22; var baseEnemySpeed = 26; var speedIncrease = Math.floor(score / 10) * 2; // her 10 puanda 2px/frame hızlanır for (var i = 0; i < obstacles.length; i++) { obstacles[i].speed = baseObsSpeed + speedIncrease; } for (var j = 0; j < enemies.length; j++) { enemies[j].speed = baseEnemySpeed + speedIncrease; } }; // Oyun yeniden başlatıldığında sıfırlama game.on('reset', function () { // Tüm engelleri ve düşmanları sil for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } for (var j = 0; j < enemies.length; j++) { enemies[j].destroy(); } obstacles = []; enemies = []; score = 0; scoreTxt.setText(score); // Rekoru güncelle (oyun başında göster) highScore = storage.highScore || 0; highScoreTxt.setText('Rekor: ' + highScore); isGameOver = false; runner.x = 420; runner.y = runner.groundY; runner.isJumping = false; runner.jumpVelocity = 0; runner.jumpCount = 0; // Yeşil ateş efektini sıfırla (artık gerek yok, ateş kaldırıldı) nextObstacleTick = 60 + Math.floor(Math.random() * 60); nextEnemyTick = 180 + Math.floor(Math.random() * 120); });
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// Saldırgan hayvan (düşman) - çoklu tür desteği
var Enemy = Container.expand(function (type) {
var self = Container.call(this);
// Tür seçimi: yoksa rastgele seç
var types = ['lion', 'tiger', 'leopard', 'bear'];
if (!type || types.indexOf(type) === -1) {
type = types[Math.floor(Math.random() * types.length)];
}
var assetId = 'enemy_' + type;
var enemyAsset = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 1
});
self.type = type;
self.speed = 26; // px/frame
self.getHitbox = function () {
// Düşmanın hitbox'ı assetten biraz küçük olsun
var w = enemyAsset.width * 0.7;
var h = enemyAsset.height * 0.7;
var x = self.x - w / 2;
var y = self.y - h;
return {
x: x,
y: y,
width: w,
height: h
};
};
self.update = function () {
self.x -= self.speed;
};
return self;
});
// Engeller (kütük)
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obsAsset = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1
});
self.speed = 22; // px/frame
self.getHitbox = function () {
// Engelin hitbox'ı assetten biraz küçük olsun
var w = obsAsset.width * 0.7;
var h = obsAsset.height * 0.7;
var x = self.x - w / 2;
var y = self.y - h;
return {
x: x,
y: y,
width: w,
height: h
};
};
self.update = function () {
self.x -= self.speed;
};
return self;
});
// Koşucu karakter (ayak animasyonu eklendi)
var Runner = Container.expand(function () {
var self = Container.call(this);
var runnerAsset = self.attachAsset('runner', {
anchorX: 0.5,
anchorY: 1
});
// Ayak animasyonu için parametreler
var feetAnimTime = 0;
var feetAnimSpeed = 0.25 + Math.random() * 0.1;
var feetAnimAmplitude = 18; // px
// Zıplama parametreleri
self.isJumping = false;
self.jumpVelocity = 0;
self.gravity = 3.2;
self.jumpPower = -54;
self.groundY = 0; // Oyun başında ayarlanacak
// Triple jump için sayaç ve efekt
self.jumpCount = 0;
self.maxJumps = 3;
// Daha adil çarpışma için hitbox fonksiyonu
self.getHitbox = function () {
// Assetin ortasından, assetten biraz küçük bir dikdörtgen döndür
var w = runnerAsset.width * 0.55;
var h = runnerAsset.height * 0.7;
var x = self.x - w / 2;
var y = self.y - h;
return {
x: x,
y: y,
width: w,
height: h
};
};
// intersects fonksiyonunu override et
self.intersects = function (obj) {
var a = self.getHitbox();
var b;
if (typeof obj.getHitbox === "function") {
b = obj.getHitbox();
} else {
// fallback: obj'nin x,y,width,height'i varsa kullan
b = {
x: obj.x - (obj.width || 0) / 2,
y: obj.y - (obj.height || 0),
width: obj.width || 0,
height: obj.height || 0
};
}
// Basit AABB çarpışma
return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;
};
// Güncelleme fonksiyonu
self.update = function () {
// Ayak animasyonu: zıplamıyorsa veya havadaysa farklı
if (!self.isJumping && self.y === self.groundY) {
feetAnimTime += feetAnimSpeed;
// Koşarken ayaklar yukarı-aşağı oynar (sinüs hareketi)
runnerAsset.y = Math.sin(feetAnimTime) * feetAnimAmplitude;
} else {
// Havada ise ayaklar sabit (hafif yukarıda)
runnerAsset.y = -feetAnimAmplitude * 0.5;
}
if (self.isJumping) {
self.y += self.jumpVelocity;
self.jumpVelocity += self.gravity;
// Yere inme kontrolü
if (self.y >= self.groundY) {
self.y = self.groundY;
self.isJumping = false;
self.jumpVelocity = 0;
self.jumpCount = 0; // Yere inince tekrar sıfırla
}
}
};
// Zıplama fonksiyonu
self.jump = function () {
if (self.jumpCount < self.maxJumps) {
self.isJumping = true;
self.jumpVelocity = self.jumpPower;
self.jumpCount++;
// 3. zıplamada ekstra efekt yok (ateş kaldırıldı)
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x7ec850 // Orman yeşili
});
/****
* Game Code
****/
// Alevin üst kısmı
// Alevin orta kısmı
// Alevin tabanı
// Ateş efektleri için örnek assetler (id'leri kendi ekleyeceğin görsellere göre değiştir)
// Orman arka planı (örnek: orman görseli, tam ekran)
// Karakter (oyuncu)
// Zemin
// Engeller (kütük)
// Saldırgan hayvan (örnek: ayı)
// Puan göstergesi için
// (Text2 kullanılacak, ayrıca asset gerek yok)
// Orman arka planı için tam ekran bir görsel asseti (örnek id, uygun bir orman görseliyle değiştirilebilir)
// Hızlı tempolu arka plan müziği (örnek id, uygun bir müzikle değiştirilebilir)
var forestBg = LK.getAsset('forestBg', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: 2048,
height: 2732
});
game.addChild(forestBg);
// Uçan kuşlar (sadece görsel, çarpışma yok)
var flyingBirds = [];
function spawnBird() {
var birdTypes = ['bird1', 'bird2', 'bird3'];
var birdType = birdTypes[Math.floor(Math.random() * birdTypes.length)];
var bird = LK.getAsset(birdType, {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 + 100 + Math.random() * 200,
y: 120 + Math.random() * 180,
scaleX: 0.8 + Math.random() * 0.5,
scaleY: 0.8 + Math.random() * 0.5
});
bird.speed = 6 + Math.random() * 4;
flyingBirds.push(bird);
game.addChild(bird);
}
// Başlangıçta birkaç kuş oluştur
for (var i = 0; i < 3; i++) {
spawnBird();
}
// Zemin
var ground = LK.getAsset('ground', {
anchorX: 0,
anchorY: 1,
x: 0,
y: 2732 - 0
});
game.addChild(ground);
// Hızlı tempolu arka plan müziği başlat
LK.playMusic('fastForestMusic');
// Runner karakteri
var runner = new Runner();
runner.x = 420;
runner.groundY = 2732 - 120; // Zemin yüksekliği kadar yukarıda
runner.y = runner.groundY;
game.addChild(runner);
// Puan
var score = 0;
// Basit skor metni (üstte, ortada)
var scoreTxt = new Text2('0', {
size: 150,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// En yüksek skor paneli (üstte, sağda)
var highScore = storage.highScore || 0;
var highScoreTxt = new Text2('Rekor: ' + highScore, {
size: 80,
fill: 0xffe066
});
highScoreTxt.anchor.set(1, 0);
highScoreTxt.x = LK.gui.width - 40;
highScoreTxt.y = 10;
LK.gui.top.addChild(highScoreTxt);
// Ayarlar butonu (sağ üstte, rekorun yanında)
var settingsBtn = new Text2('⚙️', {
size: 90,
fill: 0xffffff
});
settingsBtn.anchor.set(1, 0);
settingsBtn.x = LK.gui.width - 160;
settingsBtn.y = 10;
LK.gui.top.addChild(settingsBtn);
// Ayarlar paneli (basit, ortada)
var settingsPanel = new Container();
var panelBg = LK.getAsset('Puan', {
anchorX: 0.5,
anchorY: 0,
x: LK.gui.width / 2,
y: 120,
width: 800,
height: 600
});
panelBg.alpha = 0.96;
settingsPanel.addChild(panelBg);
var settingsTitle = new Text2('Ayarlar', {
size: 100,
fill: 0x222222
});
settingsTitle.anchor.set(0.5, 0);
settingsTitle.x = LK.gui.width / 2;
settingsTitle.y = 150;
settingsPanel.addChild(settingsTitle);
var closeBtn = new Text2('Kapat', {
size: 70,
fill: 0xb00b28
});
closeBtn.anchor.set(0.5, 0);
closeBtn.x = LK.gui.width / 2;
closeBtn.y = 600;
settingsPanel.addChild(closeBtn);
settingsPanel.visible = false;
LK.gui.top.addChild(settingsPanel);
// Ayarlar butonuna basınca paneli aç
settingsBtn.interactive = true;
settingsBtn.down = function () {
settingsPanel.visible = true;
};
// Kapat butonuna basınca paneli kapat
closeBtn.interactive = true;
closeBtn.down = function () {
settingsPanel.visible = false;
};
// Engeller ve düşmanlar
var obstacles = [];
var enemies = [];
// Oyun durumu
var isGameOver = false;
// Rastgele engel/düşman oluşturma zamanlayıcıları
var nextObstacleTick = 60 + Math.floor(Math.random() * 60); // 1-2 sn arası
var nextEnemyTick = 180 + Math.floor(Math.random() * 120); // 3-5 sn arası
// Oyun alanı sınırları
var groundY = 2732 - 120;
// Oyun kontrolleri (tek dokunuşla zıplama)
game.down = function (x, y, obj) {
if (!isGameOver) {
runner.jump();
}
};
// Oyun güncelleme fonksiyonu
game.update = function () {
if (isGameOver) return;
// Uçan kuşları güncelle
for (var b = flyingBirds.length - 1; b >= 0; b--) {
var bird = flyingBirds[b];
bird.x -= bird.speed;
// Hafif yukarı-aşağı dalgalanma efekti
bird.y += Math.sin(LK.ticks * 0.04 + b) * 0.7;
if (bird.x < -200) {
bird.destroy();
flyingBirds.splice(b, 1);
}
}
// Belirli aralıklarla yeni kuş ekle (her 120 tickte bir, ekranda 4'ten az varsa)
if (LK.ticks % 120 === 0 && flyingBirds.length < 4) {
spawnBird();
}
// Runner güncelle
runner.update();
// Engelleri güncelle
var _loop = function _loop() {
obs = obstacles[i];
obs.update();
// Çarpışma kontrolü
if (runner.intersects(obs)) {
isGameOver = true;
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return {
v: void 0
};
}
// Ekran dışına çıktıysa sil
if (obs.x < -200) {
obs.destroy();
obstacles.splice(i, 1);
// Puanı artır (engel başarıyla geçildi)
score++;
scoreTxt.setText(score);
// Rekor güncelle
if (score > highScore) {
highScore = score;
storage.highScore = highScore;
highScoreTxt.setText('Rekor: ' + highScore);
}
}
},
obs,
_ret;
for (var i = obstacles.length - 1; i >= 0; i--) {
_ret = _loop();
if (_ret) return _ret.v;
}
// Düşmanları güncelle
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
enemy.update();
// Çarpışma kontrolü
if (runner.intersects(enemy)) {
isGameOver = true;
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Ekran dışına çıktıysa sil
if (enemy.x < -220) {
enemy.destroy();
enemies.splice(j, 1);
// Puanı artır (düşman başarıyla geçildi)
score++;
scoreTxt.setText(score);
// Rekor güncelle
if (score > highScore) {
highScore = score;
storage.highScore = highScore;
highScoreTxt.setText('Rekor: ' + highScore);
}
}
}
// Yeni engel oluşturma
if (LK.ticks % nextObstacleTick === 0) {
var obs = new Obstacle();
obs.x = 2048 + 100;
obs.y = groundY;
obstacles.push(obs);
game.addChild(obs);
// Sonraki engel için yeni zaman: skor arttıkça daha kısa aralık, ama minimum mesafe korunur
var minObstacleTick = 80 + Math.floor(score * 0.7); // skor arttıkça min aralık artar
if (minObstacleTick > 300) minObstacleTick = 300; // çok açılmasın
nextObstacleTick = minObstacleTick + Math.floor(Math.random() * 80) + 60;
}
// Yeni düşman oluşturma
if (LK.ticks % nextEnemyTick === 0) {
// Rastgele hayvan türüyle düşman oluştur
var enemyTypes = ['lion', 'tiger', 'leopard', 'bear'];
var type = enemyTypes[Math.floor(Math.random() * enemyTypes.length)];
var enemy = new Enemy(type);
enemy.x = 2048 + 180;
enemy.y = groundY;
enemies.push(enemy);
game.addChild(enemy);
// Sonraki düşman için yeni zaman: skor arttıkça daha kısa aralık, ama minimum mesafe korunur
var minEnemyTick = 220 + Math.floor(score * 1.2);
if (minEnemyTick > 500) minEnemyTick = 500;
nextEnemyTick = minEnemyTick + Math.floor(Math.random() * 120) + 100;
}
// Hız arttırma: skor arttıkça engel ve düşmanlar hızlanır
var baseObsSpeed = 22;
var baseEnemySpeed = 26;
var speedIncrease = Math.floor(score / 10) * 2; // her 10 puanda 2px/frame hızlanır
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = baseObsSpeed + speedIncrease;
}
for (var j = 0; j < enemies.length; j++) {
enemies[j].speed = baseEnemySpeed + speedIncrease;
}
};
// Oyun yeniden başlatıldığında sıfırlama
game.on('reset', function () {
// Tüm engelleri ve düşmanları sil
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
for (var j = 0; j < enemies.length; j++) {
enemies[j].destroy();
}
obstacles = [];
enemies = [];
score = 0;
scoreTxt.setText(score);
// Rekoru güncelle (oyun başında göster)
highScore = storage.highScore || 0;
highScoreTxt.setText('Rekor: ' + highScore);
isGameOver = false;
runner.x = 420;
runner.y = runner.groundY;
runner.isJumping = false;
runner.jumpVelocity = 0;
runner.jumpCount = 0;
// Yeşil ateş efektini sıfırla (artık gerek yok, ateş kaldırıldı)
nextObstacleTick = 60 + Math.floor(Math.random() * 60);
nextEnemyTick = 180 + Math.floor(Math.random() * 120);
});
Safarici bir runner yeşil üstlü. In-Game asset. 2d. High contrast. No shadows
Aslan. In-Game asset. 2d. High contrast. No shadows
Orman. In-Game asset. 2d. High contrast. No shadows
orman toprağı olsun zemin. In-Game asset. 2d. High contrast. No shadows
kuş. In-Game asset. 2d. High contrast. No shadows
Leopar. In-Game asset. 2d. High contrast. No shadows
ayı. In-Game asset. 2d. High contrast. No shadows
green fire. In-Game asset. 2d. High contrast. No shadows