User prompt
Just make the line on 1 middle like an real road
User prompt
When you miss 1 car you lose and make white lines on middle
Code edit (1 edits merged)
Please save this source code
User prompt
Crash Course
Initial prompt
Make an car game with an road add some little traffic your goal is to crash the car you are driving
/****
* 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
});
}
};