/****
* 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