/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Oyuncu arabası
var Car = Container.expand(function () {
var self = Container.call(this);
var carGfx = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
// Arabayı biraz yukarıdan başlatmak için offset
self.setStartPosition = function () {
self.x = 2048 / 2;
self.y = 2732 - 400;
};
// Sınırları kontrol et
self.clampToRoad = function () {
if (self.x < road.x - road.width / 2 + carGfx.width / 2) {
self.x = road.x - road.width / 2 + carGfx.width / 2;
}
if (self.x > road.x + road.width / 2 - carGfx.width / 2) {
self.x = road.x + road.width / 2 - carGfx.width / 2;
}
};
return self;
});
// Engel
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obsGfx = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 22;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111
});
/****
* Game Code
****/
// Yolun ortasına yerleştir
// Araba (oyuncu)
// Yol şeridi
// Yol çizgisi
// Engel
var road = LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0
});
road.x = 2048 / 2;
road.y = 0;
game.addChild(road);
var laneCount = 3;
var laneSpacing = road.width / laneCount;
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Oyuncu arabası
var car = new Car();
car.setStartPosition();
game.addChild(car);
// Oyun değişkenleri
var obstacles = [];
var dragNode = null;
var lastScore = 0;
var isGameOver = false;
// Oyun alanı sınırları
var roadLeft = road.x - road.width / 2;
var roadRight = road.x + road.width / 2;
// Hareket için başlangıç offseti
var dragOffsetX = 0;
// Oyun skorunu güncelle
function updateScore(val) {
LK.setScore(val);
scoreTxt.setText(val);
}
// Oyun başlatıldığında skor sıfırla
updateScore(0);
LK.getSound('Araba').play();
LK.playMusic('car_engine');
// Oyun hareketleri
function handleMove(x, y, obj) {
if (dragNode) {
// Arabayı sadece yatay eksende hareket ettir
var newX = x - dragOffsetX;
car.x = newX;
car.clampToRoad();
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Arabaya dokunulduysa sürüklemeye başla
if (x > car.x - 120 && x < car.x + 120 && y > car.y - 180 && y < car.y + 180) {
dragNode = car;
dragOffsetX = x - car.x;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Oyun güncelleme döngüsü
game.update = function () {
if (isGameOver) return;
// Engelleri güncelle
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
obs.update();
// Ekran dışına çıktıysa sil
if (obs.y - 100 > 2732) {
obs.destroy();
obstacles.splice(i, 1);
continue;
}
// Çarpışma kontrolü
if (car.intersects(obs)) {
// Kırmızı titret
LK.effects.flashScreen(0xff0000, 800);
isGameOver = true;
LK.stopMusic();
LK.getSound('Araba').stop();
LK.showGameOver();
return;
}
}
// Skor: her frame biraz artır (yol kat ettikçe)
if (LK.ticks % 4 === 0) {
updateScore(LK.getScore() + 1);
}
// Engel oluşturma (her 40 frame'de bir)
if (LK.ticks % 40 === 0) {
var obs = new Obstacle();
// Rastgele şerit seç
var laneIdx = Math.floor(Math.random() * laneCount);
obs.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing;
obs.y = -120;
obstacles.push(obs);
game.addChild(obs);
}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('destroy', function () {
obstacles = [];
isGameOver = false;
car.setStartPosition();
updateScore(0);
LK.getSound('Araba').play();
LK.playMusic('car_engine');
}); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Oyuncu arabası
var Car = Container.expand(function () {
var self = Container.call(this);
var carGfx = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 0.5
});
// Arabayı biraz yukarıdan başlatmak için offset
self.setStartPosition = function () {
self.x = 2048 / 2;
self.y = 2732 - 400;
};
// Sınırları kontrol et
self.clampToRoad = function () {
if (self.x < road.x - road.width / 2 + carGfx.width / 2) {
self.x = road.x - road.width / 2 + carGfx.width / 2;
}
if (self.x > road.x + road.width / 2 - carGfx.width / 2) {
self.x = road.x + road.width / 2 - carGfx.width / 2;
}
};
return self;
});
// Engel
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obsGfx = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 22;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111
});
/****
* Game Code
****/
// Yolun ortasına yerleştir
// Araba (oyuncu)
// Yol şeridi
// Yol çizgisi
// Engel
var road = LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0
});
road.x = 2048 / 2;
road.y = 0;
game.addChild(road);
var laneCount = 3;
var laneSpacing = road.width / laneCount;
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Oyuncu arabası
var car = new Car();
car.setStartPosition();
game.addChild(car);
// Oyun değişkenleri
var obstacles = [];
var dragNode = null;
var lastScore = 0;
var isGameOver = false;
// Oyun alanı sınırları
var roadLeft = road.x - road.width / 2;
var roadRight = road.x + road.width / 2;
// Hareket için başlangıç offseti
var dragOffsetX = 0;
// Oyun skorunu güncelle
function updateScore(val) {
LK.setScore(val);
scoreTxt.setText(val);
}
// Oyun başlatıldığında skor sıfırla
updateScore(0);
LK.getSound('Araba').play();
LK.playMusic('car_engine');
// Oyun hareketleri
function handleMove(x, y, obj) {
if (dragNode) {
// Arabayı sadece yatay eksende hareket ettir
var newX = x - dragOffsetX;
car.x = newX;
car.clampToRoad();
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Arabaya dokunulduysa sürüklemeye başla
if (x > car.x - 120 && x < car.x + 120 && y > car.y - 180 && y < car.y + 180) {
dragNode = car;
dragOffsetX = x - car.x;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Oyun güncelleme döngüsü
game.update = function () {
if (isGameOver) return;
// Engelleri güncelle
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
obs.update();
// Ekran dışına çıktıysa sil
if (obs.y - 100 > 2732) {
obs.destroy();
obstacles.splice(i, 1);
continue;
}
// Çarpışma kontrolü
if (car.intersects(obs)) {
// Kırmızı titret
LK.effects.flashScreen(0xff0000, 800);
isGameOver = true;
LK.stopMusic();
LK.getSound('Araba').stop();
LK.showGameOver();
return;
}
}
// Skor: her frame biraz artır (yol kat ettikçe)
if (LK.ticks % 4 === 0) {
updateScore(LK.getScore() + 1);
}
// Engel oluşturma (her 40 frame'de bir)
if (LK.ticks % 40 === 0) {
var obs = new Obstacle();
// Rastgele şerit seç
var laneIdx = Math.floor(Math.random() * laneCount);
obs.x = road.x - road.width / 2 + laneSpacing / 2 + laneIdx * laneSpacing;
obs.y = -120;
obstacles.push(obs);
game.addChild(obs);
}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('destroy', function () {
obstacles = [];
isGameOver = false;
car.setStartPosition();
updateScore(0);
LK.getSound('Araba').play();
LK.playMusic('car_engine');
});