/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Engel (ör: taş) var Engel = Container.expand(function () { var self = Container.call(this); var engel = self.attachAsset('engel', { anchorX: 0.5, anchorY: 0.5 }); self.lane = 1; self.speed = 0; self.lastIntersecting = false; return self; }); // Kömür (toplanacak obje) var Komur = Container.expand(function () { var self = Container.call(this); var komur = self.attachAsset('komur', { anchorX: 0.5, anchorY: 0.5 }); // Şerit (0,1,2) self.lane = 1; // Hız self.speed = 0; // Son çarpışma durumu self.lastIntersecting = false; return self; }); // Vagon ve köpek karakteri var VagonKopek = Container.expand(function () { var self = Container.call(this); // Vagon var vagon = self.attachAsset('vagon', { anchorX: 0.5, anchorY: 0.5, y: 40 }); // Köpek var kopek = self.attachAsset('kopek', { anchorX: 0.5, anchorY: 1, y: -20 }); // Şerit (0: sol, 1: orta, 2: sağ) self.lane = 1; // Hareket animasyonu sırasında başka hareketi engelle self.isMoving = false; // Hedef şerit self.targetLane = 1; // Şerit pozisyonlarını hesapla self.getLaneX = function (lane) { // 3 şerit: sol, orta, sağ var lanes = [512, 1024, 1536]; return lanes[lane]; }; // Şeride geçiş animasyonu self.moveToLane = function (lane) { if (self.isMoving || lane < 0 || lane > 2) return; self.isMoving = true; self.targetLane = lane; tween(self, { x: self.getLaneX(lane) }, { duration: 180, easing: tween.cubicOut, onFinish: function onFinish() { self.lane = lane; self.isMoving = false; } }); }; // Başlangıç pozisyonu self.x = self.getLaneX(1); self.y = 2100; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c24 // Koyu mağara rengi }); /**** * Game Code ****/ // Ray (zemin) - sadece görsel amaçlı // Kömür vagonu (vagon) - ana karakter // Köpek (vagonun üstünde) // Kömür (toplanacak) // Engel (ör: taş) // Ray (zemin) var ray = LK.getAsset('ray', { anchorX: 0, anchorY: 0.5, x: 0, y: 2200 }); game.addChild(ray); // Ana karakteri oluştur var vagonKopek = new VagonKopek(); game.addChild(vagonKopek); // Skor var score = 0; var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Oyun hızı (her tick'te objelerin aşağıya kayma hızı) var baseSpeed = 13; var speed = baseSpeed; var maxSpeed = 38; var speedIncreaseInterval = 600; // Her 600 tick'te hız artar (~10sn) var lastSpeedUpTick = 0; // Objeler var komurler = []; var engeller = []; // Spawn zamanlayıcıları var komurSpawnTick = 0; var engelSpawnTick = 0; var komurSpawnInterval = 60; // 1 sn var engelSpawnInterval = 90; // 1.5 sn // Oyun alanı şeritleri (0: sol, 1: orta, 2: sağ) function getLaneX(lane) { var lanes = [512, 1024, 1536]; return lanes[lane]; } // Ekran dışı kontrolü function isOutOfScreen(obj) { return obj.y > 2800; } // Oyun bitti mi? var isGameOver = false; // Hareket kontrolü (sağa/sola kaydırma) var touchStartX = null; var touchStartY = null; var touchActive = false; var swipeThreshold = 80; // px // Ekrana dokunulduğunda game.down = function (x, y, obj) { if (isGameOver) return; touchStartX = x; touchStartY = y; touchActive = true; }; // Parmağı kaydırırken game.move = function (x, y, obj) { if (isGameOver) return; if (!touchActive) return; if (touchStartX === null) return; var dx = x - touchStartX; var dy = y - touchStartY; // Yalnızca yatay kaydırma if (Math.abs(dx) > swipeThreshold && Math.abs(dx) > Math.abs(dy)) { if (dx > 0 && vagonKopek.lane < 2) { vagonKopek.moveToLane(vagonKopek.lane + 1); } else if (dx < 0 && vagonKopek.lane > 0) { vagonKopek.moveToLane(vagonKopek.lane - 1); } touchActive = false; // Bir kaydırmada bir hareket } }; // Parmağı kaldırınca game.up = function (x, y, obj) { touchStartX = null; touchStartY = null; touchActive = false; }; // Oyun güncelleme döngüsü game.update = function () { if (isGameOver) return; // Hız artırma if (LK.ticks - lastSpeedUpTick > speedIncreaseInterval && speed < maxSpeed) { speed += 1.5; lastSpeedUpTick = LK.ticks; } // Kömür spawn if (LK.ticks - komurSpawnTick > komurSpawnInterval) { var lane = Math.floor(Math.random() * 3); var komur = new Komur(); komur.lane = lane; komur.x = getLaneX(lane); komur.y = -100; komur.speed = speed; komurler.push(komur); game.addChild(komur); komurSpawnTick = LK.ticks; } // Engel spawn if (LK.ticks - engelSpawnTick > engelSpawnInterval) { var lane = Math.floor(Math.random() * 3); var engel = new Engel(); engel.lane = lane; engel.x = getLaneX(lane); engel.y = -160; engel.speed = speed; engeller.push(engel); game.addChild(engel); engelSpawnTick = LK.ticks; } // Kömürleri güncelle for (var i = komurler.length - 1; i >= 0; i--) { var komur = komurler[i]; komur.y += komur.speed; var intersecting = vagonKopek.intersects(komur); if (!komur.lastIntersecting && intersecting) { // Toplandı score += 1; LK.setScore(score); scoreTxt.setText(score); LK.effects.flashObject(komur, 0xffff00, 200); komur.destroy(); komurler.splice(i, 1); continue; } if (isOutOfScreen(komur)) { komur.destroy(); komurler.splice(i, 1); continue; } komur.lastIntersecting = intersecting; } // Engelleri güncelle for (var j = engeller.length - 1; j >= 0; j--) { var engel = engeller[j]; engel.y += engel.speed; var intersecting = vagonKopek.intersects(engel); if (!engel.lastIntersecting && intersecting) { // Oyun bitti isGameOver = true; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } if (isOutOfScreen(engel)) { engel.destroy(); engeller.splice(j, 1); continue; } engel.lastIntersecting = intersecting; } }; // Skoru başlat LK.setScore(0); scoreTxt.setText(0);
===================================================================
--- original.js
+++ change.js
@@ -91,14 +91,14 @@
/****
* Game Code
****/
-// Ray (zemin)
-// Engel (ör: taş)
-// Kömür (toplanacak)
-// Köpek (vagonun üstünde)
-// Kömür vagonu (vagon) - ana karakter
// Ray (zemin) - sadece görsel amaçlı
+// Kömür vagonu (vagon) - ana karakter
+// Köpek (vagonun üstünde)
+// Kömür (toplanacak)
+// Engel (ör: taş)
+// Ray (zemin)
var ray = LK.getAsset('ray', {
anchorX: 0,
anchorY: 0.5,
x: 0,