/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PlayerCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('playerCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.isDestroyed = false;
return self;
});
var RoadDivider = Container.expand(function () {
var self = Container.call(this);
var dividerGraphics = self.attachAsset('laneDivider', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var TrafficVehicle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'car';
self.speed = (4 + Math.random() * 3) * 1.25;
self.points = self.type === 'truck' ? 40 : 20;
self.hasCollided = false;
var vehicleGraphics = self.attachAsset(self.type === 'truck' ? 'truck' : 'trafficCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x333333
});
/****
* Game Code
****/
// Game variables
var player;
var trafficVehicles = [];
var roadDividers = [];
var lanes = [400, 600, 800, 1000, 1200, 1400, 1648]; // 7 lanes across the screen
var spawnTimer = 0;
var spawnDelay = 60; // frames between spawns
var gameSpeed = 1;
var speedIncreaseTimer = 0;
var dragActive = false;
var dividerSpawnTimer = 0;
// UI Elements
var scoreTxt = new Text2('Puan: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var instructionTxt = new Text2('OE Kınık modunu açarak kaza yap!', {
size: 60,
fill: 0xFFFF00
});
instructionTxt.anchor.set(0.5, 0);
instructionTxt.y = 100;
LK.gui.top.addChild(instructionTxt);
// Initialize player
player = game.addChild(new PlayerCar());
player.x = 1024; // Center horizontally
player.y = 2500; // Near bottom of screen
// Spawn traffic vehicle
function spawnTrafficVehicle() {
var laneIndex = Math.floor(Math.random() * lanes.length);
var vehicleType = Math.random() < 0.3 ? 'truck' : 'car';
var vehicle = new TrafficVehicle(vehicleType);
vehicle.x = lanes[laneIndex];
vehicle.y = -100; // Start above screen
trafficVehicles.push(vehicle);
game.addChild(vehicle);
}
;
// Spawn road dividers
function spawnRoadDivider() {
var divider = new RoadDivider();
divider.x = 1024; // Center of the road (middle of 2048px width)
divider.y = -100;
roadDividers.push(divider);
game.addChild(divider);
}
// Handle collision
function handleCollision(vehicle) {
if (vehicle.hasCollided) return;
vehicle.hasCollided = true;
var points = vehicle.points;
// Check for bonus multi-vehicle crashes
var nearbyVehicles = 0;
for (var i = 0; i < trafficVehicles.length; i++) {
var other = trafficVehicles[i];
if (other !== vehicle && !other.hasCollided) {
var distance = Math.sqrt(Math.pow(vehicle.x - other.x, 2) + Math.pow(vehicle.y - other.y, 2));
if (distance < 150) {
nearbyVehicles++;
other.hasCollided = true;
points += other.points;
}
}
}
// Bonus for multi-vehicle crashes
if (nearbyVehicles > 0) {
points += nearbyVehicles * 5;
LK.getSound('bonus').play();
} else {
LK.getSound('crash').play();
}
// Update score
LK.setScore(LK.getScore() + points);
scoreTxt.setText('Puan: ' + LK.getScore());
// Visual effects
LK.effects.flashObject(vehicle, 0xff0000, 500);
LK.effects.flashObject(player, 0xffff00, 300);
// Tween crashed vehicle
tween(vehicle, {
alpha: 0.3,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 500,
easing: tween.easeOut
});
}
// Touch controls
game.down = function (x, y, obj) {
dragActive = true;
player.x = x;
};
game.move = function (x, y, obj) {
if (dragActive) {
player.x = Math.max(200, Math.min(1848, x)); // Keep within screen bounds
}
};
game.up = function (x, y, obj) {
dragActive = false;
};
// Play background music
LK.playMusic('Music');
// Main game loop
game.update = function () {
// Spawn traffic vehicles
spawnTimer++;
if (spawnTimer >= spawnDelay) {
spawnTrafficVehicle();
spawnTimer = 0;
}
// Spawn road dividers
dividerSpawnTimer++;
if (dividerSpawnTimer >= 120) {
// Every 2 seconds
spawnRoadDivider();
dividerSpawnTimer = 0;
}
// Increase difficulty over time
speedIncreaseTimer++;
if (speedIncreaseTimer >= 1800) {
// Every 30 seconds
gameSpeed += 0.1;
spawnDelay = Math.max(20, spawnDelay - 2);
speedIncreaseTimer = 0;
}
// Update road dividers
for (var i = roadDividers.length - 1; i >= 0; i--) {
var divider = roadDividers[i];
// Remove dividers that are off screen
if (divider.y > 2800) {
divider.destroy();
roadDividers.splice(i, 1);
}
}
// Update traffic vehicles
for (var i = trafficVehicles.length - 1; i >= 0; i--) {
var vehicle = trafficVehicles[i];
// Check collision with player
if (!vehicle.hasCollided && player.intersects(vehicle)) {
handleCollision(vehicle);
}
// Check if vehicle was missed (passed player without collision)
if (!vehicle.hasCollided && vehicle.y > player.y + 100) {
// Vehicle missed - trigger game over
LK.getSound('hayir').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver('Kaybettin:(', 'Yeniden Dene');
return;
}
// Remove vehicles that are off screen
if (vehicle.y > 2800) {
vehicle.destroy();
trafficVehicles.splice(i, 1);
}
}
// Check win condition
if (LK.getScore() >= 1000) {
LK.showYouWin('Kazandın!', 'Puanın');
return;
}
// Hide instruction text after first crash
if (LK.getScore() > 0 && instructionTxt.alpha > 0) {
tween(instructionTxt, {
alpha: 0
}, {
duration: 1000
});
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PlayerCar = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('playerCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.isDestroyed = false;
return self;
});
var RoadDivider = Container.expand(function () {
var self = Container.call(this);
var dividerGraphics = self.attachAsset('laneDivider', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
});
var TrafficVehicle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'car';
self.speed = (4 + Math.random() * 3) * 1.25;
self.points = self.type === 'truck' ? 40 : 20;
self.hasCollided = false;
var vehicleGraphics = self.attachAsset(self.type === 'truck' ? 'truck' : 'trafficCar', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x333333
});
/****
* Game Code
****/
// Game variables
var player;
var trafficVehicles = [];
var roadDividers = [];
var lanes = [400, 600, 800, 1000, 1200, 1400, 1648]; // 7 lanes across the screen
var spawnTimer = 0;
var spawnDelay = 60; // frames between spawns
var gameSpeed = 1;
var speedIncreaseTimer = 0;
var dragActive = false;
var dividerSpawnTimer = 0;
// UI Elements
var scoreTxt = new Text2('Puan: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var instructionTxt = new Text2('OE Kınık modunu açarak kaza yap!', {
size: 60,
fill: 0xFFFF00
});
instructionTxt.anchor.set(0.5, 0);
instructionTxt.y = 100;
LK.gui.top.addChild(instructionTxt);
// Initialize player
player = game.addChild(new PlayerCar());
player.x = 1024; // Center horizontally
player.y = 2500; // Near bottom of screen
// Spawn traffic vehicle
function spawnTrafficVehicle() {
var laneIndex = Math.floor(Math.random() * lanes.length);
var vehicleType = Math.random() < 0.3 ? 'truck' : 'car';
var vehicle = new TrafficVehicle(vehicleType);
vehicle.x = lanes[laneIndex];
vehicle.y = -100; // Start above screen
trafficVehicles.push(vehicle);
game.addChild(vehicle);
}
;
// Spawn road dividers
function spawnRoadDivider() {
var divider = new RoadDivider();
divider.x = 1024; // Center of the road (middle of 2048px width)
divider.y = -100;
roadDividers.push(divider);
game.addChild(divider);
}
// Handle collision
function handleCollision(vehicle) {
if (vehicle.hasCollided) return;
vehicle.hasCollided = true;
var points = vehicle.points;
// Check for bonus multi-vehicle crashes
var nearbyVehicles = 0;
for (var i = 0; i < trafficVehicles.length; i++) {
var other = trafficVehicles[i];
if (other !== vehicle && !other.hasCollided) {
var distance = Math.sqrt(Math.pow(vehicle.x - other.x, 2) + Math.pow(vehicle.y - other.y, 2));
if (distance < 150) {
nearbyVehicles++;
other.hasCollided = true;
points += other.points;
}
}
}
// Bonus for multi-vehicle crashes
if (nearbyVehicles > 0) {
points += nearbyVehicles * 5;
LK.getSound('bonus').play();
} else {
LK.getSound('crash').play();
}
// Update score
LK.setScore(LK.getScore() + points);
scoreTxt.setText('Puan: ' + LK.getScore());
// Visual effects
LK.effects.flashObject(vehicle, 0xff0000, 500);
LK.effects.flashObject(player, 0xffff00, 300);
// Tween crashed vehicle
tween(vehicle, {
alpha: 0.3,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 500,
easing: tween.easeOut
});
}
// Touch controls
game.down = function (x, y, obj) {
dragActive = true;
player.x = x;
};
game.move = function (x, y, obj) {
if (dragActive) {
player.x = Math.max(200, Math.min(1848, x)); // Keep within screen bounds
}
};
game.up = function (x, y, obj) {
dragActive = false;
};
// Play background music
LK.playMusic('Music');
// Main game loop
game.update = function () {
// Spawn traffic vehicles
spawnTimer++;
if (spawnTimer >= spawnDelay) {
spawnTrafficVehicle();
spawnTimer = 0;
}
// Spawn road dividers
dividerSpawnTimer++;
if (dividerSpawnTimer >= 120) {
// Every 2 seconds
spawnRoadDivider();
dividerSpawnTimer = 0;
}
// Increase difficulty over time
speedIncreaseTimer++;
if (speedIncreaseTimer >= 1800) {
// Every 30 seconds
gameSpeed += 0.1;
spawnDelay = Math.max(20, spawnDelay - 2);
speedIncreaseTimer = 0;
}
// Update road dividers
for (var i = roadDividers.length - 1; i >= 0; i--) {
var divider = roadDividers[i];
// Remove dividers that are off screen
if (divider.y > 2800) {
divider.destroy();
roadDividers.splice(i, 1);
}
}
// Update traffic vehicles
for (var i = trafficVehicles.length - 1; i >= 0; i--) {
var vehicle = trafficVehicles[i];
// Check collision with player
if (!vehicle.hasCollided && player.intersects(vehicle)) {
handleCollision(vehicle);
}
// Check if vehicle was missed (passed player without collision)
if (!vehicle.hasCollided && vehicle.y > player.y + 100) {
// Vehicle missed - trigger game over
LK.getSound('hayir').play();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver('Kaybettin:(', 'Yeniden Dene');
return;
}
// Remove vehicles that are off screen
if (vehicle.y > 2800) {
vehicle.destroy();
trafficVehicles.splice(i, 1);
}
}
// Check win condition
if (LK.getScore() >= 1000) {
LK.showYouWin('Kazandın!', 'Puanın');
return;
}
// Hide instruction text after first crash
if (LK.getScore() > 0 && instructionTxt.alpha > 0) {
tween(instructionTxt, {
alpha: 0
}, {
duration: 1000
});
}
};