/**** * 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) // 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ı 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
@@ -1,6 +1,255 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x181c24 // Koyu mağara rengi
+});
+
+/****
+* 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ı
+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);
\ No newline at end of file